examples/deprecated/msg/mc/centralized_mutex
examples/deprecated/msg/mc/electric_fence
examples/deprecated/msg/synchro-semaphore/synchro-semaphore
-examples/deprecated/msg/trace-masterworker/trace-masterworker
examples/deprecated/msg/trace-process-migration/trace-process-migration
examples/deprecated/msg/*.pcap
examples/deprecated/msg/*.tr
examples/s4u/trace-categories/s4u-trace-categories
examples/s4u/trace-host-user-variables/s4u-trace-host-user-variables
examples/s4u/trace-link-user-variables/s4u-trace-link-user-variables
+examples/s4u/trace-masterworkers/s4u-trace-masterworkers
examples/s4u/trace-platform/s4u-trace-platform
examples/s4u/trace-route-user-variables/s4u-trace-route-user-variables
examples/deprecated/simdag/dag-dotload/sd_dag-dotload
include examples/deprecated/msg/mc/deploy_bugged2_liveness.xml
include examples/deprecated/msg/mc/deploy_centralized_mutex.xml
include examples/deprecated/msg/mc/promela_bugged2_liveness
-include examples/deprecated/msg/trace-masterworker/trace-masterworker.c
-include examples/deprecated/msg/trace-masterworker/trace-masterworker.tesh
include examples/deprecated/msg/trace-process-migration/trace-process-migration.c
include examples/deprecated/msg/trace-process-migration/trace-process-migration.tesh
include examples/deprecated/simdag/dag-dotload/dag.dot
include examples/s4u/trace-host-user-variables/s4u-trace-host-user-variables.tesh
include examples/s4u/trace-link-user-variables/s4u-trace-link-user-variables.cpp
include examples/s4u/trace-link-user-variables/s4u-trace-link-user-variables.tesh
+include examples/s4u/trace-masterworkers/s4u-trace-masterworkers.cpp
+include examples/s4u/trace-masterworkers/s4u-trace-masterworkers.tesh
include examples/s4u/trace-platform/s4u-trace-platform.cpp
include examples/s4u/trace-platform/s4u-trace-platform.tesh
include examples/s4u/trace-route-user-variables/s4u-trace-route-user-variables.cpp
-foreach(x trace-masterworker trace-process-migration)
+foreach(x trace-process-migration)
if(enable_msg)
add_executable (${x} EXCLUDE_FROM_ALL ${x}/${x}.c)
target_link_libraries(${x} simgrid)
set(tesh_files ${tesh_files} PARENT_SCOPE)
if(enable_msg)
- foreach (x trace-masterworker trace-process-migration)
+ foreach (x trace-process-migration)
ADD_TESH(msg-${x} --setenv bindir=${CMAKE_BINARY_DIR}/examples/deprecated/msg/${x}
--setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/deprecated/msg/${x}
--setenv platfdir=${CMAKE_HOME_DIRECTORY}/examples/platforms
+++ /dev/null
-/* Copyright (c) 2010-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/msg.h"
-
-XBT_LOG_NEW_DEFAULT_CATEGORY(msg_trace_masterworker, "Messages specific for this msg example");
-
-static int master(int argc, char *argv[])
-{
- xbt_assert(argc == 5);
- long number_of_tasks = xbt_str_parse_int(argv[1], "Invalid amount of tasks: %s");
- double task_comp_size = xbt_str_parse_double(argv[2], "Invalid computational size: %s");
- double task_comm_size = xbt_str_parse_double(argv[3], "Invalid communication size: %s");
- long workers_count = xbt_str_parse_int(argv[4], "Invalid amount of workers: %s");
-
- //setting the variable "is_master" (previously declared) to value 1
- TRACE_host_variable_set(MSG_host_get_name(MSG_host_self()), "is_master", 1);
-
- TRACE_mark("msmark", "start_send_tasks");
- for (int i = 0; i < number_of_tasks; i++) {
- msg_task_t task = MSG_task_create("task", task_comp_size, task_comm_size, NULL);
-
- //setting the variable "task_creation" to value i
- TRACE_host_variable_set(MSG_host_get_name(MSG_host_self()), "task_creation", i);
-
- //setting the category of task to "compute"
- //the category of a task must be defined before it is sent or executed
- MSG_task_set_category(task, "compute");
- MSG_task_send(task, "master_mailbox");
- }
- TRACE_mark("msmark", "finish_send_tasks");
-
- for (int i = 0; i < workers_count; i++) {
- msg_task_t finalize = MSG_task_create("finalize", 0, 0, 0);
- MSG_task_set_category(finalize, "finalize");
- MSG_task_send(finalize, "master_mailbox");
- }
-
- return 0;
-}
-
-static int worker(XBT_ATTRIB_UNUSED int argc, XBT_ATTRIB_UNUSED char* argv[])
-{
- msg_task_t task = NULL;
-
- TRACE_host_variable_set(MSG_host_get_name(MSG_host_self()), "is_worker", 1);
- TRACE_host_variable_set(MSG_host_get_name(MSG_host_self()), "task_computation", 0);
- while (1) {
- MSG_task_receive(&(task), "master_mailbox");
-
- if (strcmp(MSG_task_get_name(task), "finalize") == 0) {
- MSG_task_destroy(task);
- break;
- }
- // adding the value returned by MSG_task_get_compute_duration(task) to the variable "task_computation"
- TRACE_host_variable_add(MSG_host_get_name(MSG_host_self()), "task_computation", MSG_task_get_flops_amount(task));
- MSG_task_execute(task);
- MSG_task_destroy(task);
- task = NULL;
- }
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- MSG_init(&argc, argv);
- xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
- "\tExample: %s msg_platform.xml msg_deployment.xml\n", argv[0], argv[0]);
-
- MSG_create_environment(argv[1]);
-
- //declaring user variables
- TRACE_host_variable_declare("is_worker");
- TRACE_host_variable_declare("is_master");
- TRACE_host_variable_declare("task_creation");
- TRACE_host_variable_declare("task_computation");
-
- //declaring user markers and values
- TRACE_declare_mark("msmark");
- TRACE_declare_mark_value ("msmark", "start_send_tasks");
- TRACE_declare_mark_value ("msmark", "finish_send_tasks");
-
- //declaring user categories with RGB colors (values from 0 to 1)
- TRACE_category_with_color ("compute", "1 0 0"); //compute is red
- TRACE_category_with_color ("finalize", "0 1 0"); //finalize is green
- //categories without user-defined colors receive random colors generated by the tracing system
- TRACE_category ("request");
- TRACE_category_with_color ("report", NULL);
-
- MSG_function_register("master", master);
- MSG_function_register("worker", worker);
- MSG_launch_application(argv[2]);
-
- MSG_main();
-
- unsigned int cursor;
- xbt_dynar_t categories = TRACE_get_categories ();
- if (categories){
- XBT_INFO ("Declared tracing categories:");
- char *category;
- xbt_dynar_foreach (categories, cursor, category){
- XBT_INFO ("%s", category);
- }
- xbt_dynar_free (&categories);
- }
-
- xbt_dynar_t marks = TRACE_get_marks ();
- if (marks){
- XBT_INFO ("Declared marks:");
- char *mark;
- xbt_dynar_foreach (marks, cursor, mark){
- XBT_INFO ("%s", mark);
- }
- xbt_dynar_free (&marks);
- }
-
- return 0;
-}
+++ /dev/null
-#!/usr/bin/env tesh
-
-p Tracing master/worker application
-$ ${bindir:=.}/trace-masterworker --cfg=tracing:yes --cfg=tracing/filename:trace-masterworker.trace --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes ${platfdir}/small_platform.xml ${srcdir:=.}/../../../c/app-masterworker/app-masterworker_d.xml
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'trace-masterworker.trace'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes'
-> [4.214821] [msg_trace_masterworker/INFO] Declared tracing categories:
-> [4.214821] [msg_trace_masterworker/INFO] compute
-> [4.214821] [msg_trace_masterworker/INFO] finalize
-> [4.214821] [msg_trace_masterworker/INFO] report
-> [4.214821] [msg_trace_masterworker/INFO] request
-> [4.214821] [msg_trace_masterworker/INFO] Declared marks:
-> [4.214821] [msg_trace_masterworker/INFO] msmark
-
-p Tracing master/worker application with xml config
-$ ${bindir:=.}/trace-masterworker ${platfdir}/config_tracing.xml ${srcdir:=.}/../../../c/app-masterworker/app-masterworker_d.xml
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'trace-masterworker.trace'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes'
-> [4.214821] [msg_trace_masterworker/INFO] Declared tracing categories:
-> [4.214821] [msg_trace_masterworker/INFO] compute
-> [4.214821] [msg_trace_masterworker/INFO] finalize
-> [4.214821] [msg_trace_masterworker/INFO] report
-> [4.214821] [msg_trace_masterworker/INFO] request
-> [4.214821] [msg_trace_masterworker/INFO] Declared marks:
-> [4.214821] [msg_trace_masterworker/INFO] msmark
-
-p Not tracing master/worker application
-$ ${bindir:=.}/trace-masterworker ${platfdir}/small_platform.xml ${srcdir:=.}/../../../c/app-masterworker/app-masterworker_d.xml
-
-p Testing tracing by process
-$ ${bindir:=.}/trace-masterworker --cfg=tracing:yes --cfg=tracing/msg/process:yes --cfg=tracing/filename:trace-masterworker.trace --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes ${platfdir}/small_platform.xml ${srcdir:=.}/../../../c/app-masterworker/app-masterworker_d.xml
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/msg/process' to 'yes'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'trace-masterworker.trace'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
-> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes'
-> [4.214821] [msg_trace_masterworker/INFO] Declared tracing categories:
-> [4.214821] [msg_trace_masterworker/INFO] compute
-> [4.214821] [msg_trace_masterworker/INFO] finalize
-> [4.214821] [msg_trace_masterworker/INFO] report
-> [4.214821] [msg_trace_masterworker/INFO] request
-> [4.214821] [msg_trace_masterworker/INFO] Declared marks:
-> [4.214821] [msg_trace_masterworker/INFO] msmark
-
-$ rm -rf trace-masterworker.trace
# Examples not accepting factories
##################################
-foreach (example trace-categories trace-platform
+foreach (example trace-categories trace-platform trace-masterworkers
trace-host-user-variables trace-link-user-variables trace-route-user-variables)
add_executable (s4u-${example} EXCLUDE_FROM_ALL ${example}/s4u-${example}.cpp)
target_link_libraries(s4u-${example} simgrid)
--- /dev/null
+/* Copyright (c) 2010-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/instr.h>
+#include <simgrid/s4u.hpp>
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_trace_masterworker, "Messages specific for this example");
+
+struct Task {
+ std::string name;
+ std::string category;
+ double flops;
+};
+
+static void master(std::vector<std::string> args)
+{
+ xbt_assert(args.size() > 4, "The master function expects at least 3 arguments");
+
+ long tasks_count = std::stol(args[1]);
+ double compute_cost = std::stod(args[2]);
+ long communication_cost = std::stol(args[3]);
+ size_t workers_count = args.size() - 4;
+ const char* my_hostname = simgrid::s4u::this_actor::get_host()->get_cname();
+ auto mailbox = simgrid::s4u::Mailbox::by_name("master_mailbox");
+
+ XBT_DEBUG("Got %zu workers and %ld tasks to process", workers_count, tasks_count);
+
+ // setting the variable "is_master" (previously declared) to value 1
+ TRACE_host_variable_set(my_hostname, "is_master", 1);
+
+ TRACE_mark("msmark", "start_send_tasks");
+ for (int i = 0; i < tasks_count; i++) {
+ // setting the variable "task_creation" to value i
+ TRACE_host_variable_set(my_hostname, "task_creation", i);
+
+ // setting the category of task to "compute"
+ Task task = {"task", "compute", compute_cost};
+ mailbox->put(new Task(task), communication_cost);
+ }
+ TRACE_mark("msmark", "finish_send_tasks");
+
+ XBT_DEBUG("All tasks have been dispatched. Request all workers to stop.");
+ for (unsigned int i = 0; i < workers_count; i++) {
+ Task finalize = {"finalize", "finalize", 0};
+ mailbox->put(new Task(finalize), 0);
+ }
+}
+
+static void worker(std::vector<std::string> args)
+{
+ xbt_assert(args.size() == 1, "The worker expects no argument");
+
+ const char* my_hostname = simgrid::s4u::this_actor::get_host()->get_cname();
+ auto mailbox = simgrid::s4u::Mailbox::by_name("master_mailbox");
+
+ TRACE_host_variable_set(my_hostname, "is_worker", 1);
+ TRACE_host_variable_set(my_hostname, "task_computation", 0);
+
+ while (true) {
+ const auto* task = static_cast<Task*>(mailbox->get());
+ if (task->name == "finalize") {
+ delete task;
+ break;
+ }
+ // adding the task's cost to the variable "task_computation"
+ TRACE_host_variable_add(my_hostname, "task_computation", task->flops);
+ simgrid::s4u::this_actor::exec_init(task->flops)
+ ->set_name(task->name)
+ ->set_tracing_category(task->category)
+ ->wait();
+ delete task;
+ }
+
+ XBT_DEBUG("Exiting now.");
+}
+
+int main(int argc, char* argv[])
+{
+ simgrid::s4u::Engine e(&argc, argv);
+ xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n", argv[0]);
+
+ e.load_platform(argv[1]);
+
+ // declaring user variables
+ TRACE_host_variable_declare("is_worker");
+ TRACE_host_variable_declare("is_master");
+ TRACE_host_variable_declare("task_creation");
+ TRACE_host_variable_declare("task_computation");
+
+ // declaring user markers and values
+ TRACE_declare_mark("msmark");
+ TRACE_declare_mark_value("msmark", "start_send_tasks");
+ TRACE_declare_mark_value("msmark", "finish_send_tasks");
+
+ // declaring user categories with RGB colors (values from 0 to 1)
+ TRACE_category_with_color("compute", "1 0 0"); // compute is red
+ TRACE_category_with_color("finalize", "0 1 0"); // finalize is green
+ // categories without user-defined colors receive random colors generated by the tracing system
+ TRACE_category("request");
+ TRACE_category_with_color("report", NULL);
+
+ e.register_function("master", &master);
+ e.register_function("worker", &worker);
+ e.load_deployment(argv[2]);
+
+ e.run();
+
+ XBT_DEBUG("Simulation is over");
+
+ unsigned int cursor;
+ xbt_dynar_t categories = TRACE_get_categories();
+ if (categories) {
+ XBT_INFO("Declared tracing categories:");
+ char* category;
+ xbt_dynar_foreach (categories, cursor, category) {
+ XBT_INFO("%s", category);
+ }
+ xbt_dynar_free(&categories);
+ }
+
+ xbt_dynar_t marks = TRACE_get_marks();
+ if (marks) {
+ XBT_INFO("Declared marks:");
+ char* mark;
+ xbt_dynar_foreach (marks, cursor, mark) {
+ XBT_INFO("%s", mark);
+ }
+ xbt_dynar_free(&marks);
+ }
+
+ return 0;
+}
--- /dev/null
+#!/usr/bin/env tesh
+
+$ ${bindir:=.}/s4u-trace-masterworkers --cfg=tracing:yes --cfg=tracing/filename:trace-masterworker.trace --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes ${platfdir}/small_platform.xml ${srcdir:=.}/../app-masterworkers/s4u-app-masterworkers_d.xml
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'trace-masterworker.trace'
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes'
+> [4.214821] [s4u_trace_masterworker/INFO] Declared tracing categories:
+> [4.214821] [s4u_trace_masterworker/INFO] compute
+> [4.214821] [s4u_trace_masterworker/INFO] finalize
+> [4.214821] [s4u_trace_masterworker/INFO] report
+> [4.214821] [s4u_trace_masterworker/INFO] request
+> [4.214821] [s4u_trace_masterworker/INFO] Declared marks:
+> [4.214821] [s4u_trace_masterworker/INFO] msmark
+
+p Tracing master/worker application with xml config
+$ ${bindir:=.}/s4u-trace-masterworkers ${platfdir}/config_tracing.xml ${srcdir:=.}/../app-masterworkers/s4u-app-masterworkers_d.xml
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'trace-masterworker.trace'
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes'
+> [4.214821] [s4u_trace_masterworker/INFO] Declared tracing categories:
+> [4.214821] [s4u_trace_masterworker/INFO] compute
+> [4.214821] [s4u_trace_masterworker/INFO] finalize
+> [4.214821] [s4u_trace_masterworker/INFO] report
+> [4.214821] [s4u_trace_masterworker/INFO] request
+> [4.214821] [s4u_trace_masterworker/INFO] Declared marks:
+> [4.214821] [s4u_trace_masterworker/INFO] msmark
+
+p Not tracing master/worker application
+$ ${bindir:=.}/s4u-trace-masterworkers ${platfdir}/small_platform.xml ${srcdir:=.}/../app-masterworkers/s4u-app-masterworkers_d.xml
+
+p Testing tracing by process
+$ ${bindir:=.}/s4u-trace-masterworkers --cfg=tracing:yes --cfg=tracing/msg/process:yes --cfg=tracing/filename:trace-masterworker.trace --cfg=tracing/categorized:yes --cfg=tracing/uncategorized:yes ${platfdir}/small_platform.xml ${srcdir:=.}/../app-masterworkers/s4u-app-masterworkers_d.xml
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing' to 'yes'
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/msg/process' to 'yes'
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'trace-masterworker.trace'
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes'
+> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes'
+> [4.214821] [s4u_trace_masterworker/INFO] Declared tracing categories:
+> [4.214821] [s4u_trace_masterworker/INFO] compute
+> [4.214821] [s4u_trace_masterworker/INFO] finalize
+> [4.214821] [s4u_trace_masterworker/INFO] report
+> [4.214821] [s4u_trace_masterworker/INFO] request
+> [4.214821] [s4u_trace_masterworker/INFO] Declared marks:
+> [4.214821] [s4u_trace_masterworker/INFO] msmark
+
+$ rm -f trace-masterworker.trace