Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
convert another page from old doc to RST
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Fri, 1 Mar 2019 22:21:58 +0000 (23:21 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Fri, 1 Mar 2019 22:47:55 +0000 (23:47 +0100)
docs/source/community.rst [moved from doc/doxygen/community.doc with 50% similarity]
tools/cmake/DefinePackages.cmake

similarity index 50%
rename from doc/doxygen/community.doc
rename to docs/source/community.rst
index 95fafd2..f57ae3a 100644 (file)
@@ -1,7 +1,7 @@
-/**
-@page community The SimGrid Community
+.. _community:
 
-@tableofcontents
+The SimGrid Community
+=====================
 
 SimGrid is a free software, written by a community of people. It
 started as a little software to help ourselves in our own research,
@@ -10,43 +10,61 @@ something that we hope to be valuable to many people. So yes. We hope
 that SimGrid is helping you doing what you want, and that you will
 join our community of happy simgriders.
 
-@section community_contact Contacting the community
+Contacting the community
+------------------------
 
 There are several locations where you can connect and discuss about
 SimGrid. If you have a question, please have a look at the
 documentation and examples first, but if some remain don't hesitate to
-ask the community for help. If you do not have a question, just come to us
-and say hello! We love earing about how people use SimGrid.
-
- - For questions or remarks, drop us an email on the
-   <a href="mailto:simgrid-user@lists.gforge.inria.fr">User Mailing list</a> 
-   (to subscribe, visit the [web interface](http://lists.gforge.inria.fr/mailman/listinfo/simgrid-user));
-   you can also check out [our archives](http://lists.gforge.inria.fr/pipermail/simgrid-user/).
-   We prefer you to <b>not use private emails</b>. SimGrid is an open
+ask the community for help. If you do not have a question, just come
+to us and say hello! We love earing about how people use SimGrid.
+
+ - For questions or remarks, drop us an email on the `user mailing
+   list <mailto:simgrid-user@lists.gforge.inria.fr>`_ (to subscribe,
+   visit the `web interface
+   <http://lists.gforge.inria.fr/mailman/listinfo/simgrid-user>`_);
+   you can also check out `our archives
+   <http://lists.gforge.inria.fr/pipermail/simgrid-user/>`_.  We
+   prefer you to **not use private emails**. SimGrid is an open
    framework, and you never know who have the time and knowledge to
-   answer your question, so please keep messages on the public mailing list.
+   answer your question, so please keep messages on the public mailing
+   list.
  - Join us on IRC and ask your question directly on the channel \#simgrid at
-   \b irc.debian.org (or use the ugly [web interface](https://webchat.oftc.net/?channels=%23simgrid)
-   if you don't have a [real client](https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients)
-   installed).<br>
+   ``irc.debian.org``
+   (or use the ugly `web interface <https://webchat.oftc.net/?channels=%23simgrid>`_)
+   if you don't have a
+   `real client <https://en.wikipedia.org/wiki/Comparison_of_Internet_Relay_Chat_clients>`_)
+   installed). When no non-french speaker are connected, we usually
+   chat in french on this channel, but we do switch back to english
+   when we have a guest.
+   
    Be warned that even if many people are connected to
    the chanel, they may not be staring at their IRC windows.
    So don't be surprised if you don't get an answer in the 
    second, and turn to the mailing lists if nobody seems to be there.
- - Asking your question on [StackOverflow](http://stackoverflow.com/questions/tagged/simgrid) is also a good idea, as this
+   The logs of this channel are publicly
+   `available online <http://colabti.org/irclogger/irclogger_logs/simgrid>`_,
+   so may also want to check in a few hours if someone answered after
+   you left. 
+   
+ - Asking your question on
+   `StackOverflow <http://stackoverflow.com/questions/tagged/simgrid>`_
+   is also a good idea, as this
    site is very well indexed. We answer questions there too (don't
    forget to use the SimGrid tag in your question so that we can see
    it), and they remain usable for the next users. 
 
-@section community_giveback Giving back to SimGrid
+Giving back to SimGrid
+----------------------
 
 We are sometimes asked by users how to give back to the project. Here
 are some ideas, but if you have new ones, feel free to share them with us.
 
-@subsection contributing_spread Spread the word
+Spread the word
+^^^^^^^^^^^^^^^
 
 There are many ways to help the SimGrid project. The first and most
-natural one is to <b>use it for your research, and say so</b>. Cite
+natural one is to **use SimGrid for your research, and say so**. Cite
 the SimGrid framework in your papers and discuss of its advantages with
 your colleagues to spread the word. When we ask for new fundings to
 sustain the project, the amount of publications enabled by SimGrid is
@@ -54,45 +72,42 @@ always the first question we get. The more you use the framework,
 the better for us. 
 
 Make sure that your scientific publications using SimGrid actually
-cite the [right paper](https://simgrid.org/Publications.html).
+cite the `right paper <https://simgrid.org/Publications.html>`_.
 Also make sure that these citations are correctly listed on 
-<a href="https://simgrid.org/Usages.html">our list</a>.
+`our list <https://simgrid.org/Usages.html>`_.
 
-You can also <b>help us constituting an active and welcoming user
-community</b>. Subscribe to the mailing lists, and answer the
+You can also **help us constituting an active and welcoming user
+community**. Subscribe to the mailing lists, and answer the
 questions that newscomers have if you can. Point them (gently ;) to
 the relevant part of the documentation on need, and help them becoming
 part of our community too. 
 
-Another easy way to help the project is to add a link to the <a
-href="https://simgrid.org/">SimGrid homepage</a> on your
-site to <b>improve SimGrid's ranking in search engines</b>.
+Another easy way to help the project is to add a link to the `SimGrid
+homepage <simgrid.org>`_ on your site to improve SimGrid's ranking in
+search engines.
 
 Finally, if you organize a scientific event where you expect many
-potential users, <b>you can invite us to give a tutorial on SimGrid</b>. We
-found that 45 minutes to one hour is very sharp, but doable. It
-allows us to explain the main motivations and outcomes of the project in
-order to motivate the attendees get more information on SimGrid, and
-eventually improve their scientific habits by using a sound simulation
-framework.  
-<a href="http://people.irisa.fr/Martin.Quinson/blog/2012/1120/Simgrid_at_Louvain/">Here</a>
-is an example of such a presentation.
-
-@subsection contributing_bugs Reporting (and fixing) any issue you find
-
-Because of its size and complexity, SimGrid is not perfect and
+potential users, you can invite us to give a tutorial on SimGrid. We
+found that 45 minutes to one hour is very sharp, but
+`doable <http://people.irisa.fr/Martin.Quinson/blog/2012/1120/Simgrid_at_Louvain/>`_.
+It is enough to explain the main motivations and outcomes of the
+project in order to motivate the attendees get more information on
+SimGrid, and eventually improve their scientific habits by using a
+sound simulation framework. 
+
+Report (and fix) issues
+^^^^^^^^^^^^^^^^^^^^^^^
+
+Because of its size and complexity, SimGrid far from perfect and
 contains a large amount of glitches and issues. When you find one,
 don't assume that it's here because we don't care. It survived only
 because nobody told us. We unfortunately cannot endlessly review our
-large code and documentation base. So please, <b>report any issue you
-find</b>, be it a typo in the documentation, a paragraph that needs to
+large code and documentation base. So please, **report any issue you
+find**, be it a typo in the documentation, a paragraph that needs to
 be reworded, a bug in the code, or any other problem. The best way to
-do so is to open an issue on our GitHub's 
-<a href="https://github.com/simgrid/simgrid/issues">Bug Tracker</a> so
-that we don't forget about it (if you want to put some attachment, you
-can use 
-[this other bugtracker](https://gforge.inria.fr/tracker/?atid=165&group_id=12&func=browse)
-instead). 
+do so is to open an issue on our
+`Bug Tracker <https://github.com/simgrid/simgrid/issues>`_ so
+that we don't forget about it. 
 
 The worst way to report such issues is to go through private emails.
 These are unreliable, and we are trying to develop SimGrid openly, so
@@ -106,13 +121,16 @@ for us to reproduce and fix if you don't give us the MWE, so you want
 to help us helping you to get things efficient.
 
 Of course, a very good way to give back to the SimGrid community is to
-<b>triage and fix the bugs in the Bug Tracking Systems</b>. If you
-can come up with a patch fixing them, we will be more than happy to
-apply your changes so that the whole community enjoys them.
+triage and fix the bugs in the Bug Tracking Systems. If the bug report
+has no MWE, we'd love you to contribute one. If you can come up with a
+patch, we will be more than happy to apply your changes so that the
+whole community enjoys them.
 
-@section community_extend Extending SimGrid and its Ecosystem
+Extending SimGrid and its Ecosystem
+-----------------------------------
 
-@subsection contributing_contrib Contributing features and associated tools
+Contributing Code
+^^^^^^^^^^^^^^^^^
 
 If you deeply miss a feature in the framework, you should consider
 implementing it yourself. SimGrid is free software, meaning that you are
@@ -127,59 +145,24 @@ a difficult work, which outcome is very precious to us.
 
 Or maybe you developed an independent tool on top of SimGrid. We'd
 love helping you gaining visibility by listing it in our 
-<a href="https://simgrid.org/contrib.html">Contrib
-section</a>. 
+`Contrib <https://simgrid.org/contrib.html>`_. 
 
-@subsection contributing_todo Possible Enhancements
+Possible Enhancements
+^^^^^^^^^^^^^^^^^^^^^
 
 If you want to start working on the SimGrid codebase, here are a few
 ideas of things that could be done to improve the current code (not all of them
 are difficult, do trust yourself ;)
 
-@subsubsection contributing_todo_cxxification Migration to C++
+Time and duration
+"""""""""""""""""
 
-The code is being migrated to C++ but a large part is still C (or C++ with
-C idioms). It would be valuable to replace C idioms with C++ ones:
-
- - replace XBT structures and C dynamic arrays with C++ containers;
-
- - replace `char*` strings with `std::string`;
-
- - use exception-safe RAII (`std::unique_ptr`, etc.) instead of explicit
-   `malloc/free` or `new/delete`;
-
- - use `std::function` (or template functionoid arguments) instead of function
-   pointers;
-
-#### Exceptions
-
-SimGrid used to implement exceptions in C. This has been replaced with C++
-exceptions but some bits of the C exceptions are still remaining:
-
- - `xbt_ex` was the type of C exceptions. It is now a standard C++ exception.
-    We might want to remove this exception and use a more idiomatic C++
-    solution with dedicated exception classes for different errors.
-    `std::system_error` might be used as well by replacing some `xbt_errcat_t`
-    with custom subclasses of `std::error_category`.
-
- - The C API currently throws exceptions. Throwing exceptions out of a C API is
-   not very friendly. C code does not expect them, cannot catch them and cannot
-   handle resource management properly in face of exceptions. We should clearly
-   separate the C++ API and the C API and catch all exceptions before they get
-   ouf of C APIs.
-
-#### Time and duration
-
-Some support for C++11-style time/duration is implemented (see `chrono.hpp`)
-but only available in some (S4U) APIs. It would be nice to add support for
-them in the rest of the C++ code.
-
-A related change would be to avoid using "-1" to mean "forever" at least in S4U
-and in the internal code. For compatibility, MSG should probably keep this
-semantic. We should probably always use separate functions
+We should avoir using "-1" to mean "forever" at least in S4U and in
+the internal code.  We should probably always use separate functions
 (`wait` vs `wait_for`).
 
-#### Futures and Promises
+Futures and Promises
+""""""""""""""""""""
 
  - Some features are missing in the Maestro future implementation
   (`simgrid::kernel::Future`, `simgrid::kernel::Promise`)
@@ -197,80 +180,8 @@ semantic. We should probably always use separate functions
    API compatible with `Future` (and convertible to it) but with an
    additional `.cancel()` method.
 
-@subsubsection contributing_todo_smpi SMPI
-
-#### Process-based privatization
-
-Currently, all the simulated processes live in the same process as the SimGrid
-simulator. The benefit is that we don't have to do context switches and IPC
-between the simulator and the processes.
-
-The fact that they share the same address space means that one memory corruption
-in one simulated process can propagate to the other ones and to the SimGrid
-simulator itself.
-
-Moreover, the current design for SMPI applications is to compile the MPI code
-normally and execute it once per simulated process in the same system process:
-This means that all the existing simulated MPI processes share the same virtual
-address space and share by default the same global variables. This is not
-correct as each MPI process is expected to use its own address space and have
-its own global variables. In order to fix, this problem we have an optional
-SMPI privatization feature which creates an instanciation of the executable
-data segment per MPI process and map the correct one (using `mmap`) at each
-context switch.
-
-This approach has many problems:
-
- 1. It is not completely safe. We only handle SMPI privatization for the global
-    variables in the execute data segment. Shared objects are ignored but some
-    may contain global variables which may need to be privatized:
-
-    - libsimgrid for example must not be privatized because it contains
-      shared state for the simulator;
-
-    - libc must not be privatized for the same reason (but some global variables
-      in the libc may not be privatized);
-
-    - if we use global variables of some shared object in the executable, this
-      global variable will be instanciated in the executable (because of copy
-      relocation) and will be privatized even if it shoud not.
-
- 2. We cannot execute the MPI processes in parallel. Only one can execute at
-    the same time because only one privatization segment can be mapped at a
-    given time.
-
-In order to fix this, the standard solution is to move each MPI process in its
-own system process and use IPC to communicate with the simulator. One concern would
-be the impact on performance and memory consumption:
-
- - It would introduce a lot of context switches and IPC communications between
-   the MPI processes and the SimGrid simulator. However, currently every context
-   switch needs a `mmap` for SMPI privatization which is costly as well
-   (TLB flush).
-
- - Instanciating a lot of processes might consume more memory which might be a
-   problem if we want to simulate a lot of MPI processes. Compiling MPI programs
-   as static executables with a lightweight libc might help and we might want to
-   support that. The SMPI processes should probably not embed all the SimGrid
-   simulator and its dependencies, the C++ runtime, etc.
-
-We would need to modify the model-checker as well which currently can only
-manage on model-checked process. For the model-checker we can expect some
-benefits from this approach: if a process did not execute, we know its state
-did not change and we don't need to take its snapshot and compare its state.
-
-Other solutions for this might include:
-
- - Mapping each MPI process in the process of the simulator but in a different
-   symbol namespace (see `dlmopen`). Each process would have its own separate
-   instanciation and would not share libraries.
-
- - Instanciate each MPI process in a separate lightweight VM (for example based
-   on WebAssembly) in the simualtor process.
-
-@subsubsection contributing_todo_mc Model-checker
-
-#### Overhaul the state comparison code
+MC: Overhaul the state comparison code
+""""""""""""""""""""""""""""""""""""""
 
 The state comparison code is quite complicated. It has very long functions and
 is programmed mostly using C idioms and is difficult to understand and debug.
@@ -297,7 +208,8 @@ It is in need of an overhaul:
     a freed block until there is no blocks pointing to it anymore using some
     sort of basic garbage-collector.
 
-#### Hashing the states
+MC: Hashing the states
+""""""""""""""""""""""
 
 In order to speed up the state comparison an idea was to create a hash of the
 state. Only states with the same hash would need to be compared using the
@@ -326,9 +238,8 @@ Good candidate informations for the state hashing:
 Some basic infrastructure for this is already in the code (see `mc_hash.cpp`)
 but it is currently disabled.
 
-#### Separate the model-checker code from libsimgrid
-
-#### Interface with the model-checked processes
+Interface with the model-checked processes
+""""""""""""""""""""""""""""""""""""""""""
 
 The model-checker reads many information about the model-checked process by
 `process_vm_readv()`-ing brutally the data structure of the model-checked
@@ -336,7 +247,8 @@ process leading to some inefficient code such as maintaining copies of complex
 C++ structures in XBT dynars. We need a sane way to expose the relevant
 information to the model-checker.
 
-#### Generic simcalls
+Generic simcalls
+""""""""""""""""
 
 We have introduced some generic simcalls which can be used to execute a
 callback in SimGrid Maestro context. It makes it a lot easier to interface
@@ -345,7 +257,8 @@ model-checker which cannot decide how it should handle them. We would need a
 solution for this if we want to be able to replace the simcalls the
 model-checker cares about by generic simcalls.
 
-#### Defining an API for writing Model-Checking algorithms
+Defining an API for writing Model-Checking algorithms
+"""""""""""""""""""""""""""""""""""""""""""""""""""""
 
 Currently, writing a new model-checking algorithms in SimGridMC is quite
 difficult: the logic of the model-checking algorithm is mixed with a lot of
@@ -367,5 +280,3 @@ Tasks:
 
   3. Rewrite the existing model-checking algorithms in this language using the
      new API.
-
-*/
\ No newline at end of file
index 282087d..6b9449b 100644 (file)
@@ -831,7 +831,6 @@ set(DOC_SOURCES
   doc/Layout.xml
 
   doc/doxygen/FAQ.doc
-  doc/doxygen/community.doc
   doc/doxygen/deployment.doc
   doc/doxygen/footer.html
   doc/doxygen/header.html
@@ -888,6 +887,7 @@ set(DOC_SOURCES
   docs/source/app_msg.rst
   docs/source/app_s4u.rst
   docs/source/app_smpi.rst
+  docs/source/community.rst
   docs/source/index.rst
   docs/source/intro_concepts.rst
   docs/source/introduction.rst