Skip to content
This repository has been archived by the owner on Jun 25, 2022. It is now read-only.

2.0.0

Latest
Compare
Choose a tag to compare
@alessandropellegrini alessandropellegrini released this 12 Apr 13:17
· 2 commits to master since this release
2.0.0

This is the stable 2.0 release of ROOT-Sim.

All the code has been properly documented. The library is accompanied by a set of rules to help the distributed development effort, and prevent something to screw up the whole work. A wiki has been added to the online repository, and the website has been significantly restructured in a way to be automatically sync'ed with the code repository (as far as possible).

Added

  • ABM Support: A new set of semantically rich API has been added to ROOT-Sim. This API significantly simplifies the development of Agent-Based Models, and transparently supports all the activities required to support rollback and restore of simulation objects. The model can specify portions of the state of a simulation object which must be transparently synchronized with other LPs in the system, also on remote distributed nodes.
  • JSON-based configuration of models: A JSON parser has been introduced in the library. This can be used to configure, e.g., custom topologies. Also, simulation models can lever this parser to implement their own configuration files.
  • Continuous Integration: Continuous integration has been significantly refactored, allowing to stress test the project much more and realigning to newer versions of the system software. Code coverage has also been supported.
  • Tests and Unit Tests: A test script has been introduced, which relies on some unit tests (currently, only DyMeLoR is subject to a unit test) and some models to cover much of the code base while testing.
  • Automatic deploy of website and documentation: Continuous Integration has been rearranged to automatically generate the documentation and update some parts of the website from the content of the repository, any time that a new merge is made in develop or in master.

Changed

  • Argument parsing: We have now switched to argp to parse command line arguments. This has the benefit that also simulation models can implement their parsers almost at no cost. Some models have already been refactored to use this facility.
  • Topology library: The topology library has been significantly enhanced. New topologies have been added. In particular, it is now possible to specify arbitrary topologies, represented as graphs with edges which carry either a probability or a weight. These values are used by API functions such as FindReceiver()to find the destination of a message. Topologies can change at any time during simulation, and they are transparently rolled back if needed.
  • Checkpoint/Restore: The code supporting state saving has been refactored. In particular, the code has been modified to completely separate the routines which handle platform-level data (such as rollbackable libraries) and simulation model buffers. This separation of concerns has significantly cleaned up the code.
  • Faster ULTs: This release explicitly targets x86_64 systems. Therefore, we decide to break portability, remove the portable signal-based approach for creating ULTs, and implemented an extremely fast context setup routine. This change has cut the time to setup LPs by at least a factor of 1000.
  • Contributing Guidelines: Contributing guidelines have been added to the project. The code base has been significantly cleaned up and documented, to comply with the new guidelines.

Deprecated

  • NUMA Optimization: The NUMA subsystem has been found to be suboptimal under some circumstances. The current research effort in this direction tells that a more comprehensive approach is feasible, and more effective. Since the new subsystem will basically constitute a complete rewrite of the previous, in this cleaner release we have deprecated the old subsystem.
  • Parameter Parsing API: The new argp-based parser made the older code to parse simulation models parameters obsolete, and it has thus been deprecated.
  • Treiber Stack: The Treiber stack was being anyhow the bottleneck of the slab allocator. A different approach is under study, so this data structure has been deprecated from the simulator.

Removed

  • Event & Cross State Synchronization: ECS has been temporarily compiled-out of ROOT-Sim. Some of the code base is still in the repository anyhow. A complete cleanup and enhancement of the subsystem is due for the next release.
  • Buddy System and Segment Allocator: A bug in the buddy system has been found, but it was not possible to fix it in time for the current release. Considering that this is only 100% necessary for ECS (which has also been removed), and considering that the performance penalty by removing it is not that dramatic, it has been temporarily disabled (although it is still in the code base). This will be reintroduced in the next release.

Fixed

  • If an error at runtime is found, a call to rootsim_error() can now jump directly out of the main loop thanks to a longjmp(). This prevents stupid crashes, like checking if a pointer is NULL, and then dereferencing it, although a call to rootsim_error() was issued.