From f739471a9775c2d1a3ef5b303aa7a505d065233c Mon Sep 17 00:00:00 2001 From: dimitrov Date: Fri, 7 Jul 2006 15:08:18 +0000 Subject: [PATCH] doing bandwith measurments with MSG git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2506 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- examples/msg/Makefile.am | 5 +- examples/msg/msg_deployment_ping_pong.xml | 19 +++ examples/msg/ping_pong.c | 157 ++++++++++++++++++++++ 3 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 examples/msg/msg_deployment_ping_pong.xml create mode 100644 examples/msg/ping_pong.c diff --git a/examples/msg/Makefile.am b/examples/msg/Makefile.am index 729fcc5c48..4424830a04 100644 --- a/examples/msg/Makefile.am +++ b/examples/msg/Makefile.am @@ -5,7 +5,7 @@ EXTRA_DIST= msg_deployment.xml msg_platform.xml small_platform.xml small_deploym CLEANFILES=msg_test.trace TESTS=run_msg_test -check_PROGRAMS=msg_test msg_test_surfxml_bypassed msg_test_suspend +check_PROGRAMS=msg_test msg_test_surfxml_bypassed msg_test_suspend ping_pong msg_test_SOURCES= msg_test.c msg_test_LDADD= $(top_builddir)/src/libsimgrid.la @@ -16,4 +16,7 @@ msg_test_surfxml_bypassed_LDADD = $(top_builddir)/src/libsimgrid.la msg_test_suspend_SOURCES= msg_test_suspend.c msg_test_suspend_LDADD= $(top_builddir)/src/libsimgrid.la +ping_pong_SOURCES= ping_pong.c +ping_pong_LDADD= $(top_builddir)/src/libsimgrid.la + include $(top_srcdir)/acmacro/dist-files.mk diff --git a/examples/msg/msg_deployment_ping_pong.xml b/examples/msg/msg_deployment_ping_pong.xml new file mode 100644 index 0000000000..285219e448 --- /dev/null +++ b/examples/msg/msg_deployment_ping_pong.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/examples/msg/ping_pong.c b/examples/msg/ping_pong.c new file mode 100644 index 0000000000..2bb15a2547 --- /dev/null +++ b/examples/msg/ping_pong.c @@ -0,0 +1,157 @@ +/* $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 "msg/msg.h" /* Yeah! If you want to use msg, you need to 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 sender(int argc, char *argv[]); +int receiver(int argc, char *argv[]); + +MSG_error_t test_all(const char *platform_file, const char *application_file); + +typedef enum + { + PORT_22 = 0, + MAX_CHANNEL + } channel_t; + +double task_comm_size_lat = 0; +double task_comm_size_bw = 100000000; + +/** Emitter function */ +int sender(int argc,char *argv[] ) +{INFO0("sender"); + int nbr = 0; + m_host_t *hosts = NULL; + int i; + double time; + double task_comp_size = 0; + m_task_t task=NULL; + char sprintf_buffer[64]; + + nbr = argc - 1; + hosts = calloc(nbr, sizeof(m_host_t)); + + for (i = 1; i < argc; i++) + { + INFO2("host [%d]= %s",i-1, argv[i]); + hosts[i-1] = MSG_get_host_by_name(argv[i]); + if(hosts[i-1]==NULL) + { + INFO1("Unknown host %s. Stopping Now! ", argv[i]); + abort(); + } + } + + for (i = 0; i < nbr; i++) + { + /* Latency */ + /* time=MSG_get_clock(); */ +/* task = MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size_lat, NULL); */ +/* INFO1("task = %p",task); */ +/* task->data=xbt_new0(double,1); */ +/* *(double*)(task->data)=time; */ +/* INFO1("task->data = %le", *(double*)(task->data)); */ +/* INFO2("host [%d]=%s ",i, argv[i+1]); */ +/* MSG_task_put(task, hosts[i],PORT_22); */ + + /* Bandwidth */ + time=MSG_get_clock(); + task = MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size_bw, NULL); + task->data=xbt_new0(double,1); + *(double*)(task->data)=time; + MSG_task_put(task, hosts[i % nbr],PORT_22); + } + + + + return 0; +} /* end_of_client */ + +/** Receiver function */ +int receiver(int argc, char *argv[]) +{ + INFO0("receiver"); + double communication_time=0; + while(1) + { + double time, time1, sender_time; + m_task_t task = NULL; + int a; + + time=MSG_get_clock(); + a=MSG_task_get(&task,PORT_22); + if (a == MSG_OK) + { + + time1=MSG_get_clock(); + sender_time=(*(double*)(task->data)); + + if (sender_time > time) + time=sender_time; + communication_time=time1-time; + INFO1("Communic. time %le",communication_time); + MSG_task_destroy(task); + INFO1("Communic. time %le",communication_time); + + INFO1("--- bw %f ----",task_comm_size_bw/communication_time); + } + else + { + xbt_assert0(0,"Unexpected behavior"); + } + } + return 0; +}/* end_of_receiver */ + + +/** Test function */ +MSG_error_t test_all(const char *platform_file, + const char *application_file) +{ + INFO0("test_all"); + MSG_error_t res = MSG_OK; + /* Simulation setting */ + MSG_set_channel_number(MAX_CHANNEL); + MSG_paje_output("msg_test.trace"); + MSG_create_environment(platform_file); + + /* Application deployment */ + MSG_function_register("sender", sender); + MSG_function_register("receiver", receiver); + + MSG_launch_application(application_file); + + res = MSG_main(); + return res; +} /* end_of_test_all */ + + +/** Main function */ +int main(int argc, char *argv[]) +{ + MSG_error_t res = MSG_OK; + + 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(); + + if(res==MSG_OK) return 0; + else return 1; +} /* end_of_main */ -- 2.20.1