X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/06c1cf4fb4a74bc8dbddc4c08917f11e4ea02353..c0c7607cc0cb97760a59eb3f40481fbe9469cc0a:/examples/s4u/cloud-simple/s4u-cloud-simple.cpp diff --git a/examples/s4u/cloud-simple/s4u-cloud-simple.cpp b/examples/s4u/cloud-simple/s4u-cloud-simple.cpp index 5dfa3125a7..f8b83b91aa 100644 --- a/examples/s4u/cloud-simple/s4u-cloud-simple.cpp +++ b/examples/s4u/cloud-simple/s4u-cloud-simple.cpp @@ -1,25 +1,27 @@ -/* Copyright (c) 2007-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-2020. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "simgrid/s4u.hpp" +#include "simgrid/plugins/live_migration.h" #include "simgrid/s4u/VirtualMachine.hpp" + XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example"); static void computation_fun() { - double clock_sta = simgrid::s4u::Engine::getClock(); + double clock_sta = simgrid::s4u::Engine::get_clock(); simgrid::s4u::this_actor::execute(1000000); - double clock_end = simgrid::s4u::Engine::getClock(); + double clock_end = simgrid::s4u::Engine::get_clock(); - XBT_INFO("%s:%s task executed %g", simgrid::s4u::this_actor::getHost()->getCname(), - simgrid::s4u::this_actor::getCname(), clock_end - clock_sta); + XBT_INFO("%s:%s executed %g", simgrid::s4u::this_actor::get_host()->get_cname(), + simgrid::s4u::this_actor::get_cname(), clock_end - clock_sta); } static void launch_computation_worker(s4u_Host* host) { - simgrid::s4u::Actor::createActor("compute", host, computation_fun); + simgrid::s4u::Actor::create("compute", host, computation_fun); } struct s_payload { @@ -30,67 +32,69 @@ struct s_payload { static void communication_tx_fun(std::vector args) { - simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(args.at(0)); - struct s_payload* payload = xbt_new(struct s_payload, 1); - payload->tx_actor_name = simgrid::s4u::Actor::self()->getCname(); - payload->tx_host = simgrid::s4u::this_actor::getHost(); - payload->clock_sta = simgrid::s4u::Engine::getClock(); + simgrid::s4u::Mailbox* mbox = simgrid::s4u::Mailbox::by_name(args.at(0)); + s_payload* payload = new s_payload; + payload->tx_actor_name = simgrid::s4u::Actor::self()->get_cname(); + payload->tx_host = simgrid::s4u::this_actor::get_host(); + payload->clock_sta = simgrid::s4u::Engine::get_clock(); mbox->put(payload, 1000000); } static void communication_rx_fun(std::vector args) { - const char* actor_name = simgrid::s4u::Actor::self()->getCname(); - const char* host_name = simgrid::s4u::this_actor::getHost()->getCname(); - simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(args.at(0)); + const char* actor_name = simgrid::s4u::Actor::self()->get_cname(); + const char* host_name = simgrid::s4u::this_actor::get_host()->get_cname(); + simgrid::s4u::Mailbox* mbox = simgrid::s4u::Mailbox::by_name(args.at(0)); - struct s_payload* payload = static_cast(mbox->get()); - double clock_end = simgrid::s4u::Engine::getClock(); + const s_payload* payload = static_cast(mbox->get()); + double clock_end = simgrid::s4u::Engine::get_clock(); - XBT_INFO("%s:%s to %s:%s => %g sec", payload->tx_host->getCname(), payload->tx_actor_name, host_name, actor_name, + XBT_INFO("%s:%s to %s:%s => %g sec", payload->tx_host->get_cname(), payload->tx_actor_name, host_name, actor_name, clock_end - payload->clock_sta); - xbt_free(payload); + delete payload; } static void launch_communication_worker(s4u_Host* tx_host, s4u_Host* rx_host) { - std::string mbox_name = std::string("MBOX:") + tx_host->getCname() + "-" + rx_host->getCname(); + std::string mbox_name = std::string("MBOX:") + tx_host->get_cname() + "-" + rx_host->get_cname(); std::vector args; args.push_back(mbox_name); - simgrid::s4u::Actor::createActor("comm_tx", tx_host, communication_tx_fun, args); + simgrid::s4u::Actor::create("comm_tx", tx_host, communication_tx_fun, args); - simgrid::s4u::Actor::createActor("comm_rx", rx_host, communication_rx_fun, args); + simgrid::s4u::Actor::create("comm_rx", rx_host, communication_rx_fun, args); } static void master_main() { s4u_Host* pm0 = simgrid::s4u::Host::by_name("Fafard"); s4u_Host* pm1 = simgrid::s4u::Host::by_name("Tremblay"); + s4u_Host* pm2 = simgrid::s4u::Host::by_name("Bourassa"); XBT_INFO("## Test 1 (started): check computation on normal PMs"); - XBT_INFO("### Put a task on a PM"); + XBT_INFO("### Put an activity on a PM"); launch_computation_worker(pm0); simgrid::s4u::this_actor::sleep_for(2); - XBT_INFO("### Put two tasks on a PM"); + XBT_INFO("### Put two activities on a PM"); launch_computation_worker(pm0); launch_computation_worker(pm0); simgrid::s4u::this_actor::sleep_for(2); - XBT_INFO("### Put a task on each PM"); + XBT_INFO("### Put an activity on each PM"); launch_computation_worker(pm0); launch_computation_worker(pm1); simgrid::s4u::this_actor::sleep_for(2); XBT_INFO("## Test 1 (ended)"); - XBT_INFO("## Test 2 (started): check impact of running a task inside a VM (there is no degradation for the moment)"); + XBT_INFO( + "## Test 2 (started): check impact of running an activity inside a VM (there is no degradation for the moment)"); - XBT_INFO("### Put a VM on a PM, and put a task to the VM"); + XBT_INFO("### Put a VM on a PM, and put an activity to the VM"); simgrid::s4u::VirtualMachine* vm0 = new simgrid::s4u::VirtualMachine("VM0", pm0, 1); vm0->start(); launch_computation_worker(vm0); @@ -99,10 +103,10 @@ static void master_main() XBT_INFO("## Test 2 (ended)"); - XBT_INFO( - "## Test 3 (started): check impact of running a task collocated with a VM (there is no VM noise for the moment)"); + XBT_INFO("## Test 3 (started): check impact of running an activity collocated with a VM (there is no VM noise for " + "the moment)"); - XBT_INFO("### Put a VM on a PM, and put a task to the PM"); + XBT_INFO("### Put a VM on a PM, and put an activity to the PM"); vm0 = new simgrid::s4u::VirtualMachine("VM0", pm0, 1); vm0->start(); launch_computation_worker(pm0); @@ -110,10 +114,11 @@ static void master_main() vm0->destroy(); XBT_INFO("## Test 3 (ended)"); - XBT_INFO("## Test 4 (started): compare the cost of running two tasks inside two different VMs collocated or not (for" - " the moment, there is no degradation for the VMs. Hence, the time should be equals to the time of test 1"); + XBT_INFO( + "## Test 4 (started): compare the cost of running two activities inside two different VMs collocated or not (for" + " the moment, there is no degradation for the VMs. Hence, the time should be equals to the time of test 1"); - XBT_INFO("### Put two VMs on a PM, and put a task to each VM"); + XBT_INFO("### Put two VMs on a PM, and put an activity to each VM"); vm0 = new simgrid::s4u::VirtualMachine("VM0", pm0, 1); vm0->start(); simgrid::s4u::VirtualMachine* vm1 = new simgrid::s4u::VirtualMachine("VM1", pm0, 1); @@ -123,7 +128,7 @@ static void master_main() vm0->destroy(); vm1->destroy(); - XBT_INFO("### Put a VM on each PM, and put a task to each VM"); + XBT_INFO("### Put a VM on each PM, and put an activity to each VM"); vm0 = new simgrid::s4u::VirtualMachine("VM0", pm0, 1); vm1 = new simgrid::s4u::VirtualMachine("VM1", pm1, 1); vm0->start(); @@ -186,18 +191,34 @@ static void master_main() vm1->destroy(); XBT_INFO("## Test 5 (ended)"); + XBT_INFO("## Test 6 (started): Check migration impact (not yet implemented neither on the CPU resource nor on the" + " network one"); + XBT_INFO("### Relocate VM0 between PM0 and PM1"); + vm0 = new simgrid::s4u::VirtualMachine("VM0", pm0, 1); + vm0->set_ramsize(1L * 1024 * 1024 * 1024); // 1GiB + + vm0->start(); + launch_communication_worker(vm0, pm2); + simgrid::s4u::this_actor::sleep_for(0.01); + sg_vm_migrate(vm0, pm1); + simgrid::s4u::this_actor::sleep_for(0.01); + sg_vm_migrate(vm0, pm0); + simgrid::s4u::this_actor::sleep_for(5); + vm0->destroy(); + XBT_INFO("## Test 6 (ended)"); } int main(int argc, char* argv[]) { simgrid::s4u::Engine e(&argc, argv); - e.loadPlatform(argv[1]); /* - Load the platform description */ + sg_vm_live_migration_plugin_init(); + e.load_platform(argv[1]); /* - Load the platform description */ - simgrid::s4u::Actor::createActor("master_", simgrid::s4u::Host::by_name("Fafard"), master_main); + simgrid::s4u::Actor::create("master_", simgrid::s4u::Host::by_name("Fafard"), master_main); e.run(); - XBT_INFO("Simulation time %g", e.getClock()); + XBT_INFO("Simulation time %g", e.get_clock()); return 0; }