X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/92fdb2e950a38e5b3fdf43a07bfa41b5c3f291ec..8bca872ed1a62f660c0d5da333eece9edb1d05a4:/doc/FAQ.doc diff --git a/doc/FAQ.doc b/doc/FAQ.doc index 766cc8366c..aecaa28564 100644 --- a/doc/FAQ.doc +++ b/doc/FAQ.doc @@ -4,7 +4,7 @@ \section faq_simgrid I'm new to SimGrid. I have some questions. Where should I start? -You are at the right place... Having a look to these +You are at the right place... Having a look to these the tutorial slides (or to these old slides, or to these @@ -88,263 +88,7 @@ little more tricky than I would have expected, but the work is moving fast forward [2006/05/13]. More languages are evaluated, but for now, we do not feel a real demand for any other language. Please speak up! -\section faq_installation Installing the SimGrid library - -Many people have been asking me questions on how to use SimGrid. Quite -often, the questions were not really about SimGrid but on the -installation process. This section is intended to help people that are -not familiar with compiling C files under UNIX. If you follow these -instructions and still have some troubles, drop an e-mail to -. - -\subsection faq_compiling Compiling SimGrid from a stable archive - -First of all, you need to download the latest version of SimGrid from -here. -Suppose you have uncompressed SimGrid in some temporary location of -your home directory (say /home/joe/tmp/simgrid-3.0.1 ). The -simplest way to use SimGrid is to install it in your home -directory. Change your directory to -/home/joe/tmp/simgrid-3.0.1 and type - -\verbatim -./configure --prefix=$HOME -make -make install -\endverbatim - -If at some point, something fails, check the section \ref faq_trouble_compil . -If it does not help, you can report this problem to the -list but, please, avoid sending a laconic mail like "There is a problem. Is it -okay?". Send the config.log file which is automatically generated by -configure. Try to capture both the standard output and the error output of the -make command with script. There is no way for us to help you -without the relevant bits of information. - -Now, the following directory should have been created : - - \li /home/joe/doc/simgrid/html/ - \li /home/joe/lib/ - \li /home/joe/include/ - -SimGrid is not a binary, it is a library. Both a static and a dynamic -version are available. Here is what you can find if you try a ls -/home/joe/lib: - -\verbatim libsimgrid.a libsimgrid.la libsimgrid.so libsimgrid.so.0 libsimgrid.so.0.0.1 -\endverbatim - -Thus, there is two ways to link your program with SimGrid: - \li Either you use the static version, e.g -\verbatim gcc libsimgrid.a -o MainProgram MainProgram.c -\endverbatim - In this case, all the SimGrid functions are directly - included in MainProgram (hence a bigger binary). - \li Either you use the dynamic version (the preferred method) -\verbatim gcc -lsimgrid -o MainProgram MainProgram.c -\endverbatim - In this case, the SimGrid functions are not included in - MainProgram and you need to set your environment - variable in such a way that libsimgrid.so will be - found at runtime. This can be done by adding the following - line in your .bashrc (if you use bash and if you have - installed the SimGrid libraries in your home directory): -\verbatim export LD_LIBRARY_PATH=$HOME/lib/:$LD_LIBRARY_PATH -\endverbatim - -\subsection faq_compiling_java Java bindings don't get compiled - -The configure script detects automatically whether you have the -softwares needed to use the Java bindings or not. At the end of the -configure, you can see the configuration picked by the script, which -should look similar to -\verbatim Configuration of package simgrid' (version 3.3.4-svn) on -little64 (=4): - - Compiler: gcc (version: ) - - CFlags: -O3 -finline-functions -funroll-loops -fno-strict-aliasing -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror -g3 - CPPFlags: - LDFlags: - - Context backend: ucontext - Compile Java: no - - Maintainer mode: no - Supernovae mode: yes -\endverbatim - -In this example, Java backends won't be compiled. - -On Debian-like systems (which includes ubuntu), you need the following -packages: sun-java6-jdk libgcj10-dev. If you cannot find the -libgcj10-dev, try another version, like libgcj9-dev (on Ubuntu before -9.10) or libgcj11-dev (not released yet, but certainly one day). -Please note that you need to activate the contrib and non-free -repositories in Debian, and the universe ones in Ubuntu. Java comes at -this price... - -\subsection faq_compiling_snapshoot SimGrid development snapshots - -We have very high standards on software quality, and we are reluctant releasing -a stable release as long as there is still some known bug in the code base. In -addition, we added quite an extensive test base, making sure that we correctly -test the most important parts of the tool. - -As an unfortunate conclusion, there may be some time between the stable -releases. If you want to benefit from the most recent features we introduced, -but don't want to take the risk of an untested version from the SVN, then -development snapshots are done for you. - -These are pre-releases of SimGrid that still fail some tests about features -that almost nobody use, or on platforms not being in our core target (which is -Linux, Mac, other Unixes and Windows, from the most important to the less -one). That means that using this development releases should be safe for most -users. - -These archives can be found on -this web page. Once you -got the lastest archive, you can compile it just like any archive (see above). - -\subsection faq_compiling_svn Compiling SimGrid from the SVN - -The project development takes place in the SVN, where all changes are -committed when they happen. Then every once in a while, we make sure that the -code quality meets our standard and release an archive from the code in the -SVN. We afterward go back to the development in the SVN. So, if you need a -recently added feature and can afford some little problem with the stability -of the lastest features, you may want to use the SVN version instead of a -released one. - -For that, you first need to get the "simgrid" module from -here. - -You won't find any configure and a few other things -(Makefile.in's, documentation, ...) will be missing as well. The -reason for that is that all these files have to be regenerated using the -latest versions of autoconf, libtool, automake -(>1.9) and doxygen (>1.4). To generate the configure and -the Makefile.in's, you just have to launch the bootstrap -command that resides in the top of the source tree. Then just follow the -instructions of Section \ref faq_compiling. - -We insist on the fact that you really need the latest versions of -autoconf, automake and libtool. Doing this step on exotic architectures/systems -(i.e. anything different from a recent linux distribution) may be -... uncertain. If you need to compile the SVN version on a machine where all these -dependencies are not met, the easiest is to do make dist in the SVN -directory of another machine where all dependencies are met. It will create an -archive you may deploy on other sites just as a regular stable release. - -In summary, the following commands will checkout the SVN, regenerate the -configure script and friends, configure SimGrid and build it. - -\verbatim svn checkout svn://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk simgrid -cd simgrid -./bootstrap -./configure --enable-maintainer-mode --prefix= -make \endverbatim - -Then, if you want to install SimGrid on the current box, just do: -\verbatim make install \endverbatim - -If you want to build an snapshot of the SVN to deploy it on another box (for -example because the other machine don't have the autotools), do: -\verbatim make dist \endverbatim - -Moreover, you should never call the autotools manually since you must run -them in a specific order with specific arguments. Most of the times, the -makefiles will automatically call the tools for you. When it's not possible -(such as the first time you checkout the SVN), use the ./bootstrap command -to call them explicitly. - - -\subsection faq_setting_MSG Setting up your own MSG code - -Do not build your simulator by modifying the SimGrid examples. Go -outside the SimGrid source tree and create your own working directory -(say /home/joe/SimGrid/MyFirstScheduler/). - -Suppose your simulation has the following structure (remember it is -just an example to illustrate a possible way to compile everything; -feel free to organize it as you want). - - \li sched.h: a description of the core of the - scheduler (i.e. which functions are can be used by the - agents). For example we could find the following functions - (master, forwarder, slave). - - \li sched.c: a C file including sched.h and - implementing the core of the scheduler. Most of these - functions use the MSG functions defined in section \ref - msg_gos_functions. - - \li masterslave.c: a C file with the main function, i.e. - the MSG initialization (MSG_global_init()), the platform - creation (e.g. with MSG_create_environment()), the - deployment phase (e.g. with MSG_function_register() and - MSG_launch_application()) and the call to - MSG_main()). - -To compile such a program, we suggest to use the following -Makefile. It is a generic Makefile that we have used many times with -our students when we teach the C language. - -\verbatim -all: masterslave -masterslave: masterslave.o sched.o - -INSTALL_PATH = $$HOME -CC = gcc -PEDANTIC_PARANOID_FREAK = -O0 -Wshadow -Wcast-align \ - -Waggregate-return -Wmissing-prototypes -Wmissing-declarations \ - -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \ - -Wmissing-noreturn -Wredundant-decls -Wnested-externs \ - -Wpointer-arith -Wwrite-strings -finline-functions -REASONABLY_CAREFUL_DUDE = -Wall -NO_PRAYER_FOR_THE_WICKED = -w -O2 -WARNINGS = $(REASONABLY_CAREFUL_DUDE) -CFLAGS = -g $(WARNINGS) - -INCLUDES = -I$(INSTALL_PATH)/include -DEFS = -L$(INSTALL_PATH)/lib/ -LDADD = -lm -lsimgrid -LIBS = - -%: %.o - $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS) $(LDADD) -o $@ - -%.o: %.c - $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) -c -o $@ $< - -clean: - rm -f $(BIN_FILES) *.o *~ -.SUFFIXES: -.PHONY : clean - -\endverbatim - -The first two lines indicates what should be build when typing make -(masterslave) and of which files it is to be made of -(masterslave.o and sched.o). This makefile assumes -that you have set up correctly your LD_LIBRARY_PATH variable -(look, there is a LDADD = -lm -lsimgrid). If you prefer using -the static version, remove the -lsimgrid and add a -$(INSTALL_PATH)/lib/libsimgrid.a on the next line, right -after the LIBS = . - -More generally, if you have never written a Makefile by yourself, type -in a terminal : info make and read the introduction. The -previous example should be enough for a first try but you may want to -perform some more complex compilations... - -\subsection faq_setting_GRAS Setting up your own GRAS code - -If you use the GRAS interface instead of the MSG one, then previous section -is not the better source of information. Instead, you should check the GRAS -tutorial in general, and the \ref GRAS_tut_tour_setup in particular. - -\section faq_cmake CMAKE +\section faq_cmake Installing the SimGrid library with Cmake (since V3.4) \subsection faq_intro Some generalitty @@ -354,7 +98,7 @@ CMake is a family of tools designed to build, test and package software. CMake i \subsubsection faq_intro2 Why cmake? -CMake permits to developers to compil projects on different plateform. Then many tools are embedded like ctest for making test, a link to cdash for vizualise results but also test coverage and bug reports. +CMake permits to developers to compil projects on different plateforms. Then many tools are embedded like ctest for making test, a link to cdash for vizualise results but also test coverage and bug reports. \subsubsection faq_intro3 What cmake need? @@ -364,10 +108,26 @@ CMake needs some prerequists like : \li ccmake for graphical used of CMake \li cmake (download page) -\subsubsection faq_intro4 Cmake vs Autotools... - -TODO - +For windows only : + \li Visual C++ 2010 Express (download page) + \li cmake (download page) + \li Set CC, CXX, INCLUDE, LIB and RC to environment variables. +\verbatim +SET --> CC TO --> C:\MicrosoftVisualStudio10\VC\bin\cl + --> CXX --> C:\MicrosoftVisualStudio10\VC\bin\cl + --> INCLUDE --> C:\MicrosoftVisualStudio10\VC\include;C:\Program Files\Microsoft SDKs\Windows\v7.OA\Include + --> LIB --> C:\MicrosoftVisualStudio10\VC\lib;C:\Program Files\Microsoft SDKs\Windows\v7.OA\Lib + --> RC --> C:\Program Files\Microsoft SDKs\Windows\v7.OA\bin\RC +\endverbatim + \li Add to environment variable "Path" the path where to find nmake executable and some needed files. +\verbatim +...... +;C\MicrosoftVisualStudio10\VC\bin +;C\MicrosoftVisualStudio10\Common7\IDE +;C:\Program Files\Microsoft SDKs\Windows\v7.OA\bin +;C:\Program Files\Microsoft SDKs\Windows\v7.OA\Lib +;C:\Program Files\Microsoft SDKs\Windows\v7.OA\bInclude +\endverbatim \subsection faq_cmakeoption Cmake options \subsubsection faq_cmakeoption1 Liste of options @@ -381,12 +141,14 @@ TODO enable_ruby ON/OFF or TRUE/FALSE or 1/0 enable_compile_optimizations ON/OFF or TRUE/FALSE or 1/0 enable_compile_warnings ON/OFF or TRUE/FALSE or 1/0 + enable_smpi ON/OFF or TRUE/FALSE or 1/0 enable_maintainer_mode ON/OFF or TRUE/FALSE or 1/0 enable_supernovae ON/OFF or TRUE/FALSE or 1/0 enable_tracing ON/OFF or TRUE/FALSE or 1/0 enable_coverage ON/OFF or TRUE/FALSE or 1/0 enable_memcheck ON/OFF or TRUE/FALSE or 1/0 - enable_print_message ON/OFF or TRUE/FALSE or 1/0 + enable_model-checking ON/OFF or TRUE/FALSE or 1/0 + enable_doc ON/OFF or TRUE/FALSE or 1/0 gtnets_path prefix @@ -406,44 +168,13 @@ TODO \li enable_compile_optimizations : add flags "-O3 -finline-functions -funroll-loops -fno-strict-aliasing" - \li enable_compile_warnings : add flags "-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror" + \li enable_compile_warnings : add flags "-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror" + + \li enable_smpi : Set to true if you want to use smpi lib. Actually on simgrid v3.4.1 Mac doesn't support lib smpi. + + \li enable_maintainer_mode : set to true it remakes some files. - \li enable_maintainer_mode : set to true it remakes some files. -\verbatim -include/surf/simgrid_dtd.h -include/xbt/graphxml.h - -src/cunit_unit.c -src/ex_unit.c -src/dynar_unit.c -src/dict_unit.c -src/set_unit.c -src/swag_unit.c -src/xbt_str_unit.c -src/xbt_strbuff_unit.c -src/xbt_sha_unit.c -src/config_unit.c -src/xbt_synchro_unit.c -src/simgrid_units_main.c - -src/simdag/dax_dtd.c -src/simdag/dax_dtd.h -src/simdag/dax_dtd.l - -src/surf/simgrid_dtd.c -src/surf/simgrid_dtd.l - -src/xbt/graphxml.c -src/xbt/graphxml.l - -src/gras/DataDesc/ddt_parse.yy.c -\endverbatim \li enable_supernovae : set to true make one file for each lib and compile with those generated files. -\verbatim -/src/supernovae_sg.c -/src/supernovae_gras.c -/src/supernovae_smpi.c -\endverbatim \li enable_tracing : To enable the generation of simulation traces for visualization @@ -451,7 +182,9 @@ src/gras/DataDesc/ddt_parse.yy.c \li enable_memcheck : When set to true this option enable tests for memcheck. - \li enable_print_message : This option when enable permits to see variables from gras_config.h + \li enable_model-checking : Enable the model checking when set to true. + + \li enable_doc : Generate the documentation for simgrid with make command. (You can also make the doc manually with command : make html) \li gtnets_path : Path to gtnets install directory (ex /usr) @@ -463,7 +196,7 @@ src/gras/DataDesc/ddt_parse.yy.c \subsubsection faq_cmakeoption3 Initialisation -Those options are initialized the first time you launch \"cmake ./\" whithout specified option. +Those options are initialized the first time you launch "cmake ." whithout specified option. \verbatim enable_gtnets on @@ -472,12 +205,14 @@ enable_ruby on enable_java off enable_compile_optimizations off enable_compile_warnings off +enable_smpi on enable_maintainer_mode off enable_supernovae off enable_tracing off enable_coverage off enable_memcheck off -enable_print_message off +enable_model-checking off +enable_doc off gtnets_path null prefix null @@ -487,7 +222,7 @@ with_context auto \subsubsection faq_cmakeoption4 Option's cache and how to reset? -When options have been set they are keep into a cache file named \"CMakeCache.txt\". So if you want +When options have been set they are keep into a cache file named "CMakeCache.txt". So if you want reset values you just delete this file located to the project directory. \subsection faq_cmakecompilation Cmake compilation @@ -506,17 +241,41 @@ make \endverbatim Then follow instructions. +\subsubsection faq_cmakecompilation2bis Build out of source. + +As cmake generate many files used for compilation, we recommand to make a build directory. +For examples you can make : + +\verbatim +"navarrop@caraja:~/Developments$ cd simgrid/" +"navarrop@caraja:~/Developments/simgrid$ mkdir build_directory" +"navarrop@caraja:~/Developments/simgrid$ cd build_directory/" +"navarrop@caraja:~/Developments/simgrid/build_directory$ cmake ../" +"navarrop@caraja:~/Developments/simgrid/build_directory$ make" +\endverbatim + +Or complety out of sources : + +\verbatim +"navarrop@caraja:~/Developments$ mkdir build_dir" +"navarrop@caraja:~/Developments$ cd build_dir/" +"navarrop@caraja:~/Developments/build_dir$ cmake ../simgrid/" +"navarrop@caraja:~/Developments/build_dir$ make" +\endverbatim + +Those two kind of compilation permit to delete files created by compilation easier. + \subsubsection faq_cmakecompilation3 Resume of command line \li CMake \verbatim -cmake ./ configure the project +cmake configure the project make build all targets make VERBOSE=1 build all targets and print build command lines -make test test all targets and summarize +make check test all targets and summarize make dist make the distrib -make distcheck check the dist (make + make dist + make test) -make install-simgrid install the project (doc/ lib/ include/) +make distcheck check the dist (make + make dist + make check) +make install install the project (doc/ lib/ include/) make uninstall uninstall the project (doc/ lib/ include/) make clean clean all targets make java-clean clean files created by java option @@ -525,7 +284,6 @@ make supernovae-clean clean supernovae files make maintainer-clean clean maintainer files make all-clean execute the 5 upper clean command make html Create simgrid documentation -make maintainer-clean Remove all files generated by mainainer mode \endverbatim When the project have been succesfully compiling and build you can make tests. @@ -552,142 +310,144 @@ If you want to test before make a commit you can simply make "ctest -D Experimen \li Mode maintainer cmake -Denable_maintainer_mode=on ./ -\verbatim GTnetS doesn't works : set -Ddisable_gtnets=on +\verbatim +-- lookign for config.h with_context auto change to ucontext -(skaddr) -(sksize) -Make : src/simgrid.jar with : /usr/bin/javac -Make examples/java with : /usr/bin/javac +GIT_DATE : 2010-05-04~09-59-15 +GIT_VERSION : 53ec816 +GIT_SVN_VERSION : 7669 -Configuration of package `simgrid' (revision 7228M) on arch (=4): - BUILDNAME : UCONTEXT - SITE : Linux_Ubuntu 9.10_x86_64 +Configuration of package `simgrid' (revision 7669) on arch (=4): + BUILDNAME : UCONTEXT + SITE : Linux_2.6.31-21-generic_x86_64 + Release : simgrid-3.4~rev7669 - Compiler: c++ : /usr/bin/c++ - version: c++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1 - c : /usr/bin/gcc - version: gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1 + Compiler: c++ : /usr/bin/c++ + version: c++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1 + Compiler: c : /usr/bin/gcc + version: gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1 - CFlags: -g3 - CPPFlags: - LDFlags: + CFlags : -I/usr/lib/ruby/1.8/x86_64-linux -I/usr/include/lua5.1 -g3 + CPPFlags: + LDFlags : -L/usr/lib/ Context backend: ucontext - Compile Gtnets: 0 - path: - Compile Java: 1 - Compile Lua: 1 - Compile Ruby: 0 - - Maintainer mode: on - Supernovae mode: off + Compile Gtnets : 0 + Gtnets path : + Compile Java : 0 + Compile Lua : 1 + Compile Ruby : 1 + + Compile Smpi : ON + Maintainer mode: ON + Supernovae mode: OFF + Tracing mode : OFF - Simgrid dependencies: dl -llua5.1 - Gras dependencies: pthread - Ruby dependencies: - Smpi dependencies: + Simgrid dependencies: -lm -lruby1.8 -module -ldl -llua5.1 -lrt + Gras dependencies : -lm -lpthread -lrt + Smpi dependencies : - USER_PREFIX: /usr/local INSTALL_PREFIX: /usr/local -- Configuring done -- Generating done --- Build files have been written to: /home/navarrop/Bureau/simgrid-trunk +-- Build files have been written to: /home/navarrop/Developments/simgrid \endverbatim \li Mode supernovae cmake -Dsupernovae=on ./ -\verbatim GTnetS doesn't works : set -Ddisable_gtnets=on +\verbatim +-- lookign for config.h with_context auto change to ucontext -(skaddr) -(sksize) -Make : src/simgrid.jar with : /usr/bin/javac -Make examples/java with : /usr/bin/javac +GIT_DATE : 2010-05-04~09-59-15 +GIT_VERSION : 53ec816 +GIT_SVN_VERSION : 7669 -Configuration of package `simgrid' (revision 7228M) on arch (=4): - BUILDNAME : SUPERNOVAE - SITE : Linux_Ubuntu 9.10_x86_64 +Configuration of package `simgrid' (revision 7669) on arch (=4): + BUILDNAME : SUPERNOVAE + SITE : Linux_2.6.31-21-generic_x86_64 + Release : simgrid-3.4~rev7669 - Compiler: c++ : /usr/bin/c++ - version: c++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1 - c : /usr/bin/gcc - version: gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1 + Compiler: c++ : /usr/bin/c++ + version: c++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1 + Compiler: c : /usr/bin/gcc + version: gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1 - CFlags: -O3 -finline-functions -funroll-loops -fno-strict-aliasing -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror -g3 - CPPFlags: - LDFlags: + CFlags : -O3 -finline-functions -funroll-loops -fno-strict-aliasing -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror -I/usr/lib/ruby/1.8/x86_64-linux -I/usr/include/lua5.1 -g3 + CPPFlags: + LDFlags : -L/usr/lib/ Context backend: ucontext - Compile Gtnets: 0 - path: - Compile Java: 1 - Compile Lua: 1 - Compile Ruby: 0 + Compile Gtnets : 0 + Gtnets path : + Compile Java : 0 + Compile Lua : 1 + Compile Ruby : 1 - Maintainer mode: off - Supernovae mode: on + Compile Smpi : ON + Maintainer mode: OFF + Supernovae mode: OFF + Tracing mode : OFF - Simgrid dependencies: dl -llua5.1 - Gras dependencies: pthread - Ruby dependencies: - Smpi dependencies: + Simgrid dependencies: -lm -lruby1.8 -module -ldl -llua5.1 -lrt + Gras dependencies : -lm -lpthread -lrt + Smpi dependencies : - USER_PREFIX: /usr/local INSTALL_PREFIX: /usr/local -- Configuring done -- Generating done --- Build files have been written to: /home/navarrop/Bureau/simgrid-trunk +-- Build files have been written to: /home/navarrop/Developments/simgrid + \endverbatim \li Mode GTnetS cmake -Dgtnets_path=/home/navarrop/Bureau/usr/ ./ -\verbatim with_context auto change to ucontext -(skaddr) -(sksize) -Make : src/simgrid.jar with : /usr/bin/javac -Make examples/java with : /usr/bin/javac +\verbatim +-- lookign for config.h +with_context auto change to ucontext +GIT_DATE : 2010-05-04~09-59-15 +GIT_VERSION : 53ec816 +GIT_SVN_VERSION : 7669 -Configuration of package `simgrid' (revision 7228M) on arch (=4): - BUILDNAME : GTNETS - SITE : Linux_Ubuntu 9.10_x86_64 +Configuration of package `simgrid' (revision 7669) on arch (=4): + BUILDNAME : GTNETS + SITE : Linux_2.6.31-21-generic_x86_64 + Release : simgrid-3.4~rev7669 - Compiler: c++ : /usr/bin/c++ - version: c++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1 - c : /usr/bin/gcc - version: gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1 + Compiler: c++ : /usr/bin/c++ + version: c++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1 + Compiler: c : /usr/bin/gcc + version: gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1 - CFlags: -L/home/navarrop/Bureau/usr/lib -I/home/navarrop/Bureau/usr/include/gtnets -g3 - CPPFlags: -L/home/navarrop/Bureau/usr/lib -I/home/navarrop/Bureau/usr/include/gtnets - LDFlags: + CFlags : -O3 -finline-functions -funroll-loops -fno-strict-aliasing -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror -I/usr/lib/ruby/1.8/x86_64-linux -L/usr/lib -I/usr/include/gtnets -I/usr/include/lua5.1 -g3 + CPPFlags: -L/usr/lib -I/usr/include/gtnets + LDFlags : -L/usr/lib/ Context backend: ucontext - Compile Gtnets: 1 - path: /home/navarrop/Bureau/usr - Compile Java: 1 - Compile Lua: 1 - Compile Ruby: 0 + Compile Gtnets : 1 + Gtnets path : /usr + Compile Java : 0 + Compile Lua : 1 + Compile Ruby : 1 - Maintainer mode: off - Supernovae mode: off + Compile Smpi : ON + Maintainer mode: OFF + Supernovae mode: OFF + Tracing mode : OFF - Simgrid dependencies: dl -llua5.1 -lgtnets - Gras dependencies: pthread - Ruby dependencies: - Smpi dependencies: + Simgrid dependencies: -lm -lruby1.8 -module -ldl -llua5.1 -lgtnets -lrt + Gras dependencies : -lm -lpthread -lrt + Smpi dependencies : - USER_PREFIX: /usr/local INSTALL_PREFIX: /usr/local -INFO -->> Take care to have export LD_LIBRARY_PATH before run make command for make examples with gtnets -copy and paste : export LD_LIBRARY_PATH=/home/navarrop/Bureau/usr/lib/:$LD_LIBRARY_PATH - - -- Configuring done -- Generating done --- Build files have been written to: /home/navarrop/Bureau/simgrid-trunk +-- Build files have been written to: /home/navarrop/Developments/simgrid + \endverbatim \subsection faq_cmakeinstall How to install with cmake? @@ -697,7 +457,7 @@ copy and paste : export LD_LIBRARY_PATH=/home/navarrop/Bureau/usr/lib/:$LD_LIBRA \verbatim cmake -Denable_maintainer_mode=on -Dprefix=/home/navarrop/Bureau/install_simgrid ./ make -make install-simgrid +make install \endverbatim \subsubsection faq_cmakeinstall2 From a distrib @@ -705,59 +465,8 @@ make install-simgrid \verbatim cmake -Dprefix=/home/navarrop/Bureau/install_simgrid ./ make -make install-simgrid -\endverbatim - -\subsection faq_screenshot Screenshot - -\verbatim -navarrop@caraja:~$ cd Bureau/simgrid-trunk/ -navarrop@caraja:~/Bureau/simgrid-trunk$ cmake ./ - -GTnetS doesn't works : set -Ddisable_gtnets=on <-|some warnings are printed -with_context auto change to ucontext <-| -(skaddr) <--info (needed) -(sksize) <--info (needed) -Make : src/simgrid.jar with : /usr/bin/javac <--info (if java) -Make examples/java with : /usr/bin/javac <--info (if java) - -Configuration of package `simgrid' (revision 7209M) on arch (=4): - BUILDNAME : UCONTEXT <-- name of the compilation regarding to cdash - SITE : Linux_Ubuntu 9.10_x86_64 <-- distribution of the local machine regarding to cdash - - Compiler: c++ : /usr/bin/c++ - version: c++ (Ubuntu 4.4.1-4ubuntu9) 4.4.1 - c : /usr/bin/gcc - version: gcc (Ubuntu 4.4.1-4ubuntu9) 4.4.1 - - CFlags: -g3 - CPPFlags: - LDFlags: - - Context backend: ucontext - Compile Gtnets: 0 - path: - Compile Java: 1 - Compile Lua: 1 - Compile Ruby: 0 - - Maintainer mode: OFF - Supernovae mode: OFF - - Simgrid dependencies: -ldl -llua5.1 - Gras dependencies: pthread - Ruby dependencies: - Smpi dependencies: - - USER_PREFIX: /usr/local - INSTALL_PREFIX: /usr/local - --- Configuring done --- Generating done --- Build files have been written to: /home/navarrop/Bureau/simgrid-trunk +make install \endverbatim -Here all options are checked and printed. If it doesn't match with your configuration -it is probably due to a wrong configuration. \subsection faq_cmakehowto How to modified sources files for developers @@ -778,7 +487,7 @@ add_executable(get_sender get_sender.c) #add_executable( ) \endverbatim -Then you have to modified /buildtools/Cmake/src/CMakeMakeExeLib.txt and add +Then you have to modified /buildtools/Cmake/MakeExeLib.cmake and add this line : \verbatim add_subdirectory(${PROJECT_DIRECTORY}/) @@ -786,7 +495,7 @@ add_subdirectory(${PROJECT_DIRECTORY}/) \subsubsection faq_cmakehowto2 Delete/add sources to lib. -If you want modified, add or delete source files from a library you have to edit /buildtools/Cmake/src/CMakeDefinePackages.txt +If you want modified, add or delete source files from a library you have to edit /buildtools/Cmake/DefinePackages.cmake \verbatim set(JMSG_JAVA_SRC @@ -807,154 +516,395 @@ set(JMSG_JAVA_SRC \subsubsection faq_cmakehowto3 Add test -If you want modified, add or delete tests you have to edit /buildtools/Cmake/src/CMakeTest.txt +If you want modified, add or delete tests you have to edit /buildtools/Cmake/AddTests.cmake with this function : ADD_TEST( ) \verbatim add_test(test-simdag-1 ${PROJECT_DIRECTORY}/testsuite/simdag/sd_test --cfg=path:${PROJECT_DIRECTORY}/testsuite/simdag small_platform_variable.xml) \endverbatim -\subsection faq_cmakeExplain Explaination of sources files for cmake +\subsection faq_cmakeExplain Explaination of sources files for cmake + +\li CMakeLists.txt + +Those files are the "main parts". One located at the project directory call all the cmake sources files. The others +are little projects called by the first for make examples. + +\li CompleteInFiles.cmake + +Complete all .in files and define Variables for h files + +\li GenerateDoc.cmake + +This file make the html documentation. + +\li MakeExeLib.cmake + +Here are callled all "CMakeLists.txt" for make executables and libraries. + +\li PrintArgs.cmake + +This file is called at the end of the build for summarize environment variables. + +\li DefinePackages.cmake + +Here is defined sources packages for compiling libs. + +\li Flags.cmake + +Defined flags which are used for compiling sources. + +\li Supernovae.cmake + +Here are made files for the supernovae mode. + +\li Distrib.cmake + +Here is defined packages for install simgrid and make a distribution. + +\li MaintainerMode.cmake + +Part where are generated source files for maintainer mode. + +\li Option.cmake + +Here are defined options and initialized values. + +\li AddTests.cmake + +All tests are listed. + +\li CTestConfig.cmake + +Properties which link tests with dashboard. + +\subsection faq_cmakeList List of files added for cmake + +Here is a list of files involved into cmake build (relative to project directory path) : +\verbatim + +Cmake sources: + ./doc/CMakeLists.txt + ./buildtools/Cmake/AddTests.cmake + ./buildtools/Cmake/CompleteInFiles.cmake + ./buildtools/Cmake/CTestConfig.cmake + ./buildtools/Cmake/DefinePackages.cmake + ./buildtools/Cmake/Distrib.cmake + ./buildtools/Cmake/Flags.cmake + ./buildtools/Cmake/GenerateDocs.cmake + ./buildtools/Cmake/MaintainerMode.cmake + ./buildtools/Cmake/MakeExeLib.cmake + ./buildtools/Cmake/MakeExeLibWin.cmake + ./buildtools/Cmake/MakeJava.cmake + ./buildtools/Cmake/Option.cmake + ./buildtools/Cmake/PrintArgs.cmake + ./buildtools/Cmake/Supernovae.cmake + +CMakeLists for each binaries or examples: + ./CMakeLists.txt + ./src/CMakeLists.txt + ./teshsuite/gras/empty_main/CMakeLists.txt + ./teshsuite/gras/small_sleep/CMakeLists.txt + ./teshsuite/gras/datadesc/CMakeLists.txt + ./teshsuite/gras/msg_handle/CMakeLists.txt + ./teshsuite/simdag/CMakeLists.txt + ./teshsuite/simdag/partask/CMakeLists.txt + ./teshsuite/simdag/platforms/CMakeLists.txt + ./teshsuite/simdag/network/CMakeLists.txt + ./teshsuite/simdag/network/mxn/CMakeLists.txt + ./teshsuite/simdag/network/p2p/CMakeLists.txt + ./teshsuite/xbt/CMakeLists.txt + ./teshsuite/msg/CMakeLists.txt + ./tools/gras/CMakeLists.txt + ./tools/tesh/CMakeLists.txt + ./testsuite/simdag/CMakeLists.txt + ./testsuite/xbt/CMakeLists.txt + ./testsuite/surf/CMakeLists.txt + ./examples/gras/properties/CMakeLists.txt + ./examples/gras/ping/CMakeLists.txt + ./examples/gras/pmm/CMakeLists.txt + ./examples/gras/mmrpc/CMakeLists.txt + ./examples/gras/synchro/CMakeLists.txt + ./examples/gras/timer/CMakeLists.txt + ./examples/gras/mutual_exclusion/simple_token/CMakeLists.txt + ./examples/gras/spawn/CMakeLists.txt + ./examples/gras/chrono/CMakeLists.txt + ./examples/gras/rpc/CMakeLists.txt + ./examples/gras/all2all/CMakeLists.txt + ./examples/simdag/properties/CMakeLists.txt + ./examples/simdag/CMakeLists.txt + ./examples/simdag/metaxml/CMakeLists.txt + ./examples/simdag/dax/CMakeLists.txt + ./examples/smpi/CMakeLists.txt + ./examples/amok/bandwidth/CMakeLists.txt + ./examples/amok/saturate/CMakeLists.txt + ./examples/msg/priority/CMakeLists.txt + ./examples/msg/properties/CMakeLists.txt + ./examples/msg/migration/CMakeLists.txt + ./examples/msg/gtnets/CMakeLists.txt + ./examples/msg/parallel_task/CMakeLists.txt + ./examples/msg/trace/CMakeLists.txt + ./examples/msg/suspend/CMakeLists.txt + ./examples/msg/masterslave/CMakeLists.txt + ./examples/msg/actions/CMakeLists.txt + ./examples/msg/sendrecv/CMakeLists.txt +\endverbatim + +\section faq_installation Installing the SimGrid library with Autotools (valid until V3.3.4) + +Many people have been asking me questions on how to use SimGrid. Quite +often, the questions were not really about SimGrid but on the +installation process. This section is intended to help people that are +not familiar with compiling C files under UNIX. If you follow these +instructions and still have some troubles, drop an e-mail to +. + +\subsection faq_compiling Compiling SimGrid from a stable archive + +First of all, you need to download the latest version of SimGrid from +here. +Suppose you have uncompressed SimGrid in some temporary location of +your home directory (say /home/joe/tmp/simgrid-3.0.1 ). The +simplest way to use SimGrid is to install it in your home +directory. Change your directory to +/home/joe/tmp/simgrid-3.0.1 and type + +\verbatim +./configure --prefix=$HOME +make +make install +\endverbatim + +If at some point, something fails, check the section \ref faq_trouble_compil . +If it does not help, you can report this problem to the +list but, please, avoid sending a laconic mail like "There is a problem. Is it +okay?". Send the config.log file which is automatically generated by +configure. Try to capture both the standard output and the error output of the +make command with script. There is no way for us to help you +without the relevant bits of information. + +Now, the following directory should have been created : + + \li /home/joe/doc/simgrid/html/ + \li /home/joe/lib/ + \li /home/joe/include/ + +SimGrid is not a binary, it is a library. Both a static and a dynamic +version are available. Here is what you can find if you try a ls +/home/joe/lib: + +\verbatim libsimgrid.a libsimgrid.la libsimgrid.so libsimgrid.so.0 libsimgrid.so.0.0.1 +\endverbatim + +Thus, there is two ways to link your program with SimGrid: + \li Either you use the static version, e.g +\verbatim gcc libsimgrid.a -o MainProgram MainProgram.c +\endverbatim + In this case, all the SimGrid functions are directly + included in MainProgram (hence a bigger binary). + \li Either you use the dynamic version (the preferred method) +\verbatim gcc -lsimgrid -o MainProgram MainProgram.c +\endverbatim + In this case, the SimGrid functions are not included in + MainProgram and you need to set your environment + variable in such a way that libsimgrid.so will be + found at runtime. This can be done by adding the following + line in your .bashrc (if you use bash and if you have + installed the SimGrid libraries in your home directory): +\verbatim export LD_LIBRARY_PATH=$HOME/lib/:$LD_LIBRARY_PATH +\endverbatim + +\subsection faq_compiling_java Java bindings don't get compiled + +The configure script detects automatically whether you have the +softwares needed to use the Java bindings or not. At the end of the +configure, you can see the configuration picked by the script, which +should look similar to +\verbatim Configuration of package simgrid' (version 3.3.4-svn) on +little64 (=4): + + Compiler: gcc (version: ) + + CFlags: -O3 -finline-functions -funroll-loops -fno-strict-aliasing -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror -g3 + CPPFlags: + LDFlags: + + Context backend: ucontext + Compile Java: no + + Maintainer mode: no + Supernovae mode: yes +\endverbatim + +In this example, Java backends won't be compiled. + +On Debian-like systems (which includes ubuntu), you need the following +packages: sun-java6-jdk libgcj10-dev. If you cannot find the +libgcj10-dev, try another version, like libgcj9-dev (on Ubuntu before +9.10) or libgcj11-dev (not released yet, but certainly one day). +Please note that you need to activate the contrib and non-free +repositories in Debian, and the universe ones in Ubuntu. Java comes at +this price... + +\subsection faq_compiling_snapshoot SimGrid development snapshots + +We have very high standards on software quality, and we are reluctant releasing +a stable release as long as there is still some known bug in the code base. In +addition, we added quite an extensive test base, making sure that we correctly +test the most important parts of the tool. + +As an unfortunate conclusion, there may be some time between the stable +releases. If you want to benefit from the most recent features we introduced, +but don't want to take the risk of an untested version from the SVN, then +development snapshots are done for you. + +These are pre-releases of SimGrid that still fail some tests about features +that almost nobody use, or on platforms not being in our core target (which is +Linux, Mac, other Unixes and Windows, from the most important to the less +one). That means that using this development releases should be safe for most +users. -\li CMakeLists.txt +These archives can be found on +this web page. Once you +got the lastest archive, you can compile it just like any archive (see above). -Those files are the "main parts". One located at the project directory call all the cmake sources files. The others -are little projects called by the first for make examples. +\subsection faq_compiling_svn Compiling SimGrid from the SVN -\li CMakeCompleteInFiles.txt +The project development takes place in the SVN, where all changes are +committed when they happen. Then every once in a while, we make sure that the +code quality meets our standard and release an archive from the code in the +SVN. We afterward go back to the development in the SVN. So, if you need a +recently added feature and can afford some little problem with the stability +of the lastest features, you may want to use the SVN version instead of a +released one. -Complete all .in files and define Variables for h files +For that, you first need to get the "simgrid" module from +here. -\li CMakeDocs.txt +You won't find any configure and a few other things +(Makefile.in's, documentation, ...) will be missing as well. The +reason for that is that all these files have to be regenerated using the +latest versions of autoconf, libtool, automake +(>1.9) and doxygen (>1.4). To generate the configure and +the Makefile.in's, you just have to launch the bootstrap +command that resides in the top of the source tree. Then just follow the +instructions of Section \ref faq_compiling. -This file make the html documentation. +We insist on the fact that you really need the latest versions of +autoconf, automake and libtool. Doing this step on exotic architectures/systems +(i.e. anything different from a recent linux distribution) may be +... uncertain. If you need to compile the SVN version on a machine where all these +dependencies are not met, the easiest is to do make dist in the SVN +directory of another machine where all dependencies are met. It will create an +archive you may deploy on other sites just as a regular stable release. -\li CMakeMakeExeLib.txt +In summary, the following commands will checkout the SVN, regenerate the +configure script and friends, configure SimGrid and build it. -Here are callled all "CMakeLists.txt" for make executables and libraries. +\verbatim svn checkout svn://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk simgrid +cd simgrid +./bootstrap +./configure --enable-maintainer-mode --prefix= +make \endverbatim -\li CMakePrintArgs.txt +Then, if you want to install SimGrid on the current box, just do: +\verbatim make install \endverbatim -This file is called at the end of the build for summarize environment variables. +If you want to build an snapshot of the SVN to deploy it on another box (for +example because the other machine don't have the autotools), do: +\verbatim make dist \endverbatim -\li CMakeDefinePackages.txt +Moreover, you should never call the autotools manually since you must run +them in a specific order with specific arguments. Most of the times, the +makefiles will automatically call the tools for you. When it's not possible +(such as the first time you checkout the SVN), use the ./bootstrap command +to call them explicitly. -Here is defined sources packages for compiling libs. -\li CMakeFlags.txt +\subsection faq_setting_MSG Setting up your own MSG code -Defined flags which are used for compiling sources. +Do not build your simulator by modifying the SimGrid examples. Go +outside the SimGrid source tree and create your own working directory +(say /home/joe/SimGrid/MyFirstScheduler/). -\li CMakeSupernovae.txt +Suppose your simulation has the following structure (remember it is +just an example to illustrate a possible way to compile everything; +feel free to organize it as you want). -Here are made files for the supernovae mode. + \li sched.h: a description of the core of the + scheduler (i.e. which functions are can be used by the + agents). For example we could find the following functions + (master, forwarder, slave). -\li CMakeDistrib.txt + \li sched.c: a C file including sched.h and + implementing the core of the scheduler. Most of these + functions use the MSG functions defined in section \ref + msg_gos_functions. -Here is defined packages for install simgrid and make a distribution. + \li masterslave.c: a C file with the main function, i.e. + the MSG initialization (MSG_global_init()), the platform + creation (e.g. with MSG_create_environment()), the + deployment phase (e.g. with MSG_function_register() and + MSG_launch_application()) and the call to + MSG_main()). -\li CMakeMaintainerMode.txt +To compile such a program, we suggest to use the following +Makefile. It is a generic Makefile that we have used many times with +our students when we teach the C language. -Part where are generated source files for maintainer mode. +\verbatim +all: masterslave +masterslave: masterslave.o sched.o -\li CMakeOption.txt +INSTALL_PATH = $$HOME +CC = gcc +PEDANTIC_PARANOID_FREAK = -O0 -Wshadow -Wcast-align \ + -Waggregate-return -Wmissing-prototypes -Wmissing-declarations \ + -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \ + -Wmissing-noreturn -Wredundant-decls -Wnested-externs \ + -Wpointer-arith -Wwrite-strings -finline-functions +REASONABLY_CAREFUL_DUDE = -Wall +NO_PRAYER_FOR_THE_WICKED = -w -O2 +WARNINGS = $(REASONABLY_CAREFUL_DUDE) +CFLAGS = -g $(WARNINGS) -Here are defined options and initialized values. +INCLUDES = -I$(INSTALL_PATH)/include +DEFS = -L$(INSTALL_PATH)/lib/ +LDADD = -lm -lsimgrid +LIBS = -\li CMakeTest.txt +%: %.o + $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS) $(LDADD) -o $@ -All tests are listed. +%.o: %.c + $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) -c -o $@ $< -\li CTestConfig.cmake +clean: + rm -f $(BIN_FILES) *.o *~ +.SUFFIXES: +.PHONY : clean -Properties which link tests with dashboard. +\endverbatim -\subsection faq_cmakeList List of files added for cmake +The first two lines indicates what should be build when typing make +(masterslave) and of which files it is to be made of +(masterslave.o and sched.o). This makefile assumes +that you have set up correctly your LD_LIBRARY_PATH variable +(look, there is a LDADD = -lm -lsimgrid). If you prefer using +the static version, remove the -lsimgrid and add a +$(INSTALL_PATH)/lib/libsimgrid.a on the next line, right +after the LIBS = . -Here is a list of files involved into cmake build (relative to project directory path) : -\verbatim +More generally, if you have never written a Makefile by yourself, type +in a terminal : info make and read the introduction. The +previous example should be enough for a first try but you may want to +perform some more complex compilations... -Cmake sources: - ./doc/CMakeLists.txt - ./buildtools/Cmake/src/CMakeCompleteInFiles.txt - ./buildtools/Cmake/src/CMakeDocs.txt - ./buildtools/Cmake/src/CMakeMakeExeLib.txt - ./buildtools/Cmake/src/CMakePrintArgs.txt - ./buildtools/Cmake/src/CMakeDefinePackages.txt - ./buildtools/Cmake/src/CMakeFlags.txt - ./buildtools/Cmake/src/CMakeSupernovae.txt - ./buildtools/Cmake/src/CMakeDistrib.txt - ./buildtools/Cmake/src/CMakeMaintainerMode.txt - ./buildtools/Cmake/src/CMakeOption.txt - ./buildtools/Cmake/src/CMakeTest.txt - ./buildtools/Cmake/src/CTestConfig.cmake - -Test files for define properties : - ./buildtools/Cmake/prog_test/prog_GRAS_ARCH.c - ./buildtools/Cmake/prog_test/prog_max_size.c - ./buildtools/Cmake/prog_test/prog_sem_init.c - ./buildtools/Cmake/prog_test/prog_stackgrowth.c - ./buildtools/Cmake/prog_test/prog_vsnprintf.c - ./buildtools/Cmake/prog_test/prog_AC_CHECK_MCSC.c - ./buildtools/Cmake/prog_test/prog_GRAS_CHECK_STRUCT_COMPACTION.c - ./buildtools/Cmake/prog_test/prog_mutex_timedlock.c - ./buildtools/Cmake/prog_test/prog_sem_timedwait.c - ./buildtools/Cmake/prog_test/prog_stacksetup.c - ./buildtools/Cmake/prog_test/prog_getline.c - ./buildtools/Cmake/prog_test/prog_gtnets.cpp - ./buildtools/Cmake/prog_test/prog_printf_null.c - ./buildtools/Cmake/prog_test/prog_snprintf.c - ./buildtools/Cmake/prog_test/prog_va_copy.c +\subsection faq_setting_GRAS Setting up your own GRAS code -CMakeLists for each binaries or examples: - ./CMakeLists.txt - ./src/CMakeLists.txt - ./teshsuite/gras/empty_main/CMakeLists.txt - ./teshsuite/gras/small_sleep/CMakeLists.txt - ./teshsuite/gras/datadesc/CMakeLists.txt - ./teshsuite/gras/msg_handle/CMakeLists.txt - ./teshsuite/simdag/CMakeLists.txt - ./teshsuite/simdag/partask/CMakeLists.txt - ./teshsuite/simdag/platforms/CMakeLists.txt - ./teshsuite/simdag/network/CMakeLists.txt - ./teshsuite/simdag/network/mxn/CMakeLists.txt - ./teshsuite/simdag/network/p2p/CMakeLists.txt - ./teshsuite/xbt/CMakeLists.txt - ./teshsuite/msg/CMakeLists.txt - ./tools/gras/CMakeLists.txt - ./tools/tesh/CMakeLists.txt - ./testsuite/simdag/CMakeLists.txt - ./testsuite/xbt/CMakeLists.txt - ./testsuite/surf/CMakeLists.txt - ./examples/gras/properties/CMakeLists.txt - ./examples/gras/ping/CMakeLists.txt - ./examples/gras/pmm/CMakeLists.txt - ./examples/gras/mmrpc/CMakeLists.txt - ./examples/gras/synchro/CMakeLists.txt - ./examples/gras/timer/CMakeLists.txt - ./examples/gras/mutual_exclusion/simple_token/CMakeLists.txt - ./examples/gras/spawn/CMakeLists.txt - ./examples/gras/chrono/CMakeLists.txt - ./examples/gras/rpc/CMakeLists.txt - ./examples/gras/all2all/CMakeLists.txt - ./examples/simdag/properties/CMakeLists.txt - ./examples/simdag/CMakeLists.txt - ./examples/simdag/metaxml/CMakeLists.txt - ./examples/simdag/dax/CMakeLists.txt - ./examples/smpi/CMakeLists.txt - ./examples/amok/bandwidth/CMakeLists.txt - ./examples/amok/saturate/CMakeLists.txt - ./examples/msg/priority/CMakeLists.txt - ./examples/msg/properties/CMakeLists.txt - ./examples/msg/migration/CMakeLists.txt - ./examples/msg/gtnets/CMakeLists.txt - ./examples/msg/parallel_task/CMakeLists.txt - ./examples/msg/trace/CMakeLists.txt - ./examples/msg/suspend/CMakeLists.txt - ./examples/msg/masterslave/CMakeLists.txt - ./examples/msg/actions/CMakeLists.txt - ./examples/msg/sendrecv/CMakeLists.txt -\endverbatim +If you use the GRAS interface instead of the MSG one, then previous section +is not the better source of information. Instead, you should check the GRAS +tutorial in general, and the \ref GRAS_tut_tour_setup in particular. \section faq_howto Feature related questions @@ -2117,6 +2067,242 @@ $ defaults write Triva 'bcompute Color' '1 0 0' \endverbatim Where the three numbers in each line are the RGB color with values from 0 to 1. +\subsection faq_modelchecking Model-Checking +\subsubsection faq_modelchecking_howto How to use it +To enable the experimental SimGrid model-checking support the program should +be executed with the command line argument +\verbatim +--cfg=model-check:1 +\endverbatim +Properties are expressed as assertions using the function +\verbatim +void MC_assert(int prop); +\endverbatim + +\subsection faq_binding_lua Lua Binding +Most of Simgrid modules require a good level in C programming , + since simgrid is used to be as standard C library . + Sometime ( for some reason or another ) developers prefer using some kind of « easy scripts » + (something like … lua ? Ruby ? ...?) or a language easier to code with ( Java ? ) for their works, + which avoid dealing with C errors , and sometime an important gain of time (coding-time?) . +Besides Java Binding, Lua and Ruby bindings are available now( since version 3.4 of Simgrid ) +for MSG Module, and we are currenlty working on bindings for other modules . + + +\subsubsection faq_binding_lua_about What is lua ? +Lua (Moon for portuguese !) is a lightweight, reflective, imperative and functional programming language, + designed as a scripting language with extensible semantics as a primary goal.(see official web site here) +\subsubsection faq_binding_lua_why Why lua ? +Lua is a fast,portable and powerful script language, quite simple to use for developpers . +it combines procedural features with powerful data description facilities, + by using a simple, yet powerful, mechanism of tables. +Lua has a relatively simple C API compared to other scripting languages, +and accordingly it provides a robust, easy to use it. +\subsubsection faq_binding_lua_simgrid How to use lua in Simgrid ? +Actually , the use of lua in Simgrid is quite simple, you have just to follow the same steps as coding with C in Simgird, + but this time, code with Lua ;) : + - Coding functions coresponding to each process + - loading the platforme/deployment XML file that describe the environment of simulation + - and … Running the Simulation !!! + +\dontinclude lua/master_slave.lua +\subsubsection faq_binding_lua_example_master_slave Master/Slave Example + + \li Master Code + \until end_of_master +we mainly use simgrid.Task.new(task_name,computation_size,communication_size) to create our MSG Task, + then simgrid.Task.send(task,alias) to send it. +we use also simgrid.Task.name(task), to get the task's name . + +\li Slave Code +\until end_of_slave +Here, we could see how we use simgrid.Task.recv(alias) to receive a task with a specific alias, +this function return directly the task recevied . + +\li Set Environmenet and run application +\until simgrid.clean() + +\subsubsection faq_binding_lua_example_data Exchanging Data +You can also exchange data between Process using lua. for that, you have to deal with lua task as a table, +since lua is based itself on a mechanism of tables, +so you can exchange any kind of data ( tables, matrix, strings … ) between process via tasks. + +\li Sender process +\verbatim + task = simgrid.Task.new("data_task",task_comp,task_comm); + task['matrix'] = my_matrix; + task['table'] = my_table; + task['message'] = "Hello from (Lua || Simgrid ) !! " + … + simgrid.Task.send(task,alias) +\endverbatim + After creating task, we associate to it various kind of data with a specific key,( string in this case) + to distinguish between data variables. Via this key the receiver could access easily to datas. + + +\li Receiver processe +\verbatim + task = simgrid.Task.recv(alias); + sender_matrix = task['matrix']; + sender_table = task['table']; + sender_message = task['message'] + ... +\endverbatim + Note that in lua, both sender and receiver share the same lua task! + So that the receiver could joint data directly on the received task without sending it back. + You can find a complet example ( matrix multiplication case ) in the file example/lua/mult_matrix.lua + + +\subsubsection faq_binding_lua_example_bypass Bypass XML + maybe you wonder if there is a way to bypass the XML files, + and describe your platform directly from the code, with lua bindings it's Possible !! how ? + We provide some additional (tricky?) functions in lua that allows you to set up your own platform without using the XML files + ( this can be useful for large platforms, so a simple for loop will avoid you to deal with an annoying XML File ;) ) + + +\li set Hosts +\verbatim + simgrid.Host.new("Tremblay",98095000); + simgrid.Host.new("Jupiter",76296000); + simgrid.Host.new("Fafard",76296000); + simgrid.Host.new("Ginette",48492000); + simgrid.Host.new("Bourassa",48492000); +\endverbatim + we use simgrid.Host.new(host_id,power) to instanciate our hosts. + +\li set Links +\verbatim + for i=0,11 do + simgrid.Link.new(i,252750+ i*768,0.000270544+i*0.087); -- some crazy values ;) + end +\endverbatim + we used simgrid.Link.new(link_id,bandwidth,latency) with a simple for loop to create all links we need ( much easier than XML hein ? ) + +\li set Routes +\verbatim +-- simgrid.Route.new(src_id,des_id,links_nb,links_list) + simgrid.Route.new("Tremblay","Jupiter",1,{"1"}); + simgrid.Route.new("Tremblay","Fafard",6,{"0","1","2","3","4","8"}); + simgrid.Route.new("Tremblay","Ginette",3,{"3","4","5"}); + simgrid.Route.new("Tremblay","Bourassa",7,{"0","1","3","2","4","6","7"}); + + simgrid.Route.new("Jupiter","Tremblay",1,{"1"}); + simgrid.Route.new("Jupiter","Fafard",7,{"0","1","2","3","4","8","9"}); + simgrid.Route.new("Jupiter","Ginette",4,{"3","4","5","9"}); + simgrid.Route.new("Jupiter","Bourassa",8,{"0","1","2","3","4","6","7","9"}); + ... +\endverbatim + for each host you have to specify which route to choose to access to the rest of hosts connected in the grid. + +\li Save platform +\verbatim + simgrid.register_platform(); +\endverbatim +Don't forget to register your platform, that SURF callbacks starts their work ;) + +\li set application +\verbatim + simgrid.Host.setFunction("Tremblay","Master",4,{"20","550000000","1000000","4"}); + simgrid.Host.setFunction("Bourassa","Slave",1,{"0"}); + simgrid.Host.setFunction("Jupiter","Slave",1,{"1"}); + simgrid.Host.setFunction("Fafard","Slave",1,{"2"}); + simgrid.Host.setFunction("Ginette","Slave",1,{"3"}); +\endverbatim + you don't need to use a deployment XML file, thanks to simgrid.Host.setFunction(host_id,function,args_number,args_list) + you can associate functions for each host with arguments if needed . + +\li +\verbatim + simgrid.register_application(); +\endverbatim +Yes, Here too you have to resgiter your application before running the simulation. + +the full example is distributed in the file examples/lua/master_slave_bypass.lua + +\subsection faq_binding_ruby Ruby Binding + + +\subsubsection faq_binding_ruby_simgrid Use Ruby in Simgrid +Since v3.4, the use of ruby in simgrid is available for the MSG Module. +you can find almost all MSG functionalities in Ruby code, that allows you to set up your environment, manage tasks between hosts and run the simulation. + +\dontinclude ruby/MasterSlave.rb +\subsubsection faq_binding_ruby_example Master/Slave Ruby Application +for each process method(master and slave in this example), you have to associate a ruby class, that should inherit from MSG::Process ruby class, + with a 'main' function that describe the behaviour of the process during the simulation. +\li required stuff +\verbatim +require 'simgrid' +include MSG +\endverbatim + +\li Master code +\until end_of_master + +the class MSG::Task contains methods that allows the management of the native MSG tasks. +in master ruby code we used : + - MSG::Task.new(task_name,compute_size,communication_size) : to instanciate a new task. + - MSG::Task.send(mailbox) : to send the task via a mailbox alias. + - MSG::Task.name : to get the task's name. + +\li Slave code +\until end_of_slave +to receive a task, we use the method MSG::Task.receive(mailbox) that return a MSG:Task object (received task). + +\li Main chunk +\until MSG.exit + +- MSG.createEnvironment(platform_file) : set up the environment +- MSG.deployApplication(deployment_file) : load the deployment file description. +- MSG.run : run the simulation + +\subsubsection faq_binding_ruby_data Exchanging data +ruby bindings provides two ways to exchange data between ruby processes. +\li MSG::Task.join & MSG::Task.data \br + + the MSG::Task class contains 2 methods that allows a data exchange between 2 process. + + -MSG::Task.join : makes possible to join any kind of ruby data within a task. + \verbatim + ... + myTable = Array.new + myTable <<1<<-2<<45<<67<<87<<76<<89<<56<<78<<3<<-4<<99 + # Creates and send Task With the Table inside + task = MSG::Task.new("quicksort_task",taskComputeSize, taskCommunicationSize); + task.join(myTable); + ... + task.send(mailbox); + \endverbatim + -MSG::Task.data : to access to the data contained into the task. + \verbatim + ... + task = MSG::Task.receive(recv_mailbox.to_s) + table = task.data + quicksort(table,0,table.size-1) + ... + \endverbatim +you can find a complet example illustrating the use of those methods in file /example/ruby/Quicksort.rb + +\li inheritence + + another 'object-oriented' way to do it, is to make your own 'task' class that inherit from MSG::Task , + and contains data you want to deal with, the only 'tricky' thing is that "the initializer" method has no effect ! + + the use of some getter/setter methods would be the simple way to manage your data :) + \verbatim +class PingPongTask < MSG::Task + # The initialize method has no effect + @time + def setTime(t) + @time = t + end + def getTime() + return @time + end +end + \endverbatim + you can find an example of use in file example/ruby/PingPong.rb + \section faq_troubleshooting Troubleshooting \subsection faq_trouble_lib_compil SimGrid compilation and installation problems