SimGrid  3.15
Versatile Simulation of Distributed Systems
Project Architecture Overview

This page presents the current code organization, as you will see it if you dig into the src/ directory. But things will change during the current Gran Refactoring leading to SimGrid 4. So take the information on this page with a grain of salt, and don't be affraid if things are not exactly as documented here.

At some point, we at least extend this page to present the overall design that we are currently pursuing for SimGrid 4.

If you need to extend SimGrid, then you probably need to head to Coding Standard and Technical Considerations once you understant the overall design presented on this page.

SimGrid Components (click to jump to API)

Overview of the toolkit components

Programing environments layer

SimGrid provides several programming environments built on top of a unique simulation kernel. Each environment targets a specific audience and constitutes a different paradigm. To choose which of them you want to use, you have to think about what you want to do and what would be the result of your work.

  • If you want to study a theoretical problem and compare several heuristics, you probably want to try MSG: Simulate CSP Algorithms (yet another historical name). It was designed exactly to that extend and should allow you to build easily rather realistic multi-agents simulation. Yet, realism is not the main goal of this environment and the most annoying technical issues of real platforms are masked here. Check the MSG: Simulate CSP Algorithms section for more information.
  • If you want to study the behavior of a MPI application using emulation, you should have a look at the SMPI: Simulate real MPI applications (Simulated MPI) programming environment. Unfortunately, this work is still underway. Check the SMPI: Simulate real MPI applications section for more information.

If your favorite programming environment/model is not there (BSP, components, OpenMP, etc.) is not represented in the SimGrid toolkit yet, you may consider adding it. You should contact us first on the SimGrid developers mailing list, though.

Simulation kernel layer

The core functionalities to simulate a virtual platform are provided by a module called SURF. It is very low-level and is not intended to be used as such by end-users. Instead, it serve as a basis for the higher level layer.

SURF main features are a fast max-min linear solver and the ability to change transparently the model used to describe the platform. This greatly eases the comparison of the several models existing in the literature.

See the SURF section for more details.

Base layer

The base of the whole toolkit is constituted by the XBT: SimGrid core toolbox (eXtended Bundle of Tools).

It is a portable library providing some grounding features such as Logging support, Exception support (C++) and Configuration support.

XBT also encompass the following convenient C data structures: Dynar: generic dynamic array, Dict: generic dictionnary, Heap: generic heap data structure, and Swag: O(1) set datatype. The code is being migrated in C++ so you should probably want to use standard C++ containers instead of them if possible.

It contains some C++ polyfills and utilities as well.

See the XBT: SimGrid core toolbox section for more details.

Tracing simulation

Finally, a transversal module allows you to trace your simulation. More documentation in the section TRACE documentation