use of org.btrplace.model.view.ShareableResource in project scheduler by btrplace.
the class CResourceCapacityTest method testDiscreteSolvable.
/*@Test
public void testSingleGetMisplaced() {
Model mo = new DefaultModel();
VM vm2 = mo.newVM();
VM vm3 = mo.newVM();
Node n2 = mo.newNode();
Mapping map = mo.getMapping().on(n2).run(n2, vm2, vm3);
org.btrplace.model.view.ShareableResource rc = new ShareableResource("cpu", 5, 5);
rc.setConsumption(vm2, 3);
rc.setConsumption(vm3, 1);
mo.attach(rc);
Instance i = new Instance(mo, Collections.emptyList(), new MinMTTR());
ResourceCapacity s = new ResourceCapacity(n2, "cpu", 4);
CResourceCapacity cs = new CResourceCapacity(s);
Assert.assertTrue(cs.getMisPlacedVMs(i).isEmpty());
rc.setConsumption(vm3, 2);
Assert.assertEquals(cs.getMisPlacedVMs(i), map.getRunningVMs(n2));
}*/
@Test
public void testDiscreteSolvable() throws SchedulerException {
Model mo = new DefaultModel();
VM vm1 = mo.newVM();
VM vm2 = mo.newVM();
VM vm3 = mo.newVM();
Node n1 = mo.newNode();
Node n2 = mo.newNode();
mo.getMapping().on(n1, n2).run(n1, vm1, vm2);
ShareableResource rc = new ShareableResource("cpu", 5, 5);
rc.setConsumption(vm1, 3);
rc.setConsumption(vm2, 1);
rc.setConsumption(vm3, 1);
mo.attach(rc);
ResourceCapacity s = new ResourceCapacity(n1, "cpu", 4);
ChocoScheduler cra = new DefaultChocoScheduler();
ReconfigurationPlan p = cra.solve(mo, Arrays.asList(s, new Preserve(vm2, "cpu", 3)));
Assert.assertNotNull(p);
Assert.assertEquals(p.getSize(), 1);
// System.out.println(p);
}
use of org.btrplace.model.view.ShareableResource 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.view.ShareableResource in project scheduler by btrplace.
the class CMinMigrationsTest method simpleTest.
@Test
public void simpleTest() {
Model mo = new DefaultModel();
Node n0 = mo.newNode();
Node n1 = mo.newNode();
VM vm0 = mo.newVM();
VM vm1 = mo.newVM();
VM vm2 = mo.newVM();
mo.getMapping().on(n0, n1).run(n0, vm0, vm1, vm2);
ShareableResource mem = new ShareableResource("mem", 5, 1);
// cpu dimension to create the violation
ShareableResource cpu = new ShareableResource("cpu", 5, 1);
// VM0 as the big VM
mem.setConsumption(vm0, 3);
mo.attach(cpu);
mo.attach(mem);
List<SatConstraint> cstrs = new ArrayList<>();
// The 3 VMs no longer feet on n0
cstrs.add(new Preserve(vm0, "cpu", 5));
ChocoScheduler s = new DefaultChocoScheduler();
s.doOptimize(true);
ReconfigurationPlan p = s.solve(mo, cstrs, new MinMigrations());
System.out.println(s.getStatistics());
System.out.println(p);
// VM0 to n1
Assert.assertEquals(p.getActions().size(), 1);
// VM0 to n1
Assert.assertEquals(p.getResult().getMapping().getVMLocation(vm0), n1);
}
use of org.btrplace.model.view.ShareableResource in project scheduler by btrplace.
the class LinearToAResourceDurationTest method testSimple.
@Test
public void testSimple() {
ShareableResource rc = new ShareableResource("foo", 0, 0);
Model mo = new DefaultModel();
VM vm1 = mo.newVM();
VM vm2 = mo.newVM();
VM vm3 = mo.newVM();
mo.attach(rc);
rc.setConsumption(vm1, 3);
LinearToAResourceActionDuration<VM> d = new LinearToAResourceActionDuration<>("foo", 3);
System.out.println(d.toString());
Assert.assertEquals(d.getCoefficient(), 3.0);
Assert.assertEquals(d.getOffset(), 0.0);
Assert.assertEquals(d.getResourceId(), "foo");
Assert.assertEquals(d.evaluate(mo, vm1), 9);
Assert.assertEquals(d.evaluate(mo, vm2), 0);
d = new LinearToAResourceActionDuration<>("foo", 3, 4);
Assert.assertEquals(d.evaluate(mo, vm1), 13);
Assert.assertEquals(d.evaluate(mo, vm3), 4);
d = new LinearToAResourceActionDuration<>("bar", 3, 4);
Assert.assertEquals(d.evaluate(mo, vm3), -1);
d.setCoefficient(5);
d.setOffset(12);
d.setResourceId("bar");
Assert.assertEquals(d.getCoefficient(), 5.0);
Assert.assertEquals(d.getOffset(), 12.0);
Assert.assertEquals(d.getResourceId(), "bar");
}
use of org.btrplace.model.view.ShareableResource in project scheduler by btrplace.
the class CResourceCapacity method getMisPlacedVMs.
@Override
public Set<VM> getMisPlacedVMs(Instance i) {
if (cstr.getInvolvedNodes().size() <= 1) {
// If there is only a single node, we delegate this work to CShareableResource.
return Collections.emptySet();
}
Mapping map = i.getModel().getMapping();
ShareableResource rc = ShareableResource.get(i.getModel(), cstr.getResource());
if (rc == null) {
return map.getRunningVMs(cstr.getInvolvedNodes());
}
Set<VM> bad = new HashSet<>();
int remainder = cstr.getAmount();
for (Node n : cstr.getInvolvedNodes()) {
for (VM v : map.getRunningVMs(n)) {
remainder -= rc.getConsumption(v);
if (remainder < 0) {
for (Node n2 : cstr.getInvolvedNodes()) {
bad.addAll(map.getRunningVMs(n2));
}
return bad;
}
}
}
return bad;
}
Aggregations