From: mquinson Date: Thu, 7 May 2009 12:16:23 +0000 (+0000) Subject: Add an example of process migration in examples/msg/migration X-Git-Tag: SVN~1360 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/d443c53694a5b52c9e75352f82bfef50735e939e Add an example of process migration in examples/msg/migration git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6275 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/.gitignore b/.gitignore index 1bb333841e..e7d7fe793c 100644 --- a/.gitignore +++ b/.gitignore @@ -71,6 +71,7 @@ examples/msg/masterslave/masterslave_bypass examples/msg/masterslave/masterslave_failure examples/msg/masterslave/masterslave_forwarder examples/msg/masterslave/masterslave_mailbox +examples/msg/migration/migration examples/msg/parallel_task/parallel_task examples/msg/parallel_task/test_ptask examples/msg/priority/priority diff --git a/ChangeLog b/ChangeLog index 7c70c2e079..8acec8db26 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,6 +14,7 @@ SimGrid (3.4-svn) unstable; urgency=high kind of action while the second one parses a trace file and triggers the corresponding actions within the system. For now, only a toy example is provided in examples/msg/actions + * Add an exemple of process migration in examples/msg/migration SIMIX: * Add SIMIX_process_set_name() to change the name of the current diff --git a/examples/msg/Makefile.am b/examples/msg/Makefile.am index 4198ad671f..62dc50f1d6 100644 --- a/examples/msg/Makefile.am +++ b/examples/msg/Makefile.am @@ -17,6 +17,7 @@ EXTRA_DIST = msg_platform.xml \ suspend/deployment_suspend.xml \ masterslave/deployment_masterslave_forwarder.xml \ masterslave/deployment_masterslave.xml \ + migration/migration.deploy \ gtnets/r-n200-f50-s4-2-d.xml \ gtnets/onelink-p.xml \ gtnets/onelink-d.xml \ @@ -40,6 +41,7 @@ TESTS = sendrecv/sendrecv_CLM03.tesh \ masterslave/masterslave_forwarder.tesh \ masterslave/masterslave_failure.tesh \ masterslave/masterslave_bypass.tesh \ + migration/migration.tesh \ parallel_task/parallel_task.tesh \ priority/priority.tesh \ properties/msg_prop.tesh @@ -77,6 +79,7 @@ noinst_PROGRAMS = sendrecv/sendrecv \ masterslave/masterslave_forwarder \ masterslave/masterslave_failure \ masterslave/masterslave_bypass \ + migration/migration \ parallel_task/parallel_task \ parallel_task/test_ptask \ priority/priority \ @@ -96,6 +99,10 @@ properties_msg_prop_LDADD = $(top_builddir)/src/libsimgrid.la actions_actions_SOURCES = actions/actions.c actions_actions_LDADD = $(top_builddir)/src/libsimgrid.la +# migration example +migration_migration_SOURCES = migration/migration.c +migration_migration_LDADD = $(top_builddir)/src/libsimgrid.la + # sendrecv simple example sendrecv_sendrecv_SOURCES = sendrecv/sendrecv.c diff --git a/examples/msg/migration/migration.c b/examples/msg/migration/migration.c new file mode 100644 index 0000000000..8ac3813ec0 --- /dev/null +++ b/examples/msg/migration/migration.c @@ -0,0 +1,70 @@ +/* $Id$ */ + +/* Copyright (c) 2009 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 "msg/msg.h" /* core library */ +#include "xbt/sysdep.h" /* calloc */ + +/* Create a log channel to have nice outputs. */ +#include "xbt/log.h" +XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,"Messages specific for this msg example"); + +/** The guy we will move from host to host. It move alone and then is moved by policeman back */ +static int emigrant(int argc, char *argv[]) +{ + m_task_t task; + INFO0("I'll look for a new job on another machine where the grass is greener."); + MSG_process_change_host(MSG_get_host_by_name("Boivin")); + INFO0("Yeah, found something to do"); + task = MSG_task_create("job",98095000,0,NULL); + MSG_task_execute(task); + MSG_task_destroy(task); + INFO0("Moving back home after work"); + MSG_process_change_host(MSG_get_host_by_name("Jacquelin")); + INFO0("Uh, nothing to do here. Stopping now"); + return 0; +} /* end_of_emigrant */ + +/* This function would move the emigrant back home, if it were possible to do so in the MSG API. + * Nothing for now. + */ +static int policeman(int argc, char *argv[]) +{ + INFO0("No function in the API to move the emigrant back, so do nothing."); + return 0; +} /* end_of_policeman */ + + +/** Main function */ +int main(int argc, char *argv[]) { + MSG_error_t res = MSG_OK; + + /* Argument checking */ + MSG_global_init(&argc,argv); + if (argc < 3) { + CRITICAL1 ("Usage: %s platform_file deployment_file\n",argv[0]); + CRITICAL1 ("example: %s msg_platform.xml msg_deployment_suspend.xml\n",argv[0]); + exit(1); + } + + /* Simulation setting */ + MSG_create_environment(argv[1]); + + /* Application deployment */ + MSG_function_register("emigrant", emigrant); + MSG_launch_application(argv[2]); + + /* Run the simulation */ + res = MSG_main(); + INFO1("Simulation time %g",MSG_get_clock()); + if (res==MSG_OK) + res = MSG_clean(); + + if(res==MSG_OK) + return 0; + else + return 1; +} /* end_of_main */ diff --git a/examples/msg/migration/migration.deploy b/examples/msg/migration/migration.deploy new file mode 100644 index 0000000000..e421031e75 --- /dev/null +++ b/examples/msg/migration/migration.deploy @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/msg/migration/migration.tesh b/examples/msg/migration/migration.tesh new file mode 100644 index 0000000000..53cda1ffa5 --- /dev/null +++ b/examples/msg/migration/migration.tesh @@ -0,0 +1,10 @@ +#! ./tesh + +p Testing the migration feature of MSG + +$ $SG_TEST_EXENV migration/migration ${srcdir:=.}/msg_platform.xml ${srcdir:=.}/migration/migration.deploy +> [Jacquelin:emigrant:(1) 0.000000] [msg_test/INFO] I'll look for a new job on another machine where the grass is greener. +> [Boivin:emigrant:(1) 0.000000] [msg_test/INFO] Yeah, found something to do +> [Boivin:emigrant:(1) 1.000000] [msg_test/INFO] Moving back home after work +> [Jacquelin:emigrant:(1) 1.000000] [msg_test/INFO] Uh, nothing to do here. Stopping now +> [1.000000] [msg_test/INFO] Simulation time 1