Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
start snake_casing s4u::Engine
[simgrid.git] / examples / s4u / cloud-simple / s4u-cloud-simple.cpp
index 9de94b4..ba2a67d 100644 (file)
@@ -1,10 +1,12 @@
-/* Copyright (c) 2007-2017. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2007-2018. 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()
@@ -13,13 +15,13 @@ static void computation_fun()
   simgrid::s4u::this_actor::execute(1000000);
   double clock_end = simgrid::s4u::Engine::getClock();
 
-  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 task 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 {
@@ -31,9 +33,9 @@ struct s_payload {
 static void communication_tx_fun(std::vector<std::string> 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();
+  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::getClock();
 
   mbox->put(payload, 1000000);
@@ -41,34 +43,35 @@ static void communication_tx_fun(std::vector<std::string> args)
 
 static void communication_rx_fun(std::vector<std::string> args)
 {
-  const char* actor_name        = simgrid::s4u::Actor::self()->getCname();
-  const char* host_name         = simgrid::s4u::this_actor::getHost()->getCname();
+  const char* actor_name        = simgrid::s4u::Actor::self()->get_cname();
+  const char* host_name         = simgrid::s4u::this_actor::get_host()->get_cname();
   simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(args.at(0));
 
   struct s_payload* payload = static_cast<struct s_payload*>(mbox->get());
   double clock_end          = simgrid::s4u::Engine::getClock();
 
-  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<std::string> 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");
 
@@ -186,23 +189,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->setRamsize(1L * 1024 * 1024 * 1024); // 1GiB
 
-static void launch_master(s4u_Host* host)
-{
-  simgrid::s4u::Actor::createActor("master_", host, master_main);
+  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 = new simgrid::s4u::Engine(&argc, argv);
-  e->loadPlatform(argv[1]); /* - Load the platform description */
+  simgrid::s4u::Engine e(&argc, argv);
+  sg_vm_live_migration_plugin_init();
+  e.load_platform(argv[1]); /* - Load the platform description */
 
-  launch_master(simgrid::s4u::Host::by_name("Fafard"));
+  simgrid::s4u::Actor::create("master_", simgrid::s4u::Host::by_name("Fafard"), master_main);
 
-  e->run();
+  e.run();
 
-  XBT_INFO("Simulation time %g", e->getClock());
+  XBT_INFO("Simulation time %g", e.getClock());
 
   return 0;
 }