From: Martin Quinson Date: Wed, 12 Jul 2017 20:26:36 +0000 (+0200) Subject: Merge pull request #198 from Takishipp/clear_fct X-Git-Tag: v3_17~400^2~1^2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/fa4b54a83a3ee1a38c068ed8e4c021dba440a18b?hp=d1275c70614a349e58457b74fe39372038484092 Merge pull request #198 from Takishipp/clear_fct Remove an unused function --- diff --git a/.gitignore b/.gitignore index 60839f9d05..198bcaa2bf 100644 --- a/.gitignore +++ b/.gitignore @@ -193,6 +193,7 @@ examples/s4u/app-token-ring/s4u_app-token-ring examples/s4u/actions-comm/s4u_actions-comm examples/s4u/actions-storage/s4u_actions-storage examples/s4u/actor-create/s4u_actor-create +examples/s4u/actor-daemon/s4u_actor-daemon examples/s4u/actor-kill/s4u_actor-kill examples/s4u/actor-migration/s4u_actor-migration examples/s4u/actor-suspend/s4u_actor-suspend @@ -1052,6 +1053,7 @@ teshsuite/smpi/type-struct/type-struct teshsuite/smpi/type-vector/type-vector teshsuite/s4u/actor/actor teshsuite/s4u/comm-pt2pt/comm-pt2pt +teshsuite/s4u/comm-waitany/comm-waitany teshsuite/s4u/concurrent_rw/concurrent_rw teshsuite/s4u/host_on_off_wait/host_on_off_wait teshsuite/s4u/listen_async/listen_async diff --git a/examples/msg/CMakeLists.txt b/examples/msg/CMakeLists.txt index bde4dc9921..ca06ab37ba 100644 --- a/examples/msg/CMakeLists.txt +++ b/examples/msg/CMakeLists.txt @@ -1,5 +1,5 @@ # C examples -foreach(x actions-comm actions-storage app-masterworker app-pingpong app-token-ring async-wait async-waitall +foreach(x app-masterworker app-pingpong app-token-ring async-wait async-waitall async-waitany cloud-capping cloud-masterworker cloud-migration cloud-simple cloud-two-tasks dht-pastry energy-consumption energy-onoff energy-pstate energy-ptask energy-vm platform-failures io-file io-remote io-storage task-priority @@ -51,17 +51,13 @@ foreach (file answer dht-kademlia node routing_table task) set(examples_src ${examples_src} ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/${file}.c ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/${file}.h) endforeach() -foreach (file actions-comm actions-storage app-bittorrent app-chainsend app-masterworker app-pingpong async-wait +foreach (file app-bittorrent app-chainsend app-masterworker app-pingpong async-wait async-waitall async-waitany dht-kademlia dht-pastry io-remote platform-properties process-yield task-priority) set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/${file}/${file}_d.xml) endforeach() -set(txt_files ${txt_files} ${CMAKE_CURRENT_SOURCE_DIR}/README.doc - ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actions-comm.txt - ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actions-comm_split_p0.txt - ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actions-comm_split_p1.txt - ${CMAKE_CURRENT_SOURCE_DIR}/actions-storage/actions-storage.txt PARENT_SCOPE) +set(txt_files ${txt_files} ${CMAKE_CURRENT_SOURCE_DIR}/README.doc PARENT_SCOPE) set(bin_files ${bin_files} ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/generate.py ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/generate.py ${CMAKE_CURRENT_SOURCE_DIR}/dht-pastry/generate.py PARENT_SCOPE) @@ -74,8 +70,7 @@ set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/app-bittorrent/app ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworker/app-masterworker-multicore.tesh ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworker/app-masterworker-vivaldi.tesh ${CMAKE_CURRENT_SOURCE_DIR}/network-ns3/network-ns3.tesh PARENT_SCOPE) -set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actions-comm_split_d.xml - ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworker/app-masterworker-multicore_d.xml +set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworker/app-masterworker-multicore_d.xml ${CMAKE_CURRENT_SOURCE_DIR}/app-masterworker/app-masterworker-vivaldi_d.xml ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/async-wait2_d.xml ${CMAKE_CURRENT_SOURCE_DIR}/async-wait/async-wait3_d.xml @@ -94,7 +89,7 @@ set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actio ${CMAKE_CURRENT_SOURCE_DIR}/process-startkilltime/start_d.xml ${CMAKE_CURRENT_SOURCE_DIR}/process-startkilltime/start_kill_d.xml PARENT_SCOPE) -foreach(x actions-comm actions-storage app-bittorrent app-chainsend app-masterworker app-pingpong app-token-ring +foreach(x app-bittorrent app-chainsend app-masterworker app-pingpong app-token-ring async-wait async-waitall async-waitany cloud-capping cloud-masterworker cloud-migration cloud-simple cloud-two-tasks dht-pastry dht-kademlia platform-failures io-file io-remote io-storage task-priority process-create process-daemon process-join process-kill process-migration process-startkilltime process-suspend process-yield diff --git a/examples/msg/app-pingpong/app-pingpong.c b/examples/msg/app-pingpong/app-pingpong.c index 91a5b0fa18..3e12e81fe8 100644 --- a/examples/msg/app-pingpong/app-pingpong.c +++ b/examples/msg/app-pingpong/app-pingpong.c @@ -5,7 +5,7 @@ #include "simgrid/msg.h" -XBT_LOG_NEW_DEFAULT_CATEGORY(mag_app_pingpong,"Messages specific for this msg example"); +XBT_LOG_NEW_DEFAULT_CATEGORY(msg_app_pingpong, "Messages specific for this msg example"); static int pinger(int argc, char *argv[]) { diff --git a/examples/msg/plugin-hostload/plugin-hostload.c b/examples/msg/plugin-hostload/plugin-hostload.c index a76fcc766a..717c54bca2 100644 --- a/examples/msg/plugin-hostload/plugin-hostload.c +++ b/examples/msg/plugin-hostload/plugin-hostload.c @@ -14,7 +14,7 @@ static int execute_load_test(int argc, char* argv[]) msg_host_t host = MSG_host_by_name("MyHost1"); XBT_INFO("Initial peak speed: %.0E flop/s; number of flops computed so far: %.0E (should be 0)", - MSG_host_get_current_power_peak(host), MSG_host_get_computed_flops(host)); + MSG_host_get_speed(host), sg_host_get_computed_flops(host)); double start = MSG_get_clock(); XBT_INFO("Sleep for 10 seconds"); @@ -22,7 +22,7 @@ static int execute_load_test(int argc, char* argv[]) XBT_INFO("Done sleeping %.2fs; peak speed: %.0E flop/s; number of flops computed so far: %.0E (nothing should have " "changed)", - MSG_get_clock() - start, MSG_host_get_current_power_peak(host), MSG_host_get_computed_flops(host)); + MSG_get_clock() - start, MSG_host_get_speed(host), sg_host_get_computed_flops(host)); // Run a task start = MSG_get_clock(); @@ -33,13 +33,13 @@ static int execute_load_test(int argc, char* argv[]) XBT_INFO("Done working on my task; this took %.2fs; current peak speed: %.0E flop/s; number of flops computed so " "far: %.0E", - MSG_get_clock() - start, MSG_host_get_current_power_peak(host), MSG_host_get_computed_flops(host)); + MSG_get_clock() - start, MSG_host_get_speed(host), sg_host_get_computed_flops(host)); // ========= Change power peak ========= int pstate = 2; - MSG_host_set_pstate(host, pstate); + sg_host_set_pstate(host, pstate); XBT_INFO("========= Requesting pstate %d (speed should be of %.0E flop/s and is of %.0E flop/s)", pstate, - MSG_host_get_power_peak_at(host, pstate), MSG_host_get_current_power_peak(host)); + MSG_host_get_power_peak_at(host, pstate), MSG_host_get_speed(host)); // Run a second task start = MSG_get_clock(); @@ -49,7 +49,7 @@ static int execute_load_test(int argc, char* argv[]) MSG_task_destroy(task1); XBT_INFO("Done working on my task; this took %.2fs; current peak speed: %.0E flop/s; number of flops computed so " "far: %.0E", - MSG_get_clock() - start, MSG_host_get_current_power_peak(host), MSG_host_get_computed_flops(host)); + MSG_get_clock() - start, MSG_host_get_speed(host), sg_host_get_computed_flops(host)); start = MSG_get_clock(); XBT_INFO("========= Requesting a reset of the computation counter"); @@ -57,7 +57,7 @@ static int execute_load_test(int argc, char* argv[]) XBT_INFO("Sleep for 4 seconds"); MSG_process_sleep(4); XBT_INFO("Done sleeping %.2f s; peak speed: %.0E flop/s; number of flops computed so far: %.0E", - MSG_get_clock() - start, MSG_host_get_current_power_peak(host), MSG_host_get_computed_flops(host)); + MSG_get_clock() - start, MSG_host_get_speed(host), sg_host_get_computed_flops(host)); // =========== Turn the other host off ========== XBT_INFO("Turning MyHost2 off, and sleeping another 10 seconds. MyHost2 computed %.0f flops so far.", @@ -66,7 +66,7 @@ static int execute_load_test(int argc, char* argv[]) start = MSG_get_clock(); MSG_process_sleep(10); XBT_INFO("Done sleeping %.2f s; peak speed: %.0E flop/s; number of flops computed so far: %.0E", - MSG_get_clock() - start, MSG_host_get_current_power_peak(host), MSG_host_get_computed_flops(host)); + MSG_get_clock() - start, MSG_host_get_speed(host), sg_host_get_computed_flops(host)); return 0; } diff --git a/examples/s4u/CMakeLists.txt b/examples/s4u/CMakeLists.txt index dfdc6340af..72a43da51f 100644 --- a/examples/s4u/CMakeLists.txt +++ b/examples/s4u/CMakeLists.txt @@ -1,5 +1,5 @@ foreach (example actions-comm actions-storage actor-create actor-daemon actor-kill actor-migration actor-suspend - app-masterworker app-token-ring io mutex ) + app-masterworker app-pingpong app-token-ring plugin-hostload io mutex ) add_executable (s4u_${example} ${example}/s4u_${example}.cpp) target_link_libraries(s4u_${example} simgrid) set_target_properties(s4u_${example} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${example}) @@ -32,6 +32,6 @@ set(txt_files ${txt_files} ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/s4u_a ${CMAKE_CURRENT_SOURCE_DIR}/README.doc PARENT_SCOPE) foreach(example actions-comm actions-storage actor-create actor-daemon actor-kill actor-migration actor-suspend - app-masterworker app-token-ring dht-chord io mutex ) + app-masterworker app-pingpong app-token-ring dht-chord plugin-hostload io mutex ) ADD_TESH_FACTORIES(s4u-${example} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_CURRENT_BINARY_DIR}/${example} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/examples/s4u/${example} s4u_${example}.tesh) endforeach() diff --git a/examples/s4u/app-pingpong/s4u_app-pingpong b/examples/s4u/app-pingpong/s4u_app-pingpong new file mode 100755 index 0000000000..bd61f7bfd3 Binary files /dev/null and b/examples/s4u/app-pingpong/s4u_app-pingpong differ diff --git a/examples/s4u/app-pingpong/s4u_app-pingpong.cpp b/examples/s4u/app-pingpong/s4u_app-pingpong.cpp new file mode 100644 index 0000000000..d8c0384a3a --- /dev/null +++ b/examples/s4u/app-pingpong/s4u_app-pingpong.cpp @@ -0,0 +1,73 @@ +/* Copyright (c) 2007-2017. 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" + +XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_app_pingpong, "Messages specific for this s4u example"); + +static void pinger(std::vector args) +{ + xbt_assert(args.size() == 1, "The pinger function one argument from the XML deployment file"); + XBT_INFO("Ping -> %s", args[0].c_str()); + xbt_assert(simgrid::s4u::Host::by_name_or_null(args[0]) != nullptr, "Unknown host %s. Stopping Now! ", + args[0].c_str()); + + /* - Do the ping with a 1-Byte task (latency bound) ... */ + double* payload = new double(); + *payload = simgrid::s4u::Engine::getClock(); + + simgrid::s4u::Mailbox::byName(args[0])->put(payload, 1); + /* - ... then wait for the (large) pong */ + double sender_time = + *(static_cast(simgrid::s4u::Mailbox::byName(simgrid::s4u::this_actor::getHost()->getName())->get())); + + double communication_time = simgrid::s4u::Engine::getClock() - sender_time; + XBT_INFO("Task received : large communication (bandwidth bound)"); + XBT_INFO("Pong time (bandwidth bound): %.3f", communication_time); +} + +static void ponger(std::vector args) +{ + xbt_assert(args.size() == 1, "The ponger function one argument from the XML deployment file"); + XBT_INFO("Pong -> %s", args[0].c_str()); + xbt_assert(simgrid::s4u::Host::by_name_or_null(args[0]) != nullptr, "Unknown host %s. Stopping Now! ", + args[0].c_str()); + + /* - Receive the (small) ping first ....*/ + double* sender_time = + (static_cast(simgrid::s4u::Mailbox::byName(simgrid::s4u::this_actor::getHost()->getName())->get())); + double communication_time = simgrid::s4u::Engine::getClock() - *sender_time; + XBT_INFO("Task received : small communication (latency bound)"); + XBT_INFO(" Ping time (latency bound) %f", communication_time); + + /* - ... Then send a 1GB pong back (bandwidth bound) */ + double* payload = new double(); + *payload = simgrid::s4u::Engine::getClock(); + XBT_INFO("task_bw->data = %.3f", *payload); + + simgrid::s4u::Mailbox::byName(args[0])->put(payload, 1e9); +} + +int main(int argc, char* argv[]) +{ + simgrid::s4u::Engine* e = new simgrid::s4u::Engine(&argc, argv); + + e->loadPlatform(argv[1]); + std::vector args; + args.push_back("Jupiter"); + simgrid::s4u::Actor::createActor("pinger", simgrid::s4u::Host::by_name("Tremblay"), pinger, args); + + args.pop_back(); + args.push_back("Tremblay"); + + simgrid::s4u::Actor::createActor("ponger", simgrid::s4u::Host::by_name("Jupiter"), ponger, args); + + e->run(); + + XBT_INFO("Total simulation time: %.3f", e->getClock()); + delete e; + + return 0; +} diff --git a/examples/s4u/app-pingpong/s4u_app-pingpong.tesh b/examples/s4u/app-pingpong/s4u_app-pingpong.tesh new file mode 100644 index 0000000000..22a6bb3407 --- /dev/null +++ b/examples/s4u/app-pingpong/s4u_app-pingpong.tesh @@ -0,0 +1,57 @@ +#! ./tesh + +p Testing with default compound + +$ $SG_TEST_EXENV ${bindir:=.}/s4u_app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +> [ 0.000000] (1:pinger@Tremblay) Ping -> Jupiter +> [ 0.000000] (2:ponger@Jupiter) Pong -> Tremblay +> [ 0.019014] (2:ponger@Jupiter) Task received : small communication (latency bound) +> [ 0.019014] (2:ponger@Jupiter) Ping time (latency bound) 0.019014 +> [ 0.019014] (2:ponger@Jupiter) task_bw->data = 0.019 +> [150.178356] (1:pinger@Tremblay) Task received : large communication (bandwidth bound) +> [150.178356] (1:pinger@Tremblay) Pong time (bandwidth bound): 150.159 +> [150.178356] (0:maestro@) Total simulation time: 150.178 + +p Testing the deprecated CM02 network model + +$ $SG_TEST_EXENV ${bindir:=.}/s4u_app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml --cfg=cpu/model:Cas01 --cfg=network/model:CM02 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +> [ 0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01' +> [ 0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'CM02' +> [ 0.000000] (1:pinger@Tremblay) Ping -> Jupiter +> [ 0.000000] (2:ponger@Jupiter) Pong -> Tremblay +> [ 0.001462] (2:ponger@Jupiter) Task received : small communication (latency bound) +> [ 0.001462] (2:ponger@Jupiter) Ping time (latency bound) 0.001462 +> [ 0.001462] (2:ponger@Jupiter) task_bw->data = 0.001 +> [145.639041] (1:pinger@Tremblay) Task received : large communication (bandwidth bound) +> [145.639041] (1:pinger@Tremblay) Pong time (bandwidth bound): 145.638 +> [145.639041] (0:maestro@) Total simulation time: 145.639 + +p Testing the surf network Reno fairness model using lagrangian approach + +$ $SG_TEST_EXENV ${bindir:=.}/s4u_app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Reno" --log=surf_lagrange.thres=critical "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +> [ 0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound' +> [ 0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01' +> [ 0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'Reno' +> [ 0.000000] (1:pinger@Tremblay) Ping -> Jupiter +> [ 0.000000] (2:ponger@Jupiter) Pong -> Tremblay +> [ 0.019014] (2:ponger@Jupiter) Task received : small communication (latency bound) +> [ 0.019014] (2:ponger@Jupiter) Ping time (latency bound) 0.019014 +> [ 0.019014] (2:ponger@Jupiter) task_bw->data = 0.019 +> [150.178356] (1:pinger@Tremblay) Task received : large communication (bandwidth bound) +> [150.178356] (1:pinger@Tremblay) Pong time (bandwidth bound): 150.159 +> [150.178356] (0:maestro@) Total simulation time: 150.178 + +p Testing the surf network Vegas fairness model using lagrangian approach + +$ $SG_TEST_EXENV ${bindir:=.}/s4u_app-pingpong$EXEEXT ${srcdir:=.}/small_platform.xml "--cfg=host/model:compound cpu/model:Cas01 network/model:Vegas" "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +> [ 0.000000] (0:maestro@) Configuration change: Set 'host/model' to 'compound' +> [ 0.000000] (0:maestro@) Configuration change: Set 'cpu/model' to 'Cas01' +> [ 0.000000] (0:maestro@) Configuration change: Set 'network/model' to 'Vegas' +> [ 0.000000] (1:pinger@Tremblay) Ping -> Jupiter +> [ 0.000000] (2:ponger@Jupiter) Pong -> Tremblay +> [ 0.019014] (2:ponger@Jupiter) Task received : small communication (latency bound) +> [ 0.019014] (2:ponger@Jupiter) Ping time (latency bound) 0.019014 +> [ 0.019014] (2:ponger@Jupiter) task_bw->data = 0.019 +> [150.178356] (1:pinger@Tremblay) Task received : large communication (bandwidth bound) +> [150.178356] (1:pinger@Tremblay) Pong time (bandwidth bound): 150.159 +> [150.178356] (0:maestro@) Total simulation time: 150.178 diff --git a/examples/s4u/plugin-hostload/s4u_plugin-hostload.cpp b/examples/s4u/plugin-hostload/s4u_plugin-hostload.cpp new file mode 100644 index 0000000000..3f6efc4de8 --- /dev/null +++ b/examples/s4u/plugin-hostload/s4u_plugin-hostload.cpp @@ -0,0 +1,85 @@ +/* Copyright (c) 2007-2010, 2013-2015. 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/load.h" + +XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "Messages specific for this s4u example"); + +static void execute_load_test() +{ + s4u_Host* host = simgrid::s4u::Host::by_name("MyHost1"); + + XBT_INFO("Initial peak speed: %.0E flop/s; number of flops computed so far: %.0E (should be 0)", host->getSpeed(), + sg_host_get_computed_flops(host)); + + double start = simgrid::s4u::Engine::getClock(); + XBT_INFO("Sleep for 10 seconds"); + simgrid::s4u::this_actor::sleep_for(10); + + XBT_INFO("Done sleeping %.2fs; peak speed: %.0E flop/s; number of flops computed so far: %.0E (nothing should have " + "changed)", + simgrid::s4u::Engine::getClock() - start, host->getSpeed(), sg_host_get_computed_flops(host)); + + // Run a task + start = simgrid::s4u::Engine::getClock(); + XBT_INFO("Run a task of %.0E flops", 100E6); + simgrid::s4u::this_actor::execute(100E6); + + XBT_INFO("Done working on my task; this took %.2fs; current peak speed: %.0E flop/s; number of flops computed so " + "far: %.0E", + simgrid::s4u::Engine::getClock() - start, host->getSpeed(), sg_host_get_computed_flops(host)); + + // ========= Change power peak ========= + int pstate = 2; + host->setPstate(pstate); + XBT_INFO("========= Requesting pstate %d (speed should be of %.0E flop/s and is of %.0E flop/s)", pstate, + host->getPstateSpeed(pstate), host->getSpeed()); + + // Run a second task + start = simgrid::s4u::Engine::getClock(); + XBT_INFO("Run a task of %.0E flops", 100E6); + simgrid::s4u::this_actor::execute(100E6); + XBT_INFO("Done working on my task; this took %.2fs; current peak speed: %.0E flop/s; number of flops computed so " + "far: %.0E", + simgrid::s4u::Engine::getClock() - start, host->getSpeed(), sg_host_get_computed_flops(host)); + + start = simgrid::s4u::Engine::getClock(); + XBT_INFO("========= Requesting a reset of the computation counter"); + sg_host_load_reset(host); + XBT_INFO("Sleep for 4 seconds"); + simgrid::s4u::this_actor::sleep_for(4); + XBT_INFO("Done sleeping %.2f s; peak speed: %.0E flop/s; number of flops computed so far: %.0E", + simgrid::s4u::Engine::getClock() - start, host->getSpeed(), sg_host_get_computed_flops(host)); + + // =========== Turn the other host off ========== + s4u_Host* host2 = simgrid::s4u::Host::by_name("MyHost2"); + XBT_INFO("Turning MyHost2 off, and sleeping another 10 seconds. MyHost2 computed %.0f flops so far.", + sg_host_get_computed_flops(host2)); + host2->turnOff(); + start = simgrid::s4u::Engine::getClock(); + simgrid::s4u::this_actor::sleep_for(10); + XBT_INFO("Done sleeping %.2f s; peak speed: %.0E flop/s; number of flops computed so far: %.0E", + simgrid::s4u::Engine::getClock() - start, host->getSpeed(), sg_host_get_computed_flops(host)); +} + +int main(int argc, char* argv[]) +{ + sg_host_load_plugin_init(); + simgrid::s4u::Engine* e = new simgrid::s4u::Engine(&argc, argv); + + xbt_assert(argc == 2, "Usage: %s platform_file\n\tExample: %s msg_platform.xml\n", argv[0], argv[0]); + e->loadPlatform(argv[1]); + + simgrid::s4u::Actor::createActor("load_test", simgrid::s4u::Host::by_name("MyHost1"), execute_load_test); + + e->run(); + + XBT_INFO("Total simulation time: %.2f", simgrid::s4u::Engine::getClock()); + + delete e; + return 0; +} diff --git a/examples/s4u/plugin-hostload/s4u_plugin-hostload.tesh b/examples/s4u/plugin-hostload/s4u_plugin-hostload.tesh new file mode 100644 index 0000000000..5e9b67e159 --- /dev/null +++ b/examples/s4u/plugin-hostload/s4u_plugin-hostload.tesh @@ -0,0 +1,19 @@ +#! ./tesh + +p This tests the HostLoad plugin (this allows the user to get the current load of a host and the computed flops) + +$ ${bindir:=.}/s4u_plugin-hostload$EXEEXT ${srcdir:=.}/../platforms/energy_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +> [ 0.000000] (1:load_test@MyHost1) Initial peak speed: 1E+08 flop/s; number of flops computed so far: 0E+00 (should be 0) +> [ 0.000000] (1:load_test@MyHost1) Sleep for 10 seconds +> [ 10.000000] (1:load_test@MyHost1) Done sleeping 10.00s; peak speed: 1E+08 flop/s; number of flops computed so far: 0E+00 (nothing should have changed) +> [ 10.000000] (1:load_test@MyHost1) Run a task of 1E+08 flops +> [ 11.000000] (1:load_test@MyHost1) Done working on my task; this took 1.00s; current peak speed: 1E+08 flop/s; number of flops computed so far: 1E+08 +> [ 11.000000] (1:load_test@MyHost1) ========= Requesting pstate 2 (speed should be of 2E+07 flop/s and is of 2E+07 flop/s) +> [ 11.000000] (1:load_test@MyHost1) Run a task of 1E+08 flops +> [ 16.000000] (1:load_test@MyHost1) Done working on my task; this took 5.00s; current peak speed: 2E+07 flop/s; number of flops computed so far: 2E+08 +> [ 16.000000] (1:load_test@MyHost1) ========= Requesting a reset of the computation counter +> [ 16.000000] (1:load_test@MyHost1) Sleep for 4 seconds +> [ 20.000000] (1:load_test@MyHost1) Done sleeping 4.00 s; peak speed: 2E+07 flop/s; number of flops computed so far: 0E+00 +> [ 20.000000] (1:load_test@MyHost1) Turning MyHost2 off, and sleeping another 10 seconds. MyHost2 computed 0 flops so far. +> [ 30.000000] (1:load_test@MyHost1) Done sleeping 10.00 s; peak speed: 2E+07 flop/s; number of flops computed so far: 0E+00 +> [ 30.000000] (0:maestro@) Total simulation time: 30.00 diff --git a/include/xbt/function_types.h b/include/xbt/function_types.h index 2f6745624f..03aec81f82 100644 --- a/include/xbt/function_types.h +++ b/include/xbt/function_types.h @@ -18,7 +18,6 @@ typedef void *(*pvoid_f_void_t) (void); typedef void *(*pvoid_f_pvoid_t) (void *); typedef void (*void_f_void_t) (void); -typedef int (*int_f_void_t) (void); typedef int (*int_f_pvoid_t) (void*); typedef int (*int_f_pvoid_pvoid_t) (void *, void *); diff --git a/src/msg/msg_vm.cpp b/src/msg/msg_vm.cpp index 79ebf4ed18..2eb403d578 100644 --- a/src/msg/msg_vm.cpp +++ b/src/msg/msg_vm.cpp @@ -365,18 +365,15 @@ static int migration_rx_fun(int argc, char *argv[]) static void start_dirty_page_tracking(msg_vm_t vm) { vm->pimpl_vm_->dp_enabled = 1; - if (not vm->pimpl_vm_->dp_objs) + if (vm->pimpl_vm_->dp_objs.empty()) return; - char *key = nullptr; - xbt_dict_cursor_t cursor = nullptr; - dirty_page_t dp = nullptr; - xbt_dict_foreach (vm->pimpl_vm_->dp_objs, cursor, key, dp) { + for (auto elm : vm->pimpl_vm_->dp_objs) { + dirty_page_t dp = elm.second; double remaining = MSG_task_get_flops_amount(dp->task); dp->prev_clock = MSG_get_clock(); dp->prev_remaining = remaining; - - // XBT_INFO("%s@%s remaining %f", key, sg_host_name(vm), remaining); + XBT_DEBUG("%s@%s remaining %f", elm.first.c_str(), vm->getCname(), remaining); } } @@ -385,7 +382,7 @@ static void stop_dirty_page_tracking(msg_vm_t vm) vm->pimpl_vm_->dp_enabled = 0; } -static double get_computed(char *key, msg_vm_t vm, dirty_page_t dp, double remaining, double clock) +static double get_computed(const char* key, msg_vm_t vm, dirty_page_t dp, double remaining, double clock) { double computed = dp->prev_remaining - remaining; double duration = clock - dp->prev_clock; @@ -400,10 +397,9 @@ static double lookup_computed_flop_counts(msg_vm_t vm, int stage_for_fancy_debug { double total = 0; - char *key = nullptr; - xbt_dict_cursor_t cursor = nullptr; - dirty_page_t dp = nullptr; - xbt_dict_foreach (vm->pimpl_vm_->dp_objs, cursor, key, dp) { + for (auto elm : vm->pimpl_vm_->dp_objs) { + const char* key = elm.first.c_str(); + dirty_page_t dp = elm.second; double remaining = MSG_task_get_flops_amount(dp->task); double clock = MSG_get_clock(); @@ -443,10 +439,7 @@ void MSG_host_add_task(msg_host_t host, msg_task_t task) dp->prev_clock = MSG_get_clock(); dp->prev_remaining = remaining; } - if (not vm->pimpl_vm_->dp_objs) - vm->pimpl_vm_->dp_objs = xbt_dict_new_homogeneous(nullptr); - xbt_assert(xbt_dict_get_or_null(vm->pimpl_vm_->dp_objs, key) == nullptr); - xbt_dict_set(vm->pimpl_vm_->dp_objs, key, dp, nullptr); + vm->pimpl_vm_->dp_objs.insert({key, dp}); XBT_DEBUG("add %s on %s (remaining %f, dp_enabled %d)", key, host->getCname(), remaining, vm->pimpl_vm_->dp_enabled); xbt_free(key); @@ -459,8 +452,10 @@ void MSG_host_del_task(msg_host_t host, msg_task_t task) return; char *key = bprintf("%s-%p", task->name, task); - dirty_page_t dp = (dirty_page_t)(vm->pimpl_vm_->dp_objs ? xbt_dict_get_or_null(vm->pimpl_vm_->dp_objs, key) : NULL); - xbt_assert(dp->task == task); + dirty_page_t dp = nullptr; + if (vm->pimpl_vm_->dp_objs.find(key) != vm->pimpl_vm_->dp_objs.end()) + dp = vm->pimpl_vm_->dp_objs.at(key); + xbt_assert(dp && dp->task == task); /* If we are in the middle of dirty page tracking, we record how much computation has been done until now, and keep * the information for the lookup_() function that will called soon. */ @@ -472,8 +467,8 @@ void MSG_host_del_task(msg_host_t host, msg_task_t task) vm->pimpl_vm_->dp_updated_by_deleted_tasks += updated; } - if (vm->pimpl_vm_->dp_objs) - xbt_dict_remove(vm->pimpl_vm_->dp_objs, key); + + vm->pimpl_vm_->dp_objs.erase(key); xbt_free(dp); XBT_DEBUG("del %s on %s", key, host->getCname()); diff --git a/src/plugins/vm/VirtualMachineImpl.cpp b/src/plugins/vm/VirtualMachineImpl.cpp index 019fd79f73..a3b4a0a596 100644 --- a/src/plugins/vm/VirtualMachineImpl.cpp +++ b/src/plugins/vm/VirtualMachineImpl.cpp @@ -126,21 +126,18 @@ VirtualMachineImpl::~VirtualMachineImpl() allVms_.erase(iter); /* dirty page tracking */ - unsigned int size = xbt_dict_size(dp_objs); + unsigned int size = dp_objs.size(); static bool already_warned = false; if (size > 0 && not already_warned) { - xbt_dict_cursor_t cursor = nullptr; - xbt_dict_cursor_first(dp_objs, &cursor); + auto front = dp_objs.begin(); XBT_WARN("Dirty page tracking: %u pending task(s) on a destroyed VM (first one is %s).\n" "If you don't understand why your task was not properly removed, please report that bug.\n" "This is a known bug if you turned the host off during the VM execution.\n" "Please remind us of that problem at some point: our code base is not ready to fix this harmless issue in " "2016, sorry.", - size, (xbt_log_no_loc ? "(name hidden)" : xbt_dict_cursor_get_key(cursor))); - xbt_dict_cursor_free(&cursor); + size, (xbt_log_no_loc ? "(name hidden)" : front->first.c_str())); already_warned = true; } - xbt_dict_free(&dp_objs); /* Free the cpu_action of the VM. */ XBT_ATTRIB_UNUSED int ret = action_->unref(); diff --git a/src/plugins/vm/VirtualMachineImpl.hpp b/src/plugins/vm/VirtualMachineImpl.hpp index 797bfb0d51..1063bf1ff8 100644 --- a/src/plugins/vm/VirtualMachineImpl.hpp +++ b/src/plugins/vm/VirtualMachineImpl.hpp @@ -8,6 +8,7 @@ #include "src/surf/HostImpl.hpp" #include #include +#include #ifndef VM_INTERFACE_HPP_ #define VM_INTERFACE_HPP_ @@ -15,6 +16,8 @@ #define GUESTOS_NOISE 100 // This value corresponds to the cost of the global action associated to the VM // It corresponds to the cost of a VM running no tasks. +typedef struct dirty_page* dirty_page_t; + namespace simgrid { namespace vm { @@ -86,8 +89,8 @@ public: surf::Action* action_ = nullptr; /* Dirty pages stuff */ + std::unordered_map dp_objs; int dp_enabled = 0; - xbt_dict_t dp_objs = nullptr; double dp_updated_by_deleted_tasks = 0; protected: diff --git a/src/s4u/s4u_storage.cpp b/src/s4u/s4u_storage.cpp index 60a91423aa..f746562730 100644 --- a/src/s4u/s4u_storage.cpp +++ b/src/s4u/s4u_storage.cpp @@ -67,12 +67,12 @@ xbt_dict_t Storage::getProperties() const char* Storage::getProperty(const char* key) { - return static_cast(xbt_dict_get_or_null(this->getProperties(), key)); + return this->pimpl_->getProperty(key); } void Storage::setProperty(const char* key, char* value) { - xbt_dict_set(this->getProperties(), key, value, nullptr); + simgrid::simix::kernelImmediate([this, key, value] { this->pimpl_->setProperty(key, value); }); } std::map* Storage::getContent() diff --git a/src/surf/xml/platf.hpp b/src/surf/xml/platf.hpp index 010e6f0504..3d29ba49af 100644 --- a/src/surf/xml/platf.hpp +++ b/src/surf/xml/platf.hpp @@ -31,7 +31,7 @@ XBT_PUBLIC(double) surf_parse_get_size(const char *string, const char *entity_ki XBT_PUBLIC(double) surf_parse_get_bandwidth(const char *string, const char *entity_kind, const char *name); XBT_PUBLIC(double) surf_parse_get_speed(const char *string, const char *entity_kind, const char *name); -XBT_PUBLIC_DATA(int_f_void_t) surf_parse; /* Entry-point to the parser. Set this to your function. */ +XBT_PUBLIC(int) surf_parse(); /* Entry-point to the parser */ SG_END_DECL() diff --git a/src/surf/xml/surfxml_sax_cb.cpp b/src/surf/xml/surfxml_sax_cb.cpp index e304c1ffb5..b82863ae0d 100644 --- a/src/surf/xml/surfxml_sax_cb.cpp +++ b/src/surf/xml/surfxml_sax_cb.cpp @@ -1138,11 +1138,10 @@ void surf_parse_close() } } -/* Call the lexer to parse the currently opened file. This pointer to function enables bypassing of the parser */ -static int _surf_parse() { +/* Call the lexer to parse the currently opened file */ +int surf_parse() +{ return surf_parse_lex(); } -int_f_void_t surf_parse = &_surf_parse; - SG_END_DECL() diff --git a/teshsuite/msg/CMakeLists.txt b/teshsuite/msg/CMakeLists.txt index 0a87cdc087..8203287fac 100644 --- a/teshsuite/msg/CMakeLists.txt +++ b/teshsuite/msg/CMakeLists.txt @@ -1,5 +1,6 @@ # C examples -foreach(x cloud-sharing get_sender host_on_off host_on_off_recv host_on_off_processes trace_integration) +foreach(x actions-comm actions-storage cloud-sharing get_sender host_on_off host_on_off_recv host_on_off_processes + trace_integration) add_executable (${x} ${x}/${x}.c) target_link_libraries(${x} simgrid) set_target_properties(${x} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${x}) @@ -20,7 +21,14 @@ endforeach() set(teshsuite_src ${teshsuite_src} PARENT_SCOPE) set(tesh_files ${tesh_files} PARENT_SCOPE) -set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/trace_integration/test-hbp1.0-hbp1.0-hbp1.0.xml +set(txt_files ${txt_files} ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actions-comm.txt + ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actions-comm_split_p0.txt + ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actions-comm_split_p1.txt + ${CMAKE_CURRENT_SOURCE_DIR}/actions-storage/actions-storage.txt PARENT_SCOPE) +set(xml_files ${xml_files} ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actions-comm_d.xml + ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actions-comm_split_d.xml + ${CMAKE_CURRENT_SOURCE_DIR}/actions-storage/actions-storage_d.xml + ${CMAKE_CURRENT_SOURCE_DIR}/trace_integration/test-hbp1.0-hbp1.0-hbp1.0.xml ${CMAKE_CURRENT_SOURCE_DIR}/trace_integration/test-hbp1.0-hbp3.0-hbp4.0.xml ${CMAKE_CURRENT_SOURCE_DIR}/trace_integration/test-hbp1.5-hbp1.5.xml ${CMAKE_CURRENT_SOURCE_DIR}/trace_integration/test-hbp1-c0s0-c0s1.xml @@ -37,7 +45,9 @@ foreach(x get_sender host_on_off host_on_off_processes host_on_off_recv task_des ADD_TESH_FACTORIES(tesh-msg-${x} "thread;boost;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x} --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/${x} ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x}/${x}.tesh) endforeach() - +foreach(x actions-comm actions-storage) + ADD_TESH_FACTORIES(tesh-msg-${x} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/msg/${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/${x} ${x}.tesh) +endforeach() # One context factory is enough for these ones foreach(x cloud-sharing) diff --git a/examples/msg/actions-comm/actions-comm.c b/teshsuite/msg/actions-comm/actions-comm.c similarity index 59% rename from examples/msg/actions-comm/actions-comm.c rename to teshsuite/msg/actions-comm/actions-comm.c index 2c487dbede..b431b35b31 100644 --- a/examples/msg/actions-comm/actions-comm.c +++ b/teshsuite/msg/actions-comm/actions-comm.c @@ -9,24 +9,24 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(actions, "Messages specific for this msg example"); int communicator_size = 0; -static void action_Isend(const char *const *action); +static void action_Isend(const char* const* action); typedef struct { int last_Irecv_sender_id; int bcast_counter; - xbt_dynar_t isends; /* of msg_comm_t */ + xbt_dynar_t isends; /* of msg_comm_t */ /* Used to implement irecv+wait */ - xbt_dynar_t irecvs; /* of msg_comm_t */ - xbt_dynar_t tasks; /* of msg_task_t */ + xbt_dynar_t irecvs; /* of msg_comm_t */ + xbt_dynar_t tasks; /* of msg_task_t */ } s_process_globals_t; -typedef s_process_globals_t *process_globals_t; +typedef s_process_globals_t* process_globals_t; /* Helper function */ -static double parse_double(const char *string) +static double parse_double(const char* string) { double value; - char *endptr; + char* endptr; value = strtod(string, &endptr); if (*endptr != '\0') @@ -34,17 +34,18 @@ static double parse_double(const char *string) return value; } -#define ACT_DEBUG(...) \ - if (XBT_LOG_ISENABLED(actions, xbt_log_priority_verbose)) { \ - char *NAME = xbt_str_join_array(action, " "); \ - XBT_DEBUG(__VA_ARGS__); \ - xbt_free(NAME); \ - } else ((void)0) +#define ACT_DEBUG(...) \ + if (XBT_LOG_ISENABLED(actions, xbt_log_priority_verbose)) { \ + char* NAME = xbt_str_join_array(action, " "); \ + XBT_DEBUG(__VA_ARGS__); \ + xbt_free(NAME); \ + } else \ + ((void)0) -static void log_action(const char *const *action, double date) +static void log_action(const char* const* action, double date) { if (XBT_LOG_ISENABLED(actions, xbt_log_priority_verbose)) { - char *name = xbt_str_join_array(action, " "); + char* name = xbt_str_join_array(action, " "); XBT_VERB("%s %f", name, date); xbt_free(name); } @@ -52,11 +53,11 @@ static void log_action(const char *const *action, double date) static void asynchronous_cleanup(void) { - process_globals_t globals = (process_globals_t) MSG_process_get_data(MSG_process_self()); + process_globals_t globals = (process_globals_t)MSG_process_get_data(MSG_process_self()); /* Destroy any isend which correspond to completed communications */ msg_comm_t comm; - while (1/*true*/) { + while (1 /*true*/) { int pos_found = MSG_comm_testany(globals->isends); if (pos_found == -1) /* none remaining */ break; @@ -66,14 +67,14 @@ static void asynchronous_cleanup(void) } /* My actions */ -static void action_send(const char *const *action) +static void action_send(const char* const* action) { char to[250]; - const char *size_str = action[3]; - double size = parse_double(size_str); - double clock = MSG_get_clock(); + const char* size_str = action[3]; + double size = parse_double(size_str); + double clock = MSG_get_clock(); - snprintf(to,249, "%s_%s", MSG_process_get_name(MSG_process_self()), action[2]); + snprintf(to, 249, "%s_%s", MSG_process_get_name(MSG_process_self()), action[2]); ACT_DEBUG("Entering Send: %s (size: %g)", NAME, size); if (size < 65536) { @@ -86,14 +87,14 @@ static void action_send(const char *const *action) asynchronous_cleanup(); } -static void action_Isend(const char *const *action) +static void action_Isend(const char* const* action) { char to[250]; - const char *size = action[3]; - double clock = MSG_get_clock(); - process_globals_t globals = (process_globals_t) MSG_process_get_data(MSG_process_self()); + const char* size = action[3]; + double clock = MSG_get_clock(); + process_globals_t globals = (process_globals_t)MSG_process_get_data(MSG_process_self()); - snprintf(to,249, "%s_%s", MSG_process_get_name(MSG_process_self()), action[2]); + snprintf(to, 249, "%s_%s", MSG_process_get_name(MSG_process_self()), action[2]); msg_comm_t comm = MSG_task_isend(MSG_task_create(to, 0, parse_double(size), NULL), to); xbt_dynar_push(globals->isends, &comm); @@ -102,13 +103,13 @@ static void action_Isend(const char *const *action) asynchronous_cleanup(); } -static void action_recv(const char *const *action) +static void action_recv(const char* const* action) { char mailbox_name[250]; msg_task_t task = NULL; - double clock = MSG_get_clock(); + double clock = MSG_get_clock(); - snprintf(mailbox_name,249, "%s_%s", action[2], MSG_process_get_name(MSG_process_self())); + snprintf(mailbox_name, 249, "%s_%s", action[2], MSG_process_get_name(MSG_process_self())); ACT_DEBUG("Receiving: %s", NAME); msg_error_t res = MSG_task_receive(&task, mailbox_name); @@ -120,15 +121,15 @@ static void action_recv(const char *const *action) asynchronous_cleanup(); } -static void action_Irecv(const char *const *action) +static void action_Irecv(const char* const* action) { char mailbox[250]; - double clock = MSG_get_clock(); - process_globals_t globals = (process_globals_t) MSG_process_get_data(MSG_process_self()); + double clock = MSG_get_clock(); + process_globals_t globals = (process_globals_t)MSG_process_get_data(MSG_process_self()); XBT_DEBUG("Irecv on %s", MSG_process_get_name(MSG_process_self())); - snprintf(mailbox,249, "%s_%s", action[2], MSG_process_get_name(MSG_process_self())); + snprintf(mailbox, 249, "%s_%s", action[2], MSG_process_get_name(MSG_process_self())); msg_task_t t = NULL; xbt_dynar_push(globals->tasks, &t); msg_comm_t c = MSG_task_irecv(xbt_dynar_get_ptr(globals->tasks, xbt_dynar_length(globals->tasks) - 1), mailbox); @@ -138,12 +139,12 @@ static void action_Irecv(const char *const *action) asynchronous_cleanup(); } -static void action_wait(const char *const *action) +static void action_wait(const char* const* action) { msg_task_t task = NULL; msg_comm_t comm; - double clock = MSG_get_clock(); - process_globals_t globals = (process_globals_t) MSG_process_get_data(MSG_process_self()); + double clock = MSG_get_clock(); + process_globals_t globals = (process_globals_t)MSG_process_get_data(MSG_process_self()); xbt_assert(xbt_dynar_length(globals->irecvs), "action wait not preceded by any irecv: %s", xbt_str_join_array(action, " ")); @@ -159,7 +160,7 @@ static void action_wait(const char *const *action) } /* FIXME: that's a poor man's implementation: we should take the message exchanges into account */ -static void action_barrier(const char *const *action) +static void action_barrier(const char* const* action) { static msg_bar_t barrier = NULL; static int processes_arrived_sofar = 0; @@ -178,35 +179,35 @@ static void action_barrier(const char *const *action) ACT_DEBUG("Exiting barrier: %s", NAME); processes_arrived_sofar--; - if (processes_arrived_sofar<=0) { + if (processes_arrived_sofar <= 0) { MSG_barrier_destroy(barrier); barrier = NULL; } } -static void action_bcast(const char *const *action) +static void action_bcast(const char* const* action) { char mailbox[80]; double comm_size = parse_double(action[2]); - msg_task_t task = NULL; - double clock = MSG_get_clock(); + msg_task_t task = NULL; + double clock = MSG_get_clock(); - process_globals_t counters = (process_globals_t) MSG_process_get_data(MSG_process_self()); + process_globals_t counters = (process_globals_t)MSG_process_get_data(MSG_process_self()); xbt_assert(communicator_size, "Size of Communicator is not defined, can't use collective operations"); - const char * process_name = MSG_process_get_name(MSG_process_self()); + const char* process_name = MSG_process_get_name(MSG_process_self()); - char *bcast_identifier = bprintf("bcast_%d", counters->bcast_counter); + char* bcast_identifier = bprintf("bcast_%d", counters->bcast_counter); counters->bcast_counter++; if (!strcmp(process_name, "p0")) { XBT_DEBUG("%s: %s is the Root", bcast_identifier, process_name); - msg_comm_t *comms = xbt_new0(msg_comm_t, communicator_size - 1); + msg_comm_t* comms = xbt_new0(msg_comm_t, communicator_size - 1); for (int i = 1; i < communicator_size; i++) { - snprintf(mailbox,79, "%s_p0_p%d", bcast_identifier, i); + snprintf(mailbox, 79, "%s_p0_p%d", bcast_identifier, i); comms[i - 1] = MSG_task_isend(MSG_task_create(mailbox, 0, comm_size, NULL), mailbox); } MSG_comm_waitall(comms, communicator_size - 1, -1); @@ -216,7 +217,7 @@ static void action_bcast(const char *const *action) XBT_DEBUG("%s: all messages sent by %s have been received", bcast_identifier, process_name); } else { - snprintf(mailbox,79, "%s_p0_%s", bcast_identifier, process_name); + snprintf(mailbox, 79, "%s_p0_%s", bcast_identifier, process_name); MSG_task_receive(&task, mailbox); MSG_task_destroy(task); XBT_DEBUG("%s: %s has received", bcast_identifier, process_name); @@ -226,20 +227,20 @@ static void action_bcast(const char *const *action) xbt_free(bcast_identifier); } -static void action_comm_size(const char *const *action) +static void action_comm_size(const char* const* action) { - const char *size = action[2]; - double clock = MSG_get_clock(); + const char* size = action[2]; + double clock = MSG_get_clock(); communicator_size = parse_double(size); log_action(action, MSG_get_clock() - clock); } -static void action_compute(const char *const *action) +static void action_compute(const char* const* action) { - const char *amount = action[2]; - msg_task_t task = MSG_task_create("task", parse_double(amount), 0, NULL); - double clock = MSG_get_clock(); + const char* amount = action[2]; + msg_task_t task = MSG_task_create("task", parse_double(amount), 0, NULL); + double clock = MSG_get_clock(); ACT_DEBUG("Entering %s", NAME); MSG_task_execute(task); @@ -247,19 +248,19 @@ static void action_compute(const char *const *action) log_action(action, MSG_get_clock() - clock); } -static void action_init(const char *const *action) +static void action_init(const char* const* action) { XBT_DEBUG("Initialize the counters"); - process_globals_t globals = (process_globals_t) calloc(1, sizeof(s_process_globals_t)); - globals->isends = xbt_dynar_new(sizeof(msg_comm_t), NULL); - globals->irecvs = xbt_dynar_new(sizeof(msg_comm_t), NULL); - globals->tasks = xbt_dynar_new(sizeof(msg_task_t), NULL); + process_globals_t globals = (process_globals_t)calloc(1, sizeof(s_process_globals_t)); + globals->isends = xbt_dynar_new(sizeof(msg_comm_t), NULL); + globals->irecvs = xbt_dynar_new(sizeof(msg_comm_t), NULL); + globals->tasks = xbt_dynar_new(sizeof(msg_task_t), NULL); MSG_process_set_data(MSG_process_self(), globals); } -static void action_finalize(const char *const *action) +static void action_finalize(const char* const* action) { - process_globals_t globals = (process_globals_t) MSG_process_get_data(MSG_process_self()); + process_globals_t globals = (process_globals_t)MSG_process_get_data(MSG_process_self()); if (globals) { asynchronous_cleanup(); xbt_dynar_free_container(&(globals->isends)); @@ -269,20 +270,19 @@ static void action_finalize(const char *const *action) } } -int main(int argc, char *argv[]) +int main(int argc, char* argv[]) { /* Check the given arguments */ MSG_init(&argc, argv); /* Explicit initialization of the action module is required now*/ MSG_action_init(); - xbt_assert(argc > 2, - "Usage: %s platform_file deployment_file [action_files]\n" - "\t# if all actions are in the same file\n" - "\tExample: %s msg_platform.xml msg_deployment.xml actions\n" - "\t# if actions are in separate files, specified in deployment\n" - "\tExample: %s msg_platform.xml msg_deployment.xml ", - argv[0],argv[0],argv[0]); + xbt_assert(argc > 2, "Usage: %s platform_file deployment_file [action_files]\n" + "\t# if all actions are in the same file\n" + "\tExample: %s msg_platform.xml msg_deployment.xml actions\n" + "\t# if actions are in separate files, specified in deployment\n" + "\tExample: %s msg_platform.xml msg_deployment.xml ", + argv[0], argv[0], argv[0]); MSG_create_environment(argv[1]); MSG_launch_application(argv[2]); diff --git a/examples/msg/actions-comm/actions-comm.tesh b/teshsuite/msg/actions-comm/actions-comm.tesh similarity index 100% rename from examples/msg/actions-comm/actions-comm.tesh rename to teshsuite/msg/actions-comm/actions-comm.tesh diff --git a/examples/msg/actions-comm/actions-comm.txt b/teshsuite/msg/actions-comm/actions-comm.txt similarity index 100% rename from examples/msg/actions-comm/actions-comm.txt rename to teshsuite/msg/actions-comm/actions-comm.txt diff --git a/examples/msg/actions-comm/actions-comm_d.xml b/teshsuite/msg/actions-comm/actions-comm_d.xml similarity index 100% rename from examples/msg/actions-comm/actions-comm_d.xml rename to teshsuite/msg/actions-comm/actions-comm_d.xml diff --git a/examples/msg/actions-comm/actions-comm_split_d.xml b/teshsuite/msg/actions-comm/actions-comm_split_d.xml similarity index 100% rename from examples/msg/actions-comm/actions-comm_split_d.xml rename to teshsuite/msg/actions-comm/actions-comm_split_d.xml diff --git a/examples/msg/actions-comm/actions-comm_split_p0.txt b/teshsuite/msg/actions-comm/actions-comm_split_p0.txt similarity index 100% rename from examples/msg/actions-comm/actions-comm_split_p0.txt rename to teshsuite/msg/actions-comm/actions-comm_split_p0.txt diff --git a/examples/msg/actions-comm/actions-comm_split_p1.txt b/teshsuite/msg/actions-comm/actions-comm_split_p1.txt similarity index 100% rename from examples/msg/actions-comm/actions-comm_split_p1.txt rename to teshsuite/msg/actions-comm/actions-comm_split_p1.txt diff --git a/examples/msg/actions-storage/actions-storage.c b/teshsuite/msg/actions-storage/actions-storage.c similarity index 62% rename from examples/msg/actions-storage/actions-storage.c rename to teshsuite/msg/actions-storage/actions-storage.c index 0411b63a1c..d0fc4239b5 100644 --- a/examples/msg/actions-storage/actions-storage.c +++ b/teshsuite/msg/actions-storage/actions-storage.c @@ -10,34 +10,37 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(storage_actions, "Messages specific for this exampl static xbt_dict_t opened_files = NULL; -#define ACT_DEBUG(...) \ - if (XBT_LOG_ISENABLED(storage_actions, xbt_log_priority_verbose)) { \ - char *NAME = xbt_str_join_array(action, " "); \ - XBT_DEBUG(__VA_ARGS__); \ - xbt_free(NAME); \ - } else ((void)0) - -static void log_action(const char *const *action, double date) +#define ACT_DEBUG(...) \ + if (XBT_LOG_ISENABLED(storage_actions, xbt_log_priority_verbose)) { \ + char* NAME = xbt_str_join_array(action, " "); \ + XBT_DEBUG(__VA_ARGS__); \ + xbt_free(NAME); \ + } else \ + ((void)0) + +static void log_action(const char* const* action, double date) { if (XBT_LOG_ISENABLED(storage_actions, xbt_log_priority_verbose)) { - char *name = xbt_str_join_array(action, " "); + char* name = xbt_str_join_array(action, " "); XBT_VERB("%s %f", name, date); xbt_free(name); } } -static msg_file_t get_file_descriptor(const char *file_name){ +static msg_file_t get_file_descriptor(const char* file_name) +{ char full_name[1024]; - snprintf(full_name,1023, "%s:%s", MSG_process_get_name(MSG_process_self()), file_name); + snprintf(full_name, 1023, "%s:%s", MSG_process_get_name(MSG_process_self()), file_name); msg_file_t file = (msg_file_t)xbt_dict_get_or_null(opened_files, full_name); return file; } -static sg_size_t parse_size(const char *string){ +static sg_size_t parse_size(const char* string) +{ sg_size_t size; - char *endptr; + char* endptr; size = strtoul(string, &endptr, 10); if (*endptr != '\0') @@ -45,13 +48,14 @@ static sg_size_t parse_size(const char *string){ return size; } -static void action_open(const char *const *action) { - const char *file_name = action[2]; +static void action_open(const char* const* action) +{ + const char* file_name = action[2]; char full_name[1024]; msg_file_t file = NULL; - double clock = MSG_get_clock(); + double clock = MSG_get_clock(); - snprintf(full_name,1023, "%s:%s", MSG_process_get_name(MSG_process_self()), file_name); + snprintf(full_name, 1023, "%s:%s", MSG_process_get_name(MSG_process_self()), file_name); ACT_DEBUG("Entering Open: %s (filename: %s)", NAME, file_name); file = MSG_file_open(file_name, NULL); @@ -61,10 +65,11 @@ static void action_open(const char *const *action) { log_action(action, MSG_get_clock() - clock); } -static void action_read(const char *const *action) { - const char *file_name = action[2]; - const char *size_str = action[3]; - sg_size_t size = parse_size(size_str); +static void action_read(const char* const* action) +{ + const char* file_name = action[2]; + const char* size_str = action[3]; + sg_size_t size = parse_size(size_str); double clock = MSG_get_clock(); @@ -76,8 +81,9 @@ static void action_read(const char *const *action) { log_action(action, MSG_get_clock() - clock); } -static void action_close(const char *const *action) { - const char *file_name = action[2]; +static void action_close(const char* const* action) +{ + const char* file_name = action[2]; msg_file_t file; double clock = MSG_get_clock(); @@ -89,12 +95,14 @@ static void action_close(const char *const *action) { log_action(action, MSG_get_clock() - clock); } -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) +{ MSG_init(&argc, argv); /* Explicit initialization of the action module is required */ MSG_action_init(); - xbt_assert(argc > 3,"Usage: %s platform_file deployment_file [action_files]\n" + xbt_assert(argc > 3, + "Usage: %s platform_file deployment_file [action_files]\n" "\texample: %s platform.xml deployment.xml actions # if all actions are in the same file\n" "\texample: %s platform.xml deployment.xml # if actions are in separate files, specified in deployment\n", argv[0], argv[0], argv[0]); @@ -120,5 +128,5 @@ int main(int argc, char *argv[]) { /* Explicit finalization of the action module is required now*/ MSG_action_exit(); - return res!=MSG_OK; + return res != MSG_OK; } diff --git a/examples/msg/actions-storage/actions-storage.tesh b/teshsuite/msg/actions-storage/actions-storage.tesh similarity index 100% rename from examples/msg/actions-storage/actions-storage.tesh rename to teshsuite/msg/actions-storage/actions-storage.tesh diff --git a/examples/msg/actions-storage/actions-storage.txt b/teshsuite/msg/actions-storage/actions-storage.txt similarity index 100% rename from examples/msg/actions-storage/actions-storage.txt rename to teshsuite/msg/actions-storage/actions-storage.txt diff --git a/examples/msg/actions-storage/actions-storage_d.xml b/teshsuite/msg/actions-storage/actions-storage_d.xml similarity index 100% rename from examples/msg/actions-storage/actions-storage_d.xml rename to teshsuite/msg/actions-storage/actions-storage_d.xml