From df3d99886e3e4858343c5a3890bb35cf82715c5a Mon Sep 17 00:00:00 2001 From: schnorr Date: Fri, 23 Apr 2010 15:51:33 +0000 Subject: [PATCH] adding a new tesh to test the TRACE_VOLUME mask (and also serve as example) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@7642 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- buildtools/Cmake/src/CMakeTest.txt | 1 + examples/msg/tracing/CMakeLists.txt | 2 + examples/msg/tracing/volume.c | 140 ++++++++++++++++++++++++++++ examples/msg/tracing/volume.tesh | 6 ++ 4 files changed, 149 insertions(+) create mode 100644 examples/msg/tracing/volume.c create mode 100644 examples/msg/tracing/volume.tesh diff --git a/buildtools/Cmake/src/CMakeTest.txt b/buildtools/Cmake/src/CMakeTest.txt index 25f3fb65e8..c439373e20 100644 --- a/buildtools/Cmake/src/CMakeTest.txt +++ b/buildtools/Cmake/src/CMakeTest.txt @@ -135,6 +135,7 @@ ADD_TEST(msg-masterslave_cpu_ti ${PROJECT_DIRECTORY}/tools/tesh/tesh --cd ${PROJ IF(HAVE_TRACING) ADD_TEST(tracing-ms ${PROJECT_DIRECTORY}/tools/tesh/tesh --cd ${PROJECT_DIRECTORY}/examples/msg tracing/ms.tesh) ADD_TEST(tracing-categories ${PROJECT_DIRECTORY}/tools/tesh/tesh --cd ${PROJECT_DIRECTORY}/examples/msg tracing/categories.tesh) + ADD_TEST(tracing-volume ${PROJECT_DIRECTORY}/tools/tesh/tesh --cd ${PROJECT_DIRECTORY}/examples/msg tracing/volume.tesh) ADD_TEST(tracing-tasks ${PROJECT_DIRECTORY}/tools/tesh/tesh --cd ${PROJECT_DIRECTORY}/examples/msg tracing/tasks.tesh) ADD_TEST(tracing-process-migration ${PROJECT_DIRECTORY}/tools/tesh/tesh --cd ${PROJECT_DIRECTORY}/examples/msg tracing/procmig.tesh) ENDIF(HAVE_TRACING) diff --git a/examples/msg/tracing/CMakeLists.txt b/examples/msg/tracing/CMakeLists.txt index e3f9964cf6..8d995b4056 100644 --- a/examples/msg/tracing/CMakeLists.txt +++ b/examples/msg/tracing/CMakeLists.txt @@ -5,11 +5,13 @@ set(LIBRARY_OUTPUT_PATH "${PROJECT_DIRECTORY}/lib") add_executable(ms ${PROJECT_DIRECTORY}/examples/msg/tracing/ms.c) add_executable(categories ${PROJECT_DIRECTORY}/examples/msg/tracing/categories.c) +add_executable(volume ${PROJECT_DIRECTORY}/examples/msg/tracing/volume.c) add_executable(tasks ${PROJECT_DIRECTORY}/examples/msg/tracing/tasks.c) add_executable(procmig ${PROJECT_DIRECTORY}/examples/msg/tracing/procmig.c) ### Add definitions for compile target_link_libraries(ms simgrid m -fprofile-arcs) target_link_libraries(categories simgrid m -fprofile-arcs) +target_link_libraries(volume simgrid m -fprofile-arcs) target_link_libraries(tasks simgrid m -fprofile-arcs) target_link_libraries(procmig simgrid m -fprofile-arcs) diff --git a/examples/msg/tracing/volume.c b/examples/msg/tracing/volume.c new file mode 100644 index 0000000000..b090ecd5b9 --- /dev/null +++ b/examples/msg/tracing/volume.c @@ -0,0 +1,140 @@ +/* $Id$ */ + +/* Copyright (c) 2002,2003,2004 Arnaud Legrand. 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 +#include "msg/msg.h" +#include "xbt/sysdep.h" /* calloc, printf */ + +/* Create a log channel to have nice outputs. */ +#include "xbt/log.h" +#include "xbt/asserts.h" +XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,"Messages specific for this msg example"); + +int master(int argc, char *argv[]); +int slave(int argc, char *argv[]); +MSG_error_t test_all(const char *platform_file, const char *application_file); + +/** Emitter function */ +int master(int argc, char *argv[]) +{ + //defining the category of the master process + TRACE_msg_set_process_category (MSG_process_self(), "master"); + + long number_of_tasks = atol(argv[1]); + long slaves_count = atol(argv[4]); + int p = 1000000000; + int c = 10000000; + + int i; + for (i = 0; i < number_of_tasks; i++){ + m_task_t task = NULL; + task = MSG_task_create ("task_compute", p, c, NULL); + TRACE_msg_set_task_category (task, "compute"); + MSG_task_send(task, "master_mailbox"); + task = NULL; + task = MSG_task_create ("task_request", p, c, NULL); + TRACE_msg_set_task_category (task, "request"); + MSG_task_send(task, "master_mailbox"); + task = NULL; + task = MSG_task_create ("task_data", p, c, NULL); + TRACE_msg_set_task_category (task, "data"); + MSG_task_send(task, "master_mailbox"); + } + + for (i = 0; i < slaves_count; i++) { + m_task_t finalize = MSG_task_create ("finalize", 0, 1000, 0); + TRACE_msg_set_task_category(finalize, "finalize"); + MSG_task_send(finalize, "master_mailbox"); + } + + return 0; +} + +/** Receiver function */ +int slave(int argc, char *argv[]) +{ + //defining the category of this slave process + TRACE_msg_set_process_category (MSG_process_self(), "slave"); + + m_task_t task = NULL; + int res; + + while(1) { + res = MSG_task_receive(&(task), "master_mailbox"); + + if (!strcmp(MSG_task_get_name(task),"finalize")) { + MSG_task_destroy(task); + break; + } + + MSG_task_execute(task); + MSG_task_destroy(task); + task = NULL; + } + return 0; +} + +/** Test function */ +MSG_error_t test_all(const char *platform_file, + const char *application_file) +{ + MSG_error_t res = MSG_OK; + + { /* Simulation setting */ + MSG_set_channel_number(0); + MSG_create_environment(platform_file); + } + { /* Application deployment */ + MSG_function_register("master", master); + MSG_function_register("slave", slave); + MSG_launch_application(application_file); + } + res = MSG_main(); + + INFO1("Simulation time %g",MSG_get_clock()); + return res; +} + + +/** Main function */ +int main(int argc, char *argv[]) +{ + MSG_error_t res = MSG_OK; + + //starting the simulation tracing with the TRACE_VOLUME mask + // - the communication volume among processes expects that: + // - the processes involved have a category + // - the tasks sent have a category + TRACE_start_with_mask ("volume.trace", TRACE_VOLUME); + + //declaring user categories (for tasks) + TRACE_category ("compute"); + TRACE_category ("request"); + TRACE_category ("data"); + TRACE_category ("finalize"); + + //declaring user categories (for processes) + TRACE_category ("master"); + TRACE_category ("slave"); + + MSG_global_init(&argc,argv); + if (argc < 3) { + printf ("Usage: %s platform_file deployment_file\n",argv[0]); + printf ("example: %s msg_platform.xml msg_deployment.xml\n",argv[0]); + exit(1); + } + res = test_all(argv[1],argv[2]); + MSG_clean(); + + //ending the simulation tracing + TRACE_end(); + + if(res==MSG_OK) + return 0; + else + return 1; +} /* end_of_main */ diff --git a/examples/msg/tracing/volume.tesh b/examples/msg/tracing/volume.tesh new file mode 100644 index 0000000000..3f9c91e94d --- /dev/null +++ b/examples/msg/tracing/volume.tesh @@ -0,0 +1,6 @@ +#! ./tesh + +p Tracing communications among processes of a master/slave application + +$ $SG_TEST_EXENV tracing/volume$EXEEXT ${srcdir:=.}/tracing/platform.xml ${srcdir:=.}/tracing/deployment.xml +> [206.703278] [msg_test/INFO] Simulation time 206.703 -- 2.20.1