forked from simgrid/simgrid
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChangeLog
5124 lines (4430 loc) · 240 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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
SimGrid (3.36.1) Release target: spring 25
SMPI:
- Allow automatic benchmarking with --cfg=smpi/host-speed:auto
S4U:
- Allow to turn disks on and off (was limited to the kernel side until now). Tested in the activity livecycle tests.
- Turning off a host now turns off the disks attached to this host. Conversely, turning the host back on brings back
the disks online. Tested in teshsuite/src/host-on-off-disks.
sthread:
- Implement pthread_exit() and pthread_cond_timedwait()
Python:
- Add many missing bindings [Sergey Teryoshkin].
Chaos Monkey plugin:
- Allow to restart the actors by pid at a given time.
----------------------------------------------------------------------------
SimGrid (3.36) September 9. 2024
The Anne of Brittany release (she became a Duchess 536 years ago).
Intrusive changes:
- Timeout on communications do not interrupt the comm anymore.
This is for symmetry with the other activity kinds, which already had this behavior enabling polling activities.
The previous behavior is still available with Activity::wait_for_or_cancel()
- Remove the include/xbt/promise.hpp header, that was kinda internal.
- Remove the ill-inspired communication matching mechanism. If you need it, talk to us (and use the kernel version).
S4U:
- Starting Activities in a detached (a.k.a. fire-and-forget) mode is not limited to Comm and Mess anymore. Exec and
I/O can also benefit from that feature. This allows users to create a sequence of interdependent activities
(informally called a 'compound' activity and only wait for the completion of the last activity of the sequence.
- Add Engine::get_hosts_from_MPI_hostfile(const std::string& hostfile) to select a list of hosts within a loaded
platform from a text file. Each line of this text file comprises the name of a host (e.g., node-0) which can be
followed by a number of repetitions (e.g., node-0:2 will add node-0 twice to the created list of hosts). This
allows users to specify that more than one actor has to be started on a given host.
- Add Engine::get_all_netzones() to build a list of all the NetZones (including the root Zone) declared.
- Add Engine::papi_{start,stop,get_num_counters,get_counters}() to interact with PAPI.
- Enable to track task instances at runtime, and add Task::on_this_instance_completion_cb()
- Add SMPI_executable_start() to start a SMPI external binary instead of providing the code inline.
- C API: Add sg_actor_start_voidp() to start actors using a pthread-like prototype, taking a void* as parameter.
Kernel:
- Bugfix: non-recursive locks must deadlock when relocking by same actor.
- Make NetZoneImpl extendable.
- Implement asynchronous condvar acquisition. Not visible from the s4u API, but needed for the model-checker.
- (internals) cleanup the implementation of timeouts for activities, and other bits of activities.
Models:
- Introduce a 'raw' network model with overly simplistic equations, for non-TCP settings.
Model-checker:
- Enable the verification of SimGrid programs written in Python.
- Enable the verification of condition variables in both s4u and sthread.
- Introduce option 'model-check/cached-states-interval' to control how often the application state is cached using fork,
to speedup later restore when exploring other execution branches.
- Introduce option 'model-check/no-fork' to forbid the use of system forks to speed-up the exploration.
This is mandated for multithreaded applications, such as our Python bindings.
- Introduce option 'model-check/max-errors' continue the exploration after the first errors.
- Introduce option 'model-check/timeout-soft' to only search for a given amount of time
- Enable the use of guiding strategies with DPOR, ODPOR and SDPOR (not UDPOR yet).
- Allow to use mutexes and semaphores with UDPOR, that remains more experimental than the other explorations algorithms.
- Support iprobes in MC, not yet with UDPOR.
- Various bug fixes and performance optimizations all over the MC module.
- New guiding strategy: min_context_switch trying to minimize the context switches, inspired from the paper
"A randomized scheduler with probabilistic guarantees of finding bugs", by Musavathi et Al.
- Compute the transition dependencies without considering the context. That may reduce the dependency detection,
but it's much faster to compute so that should still be an optimization. The contextual gain of our dependency theorems
was near to zero (because our compute model is not optimized toward that goal).
- (internals) Reimplement the DPOR, ODPOR and SDPOR algorithms so that the code is closer to the pseudo-code of the
articles. The correction of our implementation is thus easier to check.
- Introduce a new option 'model-check/search-critical' to exhibit the critical transition when a failure is found.
Before that transition, at least one exploration is correct; After it, all explorations are faulty.
For now, the answer is approximate when a reduction algorithm is enabled.
sthread:
- Disable all verbose outputs when STHREAD_QUIET environment variable is defined
- Assume that unknown mutex types are similar to PLAIN ones (somehow true for ADAPTATIVE ones).
- Various fixes and other robustness improvements.
Fixed bugs (FG#.. -> FramaGit bugs; FG!.. -> FG merge requests)
(FG: issues on Framagit; GH: issues on GitHub)
- FG#123: get_async for MessageQueue bugged
- FG#117: Exec.set_tracing_category referenced in documentation but inexistant in Python
----------------------------------------------------------------------------
SimGrid (3.35) November 23. 2023
The "Thanks Giving up stateful model-checking" release. Stateless model checking remains.
S4U:
- New class ActivitySet to ease wait_any()/test_any()/wait_all()
- Deprecate {Comm,Io,Exec}::{wait_any,wait_all,test_any} and friends
- Simplify a bit the declaration of multi-zoned platforms from C++
- New function NetZone::add_route(host1, host2, links) when you don't need gateways
- Also add a variant with s4u::Link, when you don't want to specify the directions
on symmetric routes.
- Zone's gateways can now be controlled directly.
- Add NetZone::add_route(zone1, zone2, links) specifying the route between zones
- Introduce a Mailbox::get_async() with no payload parameter. You can use the new
Comm::get_payload() once the communication is over to retrieve the payload.
- Implement recursive mutexes. Simply pass true to the constructor to get one.
- Simplify the expression of horizontal scaling of Tasks.
- Each Task now consists of a dispatcher, a collector and one or more instances.
- The parallelism degree of each of these can be set.
- Several examples have been added or modified accordingly.
- Update s4u::create_DAG_from_json() to support wfformat 1.4.
- Introduce a new MessageQueue abstraction and associated Mess simulated object.
The behavior of a MessageQueue is similar to that of a Mailbox, but intended for
control messages that do not incur any simulated cost. Information is automagically
transported over thin air between producer and consumer. See examples/cpp/mess-wait
- New function: Mutex::get_owner()
S4U plugins:
- New: Add a JBOD (just a bunch of disks) concept. It's a sort of host with many disks.
- Revamp the battery plugin: rewrite completely the API, for a better usability.
The examples were updated accordingly.
The battery can now act as a simple connector (see battery-connector example).
- Revamp of the photovoltaic plugin: now called SolarPanel and complete rewrite of the API
- Add chiller plugin: enable the management of chillers consuming electrical energy
to compensate heat generated by hosts.
- Add a battery-chiller-solar example combining several plugins to evaluate the amount
of brown energy (from the electrical grid) and green energy (from the solar panel)
during a given computation.
SMPI:
- New SMPI_app_instance_join(): wait for the completion of a started MPI instance
- MPI_UNIVERSE_SIZE now initialized to the total amount of hosts in the platform
- Memory usage due to SMPI for non-MPI actors greatly reduced.
- New implemented calls: MPI_Isendrecv, MPI_Isendrecv_replace
sthread:
- Allow to use on valgrind-observed or gdb-observed processes.
- Install sthread on user's disk.
- Implement recursive pthreads.
- Implement pthread_barrier and pthread_cond (but conditional are not supported by the MC yet).
- Add some McMini codes to test sthread further (controlled with enable_testsuite_McMini).
Model checking:
- Remove stateful model-checking. This was not used, not really working, and very hard to fix.
Liveness properties cannot be verified anymore.
- More informative backtraces on assertion failure.
- Fix dependency bugs for mutex and other transitions
- Fix some reversible_race definitions, and also the rest of ODPOR.
Python:
- Make the host_load plugin available from Python. See examples/python/plugin-host-load
- Mailbox::get_async() does not return a pair anymore. Use comm.get_payload() instead.
- Comm::waitall/waitany/testany() are gone. Please use ActivitySet() instead.
- Comm::waitallfor() is gone too. Its semantic was unclear on timeout anyway.
- Io::waitany() and waitanyfor() are gone. Please use ActivitySet() instead.
- Do not export the values of enums. So you need to write e.g. SharingPolicy.LINEAR
while it should have been possible to write LINEAR alone before. This is the advised
behavior for modern C++ code.
C API:
- Introduce sg_activity_set_t and deprecate wait_all/wait_any/test_any for
Exec, Io and Comm.
Kernel:
- optimize an internal data structure (replace boost::circular_buffer_space_optimized by
std::deque to store pending and unmatched Comms in Mailboxes). It is actually a revert
to what was used a few years back. The boost structure had a lower memory footprint than
deques, but it appeared that their "space_optimized" character was generating a huge lot
of refcount changes on the stored Comms.
General:
- Fix errors with ns-3 v3.36+
- Many other small bug fixes, in particular in MC and sthread.
----------------------------------------------------------------------------
SimGrid (3.34) June 26. 2023
Save the planet, skip a release: 3.33 was due 6 months ago, so skip directly to 3.34.
General:
- SimGrid now requires a compiler with C++17 support for public headers too.
Sibling projects should upgrade their FindSimGrid.cmake
- Remove the MSG API: its EOL was scheduled for 2020.
- Remove the Java bindings: they were limited to the MSG interface.
- On Windows, you now need to install WSL2 as the native builds are now disabled.
It was not really working anyway.
- Support for 32bits architecture is not tested anymore on our CI infrastructure.
It may break in the future, but we think that nobody's using SimGrid on 32 bits.
- Remove the surf module. It was replaced by the kernel/models module, and that
refactoring took almost 10 years to properly complete.
S4U:
- Activity::set_remaining() is not public anymore. Use for example
Comm::set_payload_size() to change the size of the simulated data.
- New function: Engine::flatify_platform(), to get a fully detailed vision of the
configured platform.
- New Task abstraction: They are designed to represent dataflows, i.e, graphs of repeatable Activities.
See the examples under examples/cpp/task-* and the associated documentation.
- Full simDAG integration: Activity::start() actually starts only when all dependencies
are fulfilled. If it cannot be started right away, it will start as soon as it becomes
possible.
- Allow to set a concurrency limit on disks and hosts, as it was already the case for links.
- Rename Link::get_usage() to Link::get_load() for consistency with Host::
- Every signal now come with a static version that is invoked for every object of that class,
and an instance version that is invoked for this specific object only. For example,
s4u::Actor::on_suspend_cb() adds a callback that is invoked for the suspend of any actor while
s4u::Actor::on_this_suspend_cb() adds a callback for this specific actor only.
- Activity::on_suspended_cb() is renamed to Activity::on_suspend_cb(), and fired right before the suspend.
- Activity::on_resumed_cb() is renamed to Activity::on_resume_cb(), and fired right before the resume.
- Resource::on_state_change_cb() is renamed to Resource::on_onoff_cb() to distinguish from the
Activity::on_state_change_cb() that is related to the activity state machine, not on/off.
- Activity signals (veto, suspend, resume, completion) are now specialized by activity class.
That is, callbacks registered in Exec::on_suspend_cb will not be fired for Comms nor Ios.
New S4U plugins:
- Battery: Enable the management of batteries on hosts.
See the examples under examples/cpp/battery-* and the documentation in the Plugins page.
- Photovoltaic: Enable the management of photovoltaic panels on hosts.
See the examples under examples/cpp/photovoltaic-* and the documentation in the Plugins page.
Kernel:
- optimize an internal data structure (use a set instead of a list for ongoing activities),
leading to a potentially big performance gain, in particular with many detached comms.
MPI:
- New option smpi/barrier-collectives to add a barrier to some collectives
to detect dangerous code that /may/ work on some MPI implems.
- New function SMPI_app_instance_start() to easily start a MPI instance in your S4U simulation.
Models:
- Write the section of the manual about models, at least.
- WiFi: the total capacity of a link depends on the amount of flows on that link.
- Use the nonlinear callback feature of LMM to reflect this.
- Calibration values can be changed to match different MCS configurations
- See the example teshsuite/models/wifi_usage_decay/wifi_usage_decay.cpp
- See also "A Flow-Level Wi-Fi Model for Large Scale Network Simulation"
https://hal.archives-ouvertes.fr/hal-03777726
- Merge parameters network/bandwidth-factor and smpi/bw-factor that serve the same purpose.
- Same for the latency
- Rewrite the corresponding documentation.
- Allow to disable the TCP windowing modeling by setting network/TCP-gamma to 0.
- Finally kill the 'compound' host model. You can change the CPU or network model
with the default host model, as it should.
- Rename option "surf/precision" to "precision/timing" for clarity.
- Rename option "maxmin/precision" to "precision/work-amount" for clarity.
- New function: Engine::flatify_platform() to debug your platform.
sthread:
- Implement pthread_join in MC mode.
- Implement semaphore functions in sthread.
- Add an intricated way to verify the access to non-reentrant data structures
It requires code annotation, as shown in examples/sthread/stdobject/stdobject.cpp
Model checking:
- Stateless model-checking is now usable on any system, including Mac OSX and ARM processors.
- The stateless aspects of the MC are now enabled by default in all SimGrid builds.
Liveness and stateful aspects are still controlled by the enabling_model-checking
configuration option.
- Introducing ODPOR and SDPOR reduction strategies
- Introducing guiding heuristics, trying to find bugs faster than DFS in reduced state space.
- Synchronize the MBI tests with upstream.
- Show the full actor backtraces when replaying a MC trace (with model-check/replay)
and the status of all actors on deadlocks in MC mode.
XBT:
- simgrid::xbt::cmdline and simgrid::xbt::binary_name are gone.
Please use simgrid::s4u::Engine::get_cmdline() instead.
Documentation:
- New tutorial on simulating DAGs.
- New section in the user guide on the provided performance models.
- New section presenting some technical good practices for (potential) contributors.
- Add a section on errors and exceptions to the API documentation.
- Move the s4u examples to a section on their own to ease navigation.
Fixed bugs (FG#.. -> FramaGit bugs; FG!.. -> FG merge requests)
(FG: issues on Framagit; GH: issues on GitHub)
- FG#18: Java bindings should be redone or removed
- FG!118: Wi-Fi callback mechanism
- FG!119: SMPI: add option to inject a barrier before every collective call
- GH#383: Segfault when adding a disk after load_platform(xml)
----------------------------------------------------------------------------
SimGrid (3.32) October 3. 2022.
The Wiedervereinigung release. Germany was reunited 32 years ago.
General:
- SimGrid now requires a compiler with C++17 support to compile the lib.
Our public headers still allow the user code to be compiled in C++14.
- Support graphviz v3 and ns-3 v3.36 (older versions are still supported).
- Tested with clang (v11, v13, v14 and v16), gcc (v7 to v13) and IntelCC v2022.2
S4U:
- API evolutions:
- kill signal Comm::on_completion that was not working anyway.
- Expose signals Activity::on_suspend and Activity::on_resume
- New macro xbt_enforce(): similar to xbt_assert(), but throws an AssertionError
instead of calling abort().
- New: s4u::Exec::get_thread_count()
- Various cleanups around virtual machines:
- host_by_name() and friends now only return hosts. VMs are now excluded.
- It is now impossible to search a VM by name globally.
You can only search VM by name on a given PM, so either you know
the PM on which your VM runs and you can search by name, or you need
to manually iterate over all PMs to search this VM.
- The s4u::VirtualMachine constructor is now deprecated.
Please use s4u::Host::create_vm() instead.
- Rename s4u::VirtualMachine::on_creation() to on_vm_creation() to
avoid confusion with s4u:Host::on_creation() that is inherited.
Also s4u::VirtualMachine::on_destruction -> on_vm_destruction().
- Bug fixes:
- One-sided communications (Comm::sendto) can now be detached,
and should now be more resilient to network and host faults.
Python:
- Added the following bindings / examples:
- Comm (now 100% covers the C++ interface):
- Comm.dst_data_size, Comm.mailbox, Comm.sender, Comm.start_time, Comm.finish_time
- Comm.state_str [examples: examples/python/comm-failure/, examples/python/comm-host2host/]
- Comm.remaining [examples: examples/python/comm-host2host/, examples/python/comm-suspend/]
- Comm.set_payload_size [example: examples/python/comm-host2host/]
- Comm.set_rate [example: examples/python/comm-throttling/]
- Comm.sendto, Comm.sendto_init, Comm.sendto_async [example: examples/python/comm-host2host/]
- Comm.start, Comm.suspend, Comm.resume [example: examples/python/comm-host2host/]
- Comm.test_any [example: examples/python/comm-testany/]
- Comm.wait_until [example: examples/python/comm-waituntil/]
- Engine:
- Engine.host_by_name [example: examples/python/comm-host2host/]
- Engine.mailbox_by_name_or_create [example: examples/python/comm-pingpong/]
- Engine.set_config
- Mailbox: Mailbox.ready [example: examples/python/comm-ready/]
- Ptask [example: examples/python/exec-ptask/]:
- this_actor.exec_init
- this_actor.parallel_execute
- Exec.suspend
- Exec.wait_for
- Added an AssertionError exception that may be thrown in case of error.
For instance, creating two hosts with the same name will now throw this exception
instead of killing the interpreter.
SMPI:
- Implement MPI_File_get_type_extent(), MPI_File_s/get_atomicity() and
MPI_File_get_byte_offset()
- Intercept getpid() calls to return the simulated ones.
- Fix various bugs in MPI IO.
Platform description & visualization:
- More robust sanity checks for platforms, to reject forbidden topologies with
a proper error message.
- New platform example: supernode.cpp and supernode.py.
The Python version generates a nice graphical representation of the platform.
- Bug fixes around fat-tree topologies.
- Allow to dump the platform topology as a CSV file representing the graph edges
with platform_graph_export_csv() (similar to the DOT export).
- Fix graphicator for "cluster" topologies (e.g. fat-tree, dragonfly).
Models:
- Fix a bug when using ptasks with multicores (FG!111).
Model-Checker:
- First bits of sthread, that intercepts pthread operations at runtime.
The intend is to use it together with simgrid-mc, but it is TBD.
- Sync MBI generators with upstream changes.
- Various cosmetics, small bug fixes and inner refactorings
Fixed bugs (FG#.. -> FramaGit bugs; FG!.. -> FG merge requests)
(FG: issues on Framagit; GH: issues on GitHub)
- FG#105: "Variable penalty should not be negative!" with in-flight messages and bandwidth profiles
- FG#109: Application time reported by --cfg=smpi/display-timing:yes is wrong
- FG#110: Wait_any does not trigger new model solve when host events occur
- FG#111: Wrong execution time in rare cases when using multicore
- FG!98: Re-enable the tests for legacy stochastic profiles
- FG!109: Trigger new engine solve upon host events such as host on/off
- FG!116: SMPI/replay: Fix issue with recv of size =0
----------------------------------------------------------------------------
SimGrid (3.31) March 22. 2022.
The ненасильство release. We stand against war.
Against the agression by a sick system that forces peoples to take arms against each other.
MC:
- Rework the internals, for simpler and modern code. This shall unlock many future improvements.
- You can now define plugins onto the DFS explorer (previously called SafetyChecker), using the
declared signals. See CommunicationDeterminism for an example.
- Support mutex, semaphore and barrier in DPOR reduction
- Seems to work on Arm64 architectures too.
- Display a nice error message when ptrace is not usable.
- New test suite, imported from the MPI Bugs Initiative (MBI). Not all MBI generators are integrated yet.
- Remove the ISP test suite: it's not free software, and it's superseeded by MBI.
SMPI:
- fix for FG#100 by ensuring small asynchronous messages never overtake larger
ones, conforming to the standard.
- replay: fix waitall behaviour to avoid forgetting requests and leaking
their handles.
- tracing: ensure that we dump the TI traces continuously during execution and
not just at the end, reducing memory cost and performance hit.
- Update OpenMPI collectives selection logic to match current one (4.1.2)
- Add a coherence check for collective operation order and root/MPI_Op
coherence. Potentially costly so not activated unless smpi:pendantic is set
or -analyze is given.
S4U:
- New signal: Engine::on_simulation_start_cb()
- Introduce a new execution mode with this_actor::thread_execute(). This simulate
the execution of a certain amount of flops by multiple threads ran by a host. Each
thread executes the same number of flops, given as argument. An example of this new
function can be found in examples/cpp/exec-threads.
- Reimplementation of barriers natively.
Previously, they were implemented on top of s4u::Mutex and s4u::ConditionVariable.
The new version should be faster (and can be used in the model-checker).
- Actor::get_restart_count(): Returns the number of reboots that this actor did.
MSG:
- MSG_barrier_destroy now expects a non-const msg_barrier parameter.
New plugin: the Chaos Monkey (killing actors at any time)
- Along with the new simgrid-monkey script, it tests whether your simulation
resists resource failures at any possible timestamp in your simulation.
- It is mostly intended to test the SimGrid core in extreme conditions,
but some users may find it interesting too.
Models:
- New solver for parallel task: BMF.
- More realistic sharing of heterogeneous resources compared to the fair
bottleneck solver used by ptask_L07.
- Implement the BMF (Bottleneck max fairness) fairness.
- Improved resource sharing for parallel tasks with sub-flows (parallel
communications between same source and destination inside the ptask).
- Parameters:
- "--cfg=host/model:ptask_L07 --cfg=host/solver:bmf": enable the ptask
model with BMF solver.
- "--cfg=bmf/max-iterations: <N>": maximum number of iterations performed
by BMF solver (default: 1000).
- "--cfg=bmf/precision: <N>": numerical precision used when computing
resource sharing (default: 1e-12).
- This model requires Eigen3 library. Make sure Eigen3 is installed to use BMF.
General:
- Modifications of the Profile mechanism, with some impact on users
- Addition of a new (S4U) method to init profiles from generic functions to improve versatility
- Fix initial behaviour of state_profiles
- Modify periodicity to behave like a period, and not like a loop delay
XBT:
- Drop xbt_dynar_shrink().
Python:
- Made the following bindings static (previously member functions):
- Actor: Actor.kill_all(), Actor.by_pid()
- Host: Host.by_name(), Host.current(), Host.on_creation_cb()
- Mailbox: Mailbox.by_name()
- Added the following bindings:
- this_actor.warning()
- Mailbox.put_init() [example: examples/python/comm-waitallfor/]
- Comm.detach() [example: examples/python/comm-waitallfor/]
- Comm.wait_for() [example: examples/python/comm-waitfor/]
- Comm.wait_any_for()
- Comm.wait_all_for() [example: examples/python/comm-waitallfor/]
- Mutex [example: examples/python/synchro-mutex/]
- Barrier [example: examples/python/synchro-barrier/]
- Semaphore [example: examples/python/synchro-semaphore/]
Build System:
- Remove target "make uninstall" which was incomplete and no longer maintained.
Fixed bugs (FG#.. -> FramaGit bugs; FG!.. -> FG merge requests)
(FG: issues on Framagit; GH: issues on GitHub)
- FG#57: Mc SimGrid should test whether ptrace is usable
- FG#87: Smpi scripts fail with spaces in paths
- FG#100: [SMPI] Order of the message matching is not guaranteed
- FG#101: LGPL 2.1 is deprecated license
- FG#104: "make uninstall" not up-to-date
- GH#151: Missing mutexes for DPOR.
----------------------------------------------------------------------------
SimGrid (3.30) January 30. 2022.
The Sunday Bloody Sunday release.
Main user-visible changes:
- The SimDag API for the simulation of the scheduling of Directed Acyclic
Graphs has been dropped. It was marked as deprecated for a couple of years.
We finally complete the implementation of what has been called SimDag++
internally, i.e., porting the different features of SimDag on top of S4U.
The new way to simulate the execution of dependent activities directly by
maestro (without any other actor) is details in the examples/cpp/dag-* series
of examples.
- The removal of SimDag led us to also remove the export to Jedule files that
was tightly coupled to SimDag. The instrumentation of DAG simulation is still
possible through the regular instrumentation API based on the Paje format.
- We also dropped the old and clumsy Lua bindings to create platforms in a
programmatic way. It can be done in C++ in a much cleaner way now, which
motivates this suppression.
S4U:
- Introduce on_X_cb() functions for all signals, to attach a new
callback to the signal X. The signal variables are now hidden and
only these functions should be used.
Rationale: this enables the usual deprecation scheme where functions
remain for 4 releases if we need to modify the signals, while the
current code with the signal variables directly visible prevents any
smooth transition.
- New function: Engine::run_until(date), to split the simulation.
- New signal: Activity::on_veto, to detect when an activity fails to start.
- Signal change: Comm::on_start(Comm&, bool) has been replaced by
Comm::on_send and Comm::recv. These two signals respectively correspond to
when the sending or receiving side of a Comm is ready. They are raised at
the same locations as the former Comm::on_start signal.
- New function: Engine::track_vetoed_activities() to interrupt run()
when an activity fails to start, and to keep track of such activities.
Please see the corresponding example for more info.
- New functions: s4u::Comm::{sendto_init, set_source, set_destination} to enable
the use of vetoers with direct host-to-host communications. Both source and
destination have to set for a comm to start. Each call to these setters check
if all vetoes are satisfied. When it is the case, the comm starts. A use case of
these functions is given in examples/cpp/dag-scheduling.
- New functions: {Exec, Io}::update_priority allow you to modify the priority of
these kinds of activities during their execution. Behavior is detailed in
examples/cpp/io-priority/.
SMPI:
- Dynamic costs for MPI operations: New API to allow users to dynamically
change injected costs for MPI_Recv, MPI_Send and MPI_Isend operations.
Alternative for smpi/or, smpi/os and smpi/ois configuration options.
- Fix some issues with the replay mechanism.
XBT:
- Function xbt::Extendable::get_data() is now templated with the type of the
pointee. Untyped function is deprecated. Use get_data<void>() if you still
want to retrieve void*.
Documentation:
- New section: "SimGrid MPI calibration of a Grid5000 cluster"
presenting how to properly calibrate MPI communications in SimGrid.
- Complete and reword the platform section, which is now completed.
Python:
- Thread contexts are used by default with Python bindings. Other kinds of
contexts revealed unstable, specially starting with pybind11 v2.8.0.
Fixed bugs (FG#.. -> FramaGit bugs; FG!.. -> FG merge requests)
(FG: issues on Framagit; GH: issues on GitHub)
- FG#95: Wrong computation time for multicore execution after pstate change
- FG#97: Wrong computation time for ptask+multicore+pstates
- FG#98: SMPI offline simulation is inconsistent with the online simulation
(deadlocks / message truncation)
- FG#99: Weird segfault when not sealing an host
----------------------------------------------------------------------------
SimGrid (3.29) October 7. 2021
The "Ask a stupid question" release.
We wish that every user ask one question about SimGrid to celebrate.
On Mattermost, Stack Overflow or using the issues tracker.
New modeling features:
- Non-linear resource sharing, modeling resources whose performance heavily degrades with contention:
- The total capacity may be updated dynamically through a callback
and depends mainly on the number of concurrent flows.
- Examples (both cpp and python): io-degradation, network-nonlinear, exec-cpu-nonlinear
- Dynamic factors: model variability in the speed of activities
- Each action can now have a factor that affects its progression.
This multiplicative factor is applied when updating the amount of work
remaining, thereby an activity with factor=0.5 only uses half of the
instantaneous power/bandwidth it is allocated and will appear twice
slower than what it actually consumes.
- This can be used to model a overhead (e.g., there is a 20 bytes
header in a 480 bytes TCP packet so the factor 0.9583) but the novelty
is this factor can now easily be adjusted depending on activity's and
resources characteristics.
- This existed for network (e.g., the effective bandwidth depends
on the message in SMPI piecewise-linear network model) but it is now
more general (the factor may depend on the source and destination and
thus account to different behaviors for intra-node communications and
extra-node communications) and is available for CPUs (e.g., if you
want to model an affinity as in the "Unrelated Machines" problem in
scheduling) and disks (e.g., if you want to model a stochastic
capacity) too.
- For that, resources can be provided with a callback that computes
the activity factor when creating the action.
- Example: examples/cpp/exec-cpu-factors
- The same mechanism is also available for the latency, which
allows to easily introduce complex variability patterns.
Python:
- Added support to programmatic platform creation in Python.
Example: examples/python/clusters-multicpu
S4U:
- Disk and Host now have a set_sharing_policy() too, for non-linear sharing.
This can only be set through the API, not through XML files.
SMPI:
- TI Tracing/Replay:
- Multiple fixes to ensure reproducibility of tracing
- scan/excan can now be replayed
- wait action now uses ranks and not pid, as the other ones.
- smpi/init and smpi/finalization-barrier are now valid for replays.
- exit() is now intercepted by SMPI to avoid premature shutdown of
simulation. First non 0 return codes is returned as simulation return
code.
Documentation:
* New section "Release Notes" documenting recent and current developments.
* New section "Modeling I/O: the realistic way" presenting how to properly model disks in SimGrid.
* Improvements in API Reference for C++ and Python interfaces.
ns-3 model:
- Make wifi creation compatible with ns-3 version 3.34 too.
Fixed bugs (FG#.. -> FramaGit bugs; FG!.. -> FG merge requests)
(FG: issues on Framagit; GH: issues on GitHub)
- FG#77: Search feature of doc is broken (update sphinx theme version)
- FG#78: Multiple fixes for SMPI replay:
- TI tracing of allotallv/w was outputting wrong values
- MPI_LOGICAL in fortran is actually 32 bits wide, and not 8.
----------------------------------------------------------------------------
SimGrid (3.28) July 14. 2021
The Victoriadagarna Release.
New features:
- C++ platform interface: Users can now describe their platform directly in C++.
This provides greatly flexibility and performance improvement for complex
platforms. Main features:
- Fat-Tree/DragonFly/Torus composing: allows you to create clusters of
"zones", instead of single hosts. This feature enables the description
of clusters with complex hosts, composed of several CPUs, GPUs, etc.
- StarZone: new zone with a Star-like topology. The routes are defined
as a set of links used to communicate from node to everybody (node<->ALL).
- Split-Duplex links: auxiliary method to create split-duplex links in
the platform, easing its utilisation. It automatically creates both UP
and DOWN links (similarly as done in XML).
- Please refer to the documentation and the examples included:
e.g. examples/cpp/clusters-multicpu/ and examples/platforms/*.cpp.
- New plugin: Producer-Consumer with monitor. Just requires to include the
include/simgrid/plugins/ProducerConsumer.hpp header to be used. See the
associated example (examples/cpp/plugin-prodcons).
S4U:
- New: s4u::Comm::wait_all_for() (like s4u::Comm::wait_all, but with a timeout),
s4u::Io::wait_any(), s4u::Io::wait_any_for().
- Methods test_all/test_any/wait_all/wait_any in s4u now take their vector
parameter by reference, instead of a pointer.
- Fixed a bug where Activity::wait_for() killed the activity on timeout.
Explicitly cancel the activity to get back to previous behavior.
- New: Link::set_concurrency_limit() to limit the amount of concurrent flows.
SMPI:
- The default SMPI compiler flags are no more taken from the environment.
They can be explicitly set through cmake parameters SMPI_C_FLAGS,
SMPI_CXX_FLAGS, or SMPI_Fortran_FLAGS.
- New options:
--cfg=smpi/finalization-barrier: which can be used to add
a barrier inside MPI_Finalize. This can help for some codes which cleanup
data attached to a process, but still used in other SMPI processes.
--cfg=smpi/errors-are-fatal: True by default, behaves like if MPI_ERRORS_RETURN
is active when set to false, to keep going after a small error
--cfg=smpi/pedantic: True by default. Do not report some harmless MPI errors
which may or may not be problematic in the end.
- Sampling:
- fix behaviour, as maximum iteration count could be ignored
- add SMPI_SAMPLE_LOCAL_TAG and SMPI_SAMPLE_GLOBAL_TAG macros, to allow user to
use sampling when the same kernel is called with a different set of parameters
which have an impact on the timing.
- realloc is now intercepted, to be coherent, as malloc/calloc/free were already.
It should now work with smpi/auto-shared-malloc-thresh.
- Improve error handling and reporting in multiple places
- Improve correctness checks on the MPI code.(MPI_Op and MPI_Datatype
validity checks, truncated messages are now an error, return errors
when explicitely deleted handles are reused, ...)
- RMA: multiple fixes and stability improvements.
- analysis (-analyze flag in smpirun):
- SMPI can now report buffer leaks as well as MPI handles leaks,
if code was compiled without SMPI_NO_OVERRIDE_MALLOC.
- if -trace-call-location is used when compiling, SMPI can report
origin of leaked handles/buffers
- group leaks by type/origin in output message if possible
- New implemented MPI calls: MPI_Comm_test_inter
Models:
- Changed internal implementation of bandwidth factors in network models.
Models affected: CM02, LV08 (default), SMPI, IB.
Configuration affected: "network/bandwidth-factors" and "smpi/bw-factors".
Bandwidth factors are applied to communications to describe that users
cannot use 100% of the available bandwidth. For example, the default network model,
LV08, applies a factor of 0.97 to the bandwidth. In older versions, this
behavior was implemented by limiting the bandwidth available in the LMM
system for this flow. This may give the false impression that there is
bandwidth available for other flows due to its underutilization, especially
for the dynamic bandwidth factors used in SMPI models.
To avoid this, we have modified the implementation so that each flow uses the
maximum physical bandwidth according to the LMM system.
However, the actual throughput of the flow seen by the user is defined by
the physical bandwidth multiplied by the bandwidth factor.
This change impacts on the simulation results for all network models on
which we have bandwidth factors configured.
*****************************************
*DO NOT MIX 3.28 RESULTS WITH OLDER ONES*
*****************************************
This change may impact on the timing of your simulation results.
Take care when comparing simulations from different SimGrid's
versions. Sorry for the inconvenience.
- Dynamic network factors: users can configure a callback to define
the network factors dynamically. This API is available at
simgrid::kernel::resource::NetworkModelIntf.
- Users have access to complete information about the current communication
to decide which factor to apply. This includes: message size, source and
destination hosts, links and zones traversed.
- Dynamic factors for both latency and bandwidth.
- For more details, see the example in (examples/cpp/network-factors).
- Plugin host_energy: the "watt_off" and "watt_per_state" host properties,
deprecated since version 3.24, are no longer supported. Instead, use
"wattage_off" and "wattage_per_state".
XBT:
- xbt_assert is not disabled anymore, even when built with enable_debug=off.
Documentation:
- New tutorial: Model-checking and formal assessment
- New sections: "Demystifying the routing" and "C++ platforms"
- Update and improve the part on visualization in MPI and Algo tutorials.
- Improve the section on routing: how to define it, how it's used internally
- Fix many issues, broken links and missing references in doxygen and Sphinx
LUA:
- Lua platform files are deprecated. Their support will be dropped after v3.31.
Simix:
- Legacy functions deprecated in this release: SIMIX_get_clock(), SIMIX_run().
Fixed bugs (FG#.. -> FramaGit bugs; FG!.. -> FG merge requests)
(FG: issues on Framagit; GH: issues on GitHub)
- FG#47: Complete and fix tests from teshuite/s4u/activity-lifecycle
- FG#64: Configuring smpi/IB-penalty-factors
- FG#67: Running computation concurrently with MPI_Iallreduce
- FG#69: Tutorial misleading users of pre-v3.26 versions of SimGrid
- FG#71: Segmentation fault on invalid gw_src/gw_dst
- GH#322: Issue when an actor kills his host vm
----------------------------------------------------------------------------
SimGrid (3.27) March 29. 2021
The Ragnar Release (anniversary of the siege of Paris by Vikings in 845)
Main user-visible changes:
- All functions marked as deprecated for one year were removed.
- Removed all that was related to the "Storage" type in all APIs and bindings.
"Disks" have been introduced more than a year ago to replace them for the better.
It's time to finish this replacement.
- SMPI ABI breaks from previous version: MPI global handles (predefined datatypes,
ops, COMM_WORLD) are now defined differently, and can be used in initializers,
avoiding "initializer element is not constant" errors with some codes. Please be
careful to recompile your MPI codes if switching to this new SimGrid version.
- Network model ns-3 now requires version ns-3.28 or higher.
- Removed some option aliases that were deprecated since v3.23 (June 2019)
- 'verbose-exit' is now 'debug/verbose-exit'
- 'simix/breakpoint' is now 'debug/breakpoint'
- 'clean-atexit' is now 'debug/clean-atexit'
S4U:
- New functions: Comm::sendto_{init,async} to initiate a communication
on between two (possibly remote) hosts.
- Define new template functions Mailbox::get_unique(), returning a std::unique_ptr.
- Functions Mailbox::get() and Mailbox::get_async() are now templated with the
type of the pointee. Untyped functions are deprecated. Use Mailbox::get<void>()
or Mailbox::get_async<void>() if you really want to play with void*.
- Unify the interface of Activity::on_{start/activity}
- New function: Comm::get_dst_data()
- New function: Comm::set_payload_size() to set the amount of bytes to simulate.
Models:
- ptask should now work better with multicore hosts (FG#37).
- Internal cleanups and refactoring around activities, to prepare for SimDAG++.
- Internal cleanups and refactoring around models, to prepare for programmatic
platform creation.
- Modernize our tests of the performance models
Documentation:
- User manual:
- New section: Configuring the logs from the command line.
- New section: Programming API of logs.
- New section: Getting realistic results
- New section: Examples of SMPI Usage
- New part: SimGrid's Internals, with a section on Design goals
- Move back to the classical Breathe tool chain, and fix many small glitches.
SMPI:
- Handle leak checking: SMPI will now display a message if MPI handles are still
present at the end of a simulation. Option smpi/list-leaks:n will display the n
first leaked pointers and their types.
- smpi/display-allocs option : Display Memory allocations analysis, with hints
about the largest allocations. This only works for allocations with malloc/calloc
and not compiled with SMPI_NO_OVERRIDE_MALLOC
- "-analyze" option in smpirun will activate smpi/display-allocs and smpi/display-timing
- New implemented MPI calls: MPI_File_set_size, MPI_Aint_add, MPI_Aint_diff,
MPI_Type_get_extent_x, MPI_Type_get_true_extent_x, MPI_Status_set_elements_x
- Support for MPI C++ datatypes (MPI_CXX_BOOL, MPI_CXX_FLOAT_COMPLEX,
MPI_CXX_DOUBLE_COMPLEX, MPI_CXX_LONG_DOUBLE_COMPLEX)
- Replay now opens and parses the trace file only once for all ranks when possible.
- Misc fixes:
- better handling of MPI_PROC_NULL
- MPI_Group_incl was broken in some cases
- PAPI tracing now fixed
- MPI_Errhandlers are properly handled for MPI_COMM_WORLD
- SMPI will now fail properly when receive size < sent size, instead of
just setting MPI_ERR_TRUNCATE and keep going.
- Proxy Apps ( https://framagit.org/simgrid/SMPI-proxy-apps ):
- Remove useless build patches and split build/run patches on the page
- Build in parallel when possible
- Test on yum-based systems
- New nightly tested Proxy-apps:
- OpenMPI mpi-test-suite
- Coral MCB, LSMS, Qbox, CLOMP
- ECP/Mantevo Cloverleaf3D, Ember
- Codevault bhtree_mpi
Model checker:
- Only initialize the Dwarf parser when needed, saving 10 seconds in most cases.
- Start to overhaul the implementation to modernize it (still ongoing).
XBT:
- Drop simgrid::xbt::demangle(). Please use boost::core::demangle() instead.
- Drop xbt_dynar_cursor_rm(), xbt_dynar_search_or_negative(),
xbt_str_split_quoted(), xbt_str_split_quoted_in_place().
- Deprecate xbt_dynar_to_array().
- When an exception occurs in kernel mode, display both the actor and kernel stacks.
C binding and interface:
- Rename (lowercase) functions sg_actor_get_PID, sg_actor_get_PPID, sg_actor_by_PID.
- Constness requirement has been lowered for parameter argv of sg_actor_start()
and sg_actor_create() It's now (char* const*). The previous version is still
available as sg_actor_start_() and sg_actor_create_().
Fixed bugs (FG#.. -> FramaGit bugs; FG!.. -> FG merge requests)
(FG: issues on Framagit; GH: issues on GitHub)
- FG#37: Parallel tasks are limited to 1 core per host
- FG#62: Running "smpirun -replay" on large networks
- FG!46: Fix a few potential memory leaks in SMPI colls
- GH#343: Wrong consumed energy when an exec timeouts
----------------------------------------------------------------------------
SimGrid (3.26) December 15. 2020
The Release release (the French lockdown was eased today).
Important user-visible changes:
- SimGrid now requires a compiler with C++14 support.
Sibling projects should upgrade their FindSimGrid.cmake
- Surf precision default value is now 1e-9, instead of 1e-5. This was changed as
several users had difficulties to understand issues when using high bandwidth or
small latency events. The new value was already the default for SMPI and
should not cause too much performance hit. It can change some simulation
timings if simulation was skipping a lot of small events (which was actually
an issue per see). The old value can be restored with --cfg=surf/precision:1e-5.
- On some network models (L07, CM02, LV08), an implicit loopback link is created
for local communication. Default bandwidth was 500MBps and latency was 15µs,
which was rather bad. Default values have been changed to 10GBps and 0 latency.
Options network/loopback-lat and network/loopback-bw have been added to adapt
these values if needed. Network and routing models already providing separate
loopbacks (clusters and such) are not impacted by this change.
- SMPI now adds 16 bytes of header to each message sent, in order to simulate
metadata that are added to each MPI message by MPI libraries (tag,
src/dest, and communicator information). This may change simulation times
for very small message sizes, but should be more realistic.
New features:
- New routing 'WiFi' that makes it easier to specify a wifi network zone.
- New plugins: wifi_energy and link_load. See the associated examples.
- New examples: wifi networks, and communication suspend.
General:
- LTO is now enabled for Intel/clang compilers.
- LTO behavior on GCC can be parameterized using LTO_EXTRA_FLAG in cmake.
Setting it to "auto" will use all available cores, while setting it to n will
use n cores to speedup link step (usage: cmake -DLTO_EXTRA_FLAG=4).
- Remove obsolete runtime option 'contexts/parallel-threshold'.
- Runtime option 'tracing/msg/process' renamed to 'tracing/actor'. The old name
has been kept for compatibility.
- Finally remove obsolete snake_case() aliases for runtime options.
- Further improve the documentation.
S4U:
- the on_exit() of each actor is also executed when the simulation deadlocks.
- New functions: s4u::Activity:: suspend(), resume() and is_suspended()
An example is provided for s4u::Comm but it should work with Exec and Io.
SMPI:
- Update proxy apps coverage of new ECP apps: 60+ apps now tested nightly on
https://framagit.org/simgrid/SMPI-proxy-apps
- MPI/IO: supports names starting with "./"
- Fortran: many MPI/IO bindings, support for MPI_UB/LB, C MPI_INT/FLOAT/DOUBLE
datatypes.
- smpicc/cxx/ff/f90 now will actually perform definition checks at link time. When
building shared libraries, this may cause issues, so environment variable
SMPI_NO_UNDEFINED_CHECK can be added to disable this.
- most temporary files should now be created in /tmp dir (or equivalent).
If this one does not allow execution of code (noexec flag), this may cause issues.
Please use another tmp directory (using TMPDIR or equivalent system variable)
in this case.
Model-Checker:
- A large refactoring is ongoing, but this should be transparent for users so far.
XBT:
- Drop xbt_str_split().
C binding and interface:
- The return type of the sg_actor_on_exit() callbacks is now 'void'
(int value was previously ignored)
- Many C functions were renamed to follow a common naming style
(sg_object_get_something and sg_object_set_something). As usual, the deprecated
names are kept until version 3.30.
- Many MSG tests were converted to the new S4U's interface in C, that
was extended for that.
Fixed bugs (FG#.. -> FramaGit bugs; FG!.. -> FG merge requests)
(FG: issues on Framagit; GF: issues on GForge; GH: issues on GitHub)
- FG#41: Add sg_actor_create C interface
- FG#43: xbt::random needs some care
- FG#48: The Impossible Did Happen (yet again)
- FG#50: Suspending an actor executed at the current timestamp fails
- FG#52: Zero-seconds timeout : "That's in the past already"
- FG#53: Crash while using ns-3 network model
- FG#54: How to suspend a comm?
- FG!22: Stochastic Profiles
- FG!24: Documentation and fix for xbt/random
- FG!35: Add a modeling hint for parallel links in doc
- FG!36: [xbt/random] Read/Write the state of the RNG
- FG!42: Link cumulated load plugin
- FG!44: Test condition variable wait_until+notify_all
- GF#18137: Allow different stack sizes?
- GH#128: Parallelization of simulation with --cfg=contexts/nthreads
- GH#139: Allow pthread creation in SMPI
- GH#336: Packet-level simulation using SMPI?
- GH#345: Error in the LMM while migrating a VM
- GH#346: [SMPI] error while loading shared libraries: libsimgrid.so
- GH#352: pip install / python setup.py install fail to find pybind11
- GH!337: Fix link_energy plugin for wifi platforms
- GH!339: Add Mailbox set_receiver method to python binding
- GH!344: Cast hugepages macros parameters to int64
----------------------------------------------------------------------------
SimGrid (3.25) February 2. 2020 (aka 02 02 2020)
The Palindrom Day Release.
Important user-visible changes:
- Improve the Python usability (stability and documentation).
- A nasty synchronization bug was ironed out, see also below.
- Python's doc was organized as a separate tree, now integrated with C++.
- C bindings of S4U were not part of the doc.
- The C++ doc was also improved as methods are now split by theme.
- Further deprecate MSG: you now have to pass -Denable_msg=ON to cmake.
- This is mandatory to use the Java bindings.
- OFF by default; The plan is to completely remove MSG by 2020Q4 or 2021Q1.
- SimDAG++: Automatic dependencies on S4U activities (experimental)
- Some features are already implemented but not all of them
- Cannot block an activity until it's scheduled on a resource
- No heterogeneous wait_any() that would mix Exec/Comm/Io activities.
- See examples/s4u/{io,exec,comm}-dependent for what's already there.
General:
- Upgrade documented Java dependency to Java 8 (earlier versions don't work).
- Drop support for Viva/Triva (old visualization tools), hence removed
TRACE_get_node_types() and TRACE_get_edge_types() functions.
Python:
- Require pybind11 version 2.4.
- Greatly improve locking during context switches with Python.
- Declaring Python callbacks to this_actor::on_exit is now working.
- No more tests are failing currently, even on win32.
S4U:
- Actor: Merge signals on_migration_start/end into on_host_change
- Actor: Rename migrate() into set_host()
- Disk: Allow users to get the read and write nominal bandwidth values
- Exec: Implement wait_for(timeout)
- Io: Implement wait_for(timeout)
XML:
- Parse errors now raise a simgrid::ParseError that you may want to catch.