Search in sources :

Example 6 with Offline

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);
}
Also used : SatConstraint(org.btrplace.model.constraint.SatConstraint) Deadline(org.btrplace.model.constraint.migration.Deadline) ReconfigurationPlan(org.btrplace.plan.ReconfigurationPlan) ArrayList(java.util.ArrayList) Offline(org.btrplace.model.constraint.Offline) ShareableResource(org.btrplace.model.view.ShareableResource) SatConstraint(org.btrplace.model.constraint.SatConstraint) MinMTTRMig(org.btrplace.model.constraint.migration.MinMTTRMig) Switch(org.btrplace.model.view.network.Switch) DefaultChocoScheduler(org.btrplace.scheduler.choco.DefaultChocoScheduler) Network(org.btrplace.model.view.network.Network) MigrateVM(org.btrplace.plan.event.MigrateVM) Test(org.testng.annotations.Test)

Example 7 with Offline

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());
}
Also used : DefaultModel(org.btrplace.model.DefaultModel) VM(org.btrplace.model.VM) Node(org.btrplace.model.Node) ReconfigurationPlan(org.btrplace.plan.ReconfigurationPlan) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) Running(org.btrplace.model.constraint.Running) Offline(org.btrplace.model.constraint.Offline) Mapping(org.btrplace.model.Mapping) SolvingStatistics(org.btrplace.scheduler.choco.runner.SolvingStatistics) Test(org.testng.annotations.Test)

Example 8 with Offline

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();
}
Also used : SatConstraint(org.btrplace.model.constraint.SatConstraint) ReconfigurationPlan(org.btrplace.plan.ReconfigurationPlan) ArrayList(java.util.ArrayList) Offline(org.btrplace.model.constraint.Offline) Switch(org.btrplace.model.view.network.Switch) DefaultChocoScheduler(org.btrplace.scheduler.choco.DefaultChocoScheduler) Network(org.btrplace.model.view.network.Network)

Example 9 with Offline

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());
}
Also used : ShutdownNode(org.btrplace.plan.event.ShutdownNode) MinMTTR(org.btrplace.model.constraint.MinMTTR) Offline(org.btrplace.model.constraint.Offline) Test(org.testng.annotations.Test)

Example 10 with Offline

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));
}
Also used : DefaultChocoScheduler(org.btrplace.scheduler.choco.DefaultChocoScheduler) ChocoScheduler(org.btrplace.scheduler.choco.ChocoScheduler) DefaultChocoScheduler(org.btrplace.scheduler.choco.DefaultChocoScheduler) ShutdownNode(org.btrplace.plan.event.ShutdownNode) ReconfigurationPlan(org.btrplace.plan.ReconfigurationPlan) Offline(org.btrplace.model.constraint.Offline) Test(org.testng.annotations.Test)

Aggregations

Offline (org.btrplace.model.constraint.Offline)20 ReconfigurationPlan (org.btrplace.plan.ReconfigurationPlan)16 Test (org.testng.annotations.Test)15 ArrayList (java.util.ArrayList)13 SatConstraint (org.btrplace.model.constraint.SatConstraint)13 DefaultChocoScheduler (org.btrplace.scheduler.choco.DefaultChocoScheduler)13 ShareableResource (org.btrplace.model.view.ShareableResource)11 Network (org.btrplace.model.view.network.Network)11 Switch (org.btrplace.model.view.network.Switch)11 MinMTTRMig (org.btrplace.model.constraint.migration.MinMTTRMig)10 MigrateVM (org.btrplace.plan.event.MigrateVM)6 DefaultModel (org.btrplace.model.DefaultModel)5 Model (org.btrplace.model.Model)5 Fence (org.btrplace.model.constraint.Fence)5 SchedulerException (org.btrplace.scheduler.SchedulerException)5 Node (org.btrplace.model.Node)4 ShutdownNode (org.btrplace.plan.event.ShutdownNode)4 DefaultParameters (org.btrplace.scheduler.choco.DefaultParameters)4 MinMTTR (org.btrplace.model.constraint.MinMTTR)3 Action (org.btrplace.plan.event.Action)3