SimGrid: Extending SimGrid

SimGrid 3.10 Versatile Simulation of Distributed Systems

- Home page
- Online documentation
- Dev's Corner

All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Extending SimGrid

We start to put TAGS in simgrid source code for having tutorials to see where is the important parts ans steps to create:

- How to add a new MSG function?
- How to add a new model in surf?
- What is How to add a new tag for xml files?

# How to add a new MSG function?

Search for expression "TUTORIAL: New API".

    user@caraja:~/workspace/simgrid/src$ cg "TUTORIAL: New API"
     0 msg/msg_new_api.c             15 /* TUTORIAL: New API*/
     1 simix/smx_smurf.c            582 /* TUTORIAL: New API*/
     2 simix/smx_smurf.c            616 /* TUTORIAL: New API*/
     3 simix/smx_smurf_private.h    102 /* TUTORIAL: New API*/
     4 simix/smx_smurf_private.h    629 /* TUTORIAL: New API*/
     5 simix/smx_private.h           28 /* TUTORIAL: New API*/
     6 simix/smx_private.h          101 /* TUTORIAL: New API*/
     7 simix/smx_private.h          182 /* TUTORIAL: New API*/
     8 simix/smx_global.c           454 /* TUTORIAL: New API*/
     9 simix/smx_new_api.c            8 /* TUTORIAL: New API*/
    10 simix/smx_user.c            1684 /* TUTORIAL: New API*/
    11 simix/smx_new_api_private.h    8 /* TUTORIAL: New API*/
    12 simix/smx_process.c          338 /* TUTORIAL: New API*/

# How to add a new model in surf?

Search for expression "TUTORIAL: New model".

    user@caraja:~/workspace/simgrid/src$ cg "TUTORIAL: New model"
    0 surf/new_model_private.h   2 /* TUTORIAL: New model
    1 surf/surf.c              213 /* TUTORIAL: New model*/
    2 surf/surf_config.c       380 /* TUTORIAL: New model*/
    3 surf/surf_config.c       746 /* TUTORIAL: New model*/
    4 surf/new_model.c           8 /* TUTORIAL: New model*/
    5 include/surf/surf.h      157 /* TUTORIAL: New model*/
    6 include/surf/surf.h      345 /* TUTORIAL: New model*/
    7 include/surf/surf.h      661 /* TUTORIAL: New model*/

# How to add a new simcall?

To add a simcall called `<name>` with three arguments `arg1`, `arg2` and `arg3` of type `targ1`, `targ2`, `targ3` respectively and which return a value of type `tret` you must first define the simcall function in the the `include/simgrid/simix.h` and make it call the automatically generated `BODY` function which will do all the bad stuff.

tret simcall_<NAME>(targ1 arg1, targ2 arg2, targ3 arg3){
return simcall_BODY_<NAME>(arg1, arg2, arg3);
}

Then you must add an new line in the list `SIMCALL_LIST1` of simcall actions in `src/simix/smx_smurf_private.h`. The arguments of the `ACTION` are:

- the simcall enum name,
- the `<name>` of the simcall,
- if the result must be automatically saved in the simcall (`WITH_ANSWER`/`WITHOUT_ANSWER`)
- the return type,
- the arguments.

The return type and the arguments must be define by using `TSPEC(name, type)`, or one of the predefined type (e.g., `TSTRING(n)`, `TINT(n)`, `TVOID(n)`, `TPTR(n)`, …). You must get something like this:

ACTION(SIMCALL_<NAME>, <name>, WITH_ANSWER, TSPEC(result, tret), TSPEC(arg1, targ1), TSPEC(arg2, targ2), TSPEC(arg3, targ3)) sep \

Finaly you have to define the kernel code in a `SIMIX_pre_<name>` in the corresponding src/simix/smx_*.c file:

tret SIMIX_pre_<name>(smx_simcall_t simcall, targ1 arg1, targ2 arg2, targ3 arg3) {
SIMIX_<NAME>(arg1, arg2, arg3);
}
tret SIMIX_<name>(targ1 arg1, targ2 arg2, targ3 arg3) {
Your code in kernel mode
}

# What is How to add a new tag for xml files?

Search for expression "TUTORIAL: New TAG".

    user@caraja:~/workspace/simgrid/src$ cg "TUTORIAL: New TAG"
    0 surf/sg_platf.c                    43 /* TUTORIAL: New TAG*/
    1 surf/sg_platf.c                    89 /* TUTORIAL: New TAG*/
    2 surf/sg_platf.c                   124 /* TUTORIAL: New TAG*/
    3 surf/sg_platf.c                   337 /* TUTORIAL: New TAG*/
    4 surf/surfxml_parse.c              769 /* TUTORIAL: New TAG*/
    5 surf/surf_private.h               205 /* TUTORIAL: New TAG*/
    6 surf/surfxml_parseplatf.c          64 /* TUTORIAL: New TAG*/
    7 surf/surfxml_parseplatf.c          85 /* TUTORIAL: New TAG*/
    8 include/simgrid/platf_interface.h  42 /* TUTORIAL: New TAG*/