SimGrid  3.9.90
Versatile Simulation of Distributed Systems
 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?

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*/