This repository has been archived by the owner on Jun 25, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 13
/
ChangeLog
187 lines (113 loc) · 12.7 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
# Change Log
This file reports the changes associated with each release of ROOT-Sim.
[Unreleased] refers to the features which are under current development (and are listed in this changelog waiting for a new release to come).
For each release, we report what new features have been added, what changes affected the code base, what facilities have been deprecated or removed, and what bugs have been fixed.
## [Unreleased]
### Added
* _Event-Cross State Synchronization_:
* _Linux Kernel Modules_:
### Changed
* _Segment Allocator_:
### Deprecated
### Removed
### Fixed
## [2.0.0] - 2018-12-06
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.
## [2.0.0-alpha2] - 2018-02-01
This is the second alpha release for version 2.0.0.
In this release, several performance and correctness minor bugs have been fixed.
The preliminar experimentation has shown, under certain workloads, a 3x speedup with respect to the previous alpha.
### Added
* _Treiber Stack_: a non-blocking Treiber stack has been added, to implement a retirement queue for message buffers, rather than freeing immediately from the slab, in order to reduce the memory-release bottleneck.
### Changed
* _Message Channel_: switched to a (M, 1) register.
* _Slab Allocator_: operations have been significantly optimized.
## [2.0.0-alpha1] - 2018-01-30
This it the alpha 1 release of ROOT-Sim 2.0.0.
### Added
* `rootsim-cc`: A compiler to compile simulation models against ROOT-Sim has been introduced. This is a wrapper of `gcc` which undertakes the necessary steps to correctly link the binary objects against DyMeLoR and ROOT-Sim libraries.
* _MPI_: an asynchronous and optimized subsystem based on MPI has been added. ROOT-Sim can go distributed again.
### Changed
* _Code Base_: the runtime environment is now organized as a static library which is installed in the system using `make install`. This allows to simplify the deploy and the reuse of the whole simulation environment. Also simulation models benefit from this organization.
* _GVT_: A non-blocking GVT algorithm has superseded the traditional Fujimoto & Hybinette algorithm.
### Deprecated
* _Interactive shell_: this was an old-school way to interact with the simulator. Actually, the benefits of relying on it were not comparable to the waste of time to setup the scripts. Therefore, due to the lack of usage, the interactive shell and its language has been deprecated.
### Removed
### Fixed
## [1.0.1] - 2018-01-30
Compatibility fix.
This version fixes small compatibility issues which arised with newer versions of gcc compilers.
### Added
### Changed
### Deprecated
### Removed
### Fixed
* In the creation of ULTs, an old and deprecated header was used, which prevented newer versions of `gcc` to compile the runtime library.
## [1.0.0] - 2018-01-30
This is the first stable version of the multithreaded ROOT-Sim kernel.
This version offers advanced functionalities for multicore machines. No distributed simulation support is offered.
In this release, _almost 90% of the code base has been completely rewritten_, and the source tree has been significantly reorganized. This has lead to a more modern runtime environment, with code much more readable.
### Added
* _Serial Simulator_: The code of a serial simulator has been introduced in the library. At startup, the user can decide whether to run parallel simulations or not, only specifying a command line flag.
* _Event & Cross State Synchronization_: A new subsystem which allows to exchange pointers as message payloads, implementing a sort of transparent distributed shared memory has been released. This is based on a Linux Loadable Kernel module, which allows to generate low-cost artificial memory fault to keep track of the activities of the models. This is a very experimental subsystem.
* _Segment Allocator_: implemented a LP memory preallocator working with `mmap`. This allows to cluster all buffers used to support the execution of a LP in a constrained region of virtual addresses. This is useful to put in place several optimizations.
* _Buddy System_: the space allocated via the segment allocator is managed by a new buddy system, which serves memory requests for the DyMeLoR allocator.
* _Numerical Library_: new probability distributions have been introduced.
* _Temporary LP Binding_: a non-blocking algorithm to periodically reassign a group of LPs to several worker threads has been put in place. This allows to implement a fast load sharing across the CPU cores.
* _Generic Lists_: a subsystem implementing lists of generic objects has been added to the simulator. This has significantly reduce the boilerplate code in the runtime to operate on the various lists.
* _Interactive Shell_: An interactive shell has been added to the project. It allows to compile and launch simulation models in a more simplified way. Also, it support a special flavour of execution scripts, allowing to organize batches of tests with different parameters.
### Changed
* _Applications_: ported all application examples to the new code base.
* _Numerical Library_: the code is now self contained in a single library file, simplifying the organization of `init.c`.
* _Communication_: the output queue is now using a compact envelope type to keep information used to send antimessages. Created a type for the bottom halves.
* GVT: Rewriting the overall GVT. I think there is a stack corruption somewhere,
cause the debugging trace is very stange. I have activated all the warning
levels at compile time. There is a segfault in the fossil collection,
but in a place where the function should not be called...
* ULT: the subsystem has been ported to Cygwin and Windows, using Windows Fibers. Testing
has not been done very thoroughly. A small bug was introduced in the Linux version
* Timers: the macro DECLARE_TIMER() has been superseded by the new timer_t type.
Other macros have been case-lowered to resemble functions. Additionally, they
have been restructured to be is-safe.
* Topology: micro optimizations in some checks on boundaries, in the case of Hexagonal
or Square topology. Addedd a sanity check that prevents the finder, when
only 1 LP is in the system, to loop indefinitely.
* Communication: most of the (local) communication subsystem has
been rewritten. Still has to debug local message enqueueing,
as there are problems when scheduling a new event. Only
INIT is correctly scheduled and processed. Still running
with only one kernel-level thread and one user-level
thread (LP).
### Removed
* _Star scheduler_. To rewrite the code base, the start scheduler has been currently removed from the code base. This is scheduled for later reintroduction.
* _CCGS_: calls to `OnGVT` pass a simulation state which is currently committed, but overall the state observed by LPs is not consistent (different LPs might observe different simulation times). This is not a serious problem for most simulation models, and the code is to be later reintroduced.
## [0.9.0-RC1] - 2011-05-15
This is the first official release of ROOT-Sim. The following subsystems have been introduced in the release:
* _Dynamic Memory Logger Subsystem (DyMeLoR)_: memory management subsystem to keep track of the memory buffers used by simulation models.
* _Incremental Logging Support_: at runtime, updates to memory buffers by the simulation models are tracked. Only the affected chunks are logged/restored.
* _Schedulers_: two schedulers can be used: `linear` (an O(n) scheduler) and `star` (an O(1) scheduler)
* _Consistent Committed Global State (CCGS) subsystem_: this subsystem allows simulation models to terminate the simulation when complex predicates are evaluated on committed portions of the simulation run.
Copyright (C) 2008-2019 HPDCS Group
Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved.