use of org.btrplace.model.constraint.Offline in project scheduler by btrplace.
the class CDeadlineTest method testKo.
@Test
public void testKo() throws SchedulerException {
// New default model
Model mo = new DefaultModel();
Mapping ma = mo.getMapping();
// Create and boot 2 source nodes and 1 destination node
Node srcNode1 = mo.newNode(), srcNode2 = mo.newNode(), dstNode = mo.newNode();
ma.addOnlineNode(srcNode1);
ma.addOnlineNode(srcNode2);
ma.addOnlineNode(dstNode);
// Attach a network view
Network net = new Network();
mo.attach(net);
// Connect the nodes through a main non-blocking switch with 1 Gbit/s links
Switch swMain = net.newSwitch();
net.connect(1000, swMain, srcNode1, srcNode2);
net.connect(1000, swMain, dstNode);
// Create and host 1 VM per source node
VM vm1 = mo.newVM();
VM vm2 = mo.newVM();
ma.addRunningVM(vm1, srcNode1);
ma.addRunningVM(vm2, srcNode2);
// Attach CPU and Mem resource views and assign nodes capacity and VMs consumption
int mem_vm = 8, cpu_vm = 4, mem_src = 8, cpu_src = 4, mem_dst = 16, cpu_dst = 8;
ShareableResource rcMem = new ShareableResource("mem", 0, 0), rcCPU = new ShareableResource("cpu", 0, 0);
mo.attach(rcMem);
mo.attach(rcCPU);
// VMs
rcMem.setConsumption(vm1, mem_vm).setConsumption(vm2, mem_vm);
rcCPU.setConsumption(vm1, cpu_vm).setConsumption(vm2, cpu_vm);
// Nodes
rcMem.setCapacity(srcNode1, mem_src).setCapacity(srcNode2, mem_src).setCapacity(dstNode, mem_dst);
rcCPU.setCapacity(srcNode1, cpu_src).setCapacity(srcNode2, cpu_src).setCapacity(dstNode, cpu_dst);
// Set VM attributes 'memory used', 'hot dirty page size', 'hot dirty page duration' and 'cold dirty pages rate'
int vm_mu = 6000, vm_mds = 46, vm_mdd = 2;
double vm_cdr = 23.6;
// vm1 is an 'idle' VM (with no special memory activity) but still consumes 6 GiB of memory
mo.getAttributes().put(vm1, "memUsed", vm_mu);
// vm2 consumes 6 GiB memory and has a memory intensive workload equivalent to "stress --vm 1000 --bytes 50K"
// VM with a workload
mo.getAttributes().put(vm2, "memUsed", vm_mu);
mo.getAttributes().put(vm2, "hotDirtySize", vm_mds);
mo.getAttributes().put(vm2, "hotDirtyDuration", vm_mdd);
mo.getAttributes().put(vm2, "coldDirtyRate", vm_cdr);
// Create constraints
List<SatConstraint> cstrs = new ArrayList<>();
// Placement constraints, we want to shutdown the source nodes to force the migration to destination nodes
cstrs.add(new Offline(srcNode1));
cstrs.add(new Offline(srcNode2));
// SET A TOO SHORT DEADLINE FOR THE MIGRATION OF VM2
// 30s
Deadline dead = new Deadline(vm2, "+00:00:30");
cstrs.add(dead);
// Try to solve it using the Min Max Time To Repair Migration scheduling oriented objective
ReconfigurationPlan p = new DefaultChocoScheduler().solve(mo, cstrs, new MinMTTRMig());
Assert.assertNull(p);
}
use of org.btrplace.model.constraint.Offline in project scheduler by btrplace.
the class DefaultChocoSchedulerTest method testGetStatisticsWithNoSolution.
@Test
public void testGetStatisticsWithNoSolution() throws SchedulerException {
Model mo = new DefaultModel();
Mapping map = mo.getMapping();
VM v = mo.newVM();
Node n = mo.newNode();
map.addReadyVM(v);
map.addOfflineNode(n);
ChocoScheduler cra = new DefaultChocoScheduler();
ReconfigurationPlan p = cra.solve(mo, Arrays.asList(new Running(v), new Offline(n)));
Assert.assertNull(p);
SolvingStatistics stats = cra.getStatistics();
Assert.assertNotNull(stats);
Assert.assertTrue(stats.getSolutions().isEmpty());
// Assert.assertFalse(stats.hitTimeout());
}
use of org.btrplace.model.constraint.Offline in project scheduler by btrplace.
the class NetworkAndMigrations method run.
@Override
public void run() {
// New default model
Model mo = new DefaultModel();
Mapping ma = mo.getMapping();
// Create and boot 2 source nodes and 1 destination node
Node srcNode1 = mo.newNode();
Node srcNode2 = mo.newNode();
Node dstNode = mo.newNode();
ma.addOnlineNode(srcNode1);
ma.addOnlineNode(srcNode2);
ma.addOnlineNode(dstNode);
// Create 4 VMs and host 2 VMs on each source node
VM vm0 = mo.newVM();
VM vm1 = mo.newVM();
VM vm2 = mo.newVM();
VM vm3 = mo.newVM();
ma.addRunningVM(vm0, srcNode1);
ma.addRunningVM(vm1, srcNode1);
ma.addRunningVM(vm2, srcNode2);
ma.addRunningVM(vm3, srcNode2);
// Set VM attributes 'memory used', 'hot dirty page size', 'hot dirty page duration' and 'cold dirty pages rate'
// vm0 and vm3 are 'idle' VMs (with no special memory activity) but they still consume some memory
// 2 GiB
mo.getAttributes().put(vm0, "memUsed", 2000);
// 2.2 GiB
mo.getAttributes().put(vm3, "memUsed", 2200);
// vm1 and vm2 consume memory and have a memory intensive workload equivalent to "stress --vm 1000 --bytes 50K"
// 8 GiB
mo.getAttributes().put(vm1, "memUsed", 8000);
mo.getAttributes().put(vm1, "hotDirtySize", 56);
mo.getAttributes().put(vm1, "hotDirtyDuration", 2);
mo.getAttributes().put(vm1, "coldDirtyRate", 22.6);
// 7.5 GiB
mo.getAttributes().put(vm2, "memUsed", 7500);
mo.getAttributes().put(vm2, "hotDirtySize", 56);
mo.getAttributes().put(vm2, "hotDirtyDuration", 2);
mo.getAttributes().put(vm2, "coldDirtyRate", 22.6);
// Add placement constraints: we want to shutdown the source nodes to force VMs migration to destination nodes
List<SatConstraint> cstrs = new ArrayList<>();
cstrs.add(new Offline(srcNode1));
cstrs.add(new Offline(srcNode2));
// Try to solve as is and show the computed plan
ReconfigurationPlan p = new DefaultChocoScheduler().solve(mo, cstrs);
System.out.println(p);
// Set a default network view and try to solve again
// connect nodes to a non-blocking switch using 1 Gbit/s links
Network net = Network.createDefaultNetwork(mo);
p = new DefaultChocoScheduler().solve(mo, cstrs);
System.out.println(p);
// Create and attach a custom network view and try to solve again
mo.detach(net);
net = new Network();
// Connect the nodes through a main non-blocking switch
// The source nodes are connected with 1Gbit/sec. links while the destination node has 10Gbit/sec. link.
Switch swMain = net.newSwitch();
net.connect(1000, swMain, srcNode1, srcNode2);
net.connect(10000, swMain, dstNode);
mo.attach(net);
p = new DefaultChocoScheduler().solve(mo, cstrs);
System.out.println(p);
System.out.flush();
}
use of org.btrplace.model.constraint.Offline in project scheduler by btrplace.
the class COfflineTest method testGetMisplacedAndSatisfied.
@Test
public void testGetMisplacedAndSatisfied() {
Model mo = new DefaultModel();
VM vm1 = mo.newVM();
Node n1 = mo.newNode();
Node n2 = mo.newNode();
Mapping map = mo.getMapping().on(n1, n2);
Offline off = new Offline(n1);
COffline coff = new COffline(off);
Instance i = new Instance(mo, Collections.emptyList(), new MinMTTR());
Assert.assertTrue(coff.getMisPlacedVMs(i).isEmpty());
map.addRunningVM(vm1, n1);
Assert.assertEquals(coff.getMisPlacedVMs(i), map.getAllVMs());
}
use of org.btrplace.model.constraint.Offline in project scheduler by btrplace.
the class COfflineTest method testSolvableProblem.
@Test
public void testSolvableProblem() throws SchedulerException {
Model mo = new DefaultModel();
VM vm1 = mo.newVM();
Node n1 = mo.newNode();
Node n2 = mo.newNode();
mo.getMapping().on(n1, n2).run(n1, vm1);
ChocoScheduler cra = new DefaultChocoScheduler();
ReconfigurationPlan plan = cra.solve(mo, Collections.singleton(new Offline(n1)));
Assert.assertNotNull(plan);
Model res = plan.getResult();
Assert.assertTrue(res.getMapping().getOfflineNodes().contains(n1));
}
Aggregations