SimGrid
Functions
Simulation
SimDag

Functions for creating the environment and launching the simulation. More...

Functions

void SD_init (int *argc, char **argv)
 Initialises SD internal data.
void SD_application_reinit (void)
 Reinits the application part of the simulation (experimental feature)
void SD_create_environment (const char *platform_file)
 Creates the environment.
void SD_load_environment_script (const char *script_file)
 load script file
xbt_dynar_t SD_simulate (double how_long)
 Launches the simulation.
double SD_get_clock (void)
 Returns the current clock.
void SD_exit (void)
 Destroys all SD internal data.
xbt_dynar_t SD_daxload (const char *filename)
 loads a DAX file describing a DAG
xbt_dynar_t SD_dotload (const char *filename)
 loads a DOT file describing a DAG

Detailed Description

Functions for creating the environment and launching the simulation.

This section describes the functions for initialising SimDag, launching the simulation and exiting SimDag.


Function Documentation

void SD_init ( int *  argc,
char **  argv 
)

Initialises SD internal data.

This function must be called before any other SD function. Then you should call SD_create_environment().

Parameters:
argcargument number
argvargument list
See also:
SD_create_environment(), SD_exit()
void SD_application_reinit ( void  )

Reinits the application part of the simulation (experimental feature)

This function allows you to run several simulations on the same platform by resetting the part describing the application.

Warning:
: this function is still experimental and not perfect. For example, the simulation clock (and traces usage) is not reset. So, do not use it if you use traces in your simulation, and do not use absolute timing after using it. That being said, this function is still precious if you want to compare a bunch of heuristics on the same platforms.
void SD_create_environment ( const char *  platform_file)

Creates the environment.

The environment (i.e. the workstations and the links) is created with the data stored in the given XML platform file.

Parameters:
platform_filename of an XML file describing the environment to create
See also:
Workstations, Links

The XML file follows this DTD:

<!-- Small DTD for SURF based tools. -->
<!ELEMENT platform ((config|random)*,(include|cluster|peer|AS|trace|trace_connect)*,(include|process)*)>
<!ATTLIST platform version CDATA "0.0">

<!ELEMENT include EMPTY>
<!ATTLIST include file CDATA #REQUIRED>

<!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 seed CDATA "2147483647">
<!ATTLIST random radical CDATA "">
<!ATTLIST random generator (DRAND48|RAND|RNGSTREAM|NONE) "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|include|link|cluster|peer|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 core  CDATA "1">
<!ATTLIST host availability CDATA "1.0">
<!ATTLIST host availability_file CDATA "">
<!ATTLIST host state (ON|OFF) "ON">
<!ATTLIST host state_file CDATA "">
<!ATTLIST host coordinates  CDATA "">

<!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 core CDATA "1">
<!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">
<!ATTLIST cluster availability_file CDATA "">
<!ATTLIST cluster state_file CDATA "">

<!ELEMENT peer EMPTY>
<!ATTLIST peer id CDATA #REQUIRED>
<!ATTLIST peer power CDATA #REQUIRED>
<!ATTLIST peer bw_in CDATA #REQUIRED>
<!ATTLIST peer bw_out CDATA #REQUIRED>
<!ATTLIST peer lat CDATA #REQUIRED>
<!ATTLIST peer coordinates CDATA "">
<!ATTLIST peer availability_file CDATA "">
<!ATTLIST peer state_file CDATA "">

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

<!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*)>
<!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 "http://simgrid.gforge.inria.fr/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>
xbt_dynar_t SD_simulate ( double  how_long)

Launches the simulation.

The function will execute the SD_RUNNABLE runnable tasks. If how_long is positive, then the simulation will be stopped either when time reaches how_long or when a watch point is reached. A nonpositive value for how_long means no time limit, in which case the simulation will be stopped either when a watch point is reached or when no more task can be executed. Then you can call SD_simulate() again.

Parameters:
how_longmaximum duration of the simulation (a negative value means no time limit)
Returns:
a NULL-terminated array of SD_task_t whose state has changed.
See also:
SD_task_schedule(), SD_task_watch()
double SD_get_clock ( void  )

Returns the current clock.

Returns:
the current clock, in second
void SD_exit ( void  )

Destroys all SD internal data.

This function should be called when the simulation is over. Don't forget also to destroy the tasks.

See also:
SD_init(), SD_task_destroy()
xbt_dynar_t SD_daxload ( const char *  filename)

loads a DAX file describing a DAG

See https://confluence.pegasus.isi.edu/display/pegasus/WorkflowGenerator for more details.

xbt_dynar_t SD_dotload ( const char *  filename)

loads a DOT file describing a DAG

See http://www.graphviz.org/doc/info/lang.html for more details. To obtain information about transfers and tasks, two attributes are required : size on task (execution time in Flop) and size on edge (the amount of data transfer in bit). if they aren't here, there choose to be equal to zero.


Back to the main Simgrid Documentation page The version of Simgrid documented here is v3.6.1.
Documentation of other versions can be found in their respective archive files (directory doc/html).
Generated for SimGridAPI by doxygen