Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update slides' reference.
[simgrid.git] / doc / FAQ.doc
index bc4636b..7d0bceb 100644 (file)
@@ -13,6 +13,8 @@ instructions and still have some troubles, drop an e-mail to
 
 \subsection faq_compiling Compiling SimGrid
 
+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 this problem to the list
-but, please, avoid sending a laconic mail like "There is a problem. Is it
-normal?". 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.
+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,30 @@ 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
+
+First of all, you 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>automake</tt> (1.9) and <tt>doxygen</tt>. 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.
+
 \subsection faq_setting Setting up your own code
 
 Do not build your simulator by modifying the SimGrid examples.  Go
@@ -144,7 +171,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>.
@@ -707,6 +736,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!
@@ -721,9 +761,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
@@ -799,6 +836,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. 
@@ -835,6 +909,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