Functions

Platform and Application management
[MSG native]

This section describes functions to manage the platform creation and the application deployment. You should also have a look at Examples of MSG to have an overview of their usage. More...

Functions

void MSG_launch_application (const char *file)
 An application deployer.
void MSG_function_register (const char *name, xbt_main_func_t code)
 Registers the main function of an agent in a global table.
void MSG_function_register_default (xbt_main_func_t code)
 Registers a function as the default main function of agents.
xbt_main_func_t MSG_get_registered_function (const char *name)
 Retrieves a registered main function.
m_host_t MSG_get_host_by_name (const char *name)
 A name directory service...
void MSG_create_environment (const char *file)
 A platform constructor.
double MSG_get_clock (void)
 A clock (in second).

Detailed Description

This section describes functions to manage the platform creation and the application deployment. You should also have a look at Examples of MSG to have an overview of their usage.


Function Documentation

void MSG_launch_application ( const char *  file  ) 

An application deployer.

Creates the process described in file.

Parameters:
file a filename of a xml description of the application. This file follows this DTD :
<!-- Small DTD for SURF based tools. -->
<!ELEMENT platform ((config)?,(include|cluster|AS|trace|trace_connect)*,(include|process)*)>
<!ATTLIST platform version CDATA "0.0">

<!ELEMENT trace (#PCDATA)>
<!ATTLIST trace id CDATA #REQUIRED>
<!ATTLIST trace file CDATA "">
<!ATTLIST trace periodicity CDATA #REQUIRED>

<!ELEMENT random (prop*)>
<!ATTLIST random id CDATA #REQUIRED>
<!ATTLIST random min CDATA #REQUIRED>
<!ATTLIST random max CDATA #REQUIRED>
<!ATTLIST random mean CDATA #REQUIRED>
<!ATTLIST random std_deviation CDATA #REQUIRED>
<!ATTLIST random generator (DRAND48|RAND) "DRAND48">

<!ELEMENT trace_connect EMPTY>
<!ATTLIST trace_connect kind (HOST_AVAIL|POWER|LINK_AVAIL|BANDWIDTH|LATENCY) "HOST_AVAIL">
<!ATTLIST trace_connect trace CDATA #REQUIRED>
<!ATTLIST trace_connect element CDATA #REQUIRED>

<!ELEMENT AS (((AS|link|cluster|trace|trace_connect)*,(ASroute|trace|trace_connect)*,(bypassRoute|trace|trace_connect)*)|((host|router|link|trace|trace_connect)*,(route|trace|trace_connect)*))>
<!ATTLIST AS id CDATA #REQUIRED>
<!ATTLIST AS routing CDATA #REQUIRED>

<!ELEMENT host (prop*)>
<!ATTLIST host id CDATA #REQUIRED>
<!ATTLIST host power CDATA #REQUIRED>
<!ATTLIST host availability CDATA "1.0">
<!ATTLIST host availability_file CDATA "">
<!ATTLIST host state (ON|OFF) "ON">
<!ATTLIST host state_file CDATA "">
<!ATTLIST host vivaldi  CDATA "0 0 0">

<!ELEMENT cluster EMPTY>
<!ATTLIST cluster id CDATA #REQUIRED>
<!ATTLIST cluster prefix CDATA #REQUIRED>
<!ATTLIST cluster suffix CDATA #REQUIRED>
<!ATTLIST cluster radical CDATA #REQUIRED>
<!ATTLIST cluster power CDATA #REQUIRED>
<!ATTLIST cluster bw CDATA #REQUIRED>
<!ATTLIST cluster lat CDATA #REQUIRED>
<!ATTLIST cluster sharing_policy (SHARED|FULLDUPLEX|FATPIPE) "SHARED">
<!ATTLIST cluster bb_bw CDATA #REQUIRED>
<!ATTLIST cluster bb_lat CDATA #REQUIRED>
<!ATTLIST cluster bb_sharing_policy (SHARED|FATPIPE) "SHARED">

<!ELEMENT router EMPTY>
<!ATTLIST router id CDATA #REQUIRED>

<!ELEMENT link (prop*)>
<!ATTLIST link id CDATA #REQUIRED>
<!ATTLIST link bandwidth CDATA  #REQUIRED>
<!ATTLIST link bandwidth_file CDATA "">
<!ATTLIST link latency CDATA "0.0">
<!ATTLIST link latency_file CDATA "">
<!ATTLIST link state (ON|OFF) "ON">
<!ATTLIST link state_file CDATA "">
<!ATTLIST link sharing_policy (SHARED|FATPIPE|FULLDUPLEX) "SHARED">

<!ELEMENT route (link_ctn*)>
<!ATTLIST route src CDATA #REQUIRED>
<!ATTLIST route dst CDATA #REQUIRED>
<!ATTLIST route symmetrical (YES|NO) "YES">

<!ELEMENT ASroute (link_ctn*)>
<!ATTLIST ASroute src CDATA #REQUIRED>
<!ATTLIST ASroute dst CDATA #REQUIRED>
<!ATTLIST ASroute gw_src CDATA #REQUIRED>
<!ATTLIST ASroute gw_dst CDATA #REQUIRED>
<!ATTLIST ASroute symmetrical (YES|NO) "YES">

<!ELEMENT link_ctn EMPTY>
<!ATTLIST link_ctn id CDATA #REQUIRED>
<!ATTLIST link_ctn direction (UP|DOWN|NONE) "NONE">

<!ELEMENT bypassRoute (link_ctn*)>
<!ATTLIST bypassRoute src CDATA #REQUIRED>
<!ATTLIST bypassRoute dst CDATA #REQUIRED>
<!ATTLIST bypassRoute gw_src CDATA #REQUIRED>
<!ATTLIST bypassRoute gw_dst CDATA #REQUIRED>

<!ELEMENT process ((argument|prop)*)>
<!ATTLIST process host CDATA #REQUIRED>
<!ATTLIST process function CDATA #REQUIRED>
<!ATTLIST process start_time CDATA "-1.0">
<!ATTLIST process kill_time CDATA "-1.0">

<!ELEMENT argument EMPTY>
<!ATTLIST argument value CDATA #REQUIRED>

<!ELEMENT config (prop*|random)>
<!ATTLIST config id CDATA "">

<!ELEMENT prop EMPTY>
<!ATTLIST prop id CDATA #REQUIRED> <!-- <!ATTLIST prop key CDATA #REQUIRED> -->
<!ATTLIST prop value CDATA #REQUIRED>

Here is a small example of such a platform

<?xml version='1.0'?>
<!DOCTYPE platform SYSTEM "simgrid.dtd">
<platform version="3">
  <!-- The master process (with some arguments) -->
  <process host="Tremblay" function="master">
     <argument value="20"/>       <!-- Number of tasks -->
     <argument value="50000000"/>  <!-- Computation size of tasks -->
     <argument value="1000000"/>   <!-- Communication size of tasks -->
     <argument value="Jupiter"/>  <!-- First slave -->
     <argument value="Fafard"/>   <!-- Second slave -->
     <argument value="Ginette"/>  <!-- Third slave -->
     <argument value="Bourassa"/> <!-- Last slave -->
     <argument value="Tremblay"/> <!-- Me! I can work too! -->
  </process>
  <!-- The slave process (with no argument) -->
  <process host="Tremblay" function="slave"/>
  <process host="Jupiter" function="slave"/>
  <process host="Fafard" function="slave"/>
  <process host="Ginette" function="slave"/>
  <process host="Bourassa" function="slave"/>
</platform>

Have a look in the directory examples/msg/ to have a bigger example.

void MSG_function_register ( const char *  name,
xbt_main_func_t  code 
)

Registers the main function of an agent in a global table.

Registers a code function in a global table. This table is then used by MSG_launch_application.

Parameters:
name the reference name of the function.
code the function (must have the same prototype than the main function of any C program: int ..(int argc, char *argv[]))
void MSG_function_register_default ( xbt_main_func_t  code  ) 

Registers a function as the default main function of agents.

Registers a code function as being the default value. This function will get used by MSG_launch_application() when there is no registered function of the requested name in.

Parameters:
code the function (must have the same prototype than the main function of any C program: int ..(int argc, char *argv[]))
xbt_main_func_t MSG_get_registered_function ( const char *  name  ) 

Retrieves a registered main function.

Registers a code function in a global table. This table is then used by MSG_launch_application.

Parameters:
name the reference name of the function.
m_host_t MSG_get_host_by_name ( const char *  name  ) 

A name directory service...

Finds a m_host_t using its name.

Parameters:
name the name of an host.
Returns:
the corresponding host
void MSG_create_environment ( const char *  file  ) 

A platform constructor.

Creates a new platform, including hosts, links and the routing_table.

Parameters:
file a filename of a xml description of a platform. This file follows this DTD :
<!-- Small DTD for SURF based tools. -->
<!ELEMENT platform ((config)?,(include|cluster|AS|trace|trace_connect)*,(include|process)*)>
<!ATTLIST platform version CDATA "0.0">

<!ELEMENT trace (#PCDATA)>
<!ATTLIST trace id CDATA #REQUIRED>
<!ATTLIST trace file CDATA "">
<!ATTLIST trace periodicity CDATA #REQUIRED>

<!ELEMENT random (prop*)>
<!ATTLIST random id CDATA #REQUIRED>
<!ATTLIST random min CDATA #REQUIRED>
<!ATTLIST random max CDATA #REQUIRED>
<!ATTLIST random mean CDATA #REQUIRED>
<!ATTLIST random std_deviation CDATA #REQUIRED>
<!ATTLIST random generator (DRAND48|RAND) "DRAND48">

<!ELEMENT trace_connect EMPTY>
<!ATTLIST trace_connect kind (HOST_AVAIL|POWER|LINK_AVAIL|BANDWIDTH|LATENCY) "HOST_AVAIL">
<!ATTLIST trace_connect trace CDATA #REQUIRED>
<!ATTLIST trace_connect element CDATA #REQUIRED>

<!ELEMENT AS (((AS|link|cluster|trace|trace_connect)*,(ASroute|trace|trace_connect)*,(bypassRoute|trace|trace_connect)*)|((host|router|link|trace|trace_connect)*,(route|trace|trace_connect)*))>
<!ATTLIST AS id CDATA #REQUIRED>
<!ATTLIST AS routing CDATA #REQUIRED>

<!ELEMENT host (prop*)>
<!ATTLIST host id CDATA #REQUIRED>
<!ATTLIST host power CDATA #REQUIRED>
<!ATTLIST host availability CDATA "1.0">
<!ATTLIST host availability_file CDATA "">
<!ATTLIST host state (ON|OFF) "ON">
<!ATTLIST host state_file CDATA "">
<!ATTLIST host vivaldi  CDATA "0 0 0">

<!ELEMENT cluster EMPTY>
<!ATTLIST cluster id CDATA #REQUIRED>
<!ATTLIST cluster prefix CDATA #REQUIRED>
<!ATTLIST cluster suffix CDATA #REQUIRED>
<!ATTLIST cluster radical CDATA #REQUIRED>
<!ATTLIST cluster power CDATA #REQUIRED>
<!ATTLIST cluster bw CDATA #REQUIRED>
<!ATTLIST cluster lat CDATA #REQUIRED>
<!ATTLIST cluster sharing_policy (SHARED|FULLDUPLEX|FATPIPE) "SHARED">
<!ATTLIST cluster bb_bw CDATA #REQUIRED>
<!ATTLIST cluster bb_lat CDATA #REQUIRED>
<!ATTLIST cluster bb_sharing_policy (SHARED|FATPIPE) "SHARED">

<!ELEMENT router EMPTY>
<!ATTLIST router id CDATA #REQUIRED>

<!ELEMENT link (prop*)>
<!ATTLIST link id CDATA #REQUIRED>
<!ATTLIST link bandwidth CDATA  #REQUIRED>
<!ATTLIST link bandwidth_file CDATA "">
<!ATTLIST link latency CDATA "0.0">
<!ATTLIST link latency_file CDATA "">
<!ATTLIST link state (ON|OFF) "ON">
<!ATTLIST link state_file CDATA "">
<!ATTLIST link sharing_policy (SHARED|FATPIPE|FULLDUPLEX) "SHARED">

<!ELEMENT route (link_ctn*)>
<!ATTLIST route src CDATA #REQUIRED>
<!ATTLIST route dst CDATA #REQUIRED>
<!ATTLIST route symmetrical (YES|NO) "YES">

<!ELEMENT ASroute (link_ctn*)>
<!ATTLIST ASroute src CDATA #REQUIRED>
<!ATTLIST ASroute dst CDATA #REQUIRED>
<!ATTLIST ASroute gw_src CDATA #REQUIRED>
<!ATTLIST ASroute gw_dst CDATA #REQUIRED>
<!ATTLIST ASroute symmetrical (YES|NO) "YES">

<!ELEMENT link_ctn EMPTY>
<!ATTLIST link_ctn id CDATA #REQUIRED>
<!ATTLIST link_ctn direction (UP|DOWN|NONE) "NONE">

<!ELEMENT bypassRoute (link_ctn*)>
<!ATTLIST bypassRoute src CDATA #REQUIRED>
<!ATTLIST bypassRoute dst CDATA #REQUIRED>
<!ATTLIST bypassRoute gw_src CDATA #REQUIRED>
<!ATTLIST bypassRoute gw_dst CDATA #REQUIRED>

<!ELEMENT process ((argument|prop)*)>
<!ATTLIST process host CDATA #REQUIRED>
<!ATTLIST process function CDATA #REQUIRED>
<!ATTLIST process start_time CDATA "-1.0">
<!ATTLIST process kill_time CDATA "-1.0">

<!ELEMENT argument EMPTY>
<!ATTLIST argument value CDATA #REQUIRED>

<!ELEMENT config (prop*|random)>
<!ATTLIST config id CDATA "">

<!ELEMENT prop EMPTY>
<!ATTLIST prop id CDATA #REQUIRED> <!-- <!ATTLIST prop key CDATA #REQUIRED> -->
<!ATTLIST prop value CDATA #REQUIRED>

Here is a small example of such a platform

<?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "simgrid.dtd">
 <platform version="3">
 <AS  id="AS0"  routing="Full">
   <!-- ljlkj -->
   <host id="Tremblay" power="98095000"/>
   <host id="Jupiter" power="76296000"/>
   <host id="Fafard" power="76296000"/>
   <host id="Ginette" power="48492000"/>
   <host id="Bourassa" power="48492000"/>
   <link id="6" bandwidth="41279125" latency="5.9904e-05"/>
   <link id="11" bandwidth="252750" latency="0.00570455"/>
   <link id="3" bandwidth="34285625" latency="0.000514433"/>
   <link id="7" bandwidth="11618875" latency="0.00018998"/>
   <link id="9" bandwidth="7209750" latency="0.001461517"/>
   <link id="12" bandwidth="1792625" latency="0.007877863"/>
   <link id="2" bandwidth="118682500" latency="0.000136931"/>
   <link id="8" bandwidth="8158000" latency="0.000270544"/>
   <link id="1" bandwidth="34285625" latency="0.000514433"/>
   <link id="4" bandwidth="10099625" latency="0.00047978"/>
   <link id="0" bandwidth="41279125" latency="5.9904e-05"/>
   <link id="10" bandwidth="4679750" latency="0.000848712"/>
   <link id="5" bandwidth="27946250" latency="0.000278066"/>
   <link id="loopback" bandwidth="498000000" latency="0.000015" sharing_policy="FATPIPE"/>
   <route src="Tremblay" dst="Tremblay"><link_ctn id="loopback"/></route>
   <route src="Jupiter" dst="Jupiter"><link_ctn id="loopback"/></route>
   <route src="Fafard" dst="Fafard"><link_ctn id="loopback"/></route>
   <route src="Ginette" dst="Ginette"><link_ctn id="loopback"/></route>
   <route src="Bourassa" dst="Bourassa"><link_ctn id="loopback"/></route>
   <route src="Tremblay" dst="Jupiter">
     <link_ctn id="9"/>
   </route>
   <route src="Tremblay" dst="Fafard">
     <link_ctn id="4"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="8"/>
   </route>
   <route src="Tremblay" dst="Ginette">
     <link_ctn id="4"/><link_ctn id="3"/><link_ctn id="5"/>
   </route>
   <route src="Tremblay" dst="Bourassa">
     <link_ctn id="4"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="6"/><link_ctn id="7"/>
   </route>
   <route src="Jupiter" dst="Tremblay">
     <link_ctn id="9"/>
   </route>
   <route src="Jupiter" dst="Fafard">
     <link_ctn id="9"/><link_ctn id="4"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="8"/>
   </route>
   <route src="Jupiter" dst="Ginette">
     <link_ctn id="9"/><link_ctn id="4"/><link_ctn id="3"/><link_ctn id="5"/>
   </route>
   <route src="Jupiter" dst="Bourassa">
     <link_ctn id="9"/><link_ctn id="4"/><link_ctn id="3"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="6"/><link_ctn id="7"/>
   </route>
   <route src="Fafard" dst="Tremblay">
     <link_ctn id="8"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="4"/>
   </route>
   <route src="Fafard" dst="Jupiter">
     <link_ctn id="8"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="4"/><link_ctn id="9"/>
   </route>
   <route src="Fafard" dst="Ginette">
     <link_ctn id="8"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="2"/><link_ctn id="5"/>
   </route>
   <route src="Fafard" dst="Bourassa">
     <link_ctn id="8"/><link_ctn id="6"/><link_ctn id="7"/>
   </route>
   <route src="Ginette" dst="Tremblay">
     <link_ctn id="5"/><link_ctn id="3"/><link_ctn id="4"/>
   </route>
   <route src="Ginette" dst="Jupiter">
     <link_ctn id="5"/><link_ctn id="3"/><link_ctn id="4"/><link_ctn id="9"/>
   </route>
   <route src="Ginette" dst="Fafard">
     <link_ctn id="5"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="8"/>
   </route>
   <route src="Ginette" dst="Bourassa">
     <link_ctn id="5"/><link_ctn id="2"/><link_ctn id="0"/><link_ctn id="1"/><link_ctn id="6"/><link_ctn id="7"/>
   </route>
   <route src="Bourassa" dst="Tremblay">
     <link_ctn id="7"/><link_ctn id="6"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="4"/>
   </route>
   <route src="Bourassa" dst="Jupiter">
     <link_ctn id="7"/><link_ctn id="6"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="2"/><link_ctn id="3"/><link_ctn id="4"/><link_ctn id="9"/>
   </route>
   <route src="Bourassa" dst="Fafard">
     <link_ctn id="7"/><link_ctn id="6"/><link_ctn id="8"/>
   </route>
   <route src="Bourassa" dst="Ginette">
     <link_ctn id="7"/><link_ctn id="6"/><link_ctn id="1"/><link_ctn id="0"/><link_ctn id="2"/><link_ctn id="5"/>
   </route>
 </AS>
 </platform>

Have a look in the directory examples/msg/ to have a big example.


Back to the main Simgrid Documentation page Generated for SimGridAPI by doxygen