Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Finish SimDag documentation
[simgrid.git] / doc / FAQ.doc
index d43f500..d438057 100644 (file)
@@ -11,8 +11,10 @@ not familiar with compiling C files under UNIX. If you follow these
 instructions and still have some troubles, drop an e-mail to
 <simgrid-user@lists.gforge.inria.fr>.
 
-\subsection faq_compiling Compiling SimGrid
+\subsection faq_compiling Compiling SimGrid from an archive
 
+First of all, you need to download the latest version of SimGrid from 
+<a href="http://gforge.inria.fr/frs/?group_id=12">here</a>.
 Suppose you have uncompressed SimGrid in some temporary location of
 your home directory (say <tt>/home/joe/tmp/simgrid-3.0.1 </tt>). The
 simplest way to use SimGrid is to install it in your home
@@ -24,12 +26,13 @@ make
 make install
 \endverbatim
 
-If at some point, something fails, you can report me this problem but,
-please, avoid sending a laconic mail like "There is a problem. Is it
-normal?". Send me the config.log file which is automatically
-generated by configure. Try to capture both the standard output and
-the error output of the <tt>make</tt> command. There is no way for me
-to help you if you do not give me a little bit of information.
+If at some point, something fails, check the section "\ref
+faq_compil_trouble". 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
+<tt>make</tt> command with <tt>script</tt>. There is no way for us to help you
+without the relevant bits of information.
 
 Now, the following directory should have been created : 
 
@@ -62,6 +65,48 @@ Thus, there is two ways to link your program with SimGrid:
 \verbatim export LD_LIBRARY_PATH=$HOME/lib/:$LD_LIBRARY_PATH
 \endverbatim
 
+
+\subsection faq_compiling_cvs Compiling SimGrid from the CVS
+
+The project development takes place in the cvs, where all changes are
+commited 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
+CVS. We afterward go back to the development in the CVS. 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 CVS version instead of a
+released one.
+
+For that, you first need to get the "simgrid" module from
+<a href="http://gforge.inria.fr/scm/?group_id=12">here</a>. 
+
+You won't find any <tt>configure</tt> and a few other things
+(<tt>Makefile.in</tt>'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 <tt>autoconf</tt>, <tt>libtool</tt>, <tt>automake</tt>
+(>1.9) and <tt>doxygen</tt> (>1.4). To generate the <tt>configure</tt> and
+the <tt>Makefile.in</tt>'s, you just have to launch the <tt>bootstrap</tt>
+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 and automake. Doing this step on exotic architectures/systems
+(i.e. anything different from a recent linux distribution) may be
+... uncertain. If you want to use the CVS version on another
+architecture/system, you should do the previous steps on a perfectly
+standard box, then do a <tt>make dist</tt> that will build you a
+perfectly portable SimGrid archive.
+
+In summary, the following commands will checkout the CVS, regenerate the
+configure script and friends, configure SimGrid and build an archive you can
+use on another machine afterward.
+
+\verbatim cvs -d :pserver:anonymous@scm.gforge.inria.fr:/cvsroot/simgrid login
+cvs -d :pserver:anonymous@scm.gforge.inria.fr:/cvsroot/simgrid checkout simgrid
+cd simgrid
+./bootstrap
+./configure --enable-maintainer-mode
+make dist \endverbatim
+
 \subsection faq_setting Setting up your own code
 
 Do not build your simulator by modifying the SimGrid examples.  Go
@@ -144,7 +189,9 @@ perform some more complex compilations...
 \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
-<a href="http://graal.ens-lyon.fr/~alegrand/articles/Simgrid-Introduction.pdf">slides</a>
+<a href="http://graal.ens-lyon.fr/~alegrand/articles/slides_g5k_simul.pdf">slides</a>
+(or to these
+<a href="http://graal.ens-lyon.fr/~alegrand/articles/Simgrid-Introduction.pdf">"obsolete" slides</a>)
 may give you some insights on what SimGrid can help you to do and what
 are its limitations. Then you definitely should read the \ref
 MSG_examples. There is also a mailing list: <simgrid-user@lists.gforge.inria.fr>.
@@ -215,7 +262,7 @@ no real point in doing the first one without the second. :)
 
 As usual, you're welcome to participate.
 
-\section faq_questions How to ....? Is there a function in the API to simply ....?
+\section faq_MIA How to ....? Is there a function in the API to simply ....?
 
 Here is the deal. The whole SimGrid project (MSG, SURF, GRAS, ...) is
 meant to be kept as simple and generic as possible. We cannot add
@@ -236,7 +283,7 @@ You'll find in this section a few "Missing In Action" features. Many
 people have asked about it and we have given hints on how to simply do
 it with MSG. Feel free to contribute...
 
-\subsection faq_examples I want some more complex examples!
+\subsection faq_MIA_examples I want some more complex examples!
 
 Many people have come to ask me a more complex example and each time,
 they have realized afterward that the basics were in the previous three
@@ -259,7 +306,7 @@ tried to document the examples so that they are understandable. Tell
 us if something is not clear and once again feel free to participate!
 :)
 
-\subsection faq_examples_MIA_taskdup Missing in action: Task duplication/replication
+\subsection faq_MIA_taskdup Missing in action: Task duplication/replication
 
 There is no task duplication in MSG. When you create a task, you can
 process it or send it somewhere else. As soon as a process has sent
@@ -284,7 +331,7 @@ and MSG_task_get_data().
 You could use a dictionnary (#xbt_dict_t) of dynars (#xbt_dict_t). If
 you still don't see how to do it, please come back to us...
 
-\subsection faq_examples_MIA_asynchronous I want to do asynchronous communications.
+\subsection faq_MIA_asynchronous I want to do asynchronous communications.
 
 Up until now, there is no asynchronous communications in MSG. However,
 you can create as many process as you want so you should be able to do
@@ -293,7 +340,7 @@ some asynchronous communications at low cost (creating thousands of
 process only to handle communications may be problematic in term of
 performance at some point). I'll add it in the distribution asap.
 
-\subsection faq_examples_MIA_thread_synchronization I need to synchronize my process
+\subsection faq_MIA_thread_synchronization I need to synchronize my processes
 
 You obviously cannot use pthread_mutexes of pthread_conds. The best
 thing would be to propose similar structures. Unfortunately, we
@@ -302,7 +349,7 @@ MSG_process_suspend() and MSG_process_resume(). You can even do some
 synchronization with fake communications (using MSG_task_get(),
 MSG_task_put() and MSG_task_Iprobe()).
 
-\subsection faq_examples_MIA_host_load Where is the get_host_load function hidden in MSG?
+\subsection faq_MIA_host_load Where is the get_host_load function hidden in MSG?
 
 There is no such thing because its semantic wouldn't be really
 clear. Of course, it is something about the amount of host throughput,
@@ -339,7 +386,7 @@ Of course, it may not match your personal definition of "host load". In this
 case, please detail what you mean on the mailing list, and we will extend
 this FAQ section to fit your taste if possible.
 
-\subsection faq_examples_MIA_batch_scheduler Is there a native support for batch schedulers in SimGrid ?
+\subsection faq_MIA_batch_scheduler Is there a native support for batch schedulers in SimGrid ?
 
 No, there is no native support for batch schedulers and none is
 planned because this is a very specific need (and doing it in a
@@ -348,6 +395,37 @@ their own batch schedulers. Vincent Garonne wrote one during his PhD
 and put his code in the contrib directory of our CVS so that other can
 keep working on it. You may find inspinring ideas in it.
 
+\subsection faq_MIA_checkpointing I need a checkpointing thing
+
+Actually, it depends on whether you want to checkpoint the simulation, or to
+simulate checkpoints. 
+
+The first one could help if your simulation is a long standing process you
+want to keep running even on hardware issues. It could also help to
+<i>rewind</i> the simulation by jumping sometimes on an old checkpoint to
+cancel recent calculations.\n 
+Unfortunately, such thing will probably never exist in SG. One would have to
+duplicate all data structures because doing a rewind at the simulator level
+is very very hard (not talking about the malloc free operations that might
+have been done in between). Instead, you may be interested in the Libckpt
+library (http://www.cs.utk.edu/~plank/plank/www/libckpt.html). This is the
+checkpointing solution used in the condor project, for example. It makes it
+easy to create checkpoints (at the OS level, creating something like core
+files), and rerunning them on need.
+
+If you want to simulate checkpoints instead, it means that you want the
+state of an executing task (in particular, the progress made towards
+completion) to be saved somewhere.  So if a host (and the task executing on
+it) fails (cf. #MSG_HOST_FAILURE), then the task can be restarted
+from the last checkpoint.\n
+
+Actually, such a thing does not exists in SimGrid either, but it's just
+because we don't think it is fundamental and it may be done in the user code
+at relatively low cost. You could for example use a watcher that
+periodically get the remaining amount of things to do (using
+MSG_task_get_remaining_computation()), or fragment the task in smaller
+subtasks.
+
 \section faq_SG Where has SG disappeared?!?
 
 OK, it's time to explain what's happening to the SimGrid project. Let's
@@ -676,6 +754,17 @@ An example of this trick is distributed in the file examples/msg/msg_test_surfxm
 
 \section faq_troubleshooting Troubleshooting
 
+\subsection faq_compil_trouble ./configure fails!
+
+We now only one reason for the configure to fail:
+
+ - <b>You are using a borken build environment</b>\n
+   If symptom is that configure complains about gcc not being able to build
+   executables, you are probably missing the libc6-dev package. Damn Ubuntu.
+
+If you experience other kind of issue, please get in touch with us. We are
+always interested in improving our portability to new systems.
+
 \subsection faq_distcheck_fails Dude! "make check" fails on my machine!
 
 Don't assume we never run this target, because we do. Really. Promise!
@@ -690,9 +779,6 @@ machine:
    4.0 gcc compiler. This version happens to be completely unusable, and you
    should install a gcc-3.4 compiler and change the /usr/bin/gcc link to let
    it point on /usr/bin/gcc-3.4.
- - <b>You are using a borken build environment</b>\n
-   If symptom is that configure complains about gcc not being able to build
-   executables, you are probably missing the libc6-dev package. Damn Ubuntu.
  - <b>You are using a borken libc (probably concerning the contextes)</b>.\n
    The symptom is that the "make check" fails within the examples/msg directory.\n
    By default, SimGrid uses something called ucontexts. This is part of the
@@ -754,7 +840,8 @@ Here are some tricks I had to use in order to run a token ring between
 
  - It was really boring to write 25,000 entries in the deployment file, so I wrote 
    a little script <tt>examples/gras/tokenS/make_deployment.pl</tt>, which you may
-   want to adapt to your case.
+   want to adapt to your case. You could also think about hijacking
+   the SURFXML parser (have look at \ref faq_flexml_bypassing).
 
  - The deployment file became quite big, so I had to do what is in the FAQ
    entry \ref faq_flexml_limit
@@ -768,6 +855,43 @@ Here are some tricks I had to use in order to run a token ring between
    low, you'll get a segfault. The token ring example, which is quite simple, 
    runs with 40kb stacks.
 
+\subsection faq_longjmp longjmp madness
+
+This is when valgrind starts complaining about longjmp things, just like:
+
+\verbatim ==21434== Conditional jump or move depends on uninitialised value(s)
+==21434==    at 0x420DBE5: longjmp (longjmp.c:33)
+==21434==
+==21434== Use of uninitialised value of size 4
+==21434==    at 0x420DC3A: __longjmp (__longjmp.S:48)
+\endverbatim
+
+or even when it reports scary things like:
+
+\verbatim ==24023== Warning: client switching stacks?  SP change: 0xBE3FF618 --> 0xBE7FF710
+x86->IR: unhandled instruction bytes: 0xF4 0xC7 0x83 0xD0
+==24023==          to suppress, use: --max-stackframe=4194552 or greater
+==24023== Your program just tried to execute an instruction that Valgrind
+==24023== did not recognise.  There are two possible reasons for this.
+==24023== 1. Your program has a bug and erroneously jumped to a non-code
+==24023==    location.  If you are running Memcheck and you just saw a
+==24023==    warning about a bad jump, it's probably your program's fault.
+==24023== 2. The instruction is legitimate but Valgrind doesn't handle it,
+==24023==    i.e. it's Valgrind's fault.  If you think this is the case or
+==24023==    you are not sure, please let us know.
+==24023== Either way, Valgrind will now raise a SIGILL signal which will
+==24023== probably kill your program.
+==24023==
+==24023== Process terminating with default action of signal 4 (SIGILL)
+==24023==  Illegal opcode at address 0x420D234
+==24023==    at 0x420D234: abort (abort.c:124)
+\endverbatim
+
+This is the sign that you didn't used the exception mecanism well. Most
+probably, you have a <tt>return;</tt> somewhere within a <tt>TRY{}</tt>
+block. This is <b>evil</b>, and you must not do this. Did you read the section
+about \ref XBT_ex??
+
 \subsection faq_flexml_limit I get the message "surf_parse_lex: Assertion `next&lt;limit' failed."
 
 This is because your platform file is too big for the parser. 
@@ -804,6 +928,47 @@ These are changes to FleXML itself, not SimGrid. But since we kinda hijacked
 the development of FleXML, I can grant you that any patches would be really
 welcome and quickly integrated.
 
+\subsection faq_gras_transport GRAS spits networking error messages
+
+Gras, on real platforms, naturally use regular sockets to communicate. They
+are deeply hiden in the gras abstraction, but when things go wrong, you may
+get some weird error messages. Here are some example, with the probable
+reason:
+
+ - <b>Transport endpoint is not connected</b>: several processes try to open
+   a server socket on the same port number of the same machine. This is
+   naturally bad and each process should pick its own port number for this.\n
+   Maybe, you just have some processes remaining from a previous experiment 
+   on your machine.\n
+   Killing them may help, but again if you kill -KILL them, you'll have to
+   wait for a while: they didn't close there sockets properly and the system
+   needs a while to notice that this port is free again.
+
+ - <b>Socket closed by remote side</b>: if the remote process is not
+   supposed to close the socket at this point, it may be dead.
+   
+ - <b>Connection reset by peer</b>: I found this on internet about this
+   error. I think it's what's happening here, too:\n   
+   <i>This basically means that a network error occurred while the client was
+   receiving data from the server. But what is really happening is that the
+   server actually accepts the connection, processes the request, and sends
+   a reply to the client. However, when the server closes the socket, the
+   client believes that the connection has been terminated abnormally
+   because the socket implementation sends a TCP reset segment telling the
+   client to throw away the data and report an error.\n
+   Sometimes, this problem is caused by not properly closing the
+   input/output streams and the socket connection. Make sure you close the
+   input/output streams and socket connection properly. If everything is
+   closed properly, however, and the problem persists, you can work around
+   it by adding a one-second sleep before closing the streams and the
+   socket. This technique, however, is not reliable and may not work on all
+   systems.</i>\n
+   Since GRAS sockets are closed properly (repeat after me: there is no bug
+   in GRAS), it is either that you are closing your sockets on server side
+   before the client get a chance to read them (use gras_os_sleep() to delay
+   the server), or the server died awfully before the client got the data.
+
+
 \subsection faq_deadlock There is a deadlock !!!
 
 Unfortunately, we cannot debug every code written in SimGrid.  We
@@ -818,6 +983,18 @@ list. Just be aware that you'll be severely punished if the mistake is
 on your side... We have plenty of FAQ entries to redact and new
 features to implement for the impenitents! ;)
 
+\subsection faq_big_fat_warning A BIG FAT WARNING is reported telling me that my platform and deployment files are too old.
+
+We have decided to change the units in SimGrid. Now we use Bytes, Flops and
+seconds instead of MBytes, MFlops and seconds... Units should be updated
+accordingly and the version of platform_description should be set to a
+valuer greater than 1:
+\verbatim
+  <platform_description version="1">
+\endverbatim
+You should try to use the surfxml_update.pl script that can be found
+<a href="http://gforge.inria.fr/plugins/scmcvs/cvsweb.php/contrib/platform_generation/?cvsroot=cvsroot%2Fsimgrid">here</a>.
+  
 \author Arnaud Legrand (arnaud.legrand::imag.fr)
 \author Martin Quinson (martin.quinson::loria.fr)