Compare commits

...

358 Commits

Author SHA1 Message Date
Raúl Peñacoba Veigas
9826879bcd Add OpenMP support for labels and taskID views
Some checks failed
CI / build:rt (push) Failing after 15s
CI / build:debug (push) Successful in 13s
CI / build:asan (push) Failing after 13s
CI / build:nompi (push) Successful in 13s
CI / build:compilers (push) Successful in 13s
CI / build:local (push) Successful in 23s
Co-authored-by: Rodrigo Arias Mallo <rodrigo.arias@bsc.es>
2024-12-09 16:41:16 +01:00
a7103f8510 Release version 1.11.0 2024-11-08 10:26:10 +01:00
Aleix Boné
d931a68b3e
Set cfg colors for nosv_cond apis 2024-11-08 10:13:01 +01:00
Aleix Boné
a297adab7a
Add tests for nosv_cond 2024-11-08 10:13:00 +01:00
Aleix Boné
b5fd438ce0
Add nosv_cond API events (nosv 3.1.0) 2024-11-08 10:13:00 +01:00
Aleix Boné
a4a5bf0d37
Update nosv 2024-11-08 10:13:00 +01:00
180ac51aea Use fixed clock for sort-into-previous-region test
With large values of clocks, awk starts to lose precision due handling
the time as floating point values, which causes the test to fail. By
always setting the clock of the events to a known value we can just
compare the outcome as-is, without performing any arithmetic operation.

Fixes: https://pm.bsc.es/gitlab/rarias/ovni/-/issues/205
2024-11-06 11:51:57 +01:00
73b19ca1c4 Allow setting manual clock for emu events 2024-11-06 11:51:55 +01:00
31e8802803 Allow partial CPUs in thread metadata 2024-11-05 10:56:51 +01:00
fe860b2e38 Add partial-cpus test 2024-11-05 10:56:29 +01:00
60b575c8f8 Add python3 dependency for openmp 2024-10-29 09:42:03 +01:00
3a20cb717c Update runtimes, clang and ovni commits for CI 2024-10-29 09:41:58 +01:00
3bbfe0f0ec Update changelog 2024-10-25 14:39:41 +02:00
04d984d4fc Make cpu index check more strict 2024-10-25 14:22:37 +02:00
05c4ed4963 Remove info() call leftover in libovni 2024-10-25 14:22:37 +02:00
7cf69d055a Remove ovni as explictly required model
It is already added as a requirement in ovni_thead_init().
2024-10-25 14:22:37 +02:00
4c80cb3ed1 Fix typos in docs and extend CPU index usage 2024-10-25 14:22:32 +02:00
4c5e3ae151 Make all atomic operations explicit 2024-10-25 13:41:15 +02:00
86d0d11869 Add trace diagram and organize concepts 2024-10-25 13:41:15 +02:00
bf8c609dbd Remove trailing slashes from tracedir 2024-10-25 13:41:15 +02:00
706aa4a787 Rename trace-model.md to just trace.md 2024-10-25 13:41:15 +02:00
dd5b85d2c8 Add examples in some trace concepts 2024-10-25 13:41:15 +02:00
53aa3b3679 Add example program for mark API 2024-10-25 13:41:15 +02:00
6c33a2f4c0 Document environment variables 2024-10-25 13:41:15 +02:00
ea77f3d72e Fix unit-stream test 2024-10-25 13:41:15 +02:00
c190d27467 Remove tracing.md 2024-10-25 13:41:15 +02:00
ecf4c5da8c Update trace specification to version 3 2024-10-25 13:41:15 +02:00
6285a47f72 Explain some concepts in the documentation 2024-10-25 13:41:15 +02:00
5d4fa15eb9 Change hyperlinks to point to .md files
Allows mkdocs to discover broken links when the pointed document has
moved.
2024-10-25 13:41:15 +02:00
bb4e4d7e56 Emit rank information after ovni_thread_init 2024-10-25 13:41:15 +02:00
c9bbd542c5 Store rank information in the libovni thread
Prevents threads from finishing while another thread is being
initializing the rank information, causing a race to read the rank and
nranks.
2024-10-25 13:41:15 +02:00
6e99d91dae Use atomics to protect libovni process state
Multiple threads may attempt to initialize or finalize the process, so
we keep the state stored in an atomic integer to protect against bad
usage.
2024-10-25 13:41:15 +02:00
4c2071e906 Make calling ovni_thread_require() optional
When only emitting ovni events, there is no need to explicitly require
the ovni model, as libovni will already pre-populate it for the user.
2024-10-25 13:41:15 +02:00
b49671d530 Always require the current ovni model 2024-10-25 13:41:15 +02:00
5c11c469f2 Make ovni.require a mandatory attribute
We no longer accept streams that don't have the ovni.require attribute.
2024-10-25 13:41:15 +02:00
361290e24f Parse metadata from proc and loom directly
All the metadata keys are known to proc and loom only, making it
self-contained. The metadata.c module is no longer needed.
2024-10-25 13:41:15 +02:00
65d1a5ecec Add merge-cpus-loom test
Ensure we can merge the information of CPUs from multiple threads.
2024-10-25 13:41:15 +02:00
6af367ba76 Fix spawn-task-external test
It is mandatory to call ovni_thread_free().
2024-10-25 13:41:15 +02:00
65907a96f4 Update tmpdir-metadata test 2024-10-25 13:41:15 +02:00
05c1724234 Move thread streams in ovni_thread_free()
The process metadata in metadata.json is no longer needed.
2024-10-25 13:41:15 +02:00
4180300e87 Reject incomplete thread streams 2024-10-25 13:41:15 +02:00
c61f5a8772 Ensure the thread is ready before adding cpus 2024-10-25 13:41:15 +02:00
fdcff58318 Fix unit tests 2024-10-25 13:41:15 +02:00
72e60e97ea Store .obs and .json paths in stream struct 2024-10-25 13:41:15 +02:00
132b2fd536 Store loom CPUs in thread metadata 2024-10-25 13:41:15 +02:00
12835ad23a Store process information in thread metadata 2024-10-25 13:41:15 +02:00
06a2262db9 Load thread tid from metadata 2024-10-25 13:41:15 +02:00
cc5578e306 Store loom name in metadata instead of path 2024-10-25 13:41:15 +02:00
8765588667 Store ovni.part in stream metadata
Allows multiple types of streams for different system parts: thread,
process, cpu, node...
2024-10-25 13:41:15 +02:00
9a8dc382a2 Store stream metadata in stream.json
Place all stream files in its own stream directory.
2024-10-25 13:41:15 +02:00
85859a488d Add more path utility functions 2024-10-25 13:41:15 +02:00
e54e3e684e Store TID and PID in thread metadata 2024-10-25 13:41:15 +02:00
17c74d2e32 Increase version metadata to 3 2024-10-25 13:41:15 +02:00
c60f22f7f7 Update mkdocs to 1.6.0 2024-09-13 09:38:40 +02:00
36cf3121d1 Fix implicit signed conversions
Some checks failed
CI / build:rt (push) Failing after 12s
CI / build:asan (push) Failing after 12s
CI / build:nompi (push) Successful in 59s
CI / build:debug (push) Successful in 1m50s
CI / build:local (push) Successful in 2m2s
CI / build:compilers (push) Successful in 2m27s
2024-09-09 13:44:05 +02:00
c8b95313ff Fix unaligned access to 64 bits payload 2024-09-09 13:44:05 +02:00
e5448af6d8 Rebuild ring buffer pointers after injecting events
The ring buffer pointers are no longer valid as we may have displaced
events around. The pointers of the affected region are reconstructed by
reading the events again, following their size.
2024-09-09 13:43:59 +02:00
49149e452c Check ring buffer order after injecting events
Ensure that we are not reading garbage.
2024-09-09 09:10:04 +02:00
b2d91391b3 Add sort-into-previous-region emu test 2024-09-09 09:10:04 +02:00
13f70be87b Set nOS-V version required for tests to 2.3.1
Includes the required fixes for the kernel ring buffer tests.
2024-09-09 08:51:04 +02:00
71aa33d22f Use string to set ovni.kernel_ringsize 2024-09-09 08:51:04 +02:00
4c3da12ea1 Fix typos in nOS-V kernel test 2024-09-09 08:51:04 +02:00
a47082730a Ensure that nOS-V aborts on ring overflow 2024-09-09 08:51:04 +02:00
99dc3904af Add overflow and normal kernel nOS-V tests 2024-09-09 08:51:04 +02:00
acf18c1bb4 Make nOS-V kernel overflow test configurable 2024-09-09 08:51:04 +02:00
e9788e22ad Add test kernel ring overflow test for nOS-V
There is a problem in the way we are reading the buffer in nOS-V, which
fails when the ring buffer gets full. This regression test ensures it is
fixed.

Reported-by: David Álvarez <david.alvarez@bsc.es>
2024-09-09 08:51:04 +02:00
6cb983a7c4 Update nOS-V commit 2024-09-09 08:51:04 +02:00
7496a6a866 Fix easy cases of unneeded casts 2024-09-09 08:28:08 +02:00
c8750b9dfd Enable -Wconversion and -Wsign-conversion
Prevents implicit conversions to go undetected, as they will have to be
explicit now.
2024-09-09 08:28:02 +02:00
d98ca97624 Fix unaligned load of 4 bytes for typeid
Use memcpy() to move the typeid to an aligned address.
2024-07-29 13:17:37 +02:00
61d57901b1 Enable undefined behavior sanitizer in CI 2024-07-29 13:09:41 +02:00
9c82038561 Add release link to tag 1.10.0 2024-07-26 16:20:34 +02:00
15dfa48d2d Release version 1.10.0 2024-07-26 13:25:43 +02:00
2457e50712 Use always base 10 integer formats with scanf()
The %i printf variant tries to autodetect the base, so 010 becomes 8.
2024-07-24 16:36:54 +02:00
92c36502bc Reduce heat and fibonnacci test sizes 2024-07-24 16:09:47 +02:00
439b716a71 Use int64_t printf formats for mark channels 2024-07-24 16:09:47 +02:00
97282ff051 Increase test timeout to 60 seconds 2024-07-24 16:09:47 +02:00
093c91521a Fix error format strings in mark API 2024-07-24 16:09:44 +02:00
74aa7b4ea6 Update changelog 2024-07-24 15:12:09 +02:00
3d8c84e17c Fix heap when size_t is not unsigned long long
When the width of size_t doesn't match the width of the unsigned long
long type, the number of leading zeros doesn't match, making the
heap_get_move() function return incorrect values. This is the case on
ARMv7 with 32 bits, where size_t is 32 bits but unsigned long long is 64
bits.

We check the size of size_t to select which builtin we need. The sizeof
operator cannot be used at preprocessing, so we rely on the
optimizations to only leave the proper assembly instruction.

Fixes: https://pm.bsc.es/gitlab/rarias/ovni/-/issues/193
2024-07-24 15:12:09 +02:00
91e8367d35 Set timeout to 30 seconds for tests 2024-07-24 15:12:09 +02:00
129020e1c5 Fix format errors in printf-like functions 2024-07-24 15:12:09 +02:00
d03fe10be8 Protect printf-like calls against format errors 2024-07-24 15:12:09 +02:00
3fdbb95080 Fix remaining problems for 32 bits architectures 2024-07-24 15:12:09 +02:00
Miquel Vidal i Pinyol
3103018404 Use format macro constants for fprintf and fscanf family functions 2024-07-24 15:12:09 +02:00
Miquel Vidal i Pinyol
478ed1f5d0 Use proper format specifiers
Allows compiling for architectures with different data type sizes
2024-07-24 15:12:09 +02:00
42feb53c86 Cross compile for ARMv7, Aarch64 and RISC-V 64
Adds CI cross-compilation tests for those architectures. Requires the
host to be able to run thos binaries via binfmt.

See: https://docs.kernel.org/admin-guide/binfmt-misc.html
2024-07-24 15:12:09 +02:00
391d695144 Add mark API to the changelog 2024-07-23 10:35:08 +02:00
038b9d8564 Document usage rules for the mark API 2024-07-23 10:35:08 +02:00
5448b5c0ec Check duplicated mark channel types are the same
Ensure that two threads cannot define the same mark type with different
channel types.
2024-07-23 10:35:08 +02:00
be45235d15 Improve documentation of the mark API 2024-07-23 10:35:08 +02:00
87e4b829c5 Switch the mark tracking for threads to active
In the thread view, the values will still be visible when the thread
goes to Warming or Cooling states, instead of being removed like when
the thread enters the Paused state. The CPU view will continue to track
the running thread (only in the Running state).
2024-07-23 10:35:02 +02:00
1ab605b70d Fix calloc() argument order
Catched by a new gcc 14.1.1 warning.
2024-07-22 16:45:29 +02:00
fbb78ae22d Avoid initialization of mark channels without types
There is no need to create any channel or connect any channel to the PRV
output.
2024-07-22 16:42:23 +02:00
a21dc76d81 Use 100 as example mark type
As the types for mark timelines start at 100, it is likely that it
matches in the first try.
2024-06-21 09:45:54 +02:00
49cecb798a Don't allow zero in PRV for mark channels
As the zero value is not allowed to reach the mark channels, there is no
need to allow it in the PRV end.
2024-06-21 09:39:32 +02:00
e31f0f1ded Add fibonacci and heat RT tests for mark API 2024-06-20 17:39:42 +02:00
43792fb349 Clarify push and pop value in mark API 2024-06-20 11:48:31 +02:00
d6a83a0520 Allow duplicate values in mark channels 2024-06-20 11:41:38 +02:00
c803a7566f Prevent zero values in the mark API
These values cannot be differentiated from a null value, due to a
Paraver limitation.
2024-06-20 11:41:09 +02:00
670edb6ddc Add documentation for the mark API
Includes the runtime usage as well as how to adjust the Paraver
configuration.
2024-06-20 11:08:29 +02:00
f5d1e0a3cb Add example mark configurations 2024-06-20 11:07:49 +02:00
a58b3d194c Add CPU output for mark channels
By default they are configured to track the running thread.
2024-06-19 13:48:18 +02:00
d9180d950b Make mark thread channels show only when running
Implements support for tracking the running thread using the track API.
2024-06-19 13:15:16 +02:00
9da7234684 Pause one thread in mark API emu test.
The Paraver timeline should hide the value of the thread while it is
paused. This will require adding a tracking module with a mux.
2024-06-19 13:13:18 +02:00
610b1223d9 Update version docs for ovni model 1.1.0 2024-06-19 12:26:58 +02:00
6954f05dee Update mark test to for single and stack types 2024-06-19 12:26:35 +02:00
db57136f1b Allow the value zero in marks
When using the mark API to track a counter, it is posible that the value
zero is being emitted as it will be properly displayed using the
gradient view in Paraver.
2024-06-19 12:26:35 +02:00
2c111fd98c Add ovni_mark_set() to the API
Allows emitting a single event to change the value of the mark channel.
The mark type must be defined as single without the MARK_FLAG_STACK
flag.
2024-06-19 12:26:35 +02:00
90f8ae4188 Allow marks without labels defined
The labels are optional, so they shouldn't be required when processing
the mark types.
2024-06-19 12:26:35 +02:00
b4d445b378 Write mark PCF types for thread PVT 2024-06-19 12:26:35 +02:00
ea79c90c89 Connect mark channels to PRV
There must be one channel per thread and type.
2024-06-19 12:26:35 +02:00
1b2f72cc3a Store mark labels into a hash table
Multiple threads can define the same values as long as the labels match.
They will be combined into a single hash table by value.
2024-06-19 12:26:35 +02:00
505245d54c Implement emulator logic to parse mark metadata
The marks are parsed from the metadata definition, then merged from all
threads and a new channel for each mark type is created. The channel
type is specified using a flag when calling ovni_mark_type(), so the
channels is set to single or stack. For now, only ovni_mark_push() and
ovni_mark_pop() are implemented.
2024-06-19 12:26:35 +02:00
93ab5a5833 Add ovni_mark_* API to store custom states
In order to allow easy debugging of some programs and runtimes, it is
often neccessary to add extra information in the timeline views. The
modification of the emulator to accomodate those temporal events is time
consuming and requires knowlegde of the emulator internals.

To improve the situation, a new set of functions are added to libovni
which allow users to define their own views. Up to 100 types of events
can be declared, where each type can have an unlimited number ov values
with an optional label attached.
2024-06-19 12:26:35 +02:00
247ea7e7c3 Add nosv.can_breakdown attribute check
The nosv.can_breakdown attribute states if enough events for the
breakdown model of nOS-V are enabled at runtime. It is used to ensure
that breakdown traces have the progress events enabled along with others
required for proper visualization of traces.

The emulator will panic when the level is not enough, instead of relying
on users to always remember to enable the correct level.
2024-06-18 12:06:42 +02:00
d1e8a62396 Add API to manage metadata in streams
The ovni_attr_* set of functions allows users to write and read metadata
stores in the thread stream. The metadata information is available to
the emulator at the beginning of the emulation.
2024-06-13 11:09:40 +02:00
2ac67cff18 Update CHANGELOG for nOS-V breakdown 2024-06-12 16:52:30 +02:00
eed2273ddf Add nOS-V docs for idle and breakdown views 2024-06-12 16:52:30 +02:00
31d6eb076c Add unknown subsystem state for nOS-V breakdown
It will appear when the emulator knows that a thread is running in the
CPU, but no subsystem has been entered yet. This is common a
instrumentation level lower than 3 in nOS-V.
2024-06-12 16:52:30 +02:00
bb5e406af3 Set a default value for empty task type labels 2024-06-12 16:52:30 +02:00
aab33ccfab Add Nodes RT tests with breakdown enabled 2024-06-12 16:52:30 +02:00
98164afc90 Update nOS-V state colors in paraver CFG 2024-06-12 16:52:30 +02:00
819e83d138 Add RT breakdown tests for nOS-V
The nOS-V version required is now 2.3.0.
2024-06-12 16:52:30 +02:00
16b9b2ba85 Update nOS-V commit for RT tests 2024-06-12 16:51:57 +02:00
9d94189165 Increase nOS-V model version to 2.2.0
The new progressing state events VP{pra} cause a minor version bump in
the nOS-V model.
2024-06-12 10:25:24 +02:00
David Alvarez
9fb53df45d nOS-V Breakdown 2024-06-12 10:15:59 +02:00
92cc779caf Make chan_pop() error more clear
Fixes: https://pm.bsc.es/gitlab/rarias/ovni/-/issues/188
2024-06-11 09:19:35 +02:00
e3d72fb14e Release version 1.9.1
All checks were successful
CI / build:debug (pull_request) Successful in 1m21s
CI / build:local (pull_request) Successful in 1m47s
CI / build:compilers (pull_request) Successful in 1m37s
CI / build:nompi (pull_request) Successful in 1m39s
CI / build:rt (pull_request) Successful in 1m53s
CI / build:asan (pull_request) Successful in 2m21s
CI / build:rt (push) Successful in 13s
CI / build:debug (push) Successful in 13s
CI / build:asan (push) Successful in 13s
CI / build:nompi (push) Successful in 13s
CI / build:local (push) Successful in 21s
CI / build:compilers (push) Successful in 20s
2024-05-10 15:31:38 +02:00
014152fc89 Fix warning with gcc 11.3.1
All checks were successful
CI / build:debug (pull_request) Successful in 1m20s
CI / build:compilers (pull_request) Successful in 1m35s
CI / build:nompi (pull_request) Successful in 1m40s
CI / build:local (pull_request) Successful in 1m48s
CI / build:rt (pull_request) Successful in 1m54s
CI / build:asan (pull_request) Successful in 2m20s
CI / build:rt (push) Successful in 13s
CI / build:debug (push) Successful in 13s
CI / build:asan (push) Successful in 13s
CI / build:nompi (push) Successful in 13s
CI / build:local (push) Successful in 21s
CI / build:compilers (push) Successful in 20s
Reported-by: Kevin Sala <kevin.sala@bsc.es>
2024-05-10 15:25:23 +02:00
3a300c816e Fix breakdown model forbidden value 0 error
All checks were successful
CI / build:local (pull_request) Successful in 2m4s
CI / build:debug (pull_request) Successful in 1m7s
CI / build:rt (pull_request) Successful in 2m32s
CI / build:compilers (pull_request) Successful in 1m12s
CI / build:nompi (pull_request) Successful in 1m17s
CI / build:asan (pull_request) Successful in 2m7s
CI / build:debug (push) Successful in 3s
CI / build:asan (push) Successful in 3s
CI / build:rt (push) Successful in 13s
CI / build:nompi (push) Successful in 12s
CI / build:local (push) Successful in 21s
CI / build:compilers (push) Successful in 20s
When a event causes a new value in the sort module, the first time it
will write all output values, which most of them will be zero. Writting
a zero value is forbidden by default, so we relax the constraint with
the PRV_ZERO flag.
2024-05-09 15:36:58 +02:00
8c8bde4a0f Add emulation test for breakdown zero values 2024-05-09 15:36:58 +02:00
0c64f62d01 Add Nanos6 breakdown test for runtime 2024-05-09 15:36:58 +02:00
d5d5f2fcd4 Add Gitea CI workflow
All checks were successful
CI / build:debug (pull_request) Successful in 1m17s
CI / build:compilers (pull_request) Successful in 1m53s
CI / build:nompi (pull_request) Successful in 2m1s
CI / build:local (pull_request) Successful in 2m14s
CI / build:rt (pull_request) Successful in 2m23s
CI / build:asan (pull_request) Successful in 3m29s
CI / build:rt (push) Successful in 13s
CI / build:debug (push) Successful in 13s
CI / build:asan (push) Successful in 13s
CI / build:nompi (push) Successful in 12s
CI / build:local (push) Successful in 21s
CI / build:compilers (push) Successful in 20s
2024-05-09 15:36:39 +02:00
51269a478b Release version 1.9.0 2024-05-02 12:08:22 +02:00
bf3165af8b Open Paraver windows at (100,100) instead of (0,0)
In Mac OS, the top menu bar is placed above any window, causing the
timelines being opened at (0,0) appear under it in such a way that the
timeline title bar is not reachable by the mouse, making it hard to
move.

This simple solution opens the windows a bit away from the top left
corner, at (100,100).

Fixes: https://pm.bsc.es/gitlab/rarias/ovni/-/issues/180
2024-03-28 10:55:02 +01:00
bd629136ef Fix the color for the delegate subsystem state 2024-03-27 12:05:59 +01:00
e3bd221d01 Run nOS-V mutex and barrier tests on level 3
The mutex and barrier API events are only emitted on level 3 or above.
2024-03-27 12:05:59 +01:00
8f1f7a2040 Update nOS-V commit 2024-03-27 12:05:56 +01:00
eb1fc0f7da Add nosv barrier API event 2024-03-22 16:58:14 +01:00
aaa7769448 Add nosv mutex API events 2024-03-22 16:56:25 +01:00
70f34e9e33 Fail fibonacci test on nOS-V kernel warnings
Some threads may fail to enable the kernel instrumentation by reaching
the memory lock limit, causing the kernel instrumentation to be disabled
without any error in the emulation.

To prevent this situation, we run the test manually and check that there
are no warnings during the execution.
2024-03-22 15:40:42 +01:00
c7dbf643d3 Implement outlined fibonacci test too 2024-03-22 15:40:38 +01:00
4fba6cd10e Update CHANGELOG 2024-03-21 17:15:46 +01:00
37a567299e Add a fibonacci test to cause context switches
The test creates tasks that pause until the children task have finished.
The value of the perf_event_paranoid file is checked to determine if we
can run the test.
2024-03-21 17:07:19 +01:00
d1e4f46128 Implement level parameter in nodes tests
The level is used to override the nOS-V configuration for the ovni.level
value.
2024-03-21 16:15:45 +01:00
7cd4fa2bf0 Fix indentation in test/rt/nosv/CMakeLists.txt 2024-03-21 16:15:07 +01:00
6aff4388eb Panic on events when the thread is preempted
When the thread is not running on the CPU it shouldn't be able to emit
events. A new emulation test ensures the emulation fails if it happens.
2024-03-20 15:55:43 +01:00
31fa1508f7 Mark threads out of CPU by kernel events 2024-03-20 15:50:46 +01:00
d1312ff6e9 Fix definitions for kernel context switch events 2024-03-20 12:27:47 +01:00
f4296c66e4 Release version 1.8.0
It is the 888 commit :-)
2024-03-18 11:18:46 +01:00
Raúl Peñacoba Veigas
7cb67ecaee Update flake.nix llvm pinned commit to b813108e 2024-03-15 15:53:10 +01:00
31c3c965c7 Increase Nanos6 model minor version
As Nanos6 now emits pause events for the parent task before nesting
another one, we increase the minor so the old emulator rejects new
traces that come with the new pause events.
2024-03-14 14:43:05 +01:00
2c58a6058b Document version changes in emulator models
A consistency check ensures that all versions reported by the emulator
appear in the documentation as the latest version. This prevents
forgetting updating the version in the documentation.
2024-03-14 13:56:37 +01:00
929cc12c04 Make attach-old nOS-V RT test fail now
The new nOS-V emulation version 2.0.0 is no longer compatible with the
old traces.
2024-03-13 17:44:13 +01:00
0404304803 Add task labels to rt-nodes-taskiter test 2024-03-13 17:44:13 +01:00
f8fdcc0a79 Add Nanos6 emu test to check strict nesting model 2024-03-13 17:44:13 +01:00
3e5b949c4e Add nOS-V RT parallel task tests
The runtime tests check that we can submit and inline task (which must
emit a pause event before the nested task begins) and that we can run
parallel tasks.
2024-03-13 17:44:13 +01:00
f81c5695f1 Update nOS-V commit to test parallel tasks 2024-03-13 17:44:02 +01:00
096775f08f Add copyright headers to cmake modules 2024-03-13 17:07:32 +01:00
24324ae734 Add parallel task and update old emu tests
All task-related events now require the body id as argument.
Additionally, in nOS-V, nested tasks require the parents to be paused.
2024-03-13 17:07:32 +01:00
50837d6173 Port Nanos6 model to tasks with bodies
For now we still allow Nanos6 to use the relaxed nest model, so a nested
task can begin the execution without the parent being paused.
2024-03-13 17:07:32 +01:00
815633221d Port nOS-V model to task bodies
The nOS-V events are modified in two ways: 1) to create a parallel task
the new VTC event must be used and 2) all task events for both normal
(VTc) and parallel (VTC) tasks require an extra argument in the payload
to indicate the body id. As a consequence, the nOS-V model version is
now increased to 2.0.0.

Additionally, all the channel PRV flags are set to PRV_SKIPDUPNULL, so
duplicates are only emitted if they are not null. It solves the problem
when a task switches to another task with the same body id.

A new Paraver configuration is added for the body id.
2024-03-13 17:07:26 +01:00
27a23f25ca Update task model to use bodies
The task model is now integrated with the body model. A normal task can
only have one body, while a parallel task can have more.

It inherits the restriction that a task body cannot be nested over
another one unless it is paused (or the relaxed nest model is enabled).
2024-03-12 12:37:58 +01:00
a0e7fad83e Add body model for tasks
The new task body model (or just body model) allows a task to have
multiple bodies. Generally a body is mapped to the execution of the same
user code of the task with specific input arguments.

The body model can constraint if a given body can be paused or re-run
again (resurrect).

Additionally, the body model can run multiple nested bodies but with the
restriction that the parent body should be paused first. This condition
can be relaxed with the BODY_FLAG_RELAX_NESTING flag.
2024-03-12 12:37:09 +01:00
bdd5696641 Add PRV_SKIPDUPNULL flag
This flag allows to only skip duplicates if the value is null, otherwise
the value is emitted. Invalid combinations of PRV_* flags are also
checked on prv_register().
2024-03-12 12:37:09 +01:00
989685b134 Release version 1.7.0 2024-03-12 12:24:47 +01:00
55318d9da7 Update OpenMP emulation model
Add more tests, subsystem states and documentation.
2024-03-12 11:35:18 +01:00
Raúl Peñacoba Veigas
bf2b3b73a0 Add OpenMP emulation model
For now it only has support for subsystems

Co-authored-by: Rodrigo Arias Mallo <rodrigo.arias@bsc.es>
2024-03-08 13:04:45 +01:00
454504d0cc Poison usleep()
It has been deprecated in POSIX.1-2001 and removed in POSIX.1-2008.
2024-02-20 14:01:18 +01:00
Raúl Peñacoba Veigas
3e7006cec7 Change usleep() to sleep_us() in RT tests 2024-02-20 14:01:18 +01:00
4993197fb9 Add nOS-V attach and detach API events
Instead of showing the "attached" state with the VH{aA} events, we show
when the call to nosv_attach() and nosv_detach() take place. The old
VH{aA} events are now ignored. Bumps the nOS-V model version to 1.1.0.
2024-02-15 17:59:41 +01:00
233e35e8ff Release version 1.6.0 2024-02-14 14:48:41 +01:00
4d95f046ea Add nosv nested init RT test 2024-02-13 16:24:37 +01:00
7a62e396cb Update nOS-V version for nested RT tests 2024-02-13 16:24:37 +01:00
68fc8b0eba Encode ovnievents output for HTML 2024-01-30 12:02:02 +01:00
df0e7b2bd4 Test generated events match documentation
The test ensures that the generated documentation of emulation events is
kept up to date. To locate the events.md file, the source root path is
now exported to tests in OVNI_SOURCE_DIR.

The "Built on ..." message with the date of the build is removed as
otherwise it will always make the comparison fail.
2024-01-30 12:02:02 +01:00
402ea82847 Update CHANGELOG.md 2024-01-30 12:02:02 +01:00
e4da326c76 Update emulator event list
Generates the emulation event list by using the ovnievents tool.
2024-01-30 12:02:02 +01:00
028aa48b98 Add ovnievents tool to dump event definition
The tool dumps the list of events in Markdown, suitable to replace the
documentation page for the emulation events.
2024-01-30 12:02:02 +01:00
b878e5290a Add ovnidump(1) manual page 2024-01-30 12:02:02 +01:00
1792c650ec Add definitions for emulator events
Implements a small language parser to define the emulator events. The
event specification is parsed at emulation (when the emulator runs).
The ovnidump output now prints the events with the arguments formatted
as given in the event description.

It also introduces some consistency checks over the event MCVs, which
must begin with the model identifier and cannot be duplicated.
2024-01-30 12:01:56 +01:00
bae38d1d26 Describe event declaration language 2023-12-21 14:55:05 +01:00
a2b2d11b0d Release version 1.5.1 2023-12-20 15:33:41 +01:00
1930cc4fd6 Adjust the regex of spawn-task-external-bad test
Now the program fails in runtime directly as the stream is not
initialized when Nanos6 attempts to write events.
2023-12-20 12:08:47 +01:00
7212273141 Update nOS-V and Nanos6 for CI tests
The new versions include the call to ovni_thread_free() when a thread
finishes.
2023-12-20 12:07:42 +01:00
6bfacf0e1e Check the thread is ready before adding events
Prevents segmentation faults when accessing the NULL stream buffer
without a clear message of what is happening.
2023-12-19 17:30:31 +01:00
0439399f05 Fix ovni_thread_isready() after ovni_thread_free()
Until now, the value returned by ovni_thread_isready() was still
non-zero when the thread stream was destroyed in ovni_thread_free()
This was making it impossible to detect when a stream was destroyed.

This change makes it return 0 after ovni_thread_free() by using a new
finished flag. The flag keeps track on then the stream is destroyed,
preventing double initialization of a free stream.
2023-12-19 17:30:20 +01:00
75833f5e21 Release version 1.5.0 2023-12-15 11:34:20 +01:00
1918ab6669 Always attempt to find Nanos6 and NODES
Causes the packages to always appear as found or not found in the
summary of cmake. Otherwise they were only checked if the compiler
supports the -fompss2 flag.
2023-12-15 11:06:41 +01:00
2b2a0eea8e Require nOS-V 2.0.0 for RT tests
We no longer need to detect support for instrumentation levels, as it is
included in 2.0.0.
2023-12-15 11:06:41 +01:00
ae7ef21014 Fix attach nOS-V RT test
The nosv_attach() function no longer needs a the type argument.
2023-12-15 11:06:41 +01:00
0a534f6c46 Simplify nanos6.toml config
Only the parts relevant to ovni are required.
2023-12-15 11:06:41 +01:00
1959ad047f Update runtimes to master with an overlay
Use an overlay to change CI packages recursively to also update
depedencies.
2023-12-15 11:06:41 +01:00
f56bc51dd5 flake.lock: Update
Flake lock file updates:

• Updated input 'bscpkgs':
    'git+https://git.sr.ht/~rodarima/bscpkgs?ref=refs/heads/master&rev=2a953d811c1e10d8d32b17a39e6eaf1b58afcd46' (2023-11-29)
  → 'git+https://git.sr.ht/~rodarima/bscpkgs?ref=refs/heads/master&rev=c4d5135fde108401417fdcdf5e1c8d11aeca4f32' (2023-12-07)
2023-12-15 11:05:59 +01:00
0496aeffc6 Close stream FD on ovni_thread_free()
This is required on FS like NFS as the cache coherence model states that
only after the file is closed the changes are actually propagated to the
server. It is not recomended to use NFS as OVNI_TMPDIR anyway.

Fixes: https://pm.bsc.es/gitlab/rarias/ovni/-/issues/168
2023-12-14 16:08:25 +01:00
bf2b4af15a Ensure we use RUNPATH for ovniver
As cmake doesn't provide a way to use the RPATH or the RUNPATH, we
explicitly set the --enable-new-dtags linker flag. If the flag is not
supported by the compiler, the build is aborted.
2023-12-12 17:06:24 +01:00
6d584c646c Install ovniver with the runpath set
When running ovniver without LD_LIBRARY_PATH set, the loader couldn't
find any ovni installation and therefore was failing to start the
program. With this change we set the RUNPATH (not RPATH) of ovniver to
the installation libdir, so when no other libovni library is loaded via
LD_LIBRARY_PATH the one provided by the same source as ovniver is used.

The value of LD_LIBRARY_PATH is also printed so we can determine where
it may be loading libovni. Using LD_DEBUG=libs will give more
information of the search process.

Fixes: https://pm.bsc.es/gitlab/rarias/ovni/-/issues/163
2023-12-12 17:06:24 +01:00
0f7ccc89de Add -a flag in ovniemu to enable all models
The experimental flag -a is used to ease the transition to the usage of
ovni_thread_require(), as it may be posible to have traces in which not
all libraries have requested their model. The flag causes all emulation
models to be enabled. This flag is considered experimental and it may be
removed or renamed in future versions.
2023-12-11 14:29:40 +01:00
998200d507 Always check thread metadata
The thread metadata file is mandatory for trace version 2, so the
emulator should fail if the file is not there or has the wrong version.
Old traces with version 1 are not supported.
2023-11-22 10:38:46 +01:00
c424a3177d Test temporal directories are removed at the end 2023-11-16 12:39:15 +01:00
3267ea873f Clean tmp directories when finishing
There were leftover temporal directories when using the OVNI_TMPDIR
variable, as we only remove the proccess ones. This change only attempts
to remove them if they are empty, and doesn't care about race
conditions. The removal process is just "best effort".
2023-11-16 12:39:15 +01:00
e002db72fd Correct documentation on thread metadata 2023-11-16 12:39:14 +01:00
2b18171e94 Update changelog 2023-11-16 12:39:14 +01:00
effdf36f7e Print the list of models in the emulator 2023-11-16 12:39:14 +01:00
927837df25 Don't write thread metadata on flush
The metadata was being written to the final directory, which may be too
slow to accept writes during runtime. The thread metadata needs to be
written anyway at ovni_thread_free() to set the finished flag, so we can
simply skip it.
2023-11-16 12:39:14 +01:00
c7e8b256d2 Fix gcc uninitialization warning confusion 2023-11-16 12:39:14 +01:00
423e3b15d2 Test multiple calls to ovni_thread_require() 2023-11-16 12:39:14 +01:00
855dd76678 Report libovni version from trace 2023-11-16 12:39:14 +01:00
93fdfd51de Add flush-tmpdir test 2023-11-16 12:39:14 +01:00
70e886fcfe Remove old model_version key from proc metadata 2023-11-16 12:39:14 +01:00
f02994c149 Document thread metadata in trace spec 2023-11-16 12:39:14 +01:00
f34479712a Add model version in documentation 2023-11-16 12:39:14 +01:00
d836b7e46d Include changelog in documentation 2023-11-16 12:39:14 +01:00
6b0b5bfbbd Add require test for missing models 2023-11-16 12:39:14 +01:00
58fe0d1b4b Improve error message for disabled model 2023-11-16 12:39:14 +01:00
72b7eb8332 Mark the finalization of streams
The emulator will now check that all threads are properly finalyzed by
calling ovni_thread_free(), as required by the specification. For now
only a warning is issued, which is enough to determine the cause of
potential emulator panics.

The ovni model is now always enabled.
2023-11-16 12:39:14 +01:00
25cf46036d Add no-require emulation test 2023-11-16 12:39:14 +01:00
fa436604b7 Improve compatibility warning messages 2023-11-16 12:39:14 +01:00
6f7ce4063f Enable all models if the require key is missing
Allows programs to update to a new libovni library without breaking the
instrumentation. Only until the first call to ovni_thread_require() the
models are enabled on demand.
2023-11-16 12:39:14 +01:00
59385fad03 Add compatibility mode for missing require key
Traces with metadata version 1 don't use per-thread information, so we
cannot read the 'require' key. All models will be enabled for old traces
(which will cause performance problems).
2023-11-16 12:39:14 +01:00
30d5e4b0ca Show state for all models 2023-11-16 12:39:14 +01:00
d45041e00c Disable delayed connect 2023-11-16 12:39:14 +01:00
354f2f50eb Register emulation models only if required
Until now, emulation models were always being registered via probe(),
which causes the emulator to initialize all the channels. To reduce the
overhead, the channels were not connected or registered in the bay
until the first event of that model was received. This delayed connect
was causing issues in muxes where the newly connected model required
refreshing the touched channels. Which in turn was causing unexpected
PRV events.

By determining which models we need to enable, we can remove the delayed
connect mechanism and just enable those models at initialization time,
and connect the channels.
2023-11-16 12:39:05 +01:00
3d10bef305 Load thread metadata from the JSON file 2023-11-16 12:21:50 +01:00
428e0b44b8 Add emu test for ovni_thread_require 2023-11-16 12:21:50 +01:00
ab42ac4557 Add thread metadata 2023-11-16 12:21:50 +01:00
5d9aef4ed8 Remove rthread and rproc definitions from ovni.h 2023-11-16 12:21:50 +01:00
7a33deffb7 Release version 1.4.1 2023-11-16 12:07:31 +01:00
c13d57f0f6 Fix for nOS-V with ovni.level=2
When running without all the subsystem events enabled in nOS-V, it is
possible to emit two consecutive VTx events, which would push twice the
same value ST_TASK_BODY into the subsystem channel. This change relaxes
the subsystem channel to accept duplicate stacked values. A regression
test is also added.

Reported-By: Raúl Peñacoba Veigas <raul.penacoba@bsc.es>
2023-11-14 17:26:43 +01:00
2d5046654d Release version 1.4.0 2023-11-08 17:02:42 +01:00
e6537b78b0 Add .readthedocs.yaml file 2023-11-08 16:29:00 +01:00
906f4cc40a Show feature summary at the end 2023-11-08 15:58:50 +01:00
8de5f329d9 Add RT nOS-V tests for the ovni.level option
Only nOS-V versions higher than 1.1.0 have support for the "ovni.level"
option.
2023-11-08 15:58:50 +01:00
eda93acc49 Use pkg-config to find nOS-V 2023-11-08 15:58:46 +01:00
4b4f1bd218 Don't modify nOS-V subsystem state on task pause
In nOS-V, when a task was paused via the VTp event, two things were
happening: 1) the task state was set to pause and 2) the subsystem state
"Task: Running" was being popped.

This causes a problem when a task calls nosv_submit() in blocking mode,
as it will call nosv_pause() which will emit a VTp event from a
subsystem different than "Task: Running".

To solve this conflict, we handle the subsystems state and the task
state separately with the VTp and VTr events. The subsystem state "Task:
Running" no longer is connected to the state of the task and only shows
if we entered the body of the task or not. It has now been renamed to
"Task: In body".

The new state "Task: In body" represents that the task body has begun
the execution and is still in the stack, but the task may be paused. The
subsystem is not changed by the VTp (pause) or VTr (resume) events.

Fixes: https://pm.bsc.es/gitlab/rarias/ovni/-/issues/128
2023-10-23 11:26:17 +02:00
0df018cf5f Fix segfault reading empty streams
The check_clock_gate() was trying to access to the first event in all
streams. However, streams that are empty don't have any event, so they
cause a NULL dereference. Skipping not active streams avoids the
problem.
2023-10-23 10:07:44 +02:00
0db35980a0 Add a test for multiple values of OVNI_TRACEDIR 2023-10-23 07:49:28 +00:00
d1bf4e7520 Allow tests to run their own driver
Tests can now specify a DRIVER option pointing to a shell script that
will run instead of the default driver. It allows tests to run any
commands and run the emulator several times or with different
environment variables.

The full path of the test program is available in the OVNI_TEST_PATH
environment variable.
2023-10-23 07:49:28 +00:00
Kevin Sala
7b4ebca002 Add OVNI_TRACEDIR envar to change trace directory
This commit introduces the OVNI_TRACEDIR environment variable to change
the directory where traces are generated. By default, when the envar is
not defined, the trace is still generated in the ovni directory. The
envar can take a trace directory name, a relative path to the directory,
or its absolute path. In the first case, the directory is created in the
current path $PWD.

Both libovni (rt) and ovnisync read this environment variable.
2023-10-23 07:49:28 +00:00
Kevin Sala
24252ebbb3 Use common's progname functions in ovnisync
This commit adds the progname_get function in common.h header and
extends the ovnisync tool to use them
2023-10-23 07:49:28 +00:00
Kevin Sala
3ea89edac7 Update Sonar repository URL pointing to the public GitHub 2023-10-23 07:38:15 +00:00
d100b42e5a Port nix CI to flakes
Change bscpkgs repo url to sourcehut
2023-10-19 11:18:45 +02:00
b6903bc445 Release version 1.3.0 2023-09-07 10:26:12 +02:00
Kevin Sala
afb81172a7 Add MPI emu tests 2023-09-06 18:11:19 +02:00
Kevin Sala
9a628e78ca Add MPI model with interface view 2023-09-06 18:11:18 +02:00
Kevin Sala
1e2102c0a0 Add TAMPI emu tests 2023-08-22 18:13:29 +02:00
Kevin Sala
276afd5479 Add TAMPI model with subsystems view 2023-08-22 18:13:29 +02:00
Kevin Sala
9269dd7202 Add nosv create and destroy API subsystem states 2023-08-17 13:23:59 +02:00
b1ee2e7143 Add taskloop test in Nanos6 and NODES 2023-07-28 18:15:28 +02:00
a3ffb2443a Report the commit too with ovniver 2023-07-26 17:13:28 +02:00
bf8a2213c1 Add the ovniver program to report the version 2023-07-26 16:31:56 +02:00
97c936d41f Add ovni_version_get() function
Allows the reding the version of the libovni.so currently loaded.
2023-07-26 16:31:30 +02:00
7e96c0cb2a Release version 1.2.2 2023-07-26 14:16:57 +02:00
f08595b3a7 Report open error for missing trace directory 2023-07-26 13:51:35 +02:00
f8c6b7c7c0 Improve the version error message
Use the terminology want/got to determine which version the user is
requested and the version the library provides.
2023-07-25 19:55:51 +02:00
bb946fa5f6 Add CHANGELOG.md 2023-07-25 17:24:53 +00:00
74557ab348 Don't rely on temporary directories
Use the current test directory instead.
2023-07-25 16:36:57 +02:00
c257405060 Define unit_test() macro with ovni_test()
This allows unit tests to be executed in a individual directory where
they can create new files in $PWD.
2023-07-25 16:26:25 +02:00
721dabf007 Bump to version 1.2.1 2023-07-24 20:22:10 +02:00
6fbdd8fd6b Set default visibility to hidden 2023-07-24 19:00:07 +02:00
2b612166d7 Use dinamically linked ovni for tests
We rely on this library to override the libovni.so that other libraries
are using.
2023-07-07 12:20:41 +02:00
7c68922a95 Enable NODES rt instrumentation
The NODES_OVNI environment variable is now needed to enable the ovni
instrumentation.
2023-07-07 10:52:46 +02:00
48df02f102 Always use the project version
Don't duplicated versions so we avoid the problem of missing one
instance to be updated.
2023-07-07 10:42:40 +02:00
e2119f77d6 Set project version in CMakeLists.txt 2023-07-07 10:33:23 +02:00
ee9111a1ec Move ovni.pc.in into src/ 2023-07-05 13:13:53 +02:00
4abd92e139 Make ovni.h a public header of ovni target 2023-07-05 13:11:18 +02:00
cd2e844066 Use the installation directories provided by cmake
Some systems will define the library path as lib64. Also update other
install commands to use the values discovered by the GNUInstallDirs
module.
2023-07-05 12:52:56 +02:00
Raúl Peñacoba Veigas
7346d1ba3b Add pkg-config support. I chose to use absolute paths for security (to like nix) 2023-07-03 14:38:26 +00:00
5a9086e6d1 Fix ovnisort with flush events
Sort the events in the sorting region before injecting them back in the
stream. This solves the problem with flush events OF[ and OF].
2023-06-29 13:25:15 +02:00
929af74d3f Add sort-flush test 2023-06-28 12:28:40 +02:00
cd0d0eb7c7 Don't produce output link for CI 2023-06-26 11:14:53 +02:00
05979df34d Install ovnitop.1 into man1 subdirectory 2023-06-02 17:12:17 +02:00
d9b82494d0 Free the table at the end in ovnitop 2023-06-01 18:38:26 +02:00
c1b0768e7d Add ovnitop(1) manual page 2023-05-31 17:23:25 +00:00
553d0a1c62 Add ovnitop command 2023-05-31 17:23:25 +00:00
f8a15df1b9 Fix Nanos6 and NODES rt tests 2023-05-31 19:16:18 +02:00
5a7f7b0f70 Add cmake module to check the -fompss-2 flag 2023-05-31 19:15:47 +02:00
f2e8e46fcb Update NODES library and include names 2023-05-31 19:15:28 +02:00
64c2d52a7a Always enable all tests for ovni-rt 2023-05-30 18:16:08 +02:00
9814abbcdf Append to preConfigure instead of replacing it 2023-05-30 18:08:36 +02:00
f5a911485a Remove unused configuration options for nOS-V 2023-05-30 17:41:05 +02:00
778c119bd6 Use local ovni for tests 2023-05-30 17:31:12 +02:00
cec52ada83 Update nix derivations to use bscpkgs packages 2023-05-30 17:09:41 +02:00
d0a47783f2 Use the completion callback to wait
The memory allocated is freed after the spawned function is executed.
2023-05-08 19:23:42 +02:00
7d7c59bbf8 Fix bug in spawn task tests
The argument passed to nanos6_spawn_function() was being destroyed when
the parent function ends.
2023-05-02 20:04:29 +02:00
44d120d7a8 Version 1.2.0 2023-05-01 09:19:05 +02:00
fb435842b2 Add nosv multiple-segment test 2023-04-25 17:00:42 +02:00
7089db0bd0 Remove the workdir in each test run
Ensures the scripts are also rebuilt.
2023-04-25 16:52:21 +02:00
c2b6bfd3a8 Set the size of the channel property arrays
Arrays which don't initialize the last elements of the enumeration are
shorter and will cause a buffer overflow when read in a loop.
2023-04-24 12:37:20 +02:00
8a92023cf3 Enable Asan tests in CI
For now memory leaks are ignored.
2023-04-24 12:29:58 +02:00
a8944b3763 Fix buffer overflow in sort_replace()
The access to the array was done before the out of bound check.
2023-04-24 11:47:46 +02:00
3b51902713 Allow single line enums
Although clang-format doesn't seem to be following the rule.
2023-04-20 10:53:11 +02:00
7262133782 Fix clang format for braced list 2023-04-20 10:38:56 +02:00
ff340df5b5 Disable flush-overhead test 2023-04-19 10:57:10 +00:00
3a28e1c3d3 Avoid fmemopen() due to bug in old glibc 2023-04-19 10:57:10 +00:00
4a936dcb99 Add test to prevent re-running tasks in Nanos6
For now is disabled until we have a better instrumentation for task
states.
2023-04-17 15:58:19 +00:00
bc513832a5 Allow tests to be disabled
Ensure that we still build the tests but they don't run.
2023-04-17 15:58:19 +00:00
49f915fda5 Add FIXME notice for taskiter support
Set the task->thread to NULL if we re-execute a task from the Dead
state, so it follows the behavior of a Created task.
2023-04-17 15:58:19 +00:00
3c6c6ed230 Add taskiter NODES test 2023-04-17 15:58:19 +00:00
David Alvarez
26d01d18eb Support taskiter by allowing tasks to re-launch 2023-04-17 15:58:19 +00:00
ff2f33abb9 Document sponge mode and progress events 2023-04-17 17:47:07 +02:00
d0f50c9e3d Improve colors for Resting and Absorbing states 2023-04-17 17:04:48 +02:00
63e79a9a73 Document the sponge mode in the Idle view 2023-04-14 13:39:37 +00:00
1ec6f799f1 Add missing label for sponge state 2023-04-14 13:39:37 +00:00
b16c30a5e6 Add Absorbing state to the idle view in Nanos6 2023-04-14 13:39:37 +00:00
6cafd347ce Add support for sponge subsystem state in Nanos6 2023-04-14 13:39:37 +00:00
171e439bd4 Allow builds without MPI with -DUSE_MPI=OFF 2023-04-14 11:27:30 +00:00
6eead7e28e Warn if some looms don't have the rank
Fallback to sorting by loom name instead.
2023-04-14 12:13:49 +02:00
bfff1a815e Don't set rank_min multiple times 2023-04-14 12:01:47 +02:00
9568d4f379 Inform the user of the sorting method selected 2023-04-14 08:35:21 +00:00
676e30b4ca Order looms and processes by rank if given 2023-04-14 08:35:21 +00:00
e69df2e5c8 Remove mestral tag for CI
Now we run the CI tests in our own infrastructure.
2023-04-14 10:30:17 +02:00
1d8b5e6f09 Remove extrae input 2023-04-14 10:26:20 +02:00
80b8b209fa Skip repeated hostnames in ovnisync 2023-04-06 17:52:28 +02:00
9e105413fd Replace brk with breakdown 2023-04-06 17:38:37 +02:00
602daabe23 Fix copyright years 2023-04-06 15:33:15 +00:00
7aa3434e79 Remove ENABLE_DEBUG comments 2023-04-06 15:33:15 +00:00
3c6027056b Update Nanos6 subsystem .cfg files
Make room for the new ST_UNKNOWN_SS = 2 value used in the
breakdown view.
2023-04-06 15:33:15 +00:00
29a7011141 Consider the -b option experimental 2023-04-06 15:33:15 +00:00
0e75a2b6ad Update the Idle view 2023-04-06 15:33:15 +00:00
14dc70c6a2 Document the breakdown view 2023-04-06 15:33:15 +00:00
c30a5d94b5 Add emu breakdown test for zero values 2023-04-06 15:33:15 +00:00
999a79b074 Run Nanos6 connect hook at init for breakdown 2023-04-06 15:33:15 +00:00
1c82470bfc Remove initial subsystem by default 2023-04-06 15:33:15 +00:00
b17ff6d166 Add unknown subsystem state for Nanos6 2023-04-06 15:33:15 +00:00
1582a60522 Set tr mux output to unknown subsystem on NULL 2023-04-06 15:33:15 +00:00
a827113c2a Increasing breakdown row padding to match CPU 2023-04-06 15:33:15 +00:00
881e556e06 Fix pcf_sdd_value() return check 2023-04-06 15:33:15 +00:00
cc09920c80 Remove unused i variable in emu/nanos6/breakdown.c 2023-04-06 15:33:15 +00:00
6711afdb58 Fix include headers following IWYU 2023-04-06 15:33:15 +00:00
acd63a915e Add breakdown switch option in tests 2023-04-06 15:33:15 +00:00
30812e134e Reduce test cases in sort_replace 2023-04-06 15:33:15 +00:00
5b64737ad9 Fix pcf_labels type 2023-04-06 15:33:15 +00:00
30f68ea5df Add missing headers 2023-04-06 15:33:15 +00:00
467cc9aa7e Fix value_str() usage 2023-04-06 15:33:15 +00:00
e287087d3b Use delta per stream in ovnidump 2023-04-06 15:33:15 +00:00
35de33e0f9 Add support for Nanos6 progress events 2023-04-06 15:33:15 +00:00
d7caca2a37 Add breakdown configuration 2023-04-06 15:33:15 +00:00
0134ceee9d Write .pcf and .row files for the breakdown 2023-04-06 15:33:15 +00:00
e838d687f0 Add missing Busy label 2023-04-06 15:33:15 +00:00
a90768c1d4 Add partial support for the breakdown model
For now only Runtime and Task breakdown trees are implemented. The Idle
state is not decomposed.
2023-04-06 15:33:15 +00:00
6b8099b6af Make the emulator extensible 2023-04-06 15:33:15 +00:00
35872354e0 Speedup the sort module
Improvements:

- Don't propagate values if they didn't change
- Use custom sort algorithm to speedup the sorting
- Allocate a contiguous array of channel outputs
2023-04-06 15:33:15 +00:00
1909d8106c Allow the select channel as input in a mux
Required to implement the tr channel in the breakdown model. See
https://pm.bsc.es/gitlab/rarias/ovni/-/issues/101
2023-04-06 15:33:15 +00:00
c624374cc8 Allow mux to specify the default value
Will be written to the output when the selection function returns NULL
as the selected input.
2023-04-06 15:33:15 +00:00
920866d8af Print remaining time with 0.1 second precision 2023-04-06 15:33:15 +00:00
4b053b9a38 Clear average line and increase elapsed precision 2023-04-06 15:33:15 +00:00
4f440c5104 Add some debug messages 2023-04-06 15:33:15 +00:00
f3bcdeccd1 Move chan_read() to a inline function in chan.h 2023-04-06 15:33:15 +00:00
43fa556fa9 Enable debug messages with -d
Allows the user to easily enable debug messages, which are the only way
to debug problems with channels.
2023-04-06 15:33:15 +00:00
31f24a2a55 Add breakdown option 2023-04-06 15:33:15 +00:00
029e185c6c Reserve first 1000 values for states
The task type hash starts at 1000, so we don't collide with states.
2023-04-06 15:33:15 +00:00
70b29b6459 Add sort channel module
Sorts the N input values and writes them in the N outputs in order.
2023-04-06 15:33:15 +00:00
a4ce0e2a1e Add Idle view in Nanos6 2023-04-06 15:33:15 +00:00
f848ddb37f Increase the flush overhead limit to 2 ms
The current CI disk is slower doing the flushes.
2023-04-05 15:35:37 +02:00
54527b0006 Fix shebang in regex match test scripts 2023-04-05 15:18:03 +02:00
5c5f9f0f1a Use int64_t to represent the offset
Using size_t causes undefined behavior when the number is negative.
2023-04-05 12:47:36 +02:00
375 changed files with 19046 additions and 3288 deletions

View File

@ -7,6 +7,7 @@ BasedOnStyle: LLVM
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: None
AllowShortBlocksOnASingleLine: false
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: true
@ -15,12 +16,14 @@ BreakBeforeBraces: Custom
BreakConstructorInitializers: AfterColon
BraceWrapping:
AfterControlStatement: false
AfterEnum: false
AfterFunction: true
AfterStruct: false
AfterUnion: false
BeforeElse: false
ColumnLimit: 0
ContinuationIndentWidth: 16
Cpp11BracedListStyle: false
IncludeBlocks: Preserve
IndentCaseLabels: true
IndentWidth: 8

45
.gitea/workflows/ci.yaml Normal file
View File

@ -0,0 +1,45 @@
name: CI
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
build:local:
runs-on: native
steps:
- uses: https://gitea.com/ScMi1/checkout@v1.4
- run: nix build -L --no-link .#ovniPackages.local
build:rt:
runs-on: native
steps:
- uses: https://gitea.com/ScMi1/checkout@v1.4
- run: nix build -L --no-link .#ovniPackages.rt
build:debug:
runs-on: native
steps:
- uses: https://gitea.com/ScMi1/checkout@v1.4
- run: nix build -L --no-link .#ovniPackages.debug
build:asan:
runs-on: native
steps:
- uses: https://gitea.com/ScMi1/checkout@v1.4
- run: nix build -L --no-link .#ovniPackages.asan
build:nompi:
runs-on: native
steps:
- uses: https://gitea.com/ScMi1/checkout@v1.4
- run: nix build -L --no-link .#ovniPackages.nompi
build:compilers:
runs-on: native
steps:
- uses: https://gitea.com/ScMi1/checkout@v1.4
- run: nix build -L --no-link .#ovniPackages.compilers

View File

@ -2,7 +2,6 @@ build:debian-testing:
image: debian:testing
tags:
- docker
- mestral
stage: build
before_script:
- apt update && apt -y install make autoconf gfortran libopenmpi-dev cmake
@ -15,30 +14,72 @@ build:debian-testing:
paths:
- install/
build:rt-tests:
build:local:
stage: build
tags:
- nix
script:
- nix build -L --tarball-ttl 0 --file nix/rt.nix bsc.ovni-rt
- nix build -L --no-link .#ovniPackages.local
build:old-gcc:
build:rt:
stage: build
tags:
- nix
script:
- nix build -L --tarball-ttl 0 --file nix/rt.nix bsc.oldOvnis
- nix build -L --no-link .#ovniPackages.rt
build:old-gcc-no-lto:
build:debug:
stage: build
tags:
- nix
script:
- nix build -L --tarball-ttl 0 --file nix/rt.nix bsc.oldOvnisNoLTO
- nix build -L --no-link .#ovniPackages.debug
build:old-gcc-release:
build:asan:
stage: build
tags:
- nix
script:
- nix build -L --tarball-ttl 0 --file nix/rt.nix bsc.oldOvnisRelease
- nix build -L --no-link .#ovniPackages.asan
build:ubsan:
stage: build
tags:
- nix
script:
- nix build -L --no-link .#ovniPackages.ubsan
build:nompi:
stage: build
tags:
- nix
script:
- nix build -L --no-link .#ovniPackages.nompi
build:compilers:
stage: build
tags:
- nix
script:
- nix build -L --no-link .#ovniPackages.compilers
build:armv7:
stage: build
tags:
- nix
script:
- nix build -L --no-link .#ovniPackages.armv7
build:aarch64:
stage: build
tags:
- nix
script:
- nix build -L --no-link .#ovniPackages.aarch64
build:riscv64:
stage: build
tags:
- nix
script:
- nix build -L --no-link .#ovniPackages.riscv64

20
.readthedocs.yaml Normal file
View File

@ -0,0 +1,20 @@
# .readthedocs.yaml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Set the version of Python and other tools you might need
build:
os: ubuntu-22.04
tools:
python: "3.11"
mkdocs:
configuration: mkdocs.yml
fail_on_warning: false
python:
install:
- requirements: doc/requirements.txt

312
CHANGELOG.md Normal file
View File

@ -0,0 +1,312 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Changed
- OpenMP model version increased to 1.2.0.
### Added
- Add support OpenMP label and task ID views.
## [1.11.0] - 2024-11-08
### Added
- Introduce part model.
- Support for `nosv_cond_wait`, `nosv_cond_signal` and `nosv_cond_broadcast` events VA{oOgGkK}.
### Changed
- Enable -Wconversion and -Wsign-conversion.
- Update trace format to version 3.
- The ovni.require metadata key is now mandatory.
- Store process metadata in thread metadata.
- nOS-V model version increased to 2.4.0.
### Fixed
- Fix bug in ovnisort when injecting events in a previously modified section.
## [1.10.0] - 2024-07-26
### Changed
- nOS-V model version increased to 2.3.0.
- Prevent accidental use of nOS-V traces without required events for the
breakdown model using the `nosv.can_breakdown` attribute.
- Increase ovni model version to 1.1.0 for the mark events `OM*`.
### Added
- Add support for nOS-V progressing events VP{pra}.
- Add breakdown model for nOS-V.
- New API to manage stream metadata `ovni_attr_*()`.
- New mark API `ovni_mark_*()` to emit user-defined events.
### Fixed
- Cross-compilation for ARM 32 bits.
## [1.9.1] - 2024-05-10
### Fixed
- Fix breakdown model error that was preventing a zero value to be written in
the PRV trace.
- Fix gcc 11.3.1 -Wstringop-overflow warning.
## [1.9.0] - 2024-04-25
### Added
- Consistency check for events emitted when the kernel has removed the thread
from the CPU.
- The nOS-V model version is bumped to 2.1.0.
- Add support for `nosv_mutex_lock`, `nosv_mutex_trylock` and
`nosv_mutex_unlock` events VA{lLtTuU}.
- Add support for the `nosv_barrier_event` event VA{bB}.
### Fixed
- Open Paraver windows at (100,100) instead of (0,0) to avoid them appearing
under the menu bar in Mac OS.
## [1.8.0] - 2024-03-18
### Added
- Add new body model to support parallel tasks in nOS-V (used in taskfor).
- Add the ability to restrict transitions in the task model states.
- Add nOS-V support for parallel tasks reading the body id from the
event payload.
- Keep a changelog of emulation model versions.
### Changed
- The task model now requires the previous task body to be paused before nesting
another one. A compatibility flag is still available to still allow the old
behavior.
- Nanos6 model version increased to 1.1.0.
- nOS-V model version increased to 2.0.0.
## [1.7.0] - 2024-03-12
### Added
- Add OpenMP model (`P`) at version 1.1.0 (currently it only supports subsystems
and only works with the OpenMP-V runtime, on top of nOS-V).
### Changed
- Add support for `nosv_attach` and `nosv_detach` events VA{aAeE}.
- Ignore old nOS-V attach events VH{aA}.
- The nOS-V model version is bumped to 1.1.0.
## [1.6.0] - 2024-02-14
### Changed
- All events now must be declared for each emulation model and given a
description including the payload arguments.
### Added
- Manual page for ovnidump(1).
- Describe events in human readable format with ovnidump.
- New `-x` option in ovnidump to show the payload in hexadecimal.
## [1.5.1] - 2023-12-20
### Fixed
- Calling `ovni_thread_isready()` after `ovni_thread_free()` now returns 0.
- Emitting events in a non-ready thread now aborts the program with a
message rather than causing a segfault.
## [1.5.0] - 2023-12-15
### Added
- New function `ovni_thread_require()` to selectively enable emulation models
and check their version is compatible (if not used all models will be
enabled).
- Support for per-thread metadata
- Store the version of libovni in the metadata
- Streams are marked as finished when `ovni_thread_free()` is called. A warning
is emitted in the emulator for those streams that are not finished properly.
- List the emulation models and versions with `ovniemu -h`
- New `-a` ovniemu option to enable all models
### Changed
- Updated process metadata to version 2 (traces generated with an older libovni
are not compatible with the emulator).
- Emulation models now have a semantic version (X.Y.Z) instead of just a number.
- Install ovniver with the runpath set.
### Fixed
- Close stream FD on `ovni_thread_free()`.
## [1.4.1] - 2023-11-16
### Changed
- Fix emulation for level 2 or lower in nOS-V with inline tasks by
allowing duplicates in the subsystem channel.
## [1.4.0] - 2023-11-08
### Added
- Add `OVNI_TRACEDIR` envar to change the trace directory (default is `ovni`).
### Changed
- Don't modify nOS-V subsystem state on task pause. The "Task: Running"
state is now renamed to "Task: In body" to reflect the change.
- Use pkg-config to locate the nOS-V library and get the version. Use
`PKG_CONFIG_LIBDIR=/path/to/nosv/install/lib/pkgconfig` to use a custom
installation path.
## [1.3.0] - 2023-09-07
### Added
- Add `ovni_version_get()` function.
- Add the `ovniver` program to report the libovni version and commit.
- Add nOS-V API subsystem events for `nosv_create()` and `nosv_destroy()`.
- Add TAMPI model with `T` code.
- Add subsytem events and cfgs for TAMPI model.
- Add MPI model with `M` code.
- Add function events and cfgs for MPI model.
## [1.2.2] - 2022-07-26
### Added
- Add this CHANGELOG.md file to keep track of changes.
### Fixed
- Don't rely on /tmp or $TMPDIR in tests.
- Fix misleading message in version check.
- Fix error message when opening missing trace directories
## [1.2.1] - 2022-07-25
### Fixed
- Set default visibility to hidden to prevent clashes with other functions such
as the verr() in the glibc.
- Don't hardcore destination directory names like lib, to use the ones in the
destination host (like lib64).
- Add support in ovnisort for cases where in the sorting region there are flush
events.
- Remove CI nix roots from the builds to allow the garbage collector to remove
the build.
- Fix the detection of the -fompss-2 flag in cmake by setting the flag at link
time too.
- Fix spawn task test by waiting for the task to finish before exiting.
## [1.2.0] - 2022-05-02
This version adds the initial support for the breakdown view and some fixes.
### Added
- Add the initial breakdown view showing the task type, the subsystem or the
idle state.
- Added the sort module for channels to support the breakdown view.
- Add the -b option in ovniemu to enable the breakdown trace.
- Add support for sponge CPUs in Nanos6.
- Add the cmake option `-DUSE_MPI=OFF` to build ovni without MPI.
- Add a test for two nOS-V shared memory segments.
### Fixed
- Sort the timeline rows in MPI rank order if given.
- Skip duplicated entries when ovnisync to runs multiple times in the same node.
- Allow tasks to be re-executed to support the taskiter in the nOS-V model.
- Use the signed `int64_t` type for clock offsets, so they can be negative.
- Avoid fmemopen() due to a bug in old glibc versions.
- Fix clang format for braced list
- Fix buffer overflow in `sort_replace()` of the sort module.
- Set the size of the channel property arrays to prevent a buffer overflow.
## [1.1.0] - 2022-03-24
This version introduces the patch bay and a big redesign in the way the channels
are used along with some other changes.
### Changed
- The channels are now connected using the patch bay, where they must be
registered using an unique name.
- The tracking modes are implemented by using a mux, and an arbitrary way of
tracking other channels is now possible, as it is required for the breakdown
model.
- The channels don't have visibility with other parts of the code, they interact
with a callback only.
- The emulator code has been split into smaller modules which are independent of
each other, so we can unit test them separately.
- The models are now implemented following the model spec functions.
- Updated the ovni and Nanos6 models
- Model data is now stored by the `extend_set`/`get` methods, so it is kept
separate between models.
- The CPU and thread channels have been moved to the emulator while the ones
specific to the user space tracing with libovni.so are controlled by the ovni
model. This allows other thread/CPU tracing mechanisms (kernel events) to
update the emulator channels while the other models are not affected.
- The trace streams are now independent of the hierarchy loom/proc/thread, and
end with the suffix .obs, so we can add other types of traces in the future.
- Models can register any arbitrary number of channels on runtime, so we can add
load hardware counters in one channel each.
- Channels have a user friendly name so debugging is easier
- The die() abort mechanism has been transformed into if() + return -1, so we
can do unit testing and check the errors and also finish the PRV traces when
the emulator encounters an error and open them in Paraver with the last
processed event.
- The emulator can be stopped with ^C, producing a valid Paraver trace.
- Prevents leaving threads in the running state by adding a check at the end of
emulation
- The Paraver configurations files are copied into the trace directory.
### Removed
- The TAMPI and OpenMP models have been removed as they are not maintained.
- Punctual events are not implemented for now.
- No error states, when more than one thread is running in the virtual
CPU, no subsystem is shown in the CPU view.
## [1.0.0] - 2022-12-16
### Added
- First ovni release.
[unreleased]: https://jungle.bsc.es/git/rarias/ovni
[1.11.0]: https://github.com/rodarima/ovni/releases/tag/1.11.0
[1.10.0]: https://github.com/rodarima/ovni/releases/tag/1.10.0
[1.9.1]: https://github.com/rodarima/ovni/releases/tag/1.9.1
[1.9.0]: https://github.com/rodarima/ovni/releases/tag/1.9.0
[1.8.0]: https://github.com/rodarima/ovni/releases/tag/1.8.0
[1.7.0]: https://github.com/rodarima/ovni/releases/tag/1.7.0
[1.6.0]: https://github.com/rodarima/ovni/releases/tag/1.6.0
[1.5.1]: https://github.com/rodarima/ovni/releases/tag/1.5.1
[1.5.0]: https://github.com/rodarima/ovni/releases/tag/1.5.0
[1.4.1]: https://github.com/rodarima/ovni/releases/tag/1.4.1
[1.4.0]: https://github.com/rodarima/ovni/releases/tag/1.4.0
[1.3.0]: https://github.com/rodarima/ovni/releases/tag/1.3.0
[1.2.2]: https://github.com/rodarima/ovni/releases/tag/1.2.2
[1.2.1]: https://github.com/rodarima/ovni/releases/tag/1.2.1
[1.2.0]: https://github.com/rodarima/ovni/releases/tag/1.2.0
[1.1.0]: https://github.com/rodarima/ovni/releases/tag/1.1.0
[1.0.0]: https://github.com/rodarima/ovni/releases/tag/1.0.0

View File

@ -1,24 +1,32 @@
# Copyright (c) 2021-2023 Barcelona Supercomputing Center (BSC)
# Copyright (c) 2021-2024 Barcelona Supercomputing Center (BSC)
# SPDX-License-Identifier: GPL-3.0-or-later
cmake_minimum_required(VERSION 3.20)
project(OVNI LANGUAGES C)
project(OVNI LANGUAGES C VERSION 1.11.0)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
add_compile_options(-Wall -Wextra -Wformat
-Wmissing-prototypes -Wstrict-prototypes
#-Wconversion -Wsign-conversion
-Wconversion -Wsign-conversion
-Wold-style-definition -pedantic
-Werror
)
set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED TRUE)
set(CMAKE_C_EXTENSIONS FALSE)
option(ENABLE_DEBUG_LOG "Enable debug messages (very verbose)")
option(ENABLE_ALL_TESTS "Forces the execution of all tests")
set(OVNI_GIT_COMMIT "unknown" CACHE STRING "Set the git commit")
if("${OVNI_GIT_COMMIT}" STREQUAL "unknown")
message(WARNING "OVNI_GIT_COMMIT is unknown, please specify the git commit")
endif()
if(ENABLE_DEBUG_LOG)
add_definitions(-DENABLE_DEBUG)
@ -59,7 +67,9 @@ set(CMAKE_C_FLAGS_ASAN "${CMAKE_C_FLAGS_DEBUG} \
-fno-omit-frame-pointer"
CACHE STRING "Flags used by the C compiler during AddressSanitizer builds." FORCE)
set(CMAKE_C_FLAGS_UBSAN "${CMAKE_C_FLAGS_DEBUG} -fsanitize=undefined"
set(CMAKE_C_FLAGS_UBSAN "${CMAKE_C_FLAGS_DEBUG} \
-fsanitize=undefined \
-fno-sanitize-recover=all"
CACHE STRING "Flags used by the C compiler during UndefinedBehaviorSanitizer builds." FORCE)
find_program(IWYU NAMES include-what-you-use iwyu)
@ -95,3 +105,6 @@ if(BUILD_TESTING)
endif()
install(DIRECTORY cfg/ DESTINATION "${OVNI_CONFIG_RELDIR}")
include(FeatureSummary)
feature_summary(WHAT ALL)

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: Context switches of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

42
cfg/cpu/mpi/function.cfg Normal file
View File

@ -0,0 +1,42 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: MPI function of the RUNNING thread >
################################################################################
window_name CPU: MPI function of the RUNNING thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 25
window_filter_module evt_type_label 1 "CPU: MPI function of the RUNNING thread"

View File

@ -0,0 +1,44 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: Nanos6 Runtime/Idle/Task breakdown >
################################################################################
window_name CPU: Nanos6 Runtime/Idle/Task breakdown
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {1.000000000000:0,70,0},{3.000000000000:99,131,0},{4.000000000000:53,121,221},{5.000000000000:223,108,0},{6.000000000000:75,127,82},{7.000000000000:242,110,162},{8.000000000000:255,190,0},{9.000000000000:153,114,0},{10.000000000000:156,12,231},{11.000000000000:177,25,229},{12.000000000000:255,72,50},{15.000000000000:0,171,255},{16.000000000000:124,213,228},{17.000000000000:242,239,141},{18.000000000000:80,80,80},{19.000000000000:94,0,0},{20.000000000000:128,165,214},{22.000000000000:222,101,128},{23.000000000000:110,148,255},{100.000000000000:0,100,0},{101.000000000000:100,100,177},{102.000000000000:150,150,0}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 41
window_filter_module evt_type_label 1 "CPU: Nanos6 Runtime/Idle/Task breakdown"

44
cfg/cpu/nanos6/idle.cfg Normal file
View File

@ -0,0 +1,44 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: Nanos6 idle state of the RUNNING thread >
################################################################################
window_name CPU: Nanos6 idle state of the RUNNING thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {100.000000000000:0,100,0},{101.000000000000:100,100,177},{102.000000000000:150,150,0}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 40
window_filter_module evt_type_label 1 "CPU: Nanos6 idle state of the RUNNING thread"

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: Nanos6 task MPI rank of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false

View File

@ -9,15 +9,15 @@ ConfigFile.NumWindows: 1
window_name CPU: Nanos6 subsystem of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {1.000000000000:0,70,0},{2.000000000000:99,131,0},{3.000000000000:53,121,221},{4.000000000000:223,108,0},{5.000000000000:75,127,82},{6.000000000000:242,110,162},{7.000000000000:255,190,0},{8.000000000000:153,114,0},{9.000000000000:156,12,231},{10.000000000000:177,25,229},{11.000000000000:255,72,50},{14.000000000000:0,171,255},{15.000000000000:124,213,228},{16.000000000000:242,239,141},{17.000000000000:80,80,80},{18.000000000000:94,0,0},{19.000000000000:128,165,214},{21.000000000000:222,101,128},{22.000000000000:110,148,255}
window_custom_color_palette {1.000000000000:0,70,0},{3.000000000000:99,131,0},{4.000000000000:53,121,221},{5.000000000000:223,108,0},{6.000000000000:75,127,82},{7.000000000000:242,110,162},{8.000000000000:255,190,0},{9.000000000000:153,114,0},{10.000000000000:156,12,231},{11.000000000000:177,25,229},{12.000000000000:255,72,50},{15.000000000000:0,171,255},{16.000000000000:124,213,228},{17.000000000000:242,239,141},{18.000000000000:80,80,80},{19.000000000000:94,0,0},{20.000000000000:128,165,214},{22.000000000000:222,101,128},{23.000000000000:110,148,255}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: Nanos6 task ID of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: Nanos6 task type of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: Nanos6 thread type of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: NODES subsystem of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

42
cfg/cpu/nosv/body-id.cfg Normal file
View File

@ -0,0 +1,42 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: nOS-V task body ID of the RUNNING thread >
################################################################################
window_name CPU: nOS-V task body ID of the RUNNING thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_color_mode window_in_null_gradient_mode
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 15
window_filter_module evt_type_label 1 "CPU: nOS-V task body ID of the RUNNING thread"

View File

@ -0,0 +1,44 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: nOS-V Runtime/Idle/Task breakdown >
################################################################################
window_name CPU: nOS-V Runtime/Idle/Task breakdown
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_width 600
window_height 150
window_comm_lines_enabled false
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {6.000000000000:94,0,0},{7.000000000000:153,114,0},{9.000000000000:124,213,228},{10.000000000000:242,239,141},{11.000000000000:0,70,0},{19.000000000000:195,96,151},{20.000000000000:255,162,255},{21.000000000000:203,255,3},{22.000000000000:7,255,12},{23.000000000000:21,224,189},{24.000000000000:255,103,0},{25.000000000000:0,99,162},{26.000000000000:110,77,252},{100.000000000000:0,100,0},{101.000000000000:60,60,60},{102.000000000000:150,150,0}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 17
window_filter_module evt_type_label 1 "CPU: nOS-V Runtime/Idle/Task breakdown"

44
cfg/cpu/nosv/idle.cfg Normal file
View File

@ -0,0 +1,44 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: nOS-V idle state of the RUNNING thread >
################################################################################
window_name CPU: nOS-V idle state of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_width 600
window_height 150
window_comm_lines_enabled false
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {100.000000000000:0,100,0},{101.000000000000:60,60,60},{102.000000000000:150,150,0}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 16
window_filter_module evt_type_label 1 "CPU: nOS-V idle state of the RUNNING thread"

View File

@ -9,15 +9,15 @@ ConfigFile.NumWindows: 1
window_name CPU: nOS-V subsystem of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {6.000000000000:94,0,0},{7.000000000000:153,114,0},{9.000000000000:124,213,228},{10.000000000000:242,239,141},{11.000000000000:0,70,0}
window_custom_color_palette {6.000000000000:94,0,0},{7.000000000000:153,114,0},{9.000000000000:124,213,228},{10.000000000000:242,239,141},{11.000000000000:0,70,0},{19.000000000000:195,96,151},{20.000000000000:255,162,255},{21.000000000000:203,255,3},{22.000000000000:7,255,12},{23.000000000000:21,165,118},{24.000000000000:255,103,0},{25.000000000000:200,30,5},{26.000000000000:255,10,200},{27.000000000000:98,133,80},{28.000000000000:0,99,162},{29.000000000000:110,77,252}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: nOS-V task AppID of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: nOS-V TaskID of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: nOS-V task rank+1 of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: nOS-V task type of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

41
cfg/cpu/openmp/label.cfg Normal file
View File

@ -0,0 +1,41 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: OpenMP label of the RUNNING thread >
################################################################################
window_name CPU: OpenMP label of the RUNNING thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 51
window_filter_module evt_type_label 1 "CPU: OpenMP label of the RUNNING thread"

View File

@ -0,0 +1,44 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: OpenMP subsystem of the RUNNING thread >
################################################################################
window_name CPU: OpenMP subsystem of the RUNNING thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {1.000000000000:255,177,245},{2.000000000000:255,86,239},{3.000000000000:122,44,22},{5.000000000000:239,188,0},{6.000000000000:160,89,0},{8.000000000000:0,255,73},{10.000000000000:86,209,43},{11.000000000000:203,208,93},{12.000000000000:0,176,169},{13.000000000000:190,82,201},{14.000000000000:124,114,183},{15.000000000000:157,231,255},{16.000000000000:199,194,0},{17.000000000000:96,0,200},{18.000000000000:255,255,124},{19.000000000000:35,152,0},{21.000000000000:255,251,174},{22.000000000000:232,0,0},{23.000000000000:210,66,40},{26.000000000000:101,101,99},{27.000000000000:200,0,255},{28.000000000000:0,203,249},{30.000000000000:255,219,0},{31.000000000000:48,103,107},{34.000000000000:194,105,126}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 50
window_filter_module evt_type_label 1 "CPU: OpenMP subsystem of the RUNNING thread"

View File

@ -0,0 +1,41 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: OpenMP task id of the RUNNING thread >
################################################################################
window_name CPU: OpenMP task id of the RUNNING thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 52
window_filter_module evt_type_label 1 "CPU: OpenMP task id of the RUNNING thread"

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: Flushing state of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

41
cfg/cpu/ovni/mark.cfg Normal file
View File

@ -0,0 +1,41 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: Mark value of the RUNNING thread >
################################################################################
window_name CPU: Mark value of the RUNNING thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 100
window_filter_module evt_type_label 1 "CPU: Mark value of the RUNNING thread"

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: Number of RUNNING threads
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: PID of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: TID of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -0,0 +1,42 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW CPU: TAMPI subsystem of the RUNNING thread >
################################################################################
window_name CPU: TAMPI subsystem of the RUNNING thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 20
window_filter_module evt_type_label 1 "CPU: TAMPI subsystem of the RUNNING thread"

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: Context switches of the CURRENT thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -0,0 +1,42 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW Thread: MPI function of the RUNNING thread >
################################################################################
window_name Thread: MPI function of the RUNNING thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 25
window_filter_module evt_type_label 1 "Thread: MPI function of the RUNNING thread"

View File

@ -0,0 +1,44 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW Thread: Nanos6 idle state >
################################################################################
window_name Thread: Nanos6 idle state
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {100.000000000000:0,100,0},{101.000000000000:100,100,177},{102.000000000000:150,150,0}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 40
window_filter_module evt_type_label 1 "Thread: Nanos6 idle state"

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: Nanos6 task MPI rank of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false

View File

@ -9,15 +9,15 @@ ConfigFile.NumWindows: 1
window_name Thread: Nanos6 subsystem of the ACTIVE thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {1.000000000000:0,70,0},{2.000000000000:99,131,0},{3.000000000000:53,121,221},{4.000000000000:223,108,0},{5.000000000000:75,127,82},{6.000000000000:242,110,162},{7.000000000000:255,190,0},{8.000000000000:153,114,0},{9.000000000000:156,12,231},{10.000000000000:177,25,229},{11.000000000000:255,72,50},{14.000000000000:0,171,255},{15.000000000000:124,213,228},{16.000000000000:242,239,141},{17.000000000000:80,80,80},{18.000000000000:94,0,0},{19.000000000000:128,165,214},{21.000000000000:222,101,128},{22.000000000000:110,148,255}
window_custom_color_palette {1.000000000000:0,70,0},{3.000000000000:99,131,0},{4.000000000000:53,121,221},{5.000000000000:223,108,0},{6.000000000000:75,127,82},{7.000000000000:242,110,162},{8.000000000000:255,190,0},{9.000000000000:153,114,0},{10.000000000000:156,12,231},{11.000000000000:177,25,229},{12.000000000000:255,72,50},{15.000000000000:0,171,255},{16.000000000000:124,213,228},{17.000000000000:242,239,141},{18.000000000000:80,80,80},{19.000000000000:94,0,0},{20.000000000000:128,165,214},{22.000000000000:222,101,128},{23.000000000000:110,148,255}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: Nanos6 task ID of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: Nanos6 task type of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: Nanos6 thread type
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled false

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: NODES subsystem of the ACTIVE thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -0,0 +1,42 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW Thread: nOS-V task body ID of the RUNNING thread >
################################################################################
window_name Thread: nOS-V task body ID of the RUNNING thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_color_mode window_in_null_gradient_mode
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 15
window_filter_module evt_type_label 1 "Thread: nOS-V task body ID of the RUNNING thread"

View File

@ -9,15 +9,15 @@ ConfigFile.NumWindows: 1
window_name Thread: nOS-V subsystem of the ACTIVE thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {6.000000000000:94,0,0},{7.000000000000:153,114,0},{9.000000000000:124,213,228},{10.000000000000:242,239,141},{11.000000000000:0,70,0}
window_custom_color_palette {6.000000000000:94,0,0},{7.000000000000:153,114,0},{9.000000000000:124,213,228},{10.000000000000:242,239,141},{11.000000000000:0,70,0},{19.000000000000:195,96,151},{20.000000000000:255,162,255},{21.000000000000:203,255,3},{22.000000000000:7,255,12},{23.000000000000:21,165,118},{24.000000000000:255,103,0},{25.000000000000:200,30,5},{26.000000000000:255,10,200},{27.000000000000:98,133,80},{28.000000000000:0,99,162},{29.000000000000:110,77,252}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: nOS-V task AppID of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: nOS-V TaskID of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: nOS-V task rank+1 of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: nOS-V task type of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -0,0 +1,41 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW Thread: OpenMP label of the ACTIVE thread >
################################################################################
window_name Thread: OpenMP label of the ACTIVE thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 51
window_filter_module evt_type_label 1 "Thread: OpenMP label of the ACTIVE thread"

View File

@ -0,0 +1,44 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW Thread: OpenMP subsystem of the ACTIVE thread >
################################################################################
window_name Thread: OpenMP subsystem of the ACTIVE thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_custom_color_enabled true
window_custom_color_palette {1.000000000000:255,177,245},{2.000000000000:255,86,239},{3.000000000000:122,44,22},{5.000000000000:239,188,0},{6.000000000000:160,89,0},{8.000000000000:0,255,73},{10.000000000000:86,209,43},{11.000000000000:203,208,93},{12.000000000000:0,176,169},{13.000000000000:190,82,201},{14.000000000000:124,114,183},{15.000000000000:157,231,255},{16.000000000000:199,194,0},{17.000000000000:96,0,200},{18.000000000000:255,255,124},{19.000000000000:35,152,0},{21.000000000000:255,251,174},{22.000000000000:232,0,0},{23.000000000000:210,66,40},{26.000000000000:101,101,99},{27.000000000000:200,0,255},{28.000000000000:0,203,249},{30.000000000000:255,219,0},{31.000000000000:48,103,107},{34.000000000000:194,105,126}
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 50
window_filter_module evt_type_label 1 "Thread: OpenMP subsystem of the ACTIVE thread"

View File

@ -0,0 +1,41 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW Thread: OpenMP task id of the ACTIVE thread >
################################################################################
window_name Thread: OpenMP task id of the ACTIVE thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 52
window_filter_module evt_type_label 1 "Thread: OpenMP task id of the ACTIVE thread"

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: CPU affinity of the CURRENT thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: Flushing state of the CURRENT thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

41
cfg/thread/ovni/mark.cfg Normal file
View File

@ -0,0 +1,41 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW Thread: Mark value of the ACTIVE thread >
################################################################################
window_name Thread: Mark value of the ACTIVE thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 100
window_filter_module evt_type_label 1 "Thread: Mark value of the ACTIVE thread"

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name CPU: PID of the RUNNING thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: State of the CURRENT thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -9,8 +9,8 @@ ConfigFile.NumWindows: 1
window_name Thread: TID of the ACTIVE thread
window_type single
window_id 1
window_position_x 0
window_position_y 0
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true

View File

@ -0,0 +1,42 @@
#ParaverCFG
ConfigFile.Version: 3.4
ConfigFile.NumWindows: 1
################################################################################
< NEW DISPLAYING WINDOW Thread: TAMPI subsystem of the ACTIVE thread >
################################################################################
window_name Thread: TAMPI subsystem of the ACTIVE thread
window_type single
window_id 1
window_position_x 100
window_position_y 100
window_width 600
window_height 150
window_comm_lines_enabled true
window_flags_enabled false
window_noncolor_mode true
window_logical_filtered true
window_physical_filtered false
window_comm_fromto true
window_comm_tagsize true
window_comm_typeval true
window_units Microseconds
window_maximum_y 1000.0
window_minimum_y 1.0
window_compute_y_max true
window_level thread
window_scale_relative 1.000000000000
window_end_time_relative 1.000000000000
window_object appl { 1, { All } }
window_begin_time_relative 0.000000000000
window_open true
window_drawmode draw_randnotzero
window_drawmode_rows draw_randnotzero
window_pixel_size 1
window_labels_to_draw 1
window_selected_functions { 14, { {cpu, Active Thd}, {appl, Adding}, {task, Adding}, {thread, Last Evt Val}, {node, Adding}, {system, Adding}, {workload, Adding}, {from_obj, All}, {to_obj, All}, {tag_msg, All}, {size_msg, All}, {bw_msg, All}, {evt_type, =}, {evt_value, All} } }
window_compose_functions { 9, { {compose_cpu, As Is}, {compose_appl, As Is}, {compose_task, As Is}, {compose_thread, As Is}, {compose_node, As Is}, {compose_system, As Is}, {compose_workload, As Is}, {topcompose1, As Is}, {topcompose2, As Is} } }
window_filter_module evt_type 1 20
window_filter_module evt_type_label 1 "Thread: TAMPI subsystem of the ACTIVE thread"

View File

@ -0,0 +1,7 @@
# Copyright (c) 2022-2023 Barcelona Supercomputing Center (BSC)
# SPDX-License-Identifier: GPL-3.0-or-later
include(CheckCCompilerFlag)
set(CMAKE_REQUIRED_LINK_OPTIONS "-fompss-2")
check_c_compiler_flag("-fompss-2" OMPSS2_COMPILER_FOUND)

View File

@ -0,0 +1,20 @@
# Copyright (c) 2024 Barcelona Supercomputing Center (BSC)
# SPDX-License-Identifier: GPL-3.0-or-later
if(EXISTS "/proc/sys/kernel/perf_event_paranoid")
file(READ "/proc/sys/kernel/perf_event_paranoid" paranoid_raw)
string(REPLACE "\n" "" paranoid_value "${paranoid_raw}")
message(STATUS "Value of /proc/sys/kernel/perf_event_paranoid is ${paranoid_value}")
if(paranoid_value LESS_EQUAL 1)
message(STATUS "Value of perf_event_paranoid suitable for Kernel tests")
set(PERF_PARANOID_KERNEL ON)
else()
message(STATUS "Value of perf_event_paranoid NOT suitable for Kernel tests")
set(PERF_PARANOID_KERNEL OFF)
endif()
else()
message(STATUS "Missing /proc/sys/kernel/perf_event_paranoid")
set(PERF_PARANOID_KERNEL OFF)
endif()

View File

@ -1,3 +1,6 @@
# Copyright (c) 2022-2023 Barcelona Supercomputing Center (BSC)
# SPDX-License-Identifier: GPL-3.0-or-later
include(GNUInstallDirs)
find_library(NANOS6_LIBRARY NAMES nanos6)

View File

@ -1,3 +1,6 @@
# Copyright (c) 2022-2023 Barcelona Supercomputing Center (BSC)
# SPDX-License-Identifier: GPL-3.0-or-later
include(GNUInstallDirs)
if(DEFINED ENV{NODES_HOME})
@ -6,9 +9,9 @@ else()
message(STATUS "NODES_HOME not set, refusing to search")
endif()
find_library(NODES_LIBRARY NAMES nanos6 PATHS "${NODES_HOME}/lib" NO_DEFAULT_PATH)
find_file(NODES_WRAPPER NAMES nanos6-main-wrapper.o PATHS "${NODES_HOME}/lib" NO_DEFAULT_PATH)
find_path(NODES_INCLUDE_DIR nanos6.h PATHS "${NODES_HOME}/include" NO_DEFAULT_PATH)
find_library(NODES_LIBRARY NAMES nodes PATHS "${NODES_HOME}/lib" NO_DEFAULT_PATH)
find_file(NODES_WRAPPER NAMES nodes-main-wrapper.o PATHS "${NODES_HOME}/lib" NO_DEFAULT_PATH)
find_path(NODES_INCLUDE_DIR nodes.h PATHS "${NODES_HOME}/include" NO_DEFAULT_PATH)
include(FindPackageHandleStandardArgs)

19
cmake/FindNosv.cmake Normal file
View File

@ -0,0 +1,19 @@
# Copyright (c) 2023 Barcelona Supercomputing Center (BSC)
# SPDX-License-Identifier: GPL-3.0-or-later
find_package(PkgConfig)
if(NOT PKG_CONFIG_FOUND)
message(STATUS "pkg-config not found, required to locate nOSV-V")
return()
endif()
# Use PKG_CONFIG_LIBDIR=/path/to/nosv/install/lib/pkgconfig to use a custom
# installation.
pkg_search_module(NOSV IMPORTED_TARGET nos-v)
if(NOT NOSV_FOUND)
message(STATUS "nOS-V not found")
else()
message(STATUS "Found nOS-V ${NOSV_VERSION} at ${NOSV_LINK_LIBRARIES}")
endif()

1
doc/CHANGELOG.md Symbolic link
View File

@ -0,0 +1 @@
../CHANGELOG.md

View File

@ -65,5 +65,5 @@ to write the duplicated value with no error.
A unique function can be set to each channel which will be called once a channel
becomes dirty with `chan_set_dirty_cb()`. This callback will be called before
`chan_set()`, `chan_push()` or `chan_pop()` returns. The [patch
bay](../patchbay) uses this callback to detect when a channel is modified an run
bay](patchbay.md) uses this callback to detect when a channel is modified an run
other callbacks.

101
doc/dev/events.md Normal file
View File

@ -0,0 +1,101 @@
# Emulator events
The events processed by the emulator are described in each model.
Unrecognized events will cause a panic and stop the emulator in most
cases.
The events may have additional arguments in the payload, which are also
described. To this end, a simple language was created to specify the
format of each event in a concise declaration.
Additionally, a printf-like string is declared for each event, so they
can be explained in plain English. The values of the arguments are also
substituted in the description of the event following a extended printf
format described below.
## Event format
The events are defined by a small language that defines the MCV of an event, if
is a jumbo and the arguments in the payload (if any).
The grammar of this language is as follows in [ABNF][abnf].
[abnf]: https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_form
```ABNF
event-definition = event-mcv event-type [ "(" argument-list ")" ]
event-mcv = VCHAR VCHAR VCHAR
event-type = [ '+' ]
argument-list = argument-type " " argument-name [ ", " argument-list ]
argument-name = 1*(CHAR / DIGIT)
argument-type = type-signed | type-unsigned | type-string
type-signed = "i8" | "i16" | "i32" | "i64"
type-unsigned = "u8" | "u16" | "u32" | "u64"
type-string = "str"
```
The `event-type` defines the type of event. Using the symbol `+` defines
the event as jumbo. Otherwise, if not given it is considered a normal
event.
Here are some examples:
- `OHp`: A normal event with `OHp` MCV and no payload.
- `OAs(i32 cpu)`: A normal event with `OAs` MCV that has the cpu stored in
the payload as a 32 bits signed integer.
- `OHC(i32 cpu, u64 tag)`: A normal event with `OHC` MCV that has two
arguments in the payload: the cpu stored as a 32 bit signed integer,
and a tag stored as a 64 bit unsigned integer.
- `VYc+(u32 typeid, str label)`: A jumbo event with `VTc` MCV that has in the
jumbo payload a 32 bits unsigned integer for the typeid followed by the label
null-terminated string of variable size.
## Event description
To describe the meaning of each event, a description follows the event
declaration. This description accepts printf-like format specifiers that
are replaced with the value of the argument they refer to.
The formats are specified as follows:
```ABNF
format-specifier = "%" [ printf-format] "{" argument-name "}"
argument-name = 1*(CHAR / DIGIT)
```
Where the optional `printf-format` is any string accepted by the format
specifier of `printf()`, as defined in the manual `printf(3)`. If the
`printf-format` is not given, the default format for the argument type
is used.
Here are some examples of event descriptions of the previous events:
```c
{ "OHp", "pauses the execution" },
{ "OAs(i32 cpu)", "switches it's own affinity to the CPU %{cpu}" },
{ "OHC(i32 cpu, u64 tag)", "creates a new thread on CPU %{cpu} with tag %#llx{tag}" },
{ "VYc+(u32 typeid, str label)", "creates task type %{typeid} with label \"%{label}\"" },
```
Which would be printed with ovnidump like:
```nohighlight
OHp pauses the execution
OAs switches it's own affinity to the CPU 7
OHC creates a new thread on CPU 3 with tag 0x7f9239c6b6c0
VYc creates task type 4 with label "block computation"
```
## Model version
When adding new events of changing the format of already existing
events, the version of the model that defines the event must be changed
accordingly to the rules of [Semantic Versions](https://semver.org).
In general, adding new events will cause a minor increase in the
version, while changing events will cause a major increase. Notice that
the emulator will reject a stream which contains events from a model
which is not compatible with the current model version.

View File

@ -22,7 +22,7 @@ If the model is not enabled, no other function will be called.
The create function is called for each enabled model to allow them to allocate
all the required structures to perform the emulation using the
[extend](../extend) mechanism. All the required channels must be created and
[extend](extend.md) mechanism. All the required channels must be created and
registered in the patch bay in this function, so other models can found them in
the next stage.

View File

@ -1,6 +1,6 @@
# Mux
The emulator provides a mechanism to interconnect [channels](../channels) in a
The emulator provides a mechanism to interconnect [channels](channels.md) in a
similar way as an [analog
multiplexer](https://en.wikipedia.org/wiki/Multiplexer) by using the `mux`
module.
@ -19,7 +19,7 @@ selected. This allows a multiplexer to act as a filter too.
The typical use of multiplexers is to implement the tracking modes of channels.
As an example, the following diagram shows two multiplexers used to implement
the subsystem view of [Nanos6](../nanos6):
the subsystem view of [Nanos6](../user/emulation/nanos6.md):
![Mux example](fig/mux.svg)
@ -51,5 +51,5 @@ Multiplexers allow models to interact with each other in a controlled way. In
the example, the blue channel (*nanos6.thread0.subsystem*) is directly modified by
the Nanos6 model when a new event is received. While the red channels are
controlled by the ovni model. The rest of the channels are automatically updated
in the propagation phase of the [bay](../patchbay) allowing the ovni model to
in the propagation phase of the [bay](patchbay.md) allowing the ovni model to
modify the Nanos6 Paraver view of the subsystems.

View File

@ -16,7 +16,7 @@ A channel can be connected to each row in a trace with `prv_register()`, so the
new values of the channel get written in the trace. Only null and int64 data
values are supported for now.
The emission phase is controlled by the [patch bay](../patchbay) and runs all
The emission phase is controlled by the [patch bay](patchbay.md) and runs all
the emit callbacks at once for all dirty channels.
## Duplicate values

View File

@ -1,6 +1,6 @@
# Patch bay
The patch bay (or simply bay) allows [channels](../channels/) to be registered
The patch bay (or simply bay) allows [channels](channels.md) to be registered
with their name so they are visible to all parts of the emulator and provides a
way to run callbacks when the channels update their values.

View File

@ -13,8 +13,9 @@ The ovni project implements a fast instrumentation library that records
small events (starting at 12 bytes) during the execution of programs to
later investigate how the execution happened.
The instrumentation process is split in two stages: [runtime](runtime)
tracing and [emulation](emulation/).
The instrumentation process is split in two stages:
[runtime](user/runtime/index.md)
tracing and [emulation](user/emulation/index.md).
During runtime, very short binary events are stored on disk which
describe what is happening. Once the execution finishes, the events are

View File

@ -1,4 +1,4 @@
mkdocs==1.4.1
mkdocs==1.6.0
markdown==3.3.7
python-markdown-math==0.8
jinja2==3.1.2

View File

@ -1,31 +0,0 @@
# Overview
The objective of the ovni project is to provide insight into what
happened at execution of a program.
![Instrumentation process](fig/instrumentation.svg)
The key pieces of software involved are instrumented so they emit events
during the execution which allow the reconstruction of the execution
later on.
During the execution phase, the information gathered in the events is
kept very short and simple, so the overhead is kept at minimum to avoid
disturbing the execution process. Here is an example of a single event
emitted during the execution phase, informing the current thread to
finish the execution:
00 4f 48 65 52 c0 27 b4 d3 ec 01 00
During the emulation phase, the events are read and processed in the
emulator, reconstructing the execution. State transitions are recorded
in a Paraver trace. Here is an example of the same thread ceasing the
execution:
2:0:1:1:1:50105669:1:0
Finally, loading the trace in the Paraver program, we can generate a
timeline visualization of the state change. Here is the example for the
same state transition of the thread stopping the execution:
![Visualization](fig/visualization.png)

View File

@ -0,0 +1,62 @@
# Part model
Ovni has a model to represent the hardware components as well as the software
concepts like threads or processes. Each concept is considered to be a *part*.
Here is an example diagram depicting the part hierarchy:
![Part model](part-model.svg)
Notice how a loom can restrict the CPUs of the node to its child processes.
## Software parts
These are not physical parts, but they abstract common concepts.
### Thread
A thread in ovni is directly mapped to a [POSIX
thread](https://en.wikipedia.org/wiki/Pthreads) and they are identified by a
`TID` which must be unique in a [node](#node). Threads in ovni have [a model with
an internal state](../emulation/ovni.md/#thread_model) that tries to tracks the
state of the real thread.
### Process
A process is directly mapped to a UNIX
[process](https://en.wikipedia.org/wiki/Process_(computing)) and they are
identified by a `PID` number which must be unique in a [node](#node).
### Loom
A loom has no direct mapping to a usual concept. It consists of a set of
[CPUs](#cpu) from the same node and a set of processes that can *only run in
those CPUs*. Each CPUs must belong to one and only one loom. It is often used
to group CPUs that belong to the same process when running workloads with
multiple processes (like with MPI).
Each loom has a virtual CPU which collects running threads that are not
exclusively assigned to a physical CPU, so we cannot determine on which CPU they
are running.
## Hardware parts
These parts have a physical object assigned.
### CPU
A CPU is a hardware thread that can execute at most one thread at a time. Each
CPU must have a physical ID that is unique in a node. In ovni there is also a
virtual CPU, which simply is used to collect threads that are not tied to an
specific physical CPU, so it cannot be easily determined where they are running.
### Node
A *node* refers to a compute node, often a physical machine with memory and
network which may contain one or more
[sockets](https://en.wikipedia.org/wiki/CPU_socket), where each socket has one
or more CPUs.
### System
A system represents the complete set of hardware parts and software parts that
are known to ovni in a given trace.

View File

@ -0,0 +1,516 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="306.91663mm"
height="127.00001mm"
viewBox="0 0 306.91663 127.00001"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
sodipodi:docname="part-model.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#999999"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.73049944"
inkscape:cx="629.70616"
inkscape:cy="280.62992"
inkscape:window-width="1920"
inkscape:window-height="1031"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="-74.083327"
originy="-89.958345"
spacingx="0.26458333"
spacingy="0.26458334"
empcolor="#7a7aff"
empopacity="0.25098039"
color="#6a6aff"
opacity="0.1254902"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
visible="false" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-74.083328,-89.958344)">
<rect
style="fill:none;stroke:none;stroke-width:0.264999;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0"
id="rect33"
width="306.91663"
height="127.00001"
x="74.083328"
y="89.958344" />
<rect
style="fill:#ffeeaa;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0"
id="rect32"
width="121.70832"
height="84.666679"
x="253.99998"
y="127.00001" />
<text
xml:space="preserve"
style="font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="290.19363"
y="202.25124"
id="text32"><tspan
sodipodi:role="line"
id="tspan32"
style="font-size:6.35px;stroke-width:0.264583"
x="290.19363"
y="202.25124">Hardware parts</tspan></text>
<rect
style="fill:#eeffaa;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0"
id="rect31"
width="169.33333"
height="84.666679"
x="79.374992"
y="127.00001" />
<rect
style="fill:#fff6d5;stroke:#000000;stroke-width:0.3;stroke-linecap:square;stroke-dasharray:none;stroke-dashoffset:0"
id="rect27"
width="47.625004"
height="21.166676"
x="269.87497"
y="148.16667"
ry="2.645834" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect1"
width="21.166662"
height="10.583329"
x="84.566666"
y="174.52502"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="87.947342"
y="181.39488"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
style="stroke-width:0.264583"
x="87.947342"
y="181.39488">Thread</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect3"
width="21.166664"
height="10.583337"
x="111.12499"
y="153.45834"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="113.57446"
y="160.26309"
id="text3"><tspan
sodipodi:role="line"
id="tspan3"
style="stroke-width:0.264583"
x="113.57446"
y="160.26309">Process</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect4"
width="21.166664"
height="10.583333"
x="111.12499"
y="174.62502"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="114.50567"
y="181.49487"
id="text4"><tspan
sodipodi:role="line"
id="tspan4"
style="stroke-width:0.264583"
x="114.50567"
y="181.49487">Thread</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect5"
width="21.166658"
height="10.583333"
x="137.58333"
y="174.62502"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="140.964"
y="181.49487"
id="text5"><tspan
sodipodi:role="line"
id="tspan5"
style="stroke-width:0.264583"
x="140.964"
y="181.49487">Thread</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect6"
width="21.166672"
height="10.583333"
x="169.33331"
y="174.62502"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="172.71399"
y="181.49487"
id="text6"><tspan
sodipodi:role="line"
id="tspan6"
style="stroke-width:0.264583"
x="172.71399"
y="181.49487">Thread</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect7"
width="20.966642"
height="10.38336"
x="195.99167"
y="153.55833"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="198.24112"
y="160.16312"
id="text7"><tspan
sodipodi:role="line"
id="tspan7"
style="stroke-width:0.264583"
x="198.24112"
y="160.16312">Process</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect8"
width="21.16667"
height="10.583333"
x="195.79164"
y="174.62502"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="199.17232"
y="181.49487"
id="text8"><tspan
sodipodi:role="line"
id="tspan8"
style="stroke-width:0.264583"
x="199.17232"
y="181.49487">Thread</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect9"
width="21.166666"
height="10.583333"
x="222.24997"
y="174.62502"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="225.63065"
y="181.49487"
id="text9"><tspan
sodipodi:role="line"
id="tspan9"
style="stroke-width:0.264583"
x="225.63065"
y="181.49487">Thread</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect10"
width="21.166658"
height="10.583337"
x="153.45833"
y="132.29167"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="158.21979"
y="139.09644"
id="text10"><tspan
sodipodi:role="line"
id="tspan10"
style="stroke-width:0.264583"
x="158.21979"
y="139.09644">Loom</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect11"
width="21.166651"
height="10.58334"
x="306.91666"
y="132.29167"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="311.88068"
y="139.16154"
id="text11"><tspan
sodipodi:role="line"
id="tspan11"
style="stroke-width:0.264583"
x="311.88068"
y="139.16154">Node</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect12"
width="15.875001"
height="10.583341"
x="275.16666"
y="153.45834"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="278.86566"
y="160.291"
id="text12"><tspan
sodipodi:role="line"
id="tspan12"
style="stroke-width:0.264583"
x="278.86566"
y="160.291">CPU</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect13"
width="15.874983"
height="10.583341"
x="296.33334"
y="153.45834"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="300.03235"
y="160.291"
id="text13"><tspan
sodipodi:role="line"
id="tspan13"
style="stroke-width:0.264583"
x="300.03235"
y="160.291">CPU</tspan></text>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 121.70832,164.04168 0,10.58334"
id="path15"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect3"
inkscape:connection-end="#rect4" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 206.45046,163.94169 -0.0505,10.68333"
id="path16"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect7"
inkscape:connection-end="#rect8" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 212.94006,163.94169 13.30366,10.68333"
id="path17"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-end="#rect9"
inkscape:connection-start="#rect7" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 199.96086,163.94169 -13.40463,10.68333"
id="path18"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect7"
inkscape:connection-end="#rect6" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 128.32291,164.04168 13.22917,10.58334"
id="path19"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect3"
inkscape:connection-end="#rect5" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 115.03723,164.04168 -13.21614,10.48334"
id="path20"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect3"
inkscape:connection-end="#rect1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 153.45833,142.87501 -21.16667,10.58333"
id="path21"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect10"
inkscape:connection-end="#rect3" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 174.62499,142.86254 21.44212,10.69579"
id="path22"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect10"
inkscape:connection-end="#rect7" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 314.19269,142.87501 -6.61457,10.58333"
id="path24"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect11"
inkscape:connection-end="#rect13" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 308.90102,142.87501 291.04166,153.8654"
id="path25"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect11"
inkscape:connection-end="#rect12" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect25"
width="15.875013"
height="10.583337"
x="322.79163"
y="153.45834"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="326.49063"
y="160.291"
id="text25"><tspan
sodipodi:role="line"
id="tspan25"
style="stroke-width:0.264583"
x="326.49063"
y="160.291">CPU</tspan></text>
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect26"
width="15.874991"
height="10.583337"
x="343.95831"
y="153.45834"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="347.65732"
y="160.291"
id="text26"><tspan
sodipodi:role="line"
id="tspan26"
style="stroke-width:0.264583"
x="347.65732"
y="160.291">CPU</tspan></text>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 320.80727,142.87501 6.61457,10.58333"
id="path26"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect11"
inkscape:connection-end="#rect25" />
<path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 326.09894,142.87501 17.85937,10.99039"
id="path27"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect11"
inkscape:connection-end="#rect26" />
<path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 174.62499,139.70001 95.24998,19.05"
id="path28"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect10" />
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.2;stroke-linecap:square;stroke-dasharray:none"
id="rect29"
width="21.166666"
height="10.583335"
x="216.95831"
y="95.250008"
ry="0" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="219.6889"
y="101.67236"
id="text29"><tspan
sodipodi:role="line"
id="tspan29"
style="stroke-width:0.264583"
x="219.6889"
y="101.67236">System</tspan></text>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 238.12498,104.89952 68.79168,28.32598"
id="path29"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect29"
inkscape:connection-end="#rect11" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 218.47022,105.83334 -45.35713,26.45833"
id="path30"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect29"
inkscape:connection-end="#rect10" />
<text
xml:space="preserve"
style="font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="140.81671"
y="202.25124"
id="text31"><tspan
sodipodi:role="line"
id="tspan31"
style="font-size:6.35px;stroke-width:0.264583"
x="140.81671"
y="202.25124">Software parts</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

123
doc/user/concepts/trace.md Normal file
View File

@ -0,0 +1,123 @@
# Trace concepts
When using libovni to generate traces or the emulator to process them, there are
several concepts to keep in mind.
## Trace elements
The information generated by a program or later processed by other ovni tools is
known as a trace. A runtime trace stores the information as-is in disk from a
program execution. While a emulation trace is generated from the runtime trace
for visualization with Paraver.
Both runtime and emulation traces are always stored inside the same directory,
by default `ovni/`, which is known as the *trace directory*.
Here are the components of a runtime trace, as generated by libovni:
<p align="center">
<img alt="Trace concepts" src="../trace.svg">
</p>
### Stream
A stream is a directory which contains a binary stream and the associated stream
metadata file. Each stream is associated with a given part of a system. As of
now, libovni can only generate streams associated to [threads](part-model.md#thread).
### Stream metadata
The stream metadata is a JSON file named `stream.json` which holds information
about the stream itself.
### Binary stream
A binary stream is a file named `stream.obs` (.obs stands for Ovni Binary
Stream) composed of a header and a concatenated array of events without padding.
Notice that each event may have different length.
### Event
An event is a point in time that has some information associated. Events written
at runtime by libovni have at MCV, a clock and a optional payload. The list of
all events recognized by the emulator can be found [here](../emulation/events.md).
Events can be displayed by ovnidump, which shows an explanation of what the
event means:
```txt
$ ovnidump ovni/loom.hop.nosv-u1000/proc.1121064 | grep -A 10 VTx | head
517267929632815 VTx thread.1121064 executes the task 1 with bodyid 0
517267930261672 VYc thread.1121064 creates task type 2 with label "task"
517267930875858 VTC thread.1121064 creates parallel task 2 with type 2
517267930877789 VU[ thread.1121064 starts submitting a task
517267930877990 VU] thread.1121064 stops submitting a task
517267930878098 VTC thread.1121064 creates parallel task 3 with type 2
517267930878196 VU[ thread.1121064 starts submitting a task
517267930878349 VU] thread.1121064 stops submitting a task
517267930878432 VTC thread.1121064 creates parallel task 4 with type 2
517267930878494 VU[ thread.1121064 starts submitting a task
```
There are two types or events: normal and jumbo events, the latter can hold
large attached payloads.
### MCV
The MCV acronym is the abbreviation of Model-Class-Value, which are a three
characters that identify any event. The MCV is shown in the ovnitop and ovnidump
tools and allows easy filtering with grep, for a single or related events:
```
$ ovnitop ovni | grep VT
VTe 20002
VTx 20002
VTC 200
VTc 2
VTp 1
VTr 1
```
### Clock
A clock is a 64 bit counter, which counts the number of nanoseconds from an
arbitrary point in time in the past. Each event has the value of the clock
stored inside, to indicate when that event happened. In a given trace there can
be multiple clocks which don't refer to the same point in the past and must be
corrected so they all produce an ordered sequence of events. The ovnisync
program performs this correction by measuring the difference across clocks of
different nodes.
### Payload
Events may have associated additional information which is stored in the stream.
Normal events can hold up to 16 bytes, otherwise the jumbo events must be used
to hold additional payload.
## Other related concepts
Apart from the trace itself, there are other concepts to keep in mind when the
trace is being processed by the emulator.
### Event model
Each event belongs to an event model, as identified by the model character in
the MCV. An event model is composed of several components:
- A set of [events](#event) all with the same model identifier in the
[MCV](#mcv)
- The emulator code that processes those events.
- A human readable name, like `ovni` or `nanos6`.
- A semantic version.
### State
A state is a discrete value that can change over time based on the events the
emulator receives. Usually a single event causes a single state change, which is
then written to the Paraver traces. An example is the thread state, which can
change over time based on the events `OH*` that indicate a state transition
of the current thread.
In contrast with an event, states have a duration associated which can usually
be observed in Paraver. Notice that the trace only contains events, the states
are computed at emulation.

474
doc/user/concepts/trace.svg Normal file
View File

@ -0,0 +1,474 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="116.41666mm"
height="105.83334mm"
viewBox="0 0 116.41666 105.83334"
version="1.1"
id="svg1"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
sodipodi:docname="trace.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#999999"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="true"
inkscape:zoom="1.4609989"
inkscape:cx="248.80238"
inkscape:cy="199.17879"
inkscape:window-width="1920"
inkscape:window-height="1031"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="-39.687498"
originy="-15.875"
spacingx="0.26458333"
spacingy="0.26458334"
empcolor="#7a7aff"
empopacity="0.25098039"
color="#6a6aff"
opacity="0.1254902"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
visible="true" />
</sodipodi:namedview>
<defs
id="defs1">
<rect
x="45"
y="370"
width="209.99998"
height="35"
id="rect15" />
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-39.687498,-15.875)">
<g
id="g59"
transform="translate(5.5781353,-0.74017783)"
style="stroke-width:0.15875;stroke-dasharray:none">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="100.23113"
y="24.896034"
id="text22"><tspan
sodipodi:role="line"
id="tspan22"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="100.23113"
y="24.896034">Trace</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect32"
width="15.875"
height="7.9375005"
x="92.281235"
y="19.4142" />
</g>
<g
id="g57"
transform="translate(-0.84260657,-0.98969722)"
style="stroke-width:0.15875;stroke-dasharray:none">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="106.39689"
y="46.186943"
id="text24"><tspan
sodipodi:role="line"
id="tspan24"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="106.39689"
y="46.186943">Stream</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect33"
width="21.166666"
height="7.9375019"
x="96.092606"
y="40.6772" />
</g>
<g
id="g56"
transform="translate(0.32292488,-0.89336269)"
style="stroke-width:0.15875;stroke-dasharray:none">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="78.773026"
y="46.090603"
id="text23"><tspan
sodipodi:role="line"
id="tspan23"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="78.773026"
y="46.090603">Stream</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect34"
width="21.166666"
height="7.9375"
x="68.468742"
y="40.580864" />
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 100.80665,26.611522 84.365216,39.687501"
id="path35"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect32"
inkscape:connection-end="#rect34" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 105.80376,26.611522 0.0227,13.075981"
id="path36"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect32"
inkscape:connection-end="#rect33" />
<g
id="g54"
style="stroke-width:0.15875;stroke-dasharray:none"
transform="translate(-0.99999828,-3.5391978)">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="58.792854"
y="72.586143"
id="text25"><tspan
sodipodi:role="line"
id="tspan25"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="58.792854"
y="72.586143">Metadata</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect36"
width="26.458336"
height="7.9375"
x="45.979164"
y="67.0392" />
</g>
<g
id="g55"
style="stroke-width:0.15875;stroke-dasharray:none"
transform="translate(-0.99999828,-3.5391978)">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="97.157433"
y="72.175835"
id="text26"><tspan
sodipodi:role="line"
id="tspan26"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="97.157433"
y="72.175835">Binary stream</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect37"
width="34.395832"
height="7.9375"
x="80.374992"
y="67.0392" />
</g>
<rect
style="stroke-width:0.15875;stroke-dasharray:none;fill:none;stroke:none;stroke-linecap:square"
id="rect60"
width="116.41666"
height="105.83334"
x="40.687496"
y="19.414198"
inkscape:label="background"
transform="translate(-0.99999735,-3.5391979)" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 75.847223,47.625001 61.736111,63.500002"
id="path37"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect34"
inkscape:connection-end="#rect36" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 82.241318,47.625001 93.706592,63.500002"
id="path38"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect34"
inkscape:connection-end="#rect37" />
<g
id="g53"
style="stroke-width:0.15875;stroke-dasharray:none"
transform="translate(-8.2507438,-3.0742007)">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="62.074863"
y="95.933655"
id="text27"><tspan
sodipodi:role="line"
id="tspan27"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="62.074863"
y="95.933655">Header</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect38"
width="23.812506"
height="7.9375014"
x="50.584076"
y="90.386703" />
</g>
<g
id="g52"
transform="translate(-8.2507438,-3.3066989)"
style="stroke-width:0.15875;stroke-dasharray:none">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="91.411552"
y="96.101036"
id="text28"><tspan
sodipodi:role="line"
id="tspan28"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="91.411552"
y="96.101036">Event</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect39"
width="23.812506"
height="7.9375014"
x="79.920769"
y="90.619202" />
</g>
<g
id="g51"
style="stroke-width:0.15875;stroke-dasharray:none"
transform="translate(-8.2507438,-3.0742007)">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="120.28321"
y="95.868538"
id="text29"><tspan
sodipodi:role="line"
id="tspan29"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="120.28321"
y="95.868538">Event</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect40"
width="23.812506"
height="7.9375014"
x="108.79243"
y="90.386703" />
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 89.517356,71.437502 61.29514,87.312503"
id="path40"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect37"
inkscape:connection-end="#rect38" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 94.406805,71.437502 85.742383,87.312503"
id="path41"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect37"
inkscape:connection-end="#rect39" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 99.218748,71.437502 109.8021,87.312503"
id="path42"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect37"
inkscape:connection-end="#rect40" />
<g
id="g46"
transform="translate(-68.659367,2.7781237)"
style="stroke-width:0.15875;stroke-dasharray:none">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="123.93869"
y="113.98891"
id="text30"><tspan
sodipodi:role="line"
id="tspan30"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="123.93869"
y="113.98891">MCV</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect42"
width="15.875001"
height="7.9375038"
x="116.41666"
y="108.47917" />
</g>
<g
id="g45"
transform="translate(-68.659367,5.4239515)"
style="stroke-width:0.15875;stroke-dasharray:none">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="147.92894"
y="111.38029"
id="text31"><tspan
sodipodi:role="line"
id="tspan31"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="147.92894"
y="111.38029">Clock</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect43"
width="15.875001"
height="7.9375038"
x="140.22916"
y="105.83334" />
</g>
<g
id="g44"
transform="translate(-66.112857,13.610614)"
style="stroke-width:0.15875;stroke-dasharray:none">
<g
id="g60"
style="stroke-width:0.15875;stroke-dasharray:none">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="172.85362"
y="102.65102"
id="text32"><tspan
sodipodi:role="line"
id="tspan32"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="172.85362"
y="102.65102">Payload</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect44"
width="23.812506"
height="7.9375014"
x="161.36285"
y="97.514389" />
</g>
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 83.366344,95.250004 80.27399,111.2573"
id="path47"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-end="#g45" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 80.082847,95.250004 60.540101,111.2573"
id="path48"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-end="#g46" />
<g
id="g58"
transform="translate(-1.9073076,-1.4153422)"
style="stroke-width:0.15875;stroke-dasharray:none">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="132.47266"
y="46.496338"
id="text49"><tspan
sodipodi:role="line"
id="tspan49"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="132.47266"
y="46.496338">...</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect49"
width="18.619415"
height="7.9374995"
x="123.61564"
y="41.102844" />
</g>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 110.56031,26.611522 15.69429,13.07598"
id="path49"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-end="#rect49"
inkscape:connection-start="#rect32" />
<g
id="g50"
transform="translate(-8.2507438,-2.9293636)"
style="stroke-width:0.15875;stroke-dasharray:none">
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="149.35014"
y="95.635361"
id="text50"><tspan
sodipodi:role="line"
id="tspan50"
style="text-align:center;text-anchor:middle;stroke-width:0.15875;stroke-dasharray:none"
x="149.35014"
y="95.635361">...</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:0.15875;stroke-linecap:square;stroke-dasharray:none"
id="rect40-5"
width="23.812506"
height="7.9375014"
x="137.89658"
y="90.241867" />
</g>
<path
style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 104.06944,71.437502 29.98612,15.875001"
id="path50"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#rect37"
inkscape:connection-end="#g50" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.15875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 87.506274,95.250004 103.22625,111.125"
id="path60"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#g52"
inkscape:connection-end="#g44" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1,186 +1,760 @@
# Emulator events
This file contains an exhaustive list of events supported by the emulator.
This is a exhaustive list of the events recognized by the emulator.
Built on Nov 13 2024.
- Punctual events don't produce a state transition.
- All events refer to the current thread.
- Descriptions must be kept short.
## Model nanos6
```txt
**********************************************************
Please keep this list synchronized with the emulator code!
**********************************************************
List of events for the model *nanos6* with identifier **`6`** at version `1.1.0`:
<dl>
<dt><a id="6Yc" href="#6Yc"><pre>6Yc+(u32 typeid, str label)</pre></a></dt>
<dd>creates task type %{typeid} with label &quot;%{label}&quot;</dd>
<dt><a id="6Tc" href="#6Tc"><pre>6Tc(u32 taskid, u32 typeid)</pre></a></dt>
<dd>creates task %{taskid} with type %{typeid}</dd>
<dt><a id="6Tx" href="#6Tx"><pre>6Tx(u32 taskid)</pre></a></dt>
<dd>executes the task %{taskid}</dd>
<dt><a id="6Te" href="#6Te"><pre>6Te(u32 taskid)</pre></a></dt>
<dd>ends the task %{taskid}</dd>
<dt><a id="6Tp" href="#6Tp"><pre>6Tp(u32 taskid)</pre></a></dt>
<dd>pauses the task %{taskid}</dd>
<dt><a id="6Tr" href="#6Tr"><pre>6Tr(u32 taskid)</pre></a></dt>
<dd>resumes the task %{taskid}</dd>
<dt><a id="6W[" href="#6W["><pre>6W[</pre></a></dt>
<dd>enters worker main loop, looking for tasks</dd>
<dt><a id="6W]" href="#6W]"><pre>6W]</pre></a></dt>
<dd>leaves worker main loop, looking for tasks</dd>
<dt><a id="6Wt" href="#6Wt"><pre>6Wt</pre></a></dt>
<dd>begins handling a task via handleTask()</dd>
<dt><a id="6WT" href="#6WT"><pre>6WT</pre></a></dt>
<dd>ceases handling a task via handleTask()</dd>
<dt><a id="6Ww" href="#6Ww"><pre>6Ww</pre></a></dt>
<dd>begins switching to another worker via switchTo()</dd>
<dt><a id="6WW" href="#6WW"><pre>6WW</pre></a></dt>
<dd>ceases switching to another worker via switchTo()</dd>
<dt><a id="6Wm" href="#6Wm"><pre>6Wm</pre></a></dt>
<dd>begins migrating the current worker to another CPU</dd>
<dt><a id="6WM" href="#6WM"><pre>6WM</pre></a></dt>
<dd>ceases migrating the current worker to another CPU</dd>
<dt><a id="6Ws" href="#6Ws"><pre>6Ws</pre></a></dt>
<dd>begins suspending the worker via suspend()</dd>
<dt><a id="6WS" href="#6WS"><pre>6WS</pre></a></dt>
<dd>ceases suspending the worker via suspend()</dd>
<dt><a id="6Wr" href="#6Wr"><pre>6Wr</pre></a></dt>
<dd>begins resuming another worker via resume()</dd>
<dt><a id="6WR" href="#6WR"><pre>6WR</pre></a></dt>
<dd>ceases resuming another worker via resume()</dd>
<dt><a id="6Wg" href="#6Wg"><pre>6Wg</pre></a></dt>
<dd>enters sponge mode (absorbing system noise)</dd>
<dt><a id="6WG" href="#6WG"><pre>6WG</pre></a></dt>
<dd>leaves sponge mode (absorbing system noise)</dd>
<dt><a id="6W*" href="#6W*"><pre>6W*</pre></a></dt>
<dd>signals another worker to wake up</dd>
<dt><a id="6Pp" href="#6Pp"><pre>6Pp</pre></a></dt>
<dd>sets progress state to Progressing</dd>
<dt><a id="6Pr" href="#6Pr"><pre>6Pr</pre></a></dt>
<dd>sets progress state to Resting</dd>
<dt><a id="6Pa" href="#6Pa"><pre>6Pa</pre></a></dt>
<dd>sets progress state to Absorbing</dd>
<dt><a id="6C[" href="#6C["><pre>6C[</pre></a></dt>
<dd>begins creating a new task</dd>
<dt><a id="6C]" href="#6C]"><pre>6C]</pre></a></dt>
<dd>ceases creating a new task</dd>
<dt><a id="6U[" href="#6U["><pre>6U[</pre></a></dt>
<dd>begins submitting a task via submitTask()</dd>
<dt><a id="6U]" href="#6U]"><pre>6U]</pre></a></dt>
<dd>ceases submitting a task via submitTask()</dd>
<dt><a id="6F[" href="#6F["><pre>6F[</pre></a></dt>
<dd>begins spawning a function via spawnFunction()</dd>
<dt><a id="6F]" href="#6F]"><pre>6F]</pre></a></dt>
<dd>ceases spawning a function via spawnFunction()</dd>
<dt><a id="6t[" href="#6t["><pre>6t[</pre></a></dt>
<dd>enters the task body</dd>
<dt><a id="6t]" href="#6t]"><pre>6t]</pre></a></dt>
<dd>leaves the task body</dd>
<dt><a id="6O[" href="#6O["><pre>6O[</pre></a></dt>
<dd>begins running the task body as taskfor collaborator</dd>
<dt><a id="6O]" href="#6O]"><pre>6O]</pre></a></dt>
<dd>ceases running the task body as taskfor collaborator</dd>
<dt><a id="6Ma" href="#6Ma"><pre>6Ma</pre></a></dt>
<dd>starts allocating memory</dd>
<dt><a id="6MA" href="#6MA"><pre>6MA</pre></a></dt>
<dd>stops allocating memory</dd>
<dt><a id="6Mf" href="#6Mf"><pre>6Mf</pre></a></dt>
<dd>starts freeing memory</dd>
<dt><a id="6MF" href="#6MF"><pre>6MF</pre></a></dt>
<dd>stops freeing memory</dd>
<dt><a id="6Dr" href="#6Dr"><pre>6Dr</pre></a></dt>
<dd>begins registration of task dependencies</dd>
<dt><a id="6DR" href="#6DR"><pre>6DR</pre></a></dt>
<dd>ceases registration of task dependencies</dd>
<dt><a id="6Du" href="#6Du"><pre>6Du</pre></a></dt>
<dd>begins unregistration of task dependencies</dd>
<dt><a id="6DU" href="#6DU"><pre>6DU</pre></a></dt>
<dd>ceases unregistration of task dependencies</dd>
<dt><a id="6S[" href="#6S["><pre>6S[</pre></a></dt>
<dd>begins scheduler serving mode</dd>
<dt><a id="6S]" href="#6S]"><pre>6S]</pre></a></dt>
<dd>ceases scheduler serving mode</dd>
<dt><a id="6Sa" href="#6Sa"><pre>6Sa</pre></a></dt>
<dd>begins submitting a ready task via addReadyTask()</dd>
<dt><a id="6SA" href="#6SA"><pre>6SA</pre></a></dt>
<dd>ceases submitting a ready task via addReadyTask()</dd>
<dt><a id="6Sp" href="#6Sp"><pre>6Sp</pre></a></dt>
<dd>begins processing ready tasks via processReadyTasks()</dd>
<dt><a id="6SP" href="#6SP"><pre>6SP</pre></a></dt>
<dd>ceases processing ready tasks via processReadyTasks()</dd>
<dt><a id="6S@" href="#6S@"><pre>6S@</pre></a></dt>
<dd>self assigns itself a task</dd>
<dt><a id="6Sr" href="#6Sr"><pre>6Sr</pre></a></dt>
<dd>receives a task from another thread</dd>
<dt><a id="6Ss" href="#6Ss"><pre>6Ss</pre></a></dt>
<dd>sends a task to another thread</dd>
<dt><a id="6Bb" href="#6Bb"><pre>6Bb</pre></a></dt>
<dd>begins blocking the current task</dd>
<dt><a id="6BB" href="#6BB"><pre>6BB</pre></a></dt>
<dd>ceases blocking the current task</dd>
<dt><a id="6Bu" href="#6Bu"><pre>6Bu</pre></a></dt>
<dd>begins unblocking a task</dd>
<dt><a id="6BU" href="#6BU"><pre>6BU</pre></a></dt>
<dd>ceases unblocking a task</dd>
<dt><a id="6Bw" href="#6Bw"><pre>6Bw</pre></a></dt>
<dd>enters a task wait</dd>
<dt><a id="6BW" href="#6BW"><pre>6BW</pre></a></dt>
<dd>leaves a task wait</dd>
<dt><a id="6Bf" href="#6Bf"><pre>6Bf</pre></a></dt>
<dd>enters a wait for</dd>
<dt><a id="6BF" href="#6BF"><pre>6BF</pre></a></dt>
<dd>leaves a wait for</dd>
<dt><a id="6He" href="#6He"><pre>6He</pre></a></dt>
<dd>begins execution as external thread</dd>
<dt><a id="6HE" href="#6HE"><pre>6HE</pre></a></dt>
<dd>ceases execution as external thread</dd>
<dt><a id="6Hw" href="#6Hw"><pre>6Hw</pre></a></dt>
<dd>begins execution as worker</dd>
<dt><a id="6HW" href="#6HW"><pre>6HW</pre></a></dt>
<dd>ceases execution as worker</dd>
<dt><a id="6Hl" href="#6Hl"><pre>6Hl</pre></a></dt>
<dd>begins execution as leader</dd>
<dt><a id="6HL" href="#6HL"><pre>6HL</pre></a></dt>
<dd>ceases execution as leader</dd>
<dt><a id="6Hm" href="#6Hm"><pre>6Hm</pre></a></dt>
<dd>begins execution as main thread</dd>
<dt><a id="6HM" href="#6HM"><pre>6HM</pre></a></dt>
<dd>ceases execution as main thread</dd>
</dl>
MCV = Model Category Value
## Model nodes
------------------------------------------------------------
MCV Description
--------------------- Ovni (model=O) -----------------------
List of events for the model *nodes* with identifier **`D`** at version `1.0.0`:
<dl>
<dt><a id="DR[" href="#DR["><pre>DR[</pre></a></dt>
<dd>begins registering task accesses</dd>
<dt><a id="DR]" href="#DR]"><pre>DR]</pre></a></dt>
<dd>ceases registering task accesses</dd>
<dt><a id="DU[" href="#DU["><pre>DU[</pre></a></dt>
<dd>begins unregistering task accesses</dd>
<dt><a id="DU]" href="#DU]"><pre>DU]</pre></a></dt>
<dd>ceases unregistering task accesses</dd>
<dt><a id="DW[" href="#DW["><pre>DW[</pre></a></dt>
<dd>enters a blocking condition (waiting for an If0 task)</dd>
<dt><a id="DW]" href="#DW]"><pre>DW]</pre></a></dt>
<dd>leaves a blocking condition (waiting for an If0 task)</dd>
<dt><a id="DI[" href="#DI["><pre>DI[</pre></a></dt>
<dd>begins the inline execution of an If0 task</dd>
<dt><a id="DI]" href="#DI]"><pre>DI]</pre></a></dt>
<dd>ceases the inline execution of an If0 task</dd>
<dt><a id="DT[" href="#DT["><pre>DT[</pre></a></dt>
<dd>enters a taskwait</dd>
<dt><a id="DT]" href="#DT]"><pre>DT]</pre></a></dt>
<dd>leaves a taskwait</dd>
<dt><a id="DC[" href="#DC["><pre>DC[</pre></a></dt>
<dd>begins creating a task</dd>
<dt><a id="DC]" href="#DC]"><pre>DC]</pre></a></dt>
<dd>ceases creating a task</dd>
<dt><a id="DS[" href="#DS["><pre>DS[</pre></a></dt>
<dd>begins submitting a task</dd>
<dt><a id="DS]" href="#DS]"><pre>DS]</pre></a></dt>
<dd>ceases submitting a task</dd>
<dt><a id="DP[" href="#DP["><pre>DP[</pre></a></dt>
<dd>begins spawning a function</dd>
<dt><a id="DP]" href="#DP]"><pre>DP]</pre></a></dt>
<dd>ceases spawning a function</dd>
</dl>
OHC Creates a new thread (punctual event)
OHx Begins the execution
OHp Pauses the execution
OHc Enters the cooling state (about to be paused)
OHw Enters the warming state (about to be running)
OHe Ends the execution
## Model kernel
OAs Switches it's own affinity to the given CPU
OAr Remotely switches the affinity of the given thread
List of events for the model *kernel* with identifier **`K`** at version `1.0.0`:
<dl>
<dt><a id="KCO" href="#KCO"><pre>KCO</pre></a></dt>
<dd>out of CPU</dd>
<dt><a id="KCI" href="#KCI"><pre>KCI</pre></a></dt>
<dd>back to CPU</dd>
</dl>
OB. Emits a burst event to measure latency
## Model mpi
OU[ Enters a region which contain past events (HACK)
OU] Exits the region of past events (HACK)
List of events for the model *mpi* with identifier **`M`** at version `1.0.0`:
<dl>
<dt><a id="MUf" href="#MUf"><pre>MUf</pre></a></dt>
<dd>enters MPI_Finalize()</dd>
<dt><a id="MUF" href="#MUF"><pre>MUF</pre></a></dt>
<dd>leaves MPI_Finalize()</dd>
<dt><a id="MUi" href="#MUi"><pre>MUi</pre></a></dt>
<dd>enters MPI_Init()</dd>
<dt><a id="MUI" href="#MUI"><pre>MUI</pre></a></dt>
<dd>leaves MPI_Init()</dd>
<dt><a id="MUt" href="#MUt"><pre>MUt</pre></a></dt>
<dd>enters MPI_Init_thread()</dd>
<dt><a id="MUT" href="#MUT"><pre>MUT</pre></a></dt>
<dd>leaves MPI_Init_thread()</dd>
<dt><a id="MW[" href="#MW["><pre>MW[</pre></a></dt>
<dd>enters MPI_Wait()</dd>
<dt><a id="MW]" href="#MW]"><pre>MW]</pre></a></dt>
<dd>leaves MPI_Wait()</dd>
<dt><a id="MWa" href="#MWa"><pre>MWa</pre></a></dt>
<dd>enters MPI_Waitall()</dd>
<dt><a id="MWA" href="#MWA"><pre>MWA</pre></a></dt>
<dd>leaves MPI_Waitall()</dd>
<dt><a id="MWs" href="#MWs"><pre>MWs</pre></a></dt>
<dd>enters MPI_Waitsome()</dd>
<dt><a id="MWS" href="#MWS"><pre>MWS</pre></a></dt>
<dd>leaves MPI_Waitsome()</dd>
<dt><a id="MWy" href="#MWy"><pre>MWy</pre></a></dt>
<dd>enters MPI_Waitany()</dd>
<dt><a id="MWY" href="#MWY"><pre>MWY</pre></a></dt>
<dd>leaves MPI_Waitany()</dd>
<dt><a id="MT[" href="#MT["><pre>MT[</pre></a></dt>
<dd>enters MPI_Test()</dd>
<dt><a id="MT]" href="#MT]"><pre>MT]</pre></a></dt>
<dd>leaves MPI_Test()</dd>
<dt><a id="MTa" href="#MTa"><pre>MTa</pre></a></dt>
<dd>enters MPI_Testall()</dd>
<dt><a id="MTA" href="#MTA"><pre>MTA</pre></a></dt>
<dd>leaves MPI_Testall()</dd>
<dt><a id="MTy" href="#MTy"><pre>MTy</pre></a></dt>
<dd>enters MPI_Testany()</dd>
<dt><a id="MTY" href="#MTY"><pre>MTY</pre></a></dt>
<dd>leaves MPI_Testany()</dd>
<dt><a id="MTs" href="#MTs"><pre>MTs</pre></a></dt>
<dd>enters MPI_Testsome()</dd>
<dt><a id="MTS" href="#MTS"><pre>MTS</pre></a></dt>
<dd>leaves MPI_Testsome()</dd>
<dt><a id="MS[" href="#MS["><pre>MS[</pre></a></dt>
<dd>enters MPI_Send()</dd>
<dt><a id="MS]" href="#MS]"><pre>MS]</pre></a></dt>
<dd>leaves MPI_Send()</dd>
<dt><a id="MSb" href="#MSb"><pre>MSb</pre></a></dt>
<dd>enters MPI_Bsend()</dd>
<dt><a id="MSB" href="#MSB"><pre>MSB</pre></a></dt>
<dd>leaves MPI_Bsend()</dd>
<dt><a id="MSr" href="#MSr"><pre>MSr</pre></a></dt>
<dd>enters MPI_Rsend()</dd>
<dt><a id="MSR" href="#MSR"><pre>MSR</pre></a></dt>
<dd>leaves MPI_Rsend()</dd>
<dt><a id="MSs" href="#MSs"><pre>MSs</pre></a></dt>
<dd>enters MPI_Ssend()</dd>
<dt><a id="MSS" href="#MSS"><pre>MSS</pre></a></dt>
<dd>leaves MPI_Ssend()</dd>
<dt><a id="MR[" href="#MR["><pre>MR[</pre></a></dt>
<dd>enters MPI_Recv()</dd>
<dt><a id="MR]" href="#MR]"><pre>MR]</pre></a></dt>
<dd>leaves MPI_Recv()</dd>
<dt><a id="MRs" href="#MRs"><pre>MRs</pre></a></dt>
<dd>enters MPI_Sendrecv()</dd>
<dt><a id="MRS" href="#MRS"><pre>MRS</pre></a></dt>
<dd>leaves MPI_Sendrecv()</dd>
<dt><a id="MRo" href="#MRo"><pre>MRo</pre></a></dt>
<dd>enters MPI_Sendrecv_replace()</dd>
<dt><a id="MRO" href="#MRO"><pre>MRO</pre></a></dt>
<dd>leaves MPI_Sendrecv_replace()</dd>
<dt><a id="MAg" href="#MAg"><pre>MAg</pre></a></dt>
<dd>enters MPI_Allgather()</dd>
<dt><a id="MAG" href="#MAG"><pre>MAG</pre></a></dt>
<dd>leaves MPI_Allgather()</dd>
<dt><a id="MAr" href="#MAr"><pre>MAr</pre></a></dt>
<dd>enters MPI_Allreduce()</dd>
<dt><a id="MAR" href="#MAR"><pre>MAR</pre></a></dt>
<dd>leaves MPI_Allreduce()</dd>
<dt><a id="MAa" href="#MAa"><pre>MAa</pre></a></dt>
<dd>enters MPI_Alltoall()</dd>
<dt><a id="MAA" href="#MAA"><pre>MAA</pre></a></dt>
<dd>leaves MPI_Alltoall()</dd>
<dt><a id="MCb" href="#MCb"><pre>MCb</pre></a></dt>
<dd>enters MPI_Barrier()</dd>
<dt><a id="MCB" href="#MCB"><pre>MCB</pre></a></dt>
<dd>leaves MPI_Barrier()</dd>
<dt><a id="MCe" href="#MCe"><pre>MCe</pre></a></dt>
<dd>enters MPI_Exscan()</dd>
<dt><a id="MCE" href="#MCE"><pre>MCE</pre></a></dt>
<dd>leaves MPI_Exscan()</dd>
<dt><a id="MCs" href="#MCs"><pre>MCs</pre></a></dt>
<dd>enters MPI_Scan()</dd>
<dt><a id="MCS" href="#MCS"><pre>MCS</pre></a></dt>
<dd>leaves MPI_Scan()</dd>
<dt><a id="MDb" href="#MDb"><pre>MDb</pre></a></dt>
<dd>enters MPI_Bcast()</dd>
<dt><a id="MDB" href="#MDB"><pre>MDB</pre></a></dt>
<dd>leaves MPI_Bcast()</dd>
<dt><a id="MDg" href="#MDg"><pre>MDg</pre></a></dt>
<dd>enters MPI_Gather()</dd>
<dt><a id="MDG" href="#MDG"><pre>MDG</pre></a></dt>
<dd>leaves MPI_Gather()</dd>
<dt><a id="MDs" href="#MDs"><pre>MDs</pre></a></dt>
<dd>enters MPI_Scatter()</dd>
<dt><a id="MDS" href="#MDS"><pre>MDS</pre></a></dt>
<dd>leaves MPI_Scatter()</dd>
<dt><a id="ME[" href="#ME["><pre>ME[</pre></a></dt>
<dd>enters MPI_Reduce()</dd>
<dt><a id="ME]" href="#ME]"><pre>ME]</pre></a></dt>
<dd>leaves MPI_Reduce()</dd>
<dt><a id="MEs" href="#MEs"><pre>MEs</pre></a></dt>
<dd>enters MPI_Reduce_scatter()</dd>
<dt><a id="MES" href="#MES"><pre>MES</pre></a></dt>
<dd>leaves MPI_Reduce_scatter()</dd>
<dt><a id="MEb" href="#MEb"><pre>MEb</pre></a></dt>
<dd>enters MPI_Reduce_scatter_block()</dd>
<dt><a id="MEB" href="#MEB"><pre>MEB</pre></a></dt>
<dd>leaves MPI_Reduce_scatter_block()</dd>
<dt><a id="Ms[" href="#Ms["><pre>Ms[</pre></a></dt>
<dd>enters MPI_Isend()</dd>
<dt><a id="Ms]" href="#Ms]"><pre>Ms]</pre></a></dt>
<dd>leaves MPI_Isend()</dd>
<dt><a id="Msb" href="#Msb"><pre>Msb</pre></a></dt>
<dd>enters MPI_Ibsend()</dd>
<dt><a id="MsB" href="#MsB"><pre>MsB</pre></a></dt>
<dd>leaves MPI_Ibsend()</dd>
<dt><a id="Msr" href="#Msr"><pre>Msr</pre></a></dt>
<dd>enters MPI_Irsend()</dd>
<dt><a id="MsR" href="#MsR"><pre>MsR</pre></a></dt>
<dd>leaves MPI_Irsend()</dd>
<dt><a id="Mss" href="#Mss"><pre>Mss</pre></a></dt>
<dd>enters MPI_Issend()</dd>
<dt><a id="MsS" href="#MsS"><pre>MsS</pre></a></dt>
<dd>leaves MPI_Issend()</dd>
<dt><a id="Mr[" href="#Mr["><pre>Mr[</pre></a></dt>
<dd>enters MPI_Irecv()</dd>
<dt><a id="Mr]" href="#Mr]"><pre>Mr]</pre></a></dt>
<dd>leaves MPI_Irecv()</dd>
<dt><a id="Mrs" href="#Mrs"><pre>Mrs</pre></a></dt>
<dd>enters MPI_Isendrecv()</dd>
<dt><a id="MrS" href="#MrS"><pre>MrS</pre></a></dt>
<dd>leaves MPI_Isendrecv()</dd>
<dt><a id="Mro" href="#Mro"><pre>Mro</pre></a></dt>
<dd>enters MPI_Isendrecv_replace()</dd>
<dt><a id="MrO" href="#MrO"><pre>MrO</pre></a></dt>
<dd>leaves MPI_Isendrecv_replace()</dd>
<dt><a id="Mag" href="#Mag"><pre>Mag</pre></a></dt>
<dd>enters MPI_Iallgather()</dd>
<dt><a id="MaG" href="#MaG"><pre>MaG</pre></a></dt>
<dd>leaves MPI_Iallgather()</dd>
<dt><a id="Mar" href="#Mar"><pre>Mar</pre></a></dt>
<dd>enters MPI_Iallreduce()</dd>
<dt><a id="MaR" href="#MaR"><pre>MaR</pre></a></dt>
<dd>leaves MPI_Iallreduce()</dd>
<dt><a id="Maa" href="#Maa"><pre>Maa</pre></a></dt>
<dd>enters MPI_Ialltoall()</dd>
<dt><a id="MaA" href="#MaA"><pre>MaA</pre></a></dt>
<dd>leaves MPI_Ialltoall()</dd>
<dt><a id="Mcb" href="#Mcb"><pre>Mcb</pre></a></dt>
<dd>enters MPI_Ibarrier()</dd>
<dt><a id="McB" href="#McB"><pre>McB</pre></a></dt>
<dd>leaves MPI_Ibarrier()</dd>
<dt><a id="Mce" href="#Mce"><pre>Mce</pre></a></dt>
<dd>enters MPI_Iexscan()</dd>
<dt><a id="McE" href="#McE"><pre>McE</pre></a></dt>
<dd>leaves MPI_Iexscan()</dd>
<dt><a id="Mcs" href="#Mcs"><pre>Mcs</pre></a></dt>
<dd>enters MPI_Iscan()</dd>
<dt><a id="McS" href="#McS"><pre>McS</pre></a></dt>
<dd>leaves MPI_Iscan()</dd>
<dt><a id="Mdb" href="#Mdb"><pre>Mdb</pre></a></dt>
<dd>enters MPI_Ibcast()</dd>
<dt><a id="MdB" href="#MdB"><pre>MdB</pre></a></dt>
<dd>leaves MPI_Ibcast()</dd>
<dt><a id="Mdg" href="#Mdg"><pre>Mdg</pre></a></dt>
<dd>enters MPI_Igather()</dd>
<dt><a id="MdG" href="#MdG"><pre>MdG</pre></a></dt>
<dd>leaves MPI_Igather()</dd>
<dt><a id="Mds" href="#Mds"><pre>Mds</pre></a></dt>
<dd>enters MPI_Iscatter()</dd>
<dt><a id="MdS" href="#MdS"><pre>MdS</pre></a></dt>
<dd>leaves MPI_Iscatter()</dd>
<dt><a id="Me[" href="#Me["><pre>Me[</pre></a></dt>
<dd>enters MPI_Ireduce()</dd>
<dt><a id="Me]" href="#Me]"><pre>Me]</pre></a></dt>
<dd>leaves MPI_Ireduce()</dd>
<dt><a id="Mes" href="#Mes"><pre>Mes</pre></a></dt>
<dd>enters MPI_Ireduce_scatter()</dd>
<dt><a id="MeS" href="#MeS"><pre>MeS</pre></a></dt>
<dd>leaves MPI_Ireduce_scatter()</dd>
<dt><a id="Meb" href="#Meb"><pre>Meb</pre></a></dt>
<dd>enters MPI_Ireduce_scatter_block()</dd>
<dt><a id="MeB" href="#MeB"><pre>MeB</pre></a></dt>
<dd>leaves MPI_Ireduce_scatter_block()</dd>
</dl>
-------------------- nOS-V (model=V) ----------------------
## Model ovni
VTc Creates a new task (punctual event)
VTx Task execute
VTe Task end
VTp Task pause
VTr Task resume
List of events for the model *ovni* with identifier **`O`** at version `1.1.0`:
<dl>
<dt><a id="OAr" href="#OAr"><pre>OAr(i32 cpu, i32 tid)</pre></a></dt>
<dd>changes the affinity of thread %{tid} to CPU %{cpu}</dd>
<dt><a id="OAs" href="#OAs"><pre>OAs(i32 cpu)</pre></a></dt>
<dd>switches it&apos;s own affinity to the CPU %{cpu}</dd>
<dt><a id="OB." href="#OB."><pre>OB.</pre></a></dt>
<dd>emits a burst event to measure latency</dd>
<dt><a id="OHC" href="#OHC"><pre>OHC(i32 cpu, u64 tag)</pre></a></dt>
<dd>creates a new thread on CPU %{cpu} with tag %#llx{tag}</dd>
<dt><a id="OHc" href="#OHc"><pre>OHc</pre></a></dt>
<dd>enters the Cooling state (about to be paused)</dd>
<dt><a id="OHe" href="#OHe"><pre>OHe</pre></a></dt>
<dd>ends the execution</dd>
<dt><a id="OHp" href="#OHp"><pre>OHp</pre></a></dt>
<dd>pauses the execution</dd>
<dt><a id="OHr" href="#OHr"><pre>OHr</pre></a></dt>
<dd>resumes the execution</dd>
<dt><a id="OHw" href="#OHw"><pre>OHw</pre></a></dt>
<dd>enters the Warming state (about to be running)</dd>
<dt><a id="OHx" href="#OHx"><pre>OHx(i32 cpu, i32 tid, u64 tag)</pre></a></dt>
<dd>begins the execution on CPU %{cpu} created from %{tid} with tag %#llx{tag}</dd>
<dt><a id="OCn" href="#OCn"><pre>OCn(i32 cpu)</pre></a></dt>
<dd>informs there are %{cpu} CPUs</dd>
<dt><a id="OF[" href="#OF["><pre>OF[</pre></a></dt>
<dd>begins flushing events to disk</dd>
<dt><a id="OF]" href="#OF]"><pre>OF]</pre></a></dt>
<dd>ceases flushing events to disk</dd>
<dt><a id="OU[" href="#OU["><pre>OU[</pre></a></dt>
<dd>enters unordered event region</dd>
<dt><a id="OU]" href="#OU]"><pre>OU]</pre></a></dt>
<dd>leaves unordered event region</dd>
<dt><a id="OM[" href="#OM["><pre>OM[(i64 value, i32 type)</pre></a></dt>
<dd>push mark with value %{value} from type %{type}</dd>
<dt><a id="OM]" href="#OM]"><pre>OM](i64 value, i32 type)</pre></a></dt>
<dd>pop mark with value %{value} from type %{type}</dd>
<dt><a id="OM=" href="#OM="><pre>OM=(i64 value, i32 type)</pre></a></dt>
<dd>set mark with value %{value} from type %{type}</dd>
</dl>
VYc Task type create (punctual event)
## Model openmp
VSr Receives a task from another thread (punctual event)
VSs Sends a task to another thread (punctual event)
VS@ Self-assigns itself a task (punctual event)
VSh Enters the hungry state, waiting for a task
VSf Is no longer hungry
VS[ Enters the scheduler server mode
VS] Ends the scheduler server mode
List of events for the model *openmp* with identifier **`P`** at version `1.2.0`:
<dl>
<dt><a id="PBb" href="#PBb"><pre>PBb</pre></a></dt>
<dd>begins plain barrier</dd>
<dt><a id="PBB" href="#PBB"><pre>PBB</pre></a></dt>
<dd>ceases plain barrier</dd>
<dt><a id="PBj" href="#PBj"><pre>PBj</pre></a></dt>
<dd>begins join barrier</dd>
<dt><a id="PBJ" href="#PBJ"><pre>PBJ</pre></a></dt>
<dd>ceases join barrier</dd>
<dt><a id="PBf" href="#PBf"><pre>PBf</pre></a></dt>
<dd>begins fork barrier</dd>
<dt><a id="PBF" href="#PBF"><pre>PBF</pre></a></dt>
<dd>ceases fork barrier</dd>
<dt><a id="PBt" href="#PBt"><pre>PBt</pre></a></dt>
<dd>begins tasking barrier</dd>
<dt><a id="PBT" href="#PBT"><pre>PBT</pre></a></dt>
<dd>ceases tasking barrier</dd>
<dt><a id="PBs" href="#PBs"><pre>PBs</pre></a></dt>
<dd>begins spin wait</dd>
<dt><a id="PBS" href="#PBS"><pre>PBS</pre></a></dt>
<dd>ceases spin wait</dd>
<dt><a id="PIa" href="#PIa"><pre>PIa</pre></a></dt>
<dd>begins critical acquiring</dd>
<dt><a id="PIA" href="#PIA"><pre>PIA</pre></a></dt>
<dd>ceases critical acquiring</dd>
<dt><a id="PIr" href="#PIr"><pre>PIr</pre></a></dt>
<dd>begins critical releasing</dd>
<dt><a id="PIR" href="#PIR"><pre>PIR</pre></a></dt>
<dd>ceases critical releasing</dd>
<dt><a id="PI[" href="#PI["><pre>PI[</pre></a></dt>
<dd>begins critical section</dd>
<dt><a id="PI]" href="#PI]"><pre>PI]</pre></a></dt>
<dd>ceases critical section</dd>
<dt><a id="PWd" href="#PWd"><pre>PWd</pre></a></dt>
<dd>begins distribute</dd>
<dt><a id="PWD" href="#PWD"><pre>PWD</pre></a></dt>
<dd>ceases distribute</dd>
<dt><a id="PWy" href="#PWy"><pre>PWy</pre></a></dt>
<dd>begins dynamic for init</dd>
<dt><a id="PWY" href="#PWY"><pre>PWY</pre></a></dt>
<dd>ceases dynamic for init</dd>
<dt><a id="PWc" href="#PWc"><pre>PWc</pre></a></dt>
<dd>begins dynamic for chunk</dd>
<dt><a id="PWC" href="#PWC"><pre>PWC</pre></a></dt>
<dd>ceases dynamic for chunk</dd>
<dt><a id="PWs" href="#PWs"><pre>PWs</pre></a></dt>
<dd>begins static for</dd>
<dt><a id="PWS" href="#PWS"><pre>PWS</pre></a></dt>
<dd>ceases static for</dd>
<dt><a id="PWe" href="#PWe"><pre>PWe</pre></a></dt>
<dd>begins section</dd>
<dt><a id="PWE" href="#PWE"><pre>PWE</pre></a></dt>
<dd>ceases section</dd>
<dt><a id="PWi" href="#PWi"><pre>PWi</pre></a></dt>
<dd>begins single</dd>
<dt><a id="PWI" href="#PWI"><pre>PWI</pre></a></dt>
<dd>ceases single</dd>
<dt><a id="PTa" href="#PTa"><pre>PTa</pre></a></dt>
<dd>begins task allocation</dd>
<dt><a id="PTA" href="#PTA"><pre>PTA</pre></a></dt>
<dd>ceases task allocation</dd>
<dt><a id="PTc" href="#PTc"><pre>PTc</pre></a></dt>
<dd>begins checking task dependencies</dd>
<dt><a id="PTC" href="#PTC"><pre>PTC</pre></a></dt>
<dd>ceases checking task dependencies</dd>
<dt><a id="PTd" href="#PTd"><pre>PTd</pre></a></dt>
<dd>begins duplicating a task</dd>
<dt><a id="PTD" href="#PTD"><pre>PTD</pre></a></dt>
<dd>ceases duplicating a task</dd>
<dt><a id="PTr" href="#PTr"><pre>PTr</pre></a></dt>
<dd>begins releasing task dependencies</dd>
<dt><a id="PTR" href="#PTR"><pre>PTR</pre></a></dt>
<dd>ceases releasing task dependencies</dd>
<dt><a id="PT[" href="#PT["><pre>PT[</pre></a></dt>
<dd>begins running a task</dd>
<dt><a id="PT]" href="#PT]"><pre>PT]</pre></a></dt>
<dd>ceases running a task</dd>
<dt><a id="PTi" href="#PTi"><pre>PTi</pre></a></dt>
<dd>begins running an if0 task</dd>
<dt><a id="PTI" href="#PTI"><pre>PTI</pre></a></dt>
<dd>ceases running an if0 task</dd>
<dt><a id="PTs" href="#PTs"><pre>PTs</pre></a></dt>
<dd>begins scheduling a task</dd>
<dt><a id="PTS" href="#PTS"><pre>PTS</pre></a></dt>
<dd>ceases scheduling a task</dd>
<dt><a id="PTg" href="#PTg"><pre>PTg</pre></a></dt>
<dd>begins a taskgroup</dd>
<dt><a id="PTG" href="#PTG"><pre>PTG</pre></a></dt>
<dd>ceases a taskgroup</dd>
<dt><a id="PTt" href="#PTt"><pre>PTt</pre></a></dt>
<dd>begins a taskwait</dd>
<dt><a id="PTT" href="#PTT"><pre>PTT</pre></a></dt>
<dd>ceases a taskwait</dd>
<dt><a id="PTw" href="#PTw"><pre>PTw</pre></a></dt>
<dd>begins waiting for taskwait dependencies</dd>
<dt><a id="PTW" href="#PTW"><pre>PTW</pre></a></dt>
<dd>ceases waiting for taskwait dependencies</dd>
<dt><a id="PTy" href="#PTy"><pre>PTy</pre></a></dt>
<dd>begins a taskyield</dd>
<dt><a id="PTY" href="#PTY"><pre>PTY</pre></a></dt>
<dd>ceases a taskyield</dd>
<dt><a id="PA[" href="#PA["><pre>PA[</pre></a></dt>
<dd>enters the attached state</dd>
<dt><a id="PA]" href="#PA]"><pre>PA]</pre></a></dt>
<dd>leaves the attached state</dd>
<dt><a id="PMi" href="#PMi"><pre>PMi</pre></a></dt>
<dd>begins microtask internal</dd>
<dt><a id="PMI" href="#PMI"><pre>PMI</pre></a></dt>
<dd>ceases microtask internal</dd>
<dt><a id="PMu" href="#PMu"><pre>PMu</pre></a></dt>
<dd>begins microtask user code</dd>
<dt><a id="PMU" href="#PMU"><pre>PMU</pre></a></dt>
<dd>ceases microtask user code</dd>
<dt><a id="PH[" href="#PH["><pre>PH[</pre></a></dt>
<dd>begins worker loop</dd>
<dt><a id="PH]" href="#PH]"><pre>PH]</pre></a></dt>
<dd>ceases worker loop</dd>
<dt><a id="PCf" href="#PCf"><pre>PCf</pre></a></dt>
<dd>begins fork call</dd>
<dt><a id="PCF" href="#PCF"><pre>PCF</pre></a></dt>
<dd>ceases fork call</dd>
<dt><a id="PCi" href="#PCi"><pre>PCi</pre></a></dt>
<dd>begins initialization</dd>
<dt><a id="PCI" href="#PCI"><pre>PCI</pre></a></dt>
<dd>ceases initialization</dd>
<dt><a id="POc" href="#POc"><pre>POc+(u32 typeid, str label)</pre></a></dt>
<dd>creates a type %{typeid} with label &quot;%{label}&quot;</dd>
<dt><a id="PPc" href="#PPc"><pre>PPc(u32 taskid, u32 typeid)</pre></a></dt>
<dd>creates the task %{taskid} with type %{typeid}</dd>
<dt><a id="PPx" href="#PPx"><pre>PPx(u32 taskid)</pre></a></dt>
<dd>executes the task %{taskid}</dd>
<dt><a id="PPe" href="#PPe"><pre>PPe(u32 taskid)</pre></a></dt>
<dd>ends the task %{taskid}</dd>
<dt><a id="PQx" href="#PQx"><pre>PQx(u32 typeid)</pre></a></dt>
<dd>begins worksharing with type %{typeid}</dd>
<dt><a id="PQe" href="#PQe"><pre>PQe(u32 typeid)</pre></a></dt>
<dd>ends worksharing with type %{typeid}</dd>
</dl>
VU[ Starts to submit a task
VU] Ends the submission of a task
## Model tampi
VMa Starts allocating memory
VMA Ends allocating memory
VMf Starts freeing memory
VMF Ends freeing memory
List of events for the model *tampi* with identifier **`T`** at version `1.0.0`:
<dl>
<dt><a id="TCi" href="#TCi"><pre>TCi</pre></a></dt>
<dd>starts issuing a non-blocking communication operation</dd>
<dt><a id="TCI" href="#TCI"><pre>TCI</pre></a></dt>
<dd>stops issuing a non-blocking communication operation</dd>
<dt><a id="TGc" href="#TGc"><pre>TGc</pre></a></dt>
<dd>starts checking pending requests from the global array</dd>
<dt><a id="TGC" href="#TGC"><pre>TGC</pre></a></dt>
<dd>stops checking pending requests from the global array</dd>
<dt><a id="TLi" href="#TLi"><pre>TLi</pre></a></dt>
<dd>enters the library code at an API function</dd>
<dt><a id="TLI" href="#TLI"><pre>TLI</pre></a></dt>
<dd>leaves the library code at an API function</dd>
<dt><a id="TLp" href="#TLp"><pre>TLp</pre></a></dt>
<dd>enters the library code at a polling function</dd>
<dt><a id="TLP" href="#TLP"><pre>TLP</pre></a></dt>
<dd>leaves the library code at a polling function</dd>
<dt><a id="TQa" href="#TQa"><pre>TQa</pre></a></dt>
<dd>starts adding a ticket/requests to a queue</dd>
<dt><a id="TQA" href="#TQA"><pre>TQA</pre></a></dt>
<dd>stops adding a ticket/requests to a queue</dd>
<dt><a id="TQt" href="#TQt"><pre>TQt</pre></a></dt>
<dd>starts transferring tickets/requests from queues to global array</dd>
<dt><a id="TQT" href="#TQT"><pre>TQT</pre></a></dt>
<dd>stops transferring tickets/requests from queues to global array</dd>
<dt><a id="TRc" href="#TRc"><pre>TRc</pre></a></dt>
<dd>starts processsing a completed request</dd>
<dt><a id="TRC" href="#TRC"><pre>TRC</pre></a></dt>
<dd>stops processsing a completed request</dd>
<dt><a id="TRt" href="#TRt"><pre>TRt</pre></a></dt>
<dd>starts testing a single request with MPI_Test</dd>
<dt><a id="TRT" href="#TRT"><pre>TRT</pre></a></dt>
<dd>stops testing a single request with MPI_Test</dd>
<dt><a id="TRa" href="#TRa"><pre>TRa</pre></a></dt>
<dd>starts testing several requests with MPI_Testall</dd>
<dt><a id="TRA" href="#TRA"><pre>TRA</pre></a></dt>
<dd>stops testing several requests with MPI_Testall</dd>
<dt><a id="TRs" href="#TRs"><pre>TRs</pre></a></dt>
<dd>starts testing several requests with MPI_Testsome</dd>
<dt><a id="TRS" href="#TRS"><pre>TRS</pre></a></dt>
<dd>stops testing several requests with MPI_Testsome</dd>
<dt><a id="TTc" href="#TTc"><pre>TTc</pre></a></dt>
<dd>starts creating a ticket linked to a set of requests and a task</dd>
<dt><a id="TTC" href="#TTC"><pre>TTC</pre></a></dt>
<dd>stops creating a ticket linked to a set of requests and a task</dd>
<dt><a id="TTw" href="#TTw"><pre>TTw</pre></a></dt>
<dd>starts waiting for a ticket completion</dd>
<dt><a id="TTW" href="#TTW"><pre>TTW</pre></a></dt>
<dd>stops waiting for a ticket completion</dd>
</dl>
VAs Enters nosv_submit()
VAS Exits nosv_submit()
VAp Enters nosv_pause()
VAP Exits nosv_pause()
VAy Enters nosv_yield()
VAY Exits nosv_yield()
VAw Enters nosv_waitfor()
VAW Exits nosv_waitfor()
VAc Enters nosv_schedpoint()
VAC Exits nosv_schedpoint()
## Model nosv
VHa Enters nosv_attach()
VHA Exits nosv_detach()
VHw Begins the execution as a worker
VHW Ends the execution as a worker
VHd Begins the execution as the delegate
VHD Ends the execution as the delegate
-------------------- NODES (model=D) ----------------------
DR[ Begins the registration of a task's accesses
DR] Ends the registration of a task's accesses
DU[ Begins the unregistration of a task's accesses
DU] Ends the unregistration of a task's accesses
DW[ Enters a blocking condition (waiting for an If0 task)
DW] Exits a blocking condition (waiting for an If0 task)
DI[ Begins the inline execution of an If0 task
DI] Ends the inline execution of an If0 task
DT[ Enters a taskwait
DT] Exits a taskwait
DC[ Begins the creation of a task
DC] Ends the creation of a task
DS[ Begins the submit of a task
DS] Ends the submit of a task
DP[ Begins the spawn of a function
DP] Ends the spawn of a function
-------------------- Kernel (model=K) ----------------------
KCO Is out of the CPU due to a context switch
KCI Is back in the CPU due to a context switch
-------------------- Nanos6 (model=6) ----------------------
6Tc Creates a new task
6Tx Task execute
6Te Task end
6Tp Task pause
6Tr Task resume
6Yc Task type create (punctual event)
6C[ Begins creating a new task
6C] Ends creating a new task
6S[ Enters the scheduler serving mode
6S] Ends the scheduler serving mode
6Sa Begins to submit a ready task via addReadyTask()
6SA Ends submitting a ready task via addReadyTask()
6Sp Begins to process ready tasks via processReadyTasks()
6SP Ends processing ready taska via processReadyTasks()
6Sr Receives a task from another thread (punctual event)
6Ss Sends a task to another thread (punctual event)
6S@ Self-assigns itself a task (punctual event)
6W[ Begins the worker body loop, looking for tasks
6W] Ends the worker body loop
6Wt Begins handling a task via handleTask()
6WT Ends handling a task via handleTask()
6Ww Begins switching to another worker via switchTo()
6WW Ends switching to another worker via switchTo()
6Wm Begins migrating the CPU via migrate()
6WM Ends migrating the CPU via migrate()
6Ws Begins suspending the worker via suspend()
6WS Ends suspending the worker via suspend()
6Wr Begins resuming another worker via resume()
6WR Ends resuming another worker via resume()
6W* Signals another thread to wake up (punctual event)
6U[ Starts to submit a task via submitTask()
6U] Ends the submission of a task via submitTask()
6F[ Begins to spawn a function via spawnFunction()
6F] Ends spawning a function
6t[ Begins running the task body
6t] Ends running the task body
6O[ Begins running the task body as taskfor collaborator
6O] Ends running the task body as taskfor collaborator
6Dr Begins the registration of a task's accesses
6DR Ends the registration of a task's accesses
6Du Begins the unregistration of a task's accesses
6DU Ends the unregistration of a task's accesses
6Bb Begins to block the current task via blockCurrentTask()
6BB Ends blocking the current task via blockCurrentTask()
6Bu Begins to unblock a task
6BU Ends unblocking a task
6Bw Enters taskWait()
6BW Exits taskWait()
6Bf Enters taskFor()
6BF Exits taskFor()
6He Sets itself as external thread
6HE Unsets itself as external thread
6Hw Sets itself as worker thread
6HW Unsets itself as worker thread
6Hl Sets itself as leader thread
6HL Unsets itself as leader thread
6Hm Sets itself as main thread
6HM Unsets itself as main thread
6Ma Begins allocating memory
6MA Ends allocating memory
6Mf Begins freeing memory
6MF Ends freeing memory
```
List of events for the model *nosv* with identifier **`V`** at version `2.4.0`:
<dl>
<dt><a id="VTc" href="#VTc"><pre>VTc(u32 taskid, u32 typeid)</pre></a></dt>
<dd>creates task %{taskid} with type %{typeid}</dd>
<dt><a id="VTC" href="#VTC"><pre>VTC(u32 taskid, u32 typeid)</pre></a></dt>
<dd>creates parallel task %{taskid} with type %{typeid}</dd>
<dt><a id="VTx" href="#VTx"><pre>VTx(u32 taskid, u32 bodyid)</pre></a></dt>
<dd>executes the task %{taskid} with bodyid %{bodyid}</dd>
<dt><a id="VTe" href="#VTe"><pre>VTe(u32 taskid, u32 bodyid)</pre></a></dt>
<dd>ends the task %{taskid} with bodyid %{bodyid}</dd>
<dt><a id="VTp" href="#VTp"><pre>VTp(u32 taskid, u32 bodyid)</pre></a></dt>
<dd>pauses the task %{taskid} with bodyid %{bodyid}</dd>
<dt><a id="VTr" href="#VTr"><pre>VTr(u32 taskid, u32 bodyid)</pre></a></dt>
<dd>resumes the task %{taskid} with bodyid %{bodyid}</dd>
<dt><a id="VYc" href="#VYc"><pre>VYc+(u32 typeid, str label)</pre></a></dt>
<dd>creates task type %{typeid} with label &quot;%{label}&quot;</dd>
<dt><a id="VSr" href="#VSr"><pre>VSr</pre></a></dt>
<dd>receives a task from another thread</dd>
<dt><a id="VSs" href="#VSs"><pre>VSs</pre></a></dt>
<dd>sends a task to another thread</dd>
<dt><a id="VS@" href="#VS@"><pre>VS@</pre></a></dt>
<dd>self assigns itself a task</dd>
<dt><a id="VSh" href="#VSh"><pre>VSh</pre></a></dt>
<dd>enters the hungry state, waiting for work</dd>
<dt><a id="VSf" href="#VSf"><pre>VSf</pre></a></dt>
<dd>is no longer hungry</dd>
<dt><a id="VS[" href="#VS["><pre>VS[</pre></a></dt>
<dd>enters scheduler server mode</dd>
<dt><a id="VS]" href="#VS]"><pre>VS]</pre></a></dt>
<dd>leaves scheduler server mode</dd>
<dt><a id="VU[" href="#VU["><pre>VU[</pre></a></dt>
<dd>starts submitting a task</dd>
<dt><a id="VU]" href="#VU]"><pre>VU]</pre></a></dt>
<dd>stops submitting a task</dd>
<dt><a id="VMa" href="#VMa"><pre>VMa</pre></a></dt>
<dd>starts allocating memory</dd>
<dt><a id="VMA" href="#VMA"><pre>VMA</pre></a></dt>
<dd>stops allocating memory</dd>
<dt><a id="VMf" href="#VMf"><pre>VMf</pre></a></dt>
<dd>starts freeing memory</dd>
<dt><a id="VMF" href="#VMF"><pre>VMF</pre></a></dt>
<dd>stops freeing memory</dd>
<dt><a id="VAr" href="#VAr"><pre>VAr</pre></a></dt>
<dd>enters nosv_create()</dd>
<dt><a id="VAR" href="#VAR"><pre>VAR</pre></a></dt>
<dd>leaves nosv_create()</dd>
<dt><a id="VAd" href="#VAd"><pre>VAd</pre></a></dt>
<dd>enters nosv_destroy()</dd>
<dt><a id="VAD" href="#VAD"><pre>VAD</pre></a></dt>
<dd>leaves nosv_destroy()</dd>
<dt><a id="VAs" href="#VAs"><pre>VAs</pre></a></dt>
<dd>enters nosv_submit()</dd>
<dt><a id="VAS" href="#VAS"><pre>VAS</pre></a></dt>
<dd>leaves nosv_submit()</dd>
<dt><a id="VAp" href="#VAp"><pre>VAp</pre></a></dt>
<dd>enters nosv_pause()</dd>
<dt><a id="VAP" href="#VAP"><pre>VAP</pre></a></dt>
<dd>leaves nosv_pause()</dd>
<dt><a id="VAy" href="#VAy"><pre>VAy</pre></a></dt>
<dd>enters nosv_yield()</dd>
<dt><a id="VAY" href="#VAY"><pre>VAY</pre></a></dt>
<dd>leaves nosv_yield()</dd>
<dt><a id="VAw" href="#VAw"><pre>VAw</pre></a></dt>
<dd>enters nosv_waitfor()</dd>
<dt><a id="VAW" href="#VAW"><pre>VAW</pre></a></dt>
<dd>leaves nosv_waitfor()</dd>
<dt><a id="VAc" href="#VAc"><pre>VAc</pre></a></dt>
<dd>enters nosv_schedpoint()</dd>
<dt><a id="VAC" href="#VAC"><pre>VAC</pre></a></dt>
<dd>leaves nosv_schedpoint()</dd>
<dt><a id="VAa" href="#VAa"><pre>VAa</pre></a></dt>
<dd>enters nosv_attach()</dd>
<dt><a id="VAA" href="#VAA"><pre>VAA</pre></a></dt>
<dd>leaves nosv_attach()</dd>
<dt><a id="VAe" href="#VAe"><pre>VAe</pre></a></dt>
<dd>enters nosv_detach()</dd>
<dt><a id="VAE" href="#VAE"><pre>VAE</pre></a></dt>
<dd>leaves nosv_detach()</dd>
<dt><a id="VAl" href="#VAl"><pre>VAl</pre></a></dt>
<dd>enters nosv_mutex_lock()</dd>
<dt><a id="VAL" href="#VAL"><pre>VAL</pre></a></dt>
<dd>leaves nosv_mutex_lock()</dd>
<dt><a id="VAt" href="#VAt"><pre>VAt</pre></a></dt>
<dd>enters nosv_mutex_trylock()</dd>
<dt><a id="VAT" href="#VAT"><pre>VAT</pre></a></dt>
<dd>leaves nosv_mutex_trylock()</dd>
<dt><a id="VAu" href="#VAu"><pre>VAu</pre></a></dt>
<dd>enters nosv_mutex_unlock()</dd>
<dt><a id="VAU" href="#VAU"><pre>VAU</pre></a></dt>
<dd>leaves nosv_mutex_unlock()</dd>
<dt><a id="VAb" href="#VAb"><pre>VAb</pre></a></dt>
<dd>enters nosv_barrier_wait()</dd>
<dt><a id="VAB" href="#VAB"><pre>VAB</pre></a></dt>
<dd>leaves nosv_barrier_wait()</dd>
<dt><a id="VAo" href="#VAo"><pre>VAo</pre></a></dt>
<dd>enters nosv_cond_wait()</dd>
<dt><a id="VAO" href="#VAO"><pre>VAO</pre></a></dt>
<dd>leaves nosv_cond_wait()</dd>
<dt><a id="VAg" href="#VAg"><pre>VAg</pre></a></dt>
<dd>enters nosv_cond_signal()</dd>
<dt><a id="VAG" href="#VAG"><pre>VAG</pre></a></dt>
<dd>leaves nosv_cond_signal()</dd>
<dt><a id="VAk" href="#VAk"><pre>VAk</pre></a></dt>
<dd>enters nosv_cond_broadcast()</dd>
<dt><a id="VAK" href="#VAK"><pre>VAK</pre></a></dt>
<dd>leaves nosv_cond_broadcast()</dd>
<dt><a id="VHa" href="#VHa"><pre>VHa</pre></a></dt>
<dd>enters nosv_attach()</dd>
<dt><a id="VHA" href="#VHA"><pre>VHA</pre></a></dt>
<dd>leaves nosv_dettach()</dd>
<dt><a id="VHw" href="#VHw"><pre>VHw</pre></a></dt>
<dd>begins execution as worker</dd>
<dt><a id="VHW" href="#VHW"><pre>VHW</pre></a></dt>
<dd>ceases execution as worker</dd>
<dt><a id="VHd" href="#VHd"><pre>VHd</pre></a></dt>
<dd>begins execution as delegate</dd>
<dt><a id="VHD" href="#VHD"><pre>VHD</pre></a></dt>
<dd>ceases execution as delegate</dd>
<dt><a id="VPp" href="#VPp"><pre>VPp</pre></a></dt>
<dd>sets progress state to Progressing</dd>
<dt><a id="VPr" href="#VPr"><pre>VPr</pre></a></dt>
<dd>sets progress state to Resting</dd>
<dt><a id="VPa" href="#VPa"><pre>VPa</pre></a></dt>
<dd>sets progress state to Absorbing</dd>
</dl>

View File

@ -0,0 +1,9 @@
digraph {
graph [size="6!", ranksep="0.7", nodesep="1"];
Created -> Running;
Running -> Paused [label=BODY_FLAG_PAUSE];
Paused -> Running;
Running -> Dead;
Dead -> Running [label="BODY_FLAG_RESURRECT\niteration++"];
}

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 8.1.0 (0)
-->
<!-- Pages: 1 -->
<svg width="432pt" height="202pt"
viewBox="0.00 0.00 432.00 202.47" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(0.805048 0.805048) rotate(0) translate(4 247.5)">
<polygon fill="white" stroke="none" points="-4,4 -4,-247.5 532.61,-247.5 532.61,4 -4,4"/>
<!-- Created -->
<g id="node1" class="node">
<title>Created</title>
<ellipse fill="none" stroke="black" cx="246.61" cy="-225.5" rx="51.21" ry="18"/>
<text text-anchor="middle" x="246.61" y="-220.82" font-family="Times,serif" font-size="14.00">Created</text>
</g>
<!-- Running -->
<g id="node2" class="node">
<title>Running</title>
<ellipse fill="none" stroke="black" cx="246.61" cy="-138.5" rx="53.31" ry="18"/>
<text text-anchor="middle" x="246.61" y="-133.82" font-family="Times,serif" font-size="14.00">Running</text>
</g>
<!-- Created&#45;&gt;Running -->
<g id="edge1" class="edge">
<title>Created&#45;&gt;Running</title>
<path fill="none" stroke="black" d="M246.61,-207.3C246.61,-195.97 246.61,-180.86 246.61,-167.79"/>
<polygon fill="black" stroke="black" points="250.11,-167.97 246.61,-157.97 243.11,-167.97 250.11,-167.97"/>
</g>
<!-- Paused -->
<g id="node3" class="node">
<title>Paused</title>
<ellipse fill="none" stroke="black" cx="132.61" cy="-18" rx="47" ry="18"/>
<text text-anchor="middle" x="132.61" y="-13.32" font-family="Times,serif" font-size="14.00">Paused</text>
</g>
<!-- Running&#45;&gt;Paused -->
<g id="edge2" class="edge">
<title>Running&#45;&gt;Paused</title>
<path fill="none" stroke="black" d="M193.44,-135.87C130.26,-132.68 30.43,-123.26 7.11,-95.5 -2.75,-83.76 -1.84,-73.44 7.11,-61 22.79,-39.22 50.29,-28.57 75.56,-23.43"/>
<polygon fill="black" stroke="black" points="75.98,-26.73 85.22,-21.55 74.76,-19.84 75.98,-26.73"/>
<text text-anchor="middle" x="80.36" y="-73.58" font-family="Times,serif" font-size="14.00">BODY_FLAG_PAUSE</text>
</g>
<!-- Dead -->
<g id="node4" class="node">
<title>Dead</title>
<ellipse fill="none" stroke="black" cx="343.61" cy="-18" rx="37" ry="18"/>
<text text-anchor="middle" x="343.61" y="-13.32" font-family="Times,serif" font-size="14.00">Dead</text>
</g>
<!-- Running&#45;&gt;Dead -->
<g id="edge4" class="edge">
<title>Running&#45;&gt;Dead</title>
<path fill="none" stroke="black" d="M260.31,-120.77C276.79,-100.63 304.62,-66.64 323.53,-43.53"/>
<polygon fill="black" stroke="black" points="326.68,-46.22 330.3,-36.26 321.26,-41.78 326.68,-46.22"/>
</g>
<!-- Paused&#45;&gt;Running -->
<g id="edge3" class="edge">
<title>Paused&#45;&gt;Running</title>
<path fill="none" stroke="black" d="M148.33,-35.34C167.75,-55.52 200.96,-90.04 223.34,-113.31"/>
<polygon fill="black" stroke="black" points="220.31,-115.24 229.76,-120.02 225.35,-110.39 220.31,-115.24"/>
</g>
<!-- Dead&#45;&gt;Running -->
<g id="edge5" class="edge">
<title>Dead&#45;&gt;Running</title>
<path fill="none" stroke="black" d="M343.24,-36.22C342.05,-52.96 337.96,-78.31 324.61,-95.5 316.51,-105.94 305.06,-114.1 293.42,-120.34"/>
<polygon fill="black" stroke="black" points="292.09,-117.59 284.66,-125.14 295.18,-123.87 292.09,-117.59"/>
<text text-anchor="middle" x="434.11" y="-82.2" font-family="Times,serif" font-size="14.00">BODY_FLAG_RESURRECT</text>
<text text-anchor="middle" x="434.11" y="-64.95" font-family="Times,serif" font-size="14.00">iteration++</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@ -0,0 +1,176 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="117.73958mm"
height="26.458332mm"
viewBox="0 0 117.73958 26.458332"
version="1.1"
id="svg1"
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
sodipodi:docname="parallel-tasks.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="true"
inkscape:zoom="1.4289282"
inkscape:cx="335.21629"
inkscape:cy="58.085495"
inkscape:window-width="1914"
inkscape:window-height="1025"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid1"
units="px"
originx="-9.9999997"
originy="-9.9999997"
spacingx="0.26458333"
spacingy="0.26458334"
empcolor="#3f3fff"
empopacity="0.25098039"
color="#3f3fff"
opacity="0.1254902"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
visible="true" />
</sodipodi:namedview>
<defs
id="defs1" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-2.6458333,-2.6458333)">
<rect
style="fill:none;stroke:none;stroke-width:0.3;stroke-linecap:round"
id="rect9"
width="117.73958"
height="26.458332"
x="2.6458333"
y="2.6458333" />
<rect
style="fill:#f2f2f2;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
id="rect1"
width="44.979168"
height="23.8125"
x="3.96875"
y="3.9687502" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="6.6805291"
y="9.5720644"
id="text1"><tspan
sodipodi:role="line"
id="tspan1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Droid Sans';-inkscape-font-specification:'Droid Sans';stroke-width:0.264583"
x="6.6805291"
y="9.5720644">Normal task</tspan></text>
<rect
style="fill:#d5ffd5;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
id="rect3"
width="39.6875"
height="10.583333"
x="6.614583"
y="14.552083" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="18.784389"
y="21.011637"
id="text3"><tspan
sodipodi:role="line"
id="tspan3"
style="stroke-width:0.264583"
x="18.784389"
y="21.011637">Body 1</tspan></text>
<rect
style="fill:#f2f2f2;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
id="rect4"
width="67.46875"
height="23.8125"
x="51.59375"
y="3.9687502" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="54.704952"
y="9.4792204"
id="text4"><tspan
sodipodi:role="line"
id="tspan4"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Droid Sans';-inkscape-font-specification:'Droid Sans';stroke-width:0.264583"
x="54.704952"
y="9.4792204">Parallel task</tspan></text>
<rect
style="fill:#d5ffd5;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
id="rect6"
width="21.166662"
height="10.583335"
x="54.239586"
y="14.552083" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="57.148972"
y="21.011637"
id="text6"><tspan
sodipodi:role="line"
id="tspan6"
style="stroke-width:0.264583"
x="57.148972"
y="21.011637">Body 1</tspan></text>
<rect
style="fill:#d5ffd5;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
id="rect7"
width="21.166662"
height="10.583335"
x="78.052078"
y="14.552084" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="80.997643"
y="21.011639"
id="text7"><tspan
sodipodi:role="line"
id="tspan7"
style="stroke-width:0.264583"
x="80.997643"
y="21.011639">Body 2</tspan></text>
<rect
style="fill:#d5ffd5;stroke:#000000;stroke-width:0.3;stroke-linecap:round"
id="rect8"
width="14.552085"
height="10.583334"
x="101.86458"
y="14.552084" />
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;stroke-width:0.264583"
x="105.3207"
y="20.895952"
id="text8"><tspan
sodipodi:role="line"
id="tspan8"
style="stroke-width:0.264583"
x="105.3207"
y="20.895952">...</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -47,7 +47,7 @@ the following elements:
- A single byte model identification (for example `O`).
- A set of runtime events with that model identification (see the [list
of events](events)).
of events](events.md)).
- Rules that determine which sequences of events are valid.
- The emulation hooks that process each event and modify the state of
the emulator.

242
doc/user/emulation/mpi.md Normal file
View File

@ -0,0 +1,242 @@
# MPI model
The [Message Passing Interface (MPI)][mpi] is a standard library interface
specification for message-passing communication libraries targeting parallel
computing architectures. The interface defines functions for point-to-point
communication primitives, collectives, remote memory access (RMA), I/O and
process management.
The [Sonar][sonar] library instruments the most essential MPI functions that any
user application or any external library may execute. Sonar tracks the calls to
these MPI functions made at each point. Both users and developers can use this
information to analyze the time spent inside MPI functions. The next section
explains a view that is provided to achieve this goal.
The Sonar library is compatible with the MPI standards 3.0, 3.1 and 4.0. See the
[MPI documentation][mpi docs] for more information about the MPI standards and
their functions.
[mpi]: https://www.mpi-forum.org
[mpi docs]: https://www.mpi-forum.org/docs
[sonar]: https://github.com/bsc-pm/sonar
[sonar docs]: https://github.com/bsc-pm/sonar#readme
Sonar requires an installation of the ovni library and an MPI library. Use the
option `--with-ovni=prefix` when building Sonar to specify the ovni prefix. The
building procedure will compile and install the `libsonar-mpi.so`. See the
[Sonar documentation][sonar docs] for more details about the building steps.
An application can instrument the MPI function calls by linking with the Sonar
library `libsonar-mpi.so`. At run-time, the Sonar library does not enable the
instrumentation by default. Sonar instruments the MPI functions when the
environment variable `SONAR_MPI_INSTRUMENT` is defined to `ovni`. Its default
value is `none`.
As an example, a user can generate a trace with MPI function events of an MPI
program `app.c` in this way:
```
$ mpicc -c app.c -o app.o
$ mpicc app.o -o app -L${SONAR_PREFIX}/lib -lsonar-mpi
$ export SONAR_MPI_INSTRUMENT=ovni
$ mpirun -n 2 ./app
```
This will generate an ovni trace in the `ovni` directory, which can be emulated
using the `ovniemu` tool.
!!! Note
Notice that the order of libraries at the linking stage is important. The
Sonar library should always have precedence on the MPI library. That's the
usual behavior when using `mpicc` tools. The `mpicc` tool should link the
application with the MPI libraries as the last libraries in the list of
application's dependencies. If this order is not respected, the Sonar
library would not be able to intercept the MPI function calls and instrument
them.
!!! Note
Notice the Task-Aware MPI (TAMPI), as well as other external libraries,
intercepts the MPI functions and may call MPI functions instead. Thus, the
order in which such libraries and Sonar are linked to the application will
also alter the resulting ovni trace. Give precedence to the Sonar library to
instrument the MPI function calls made by the application. You can achieve
by linking your application with the linking options `-lsonar-mpi -ltampi`.
Otherwise, give precendence to the TAMPI library to track the real MPI
functions that are being executed (i.e., the ones that the MPI library
actually runs). In this case, use the linking options `-ltampi -lsonar-mpi`.
## Function view
The function view attempts to provide a general overview of which are the MPI
functions being executed at any point in time. The function view shows the MPI
functions called by each thread (and for each CPU, the MPI functions executed
by the running thread in that CPU).
The function states shown in this view are listed below. Each function state
(in bold) includes a list of all the MPI functions that are instrumented as
that particular state. Notice that only the most important functions are
instrumented. Also, notice that not all functions have their own state. For
instance, the large count MPI (with `_c` suffix) introduced in MPI 4.0, the
extended functions (with `v` or `w` suffix), and Fortran functions (with lower
case name and `_` suffix) are instrumented as their simple C function without
suffix.
- *Setup functions*: The running thread is executing MPI setup functions to
initialize and finalize the MPI environment. The following function states
are shown:
- **MPI_Init**: `MPI_Init`, `mpi_init_`
- **MPI_Init_thread**: `MPI_Init_thread`, `mpi_init_thread_`
- **MPI_Finalize**: `MPI_Finalize`, `mpi_finalize_`
- *Request functions*: The running thread is executing MPI functions that wait
or test MPI requests after being generated by non-blocking MPI operations. The
following functions are instrumented:
- **MPI_Wait**: `MPI_Wait`, `mpi_wait_`
- **MPI_Waitall**: `MPI_Waitall`, `mpi_waitall_`
- **MPI_Waitany**: `MPI_Waitany`, `mpi_waitany_`
- **MPI_Waitsome**: `MPI_Waitsome`, `mpi_waitsome_`
- **MPI_Test**: `MPI_Test`, `mpi_test_`
- **MPI_Testall**: `MPI_Testall`, `mpi_testall_`
- **MPI_Testany**: `MPI_Testany`, `mpi_testany_`
- **MPI_Testsome**: `MPI_Testsome`, `mpi_testsome_`
- *Point-to-point functions*: The running thread is communicating through MPI
by executing point-to-point primitives. The instrumented functions are:
- **MPI_Recv**: `MPI_Recv`, `MPI_Recv_c`, `mpi_recv_`
- **MPI_Send**: `MPI_Send`, `MPI_Send_c`, `mpi_send_`
- **MPI_Bsend**: `MPI_Bsend`, `MPI_Bsend_c`, `mpi_bsend_`
- **MPI_Rsend**: `MPI_Rsend`, `MPI_Rsend_c`, `mpi_rsend_`
- **MPI_Ssend**: `MPI_Ssend`, `MPI_Ssend_c`, `mpi_ssend_`
- **MPI_Sendrecv**: `MPI_Sendrecv`, `MPI_Sendrecv_c`, `mpi_sendrecv_`
- **MPI_Sendrecv_replace**: `MPI_Sendrecv_replace`, `MPI_Sendrecv_replace_c`,
`mpi_sendrecv_replace_`
- **MPI_Irecv**: `MPI_Irecv`, `MPI_Irecv_c`, `mpi_irecv_`
- **MPI_Isend**: `MPI_Isend`, `MPI_Isend_c`, `mpi_isend_`
- **MPI_Ibsend**: `MPI_Ibsend`, `MPI_Ibsend_c`, `mpi_ibsend_`
- **MPI_Irsend**: `MPI_Irsend`, `MPI_Irsend_c`, `mpi_irsend_`
- **MPI_Issend**: `MPI_Issend`, `MPI_Issend_c`, `mpi_issend_`
- **MPI_Isendrecv**: `MPI_Isendrecv`, `MPI_Isendrecv_c`, `mpi_isendrecv_`
- **MPI_Isendrecv_replace**: `MPI_Isendrecv_replace`,
`MPI_Isendrecv_replace_c`, `mpi_isendrecv_replace_`
- *Collective functions*: The running thread is communicating through MPI by
executing collective functions. The instrumented functions are:
- **MPI_Gather**: `MPI_Gather`, `MPI_Gatherv`, `MPI_Gather_c`,
`MPI_Gatherv_c`, `mpi_gather_`, `mpi_gatherv_`
- **MPI_Allgather**: `MPI_Allgather`, `MPI_Allgatherv`, `MPI_Allgather_c`,
`MPI_Allgatherv_c`, `mpi_allgather_`, `mpi_allgatherv_`
- **MPI_Scatter**: `MPI_Scatter`, `MPI_Scatterv`, `MPI_Scatter_c`,
`MPI_Scatterv_c`, `mpi_scatter_`, `mpi_scatterv_`
- **MPI_Reduce**: `MPI_Reduce`, `MPI_Reduce_c`, `mpi_reduce_`
- **MPI_Reduce_scatter**: `MPI_Reduce_scatter`, `MPI_Reduce_scatter_c`,
`mpi_reduce_scatter_`
- **MPI_Reduce_scatter_block**: `MPI_Reduce_scatter_block`,
`MPI_Reduce_scatter_block_c`, `mpi_reduce_scatter_block_`
- **MPI_Allreduce**: `MPI_Allreduce`, `MPI_Allreduce_c`, `mpi_allreduce_`
- **MPI_Barrier**: `MPI_Barrier`, `MPI_Barrier_c`, `mpi_barrier_`
- **MPI_Bcast**: `MPI_Bcast`, `MPI_Bcast_c`, `mpi_bcast`
- **MPI_Alltoall**: `MPI_Alltoall`, `MPI_Alltoallv`, `MPI_Alltoallw`,
`MPI_Alltoall_c`, `MPI_Alltoallv_c`, `MPI_Alltoallw_c`, `mpi_alltoall_`,
`mpi_alltoallv_`, `mpi_alltoallw_`
- **MPI_Scan**: `MPI_Scan`, `MPI_Scan_c`, `mpi_scan_`
- **MPI_Exscan**: `MPI_Exscan`, `MPI_Exscan_c`, `mpi_exscan_`
- **MPI_Igather**: `MPI_Igather`, `MPI_Igatherv`, `MPI_Igather_c`,
`MPI_Igatherv_c`, `mpi_igather_`, `mpi_igatherv_`
- **MPI_Iallgather**: `MPI_Iallgather`, `MPI_Iallgatherv`,
`MPI_Iallgather_c`, `MPI_Iallgatherv_c`, `mpi_iallgather_`,
`mpi_iallgatherv_`
- **MPI_Iscatter**: `MPI_Iscatter`, `MPI_Iscatterv`, `MPI_Iscatter_c`,
`MPI_Iscatterv_c`, `mpi_iscatter_`, `mpi_iscatterv_`
- **MPI_Ireduce**: `MPI_Ireduce`, `MPI_Ireduce_c`, `mpi_ireduce_`
- **MPI_Iallreduce**: `MPI_Iallreduce`, `MPI_Iallreduce_c`, `mpi_iallreduce_`
- **MPI_Ireduce_scatter**: `MPI_Ireduce_scatter`, `MPI_Ireduce_scatter_c`,
`mpi_ireduce_scatter_`
- **MPI_Ireduce_scatter_block**: `MPI_Ireduce_scatter_block`,
`MPI_Ireduce_scatter_block_c`, `mpi_ireduce_scatter_block_`
- **MPI_Ibarrier**: `MPI_Ibarrier`, `MPI_Ibarrier_c`, `mpi_ibarrier_`
- **MPI_Ibcast**: `MPI_Ibcast`, `MPI_Ibcast_c`, `mpi_ibcast_`
- **MPI_Ialltoall**: `MPI_Ialltoall`, `MPI_Ialltoallv`, `MPI_Ialltoallw`,
`MPI_Ialltoall_c`, `MPI_Ialltoallv_c`, `MPI_Ialltoallw_c`,
`mpi_ialltoall_`, `mpi_ialltoallv_`, `mpi_ialltoallw_`
- **MPI_Iscan**: `MPI_Iscan`, `MPI_Iscan_c`, `mpi_iscan_`
- **MPI_Iexscan**: `MPI_Iexscan`, `MPI_Iexscan_c`, `mpi_iexscan_`
!!! Note
The Sonar library does not support large count MPI functions for the Fortran
language yet, and thus, these functions are not instrumented.
The figure below shows an example of the MPI function view. The program executes
a distributed stencil algorithm with MPI and OmpSs-2. There are several MPI
processes, each running OmpSs-2 tasks on an exclusive set of CPUs. Most of these
are computation tasks, while the others are concurrent tasks performing
communications using the blocking mode of the TAMPI library. These use `MPI_Send`
and `MPI_Recv` functions to send and receive blocks of data. The program was
linked with Sonar and preceding the TAMPI library. Thus, the trace shows the
blocking MPI function calls made by the application.
![MPI function view example](fig/mpi-function.png)
The light green areas correspond to the `MPI_Init_thread` calls, the grey ones
are `MPI_Send` calls and the dark green areas are `MPI_Recv` calls. There are
other secondary calls like `MPI_Bcast` (orange), `MPI_Barrier` (blue) and
`MPI_Finalize` (red) calls.
As mentioned above, the trace shows the blocking MPI functions called by the
application because Sonar was placed before TAMPI in the linking order. However,
these blocking calls may not be actually executed by the MPI library; TAMPI will
transparently replace them with non-blocking calls (e.g., `MPI_Isend` and
`MPI_Irecv`) and a polling mechanism for the generated MPI requests. If you want
to explore the actual MPI functions being executed, you should link the Sonar
library after TAMPI.

View File

@ -76,6 +76,17 @@ This view shows the type of each thread:
- External: used for external threads that attach to Nanos6 (currently
there are not in use).
## Idle view
The idle view shows when CPUs become *Idle*. This state is displayed when no
thread is *Running* in the CPU or when a worker is marked as Stalled (not making
progress) such as when busy waiting but still *Running* in the CPU. The CPUs can
also be marked as *Absorbing noise*, when they are running a worker in the sponge
mode, which leaves the CPU free to absorb noise from system processes and
interruptions to avoid disruption in the other CPUs.
In particular, a worker requesting a new task will become Stalled after entering
the delegation lock and performing a complete iteration without receiving work.
## Subsystem view
@ -193,6 +204,30 @@ The complete list of subsystems and sections is shown below.
subsystem in Nanos6. Tasks will continue to be in the running state until
paused or finished.
## Breakdown view (experimental)
The breakdown view shows the **number** of CPUs in a given state, stacking
similar states together. Its a mix of the task type, subsystem and idle views.
!!! Important
This view is only generated with the `-b` option of ovniemu. This
feature is experimental, new changes may break compatibility.
Here is an example of the Heat mini-app.
![Breakdown example](fig/breakdown.png)
The *Idle* state shows when a CPU has no threads running or when the worker is
Stalled (is not making progress). Below the Idle state the tasks are shown by
their label, in this case only *block computation* is running. Above the Idle
state, the runtime subsystems are shown.
This view gives a quick overview of the usage of the CPUs over time and which
tasks are taking more time. It also shows which sections are unable to use all
the CPUs, showing potential problems with the parallelization. In this example
not all the CPUs can be filled with *block computation* tasks.
## Limitations
The task for clause is partially supported, as currently the emulator uses a

View File

@ -1,9 +1,42 @@
# nOS-V model
The [nOS-V library][nosv] implements a user space runtime that can schedule
tasks to run in multiple CPUs. The nOS-V library is instrumented to
track the internal state of the runtime as well as emit information
about the tasks that are running.
[nosv]: https://github.com/bsc-pm/nos-v
## Task model
The nOS-V runtime is composed of tasks that can be scheduled to run in
threads. Tasks can be paused and resumed, leaving the CPUs free to
execute other tasks. The nOS-V model tracks the state of each task as
well as the state of the runtime internal state.
execute other tasks.
In nOS-V, parallel tasks can also be scheduled multiple times and the
same task may run concurrently in several CPUs. To model this scenario,
we introduce the concept of *body*, which maps to each execution of the
same task, with a unique body id.
![Parallel tasks](fig/parallel-tasks.svg)
A normal task only has one body, while a parallel task (created with
`TASK_FLAG_PARALLEL`) can have more than one body. Each body holds the
execution state, and can transition to different execution states
following this state diagram:
![Body model](fig/body-model.svg)
Bodies begin in the Created state and transition to Running when they
begin the execution. Bodies that can be paused (created with the flag
`BODY_FLAG_PAUSE` can transition to the Paused state.
Additionally, bodies can run multiple times if they are created with the
`BODY_FLAG_RESURRECT`, and transition from Dead to Running. This
transition is required to model the tasks that implement the taskiter in
NODES, which will be submitted multiple times for execution reusing the
same task id and body id. Every time a body runs again, the iteration
number is increased.
## Task type colors
@ -22,3 +55,52 @@ provides two desirable properties:
For more details, see [this MR][1].
[1]: https://pm.bsc.es/gitlab/rarias/ovni/-/merge_requests/27
## Subsystem view
The subsystem view provides a simplified view on what is the nOS-V
runtime doing over time. The view follows the same rules described in
the [subsystem view of Nanos6](nanos6.md/#subsystem_view).
## Idle view
The idle view shows the progress state of the running threads:
*Progressing* and *Resting*. The *Progressing* state is shown when they
are making useful progress and the *Resting* state when they are waiting
for work. When workers start running, by definition, they begin in the
Progressing state and there are some situations that make them
transition to Resting:
- When workers are waiting in the delegation lock after some spins or
when instructed to go to sleep.
- When the server is trying to serve tasks, but there are no more tasks
available.
They will go back to Progressing as soon as they receive work. The
specific points at which they do so can be read in [nOS-V source
code](https://gitlab.bsc.es/nos-v/nos-v) by looking at the
`instr_worker_resting()` and `instr_worker_progressing()` trace points.
This view is intended to detect parts of the execution time on which the
workers don't have work, typically because the application doesn't have
enough parallelism or the scheduler is unable to serve work fast enough.
## Breakdown view
The breakdown view displays a summary of what is happening in all CPUs
by mixing in a single timeline the subsystem, idle and task type views.
Specifically, it shows how many CPUs are resting as defined by the idle
view, how many are inside a given task by showing the task type label,
and how many are in a particular subsystem of the runtime.
!!! Important
You must specify *ovni.level = 3* or higher in *nosv.toml* and pass
the *-b* option to ovniemu to generate the breakdown view.
Notice that the vertical axis shows the **number**
of CPUs in that state, not the physical CPUs like other views.
Here is an example of the Heat mini-app:
![Breakdown example](fig/breakdown-nosv.png)

View File

@ -0,0 +1,264 @@
# OpenMP model
The [OpenMP programming model](https://www.openmp.org) is a widely used API and
set of directives for parallel programming, allowing developers to write
multi-threaded and multi-process applications more easily. In this document we
refer to the
[version 5.2 of the OpenMP specification](https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf).
The [LLVM OpenMP Runtime](https://openmp.llvm.org/design/Runtimes.html) provides
an implementation of the OpenMP specification as a component of the LLVM
compiler infrastructure. We have modified the LLVM OpenMP runtime (libomp) to run on top
of the [nOS-V](https://gitlab.bsc.es/nos-v/nos-v) runtime as part of the
[OmpSs-2 LLVM compiler](https://pm.bsc.es/llvm-ompss), named **libompv**.
We have added instrumentation events to libompv designed to be enabled along
the [nOS-V instrumentation](nosv.md). This document describes all the
instrumentation features included in our modified libompv runtime to identify
what is happening. This data is useful for both users and developers of the
OpenMP runtime to analyze issues and undesired behaviors.
!!! Note
Instrumenting libomp is planned but is not yet posible.
For now you must use libompv.
## Enable the instrumentation
To generate runtime traces, you will have to:
1. **Build nOS-V with ovni support:** Refer to the
[nOS-V
documentation](https://github.com/bsc-pm/nos-v/blob/master/docs/user/tracing.md).
Typically you should use the `--with-ovni` option at configure time to specify
where ovni is installed.
2. **Build libompv with ovni and nOS-V support:** Use the `PKG_CONFIG_PATH`
environment variable to specify the nOS-V and ovni installation
when configuring CMake.
3. **Enable the instrumentation in nOS-V at runtime:** Refer to the
[nOS-V documentation](https://github.com/bsc-pm/nos-v/blob/master/docs/user/tracing.md)
to find out how to enable the tracing at runtime. Typically you can just set
`NOSV_CONFIG_OVERRIDE="instrumentation.version=ovni"`.
4. **Enable the instrumentation of libompv at runtime:** Set the environment
variable `OMP_OVNI=1`.
Next sections describe each of the views included for analysis.
## Subsystem view
![Subsystem view example](fig/openmp-subsystem.png)
The view is complemented with the information of [nOS-V views](nosv.md),
as libompv uses nOS-V tasks to run the workers.
Subsystem illustrates the activities of each thread with different states:
- **Work-distribution subsystem**: Related to work-distribution constructs,
[in Chapter 11][workdis].
- **Distribute**: Running a *Distribute* region.
- **Dynamic for chunk**: Running a chunk of a dynamic *for*, which often
involve running more than one iteration of the loop. See the
[limitations](#dynamic_for) below.
- **Dynamic for initialization**: Preparing a dynamic *for*.
- **Static for chunk**: Executing the assigned iterations of an static
*for*.
- **Single**: Running a *Single* region. All threads of the parallel region
participate.
- **Section**: Running a *Section* region. All threads of the parallel region
participate.
- **Task subsystem**: Related to tasking constructs, [in Chapter 12][tasking].
- **Allocation**: Allocating the task descriptor.
- **Check deps**: Checking if the task has pending dependencies to be
fulfilled. When all dependencies are fulfilled the task will be scheduled.
- **Duplicating**: Duplicating the task descriptor in a taskloop.
- **Releasing deps**: Releasing dependencies at the end of a task. This
state is always present even if the task has no dependencies.
- **Running task**: Executing a task.
- **Running task if0**: Executing a task if0.
- **Scheduling**: Adding the task to the scheduler for execution.
- **Taskgroup**: Waiting in a *taskgroup* construct.
- **Taskwait**: Waiting in a *taskwait* construct.
- **Taskwait deps**: Trying to execute tasks until dependencies have been
fulfilled. This appears typically in a task if0 with dependencies or a
taskwait with deps.
- **Taskyield**: Performing a *taskyield* construct.
- **Critical subsystem**: Related to the *critical* Constuct, in [Section 15.2][critical].
- **Acquiring**: Waiting to acquire a *Critical* section.
- **Section**: Running the *Critical* section.
- **Releasing**: Waiting to release a *Critical* section.
- **Barrier subsystem**: Related to barriers, in [Section 15.3][barrier].
**All barriers can try to execute tasks**.
- **Barrier: Fork**: Workers wait for a release signal from the master thread to
continue. The master can continue as soon as it signals the workers. It is
done at the beginning of a fork-join region.
- **Barrier: Join**: The master thread waits until all workers finish their work.
Workers can continue as soon as they signal the master. It is done at the
end of a fork-join region.
- **Barrier: Plain**: Performing a plain barrier, which waits for a release
signal from the master thread to continue. It is done at the beginning of
a fork-join region, in the `__kmp_join_barrier()` function.
- **Barrier: Task**: Blocked in an additional tasking barrier *until all previous
tasks have been executed*. Only happens when executed with `KMP_TASKING=1`.
- **Runtime subsystem**: Internal operations of the runtime.
- **Attached**: Present after the call to `nosv_attach()` and before
`nosv_detach()`. This state is a hack.
- **Fork call**: Preparing a parallel section using the fork-join model.
Only called from the master thread.
- **Init**: Initializing the libompv runtime.
- **Internal microtask**: Running a internal libompv function as a microtask.
- **User microtask**: Running user code as a microtask in a worker thread.
- **Worker main Loop**: Running the main loop, where the workers run the
fork barrier, run a microtask and perform a join barrier until there is no
more work.
!!! Note
The generated HTML version of the OpenMP 5.2 specification has some parts
missing, so we link directly to the PDF file which may not work in some
browsers.
[workdis]: https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf#chapter.11
[tasking]: https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf#chapter.12
[critical]: https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf#section.15.2
[barrier]: https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5-2.pdf#section.15.3
## Label view
The label view displays the text in the `label()` clause of OpenMP
tasks and work distribution constructs (static and dynamic for, single
and section). When the label is not provided, the source file and source
line location is used instead.
When nesting multiple tasks or work distribution constructs, only the
innermost label is shown.
Note that in this view, the numeric event value is a hash function of
the type label, so two distinct tasks (declared in different parts of
the code) with the same label will share the event value and have the
same color.
## Task ID view
The task ID view represents the numeric ID of the OpenMP task that is
currently running on each thread. The ID is a monotonically increasing
identifier assigned on task creation. Lower IDs correspond to tasks
created at an earlier point than higher IDs.
## Limitations
As the compiler generates the code that perform the calls to the libompv
runtime, there are some parts of the execution that are complicated to
instrument by just placing a pair of events to delimite a function.
For those cases we use an approximation which is documented in the following
subsections.
### Dynamic for
The generated code of a *dynamic for* has the following structure:
```c
__kmpc_dispatch_init_4(...);
while (__kmpc_dispatch_next_4(...)) {
for (i = ...; i <= ...; i++) {
// User code ...
}
}
```
The function `__kmpc_dispatch_next_4()` returns `true` if there are more
chunks (group of iterations) to be executed by the thread, otherwise it returns
`false`.
Ideally we want to instrument each chunk with a pair of begin and end events.
The problem with the instrumentation is that there is no easy way of determining
if the call to `__kmpc_dispatch_next_4()` is processing the first chunk, just
after `__kmpc_dispatch_init_4()`, or is coming from other chunks due to the
while loop.
Therefore, from the `__kmpc_dispatch_next_4()` alone, we cannot determine if we
need to only emit a single "begin a new chunk" event or we need to emit the pair
of events "finish the last chunk" and "begin a new one".
So, as a workaround, we emit an event from the end of `__kmpc_dispatch_init_4()`
starting a new chunk (which is fake), and then from `__kmpc_dispatch_next_4()` we
always emit the "finish the last chunk" and "begin a new one" events (unless
there are no more chunks, in which case we don't emit the "begin a new one"
event).
This will cause an spurious *Work-distribution: Dynamic for chunk* state at the
beginning of each dynamic for, which should be very short and is not really a
chunk.
### Static for
The generated code of an *static for* has the following structure:
```c
__kmpc_for_static_init_4(...);
for (i = ...; i <= ...; i++) {
// User code ...
}
__kmpc_for_static_fini(...);
```
As this code is generated by the compiler we cannot easily add the begin/end
pair of events to mark the *Work-distribution: Static for chunk* state.
We assume that by placing the "begin processing a chunk" event at the end of
`__kmpc_for_static_init_4()` and the "end processing the chunk" event at
the beginning of `__kmpc_for_static_fini()` is equivalent to adding the
events surrounding the for loop.
### Task if0
The generated code of an *if0 task* has the following structure:
```c
... = __kmpc_omp_task_alloc(...);
__kmpc_omp_taskwait_deps_51(...); // If task has dependencies
__kmpc_omp_task_begin_if0(...);
// Call to the user code
omp_task_entry_(...);
__kmpc_omp_task_complete_if0(...);
```
Instead of injecting the begin and end events in the user code, we
approximate it by placing the "begin if0 task" event at the end of the
`__kmpc_omp_task_begin_if0` function and the "end if0 task" event at the
beginning of `__kmpc_omp_task_complete_if0`. This state will be shown as
*Task: Running task if0*.

View File

@ -60,4 +60,4 @@ will set all the channels to an error state.
The emulator automatically switches the channels from one thread to
another when a thread is switched from the CPU. So the different models
don't need to worry about thread transitions. See the
[channels](../channels) section for more information.
[channels](../../dev/channels.md) section for more information.

144
doc/user/emulation/tampi.md Normal file
View File

@ -0,0 +1,144 @@
# TAMPI model
The Task-Aware MPI (TAMPI) library extends the functionality of standard MPI
libraries by providing new mechanisms for improving the interoperability between
parallel task-based programming models, such as OpenMP and OmpSs-2, and MPI
communications. This library allows the safe and efficient execution of MPI
operations from concurrent tasks and guarantees the transparent management and
progress of these communications.
[tampi repo]: https://github.com/bsc-pm/tampi
[tampi docs]: https://github.com/bsc-pm/tampi#readme
[tampi blk]: https://github.com/bsc-pm/tampi#blocking-mode-ompss-2
[tampi nonblk]: https://github.com/bsc-pm/tampi#non-blocking-mode-openmp--ompss-2
The TAMPI library has instrumented the execution of its task-aware functions
with ovni. To obtain an instrumented library, TAMPI must be built passing the
`--with-ovni` configure option and specifying the ovni installation prefix. At
run-time, the user can enable the instrumentation by defining the environment
variable `TAMPI_INSTRUMENT=ovni`.
For more information regarding TAMPI or how to enable its instrumentation see
the TAMPI [repository][tampi repo] and [documentation][tampi docs].
TAMPI is instrumented to track the execution path inside the run-time library
to identify what is happening at each moment. This information can be used by
both users and developers to analyze problems or to better understand the
execution behavior of TAMPI communications and its background services. There is
one view generated to achieve this goal.
## Subsystem view
The subsystem view attempts to provide a general overview of what TAMPI is doing
at any point in time. The view shows the state inside the TAMPI library for each
thread (and for each CPU, the state of the running thread in that CPU). This
subsystem state view sticks to the definition of subsystem states from the
[Nanos6](nanos6.md#subsystem_view).
The states shown in this view are:
- **Library code subsystem**: Indicating whether the running thread is executing
effective TAMPI library code. These subsystem states wrap the rest of
subsystems that are described below. No other TAMPI state can appear outside
of a TAMPI library code subsystem state.
- **Interface function**: Running any TAMPI API function or an intercepted
MPI function which requires task-awareness. When the user application
disables a TAMPI mode, whether the [blocking][tampi blk] or
[non-blocking][tampi nonblk] mode, any call to an interface function
corresponding to the disabled mode will not appear in the view. Operations
that are directly forwarded to MPI (because TAMPI is not asked to apply
task-awareness) will not appear.
- **Polling function**: The TAMPI library can launch internal tasks to
execute polling functions in the background. Currently, TAMPI launches a
polling task that periodically checks and processes the pending MPI
requests generated by task-aware operations. This polling state may not
appear if none of the TAMPI modes are enabled by the user application.
- **Communication subsystem**: The running thread is communicating through MPI
or issuing an asynchronous communication operation.
- **Issuing a non-blocking operation**: Issuing a non-blocking MPI operation
that can generate an MPI request.
- **Ticket subsystem**: Creation and managing of tickets. A ticket is an
internal object that describes the relation between a set of pending MPI
requests and the user communication task that is *waiting* (synchronous or
asynchronously) on them. A ticket is used for both [blocking][tampi blk] and
[non-blocking][tampi nonblk] operations.
- **Creating a ticket**: Creating a ticket that is linked to a set of MPI
requests and a user task. The user task is the task that is *waiting* for
these requests to complete. Notice that *waiting* does not mean that the
task will synchronously wait for them. The ticket is initialized with a
counter of how many requests are still pending. The ticket is completed,
and thus, the task is notified, when this counter becomes zero.
- **Waiting for the ticket completion**: The user task, during a blocking
TAMPI operation, is waiting a ticket and its requests to complete. The
task may be blocked and yield the CPU meanwhile. Notice that user tasks
calling non-blocking TAMPI operations will not enter in this state.
- **Staging queue subsystem**: Queueing and dequeueing requests from the staging
queues before being transferred to the global array of requests and tickets.
These queues are used to optimize and control insertion of these objects into
the global array.
- **Adding to a queue**: A user communication task running a task-aware
TAMPI operation is pushing the corresponding MPI requests and the related
ticket into a staging queue.
- **Transfering from queues to the global array**: The polling task is
transferring the staged requests and tickets from the queues to the global
array.
- **Global array subsystem**: Managing the per-process global array of tickets
and MPI requests related to TAMPI operations.
- **Checking pending requests**: Testing all pending MPI requests from the
global array, processing the completed requests, and reorganizing the
array to keep it compacted.
- **Request subsystem**: Management and testing of pending MPI requests, and
processing the completed ones. This state considers only the management of MPI
requests concerning task-aware operations, which are exclusively tested by the
TAMPI library. Any testing function call made by the user application or other
libraries is not considered.
- **Testing a request with MPI_Test**: Testing a single MPI request by
calling MPI_Test inside the TAMPI library.
- **Testing requests with MPI_Testall**: Testing multiple MPI requests by
calling MPI_Testall inside the TAMPI library.
- **Testing requests with MPI_Testsome**: Testing multiple MPI requests by
calling MPI_Testsome inside the TAMPI library.
- **Processing a completed request**: Processing a completed MPI request by
decreasing the number of pending requests of the linked ticket. If the
ticket does not have any other request to wait, the ticket is completed
and the *waiting* task is notified. In such a case, a call to the tasking
runtime system will occur. If the operation was [blocking][tampi blk], the
*waiting* task will be unblocked and will eventually resume the execution.
If the operation was [non-blocking][tampi nonblk], the library will
decrease the external events of the *waiting* task.
The figure below shows an example of the subsystem view. The program executes a
distributed stencil algorithm with MPI and OmpSs-2. There are several MPI
processes and each process has OmpSs-2 tasks running exlusively on multiple CPU
resources.
![Subsystem view example](fig/tampi-subsystem.png)
The view show there are several user tasks running task-aware communication
operations. The light blue areas show when a user task is testing a request that
was generated by a non-blocking MPI communication function. There is also one
polling task per process. The yellow areas show when the polling tasks are
calling MPI_Testsome. Just after the testsome call, the violet areas show the
moment when the polling task is processing the completed requests.
This view shows that most of the time inside the TAMPI library is spent testing
requests. This could give us a clue that the underlying MPI library may have
concurrency issues (e.g., thread contention) when multiple threads try to test
requests in parallel.

View File

@ -0,0 +1,61 @@
# Model versions
Track changes in emulator model versions.
!!! Note
These versions cover the [events defined](events.md) in the emulator models.
They are **not related to the versions of the libraries**.
## Nanos6
- nanos6 1.1.0:
- Deprecate running nested tasks (`6Tx`) without pausing the parent task
first (`6Tp`). For compatibility, the old behavior is still supported.
- nanos6 1.0.0: Initial version
## Nodes
- nodes 1.0.0: Initial version
## Kernel
- kernel 1.0.0: Initial version
## MPI
- mpi 1.0.0: Initial version
## Ovni
- ovni 1.1.0
- Add support for mark events `OM[`, `OM]` and `OM=`
- ovni 1.0.0: Initial version
## OpenMP
- openmp 1.2.0:
- Add support for labels and task ID views
- openmp 1.1.0: Initial version
## TAMPI
- tampi 1.0.0: Initial version
## nOS-V
- nosv 2.4.0
- Add support for `nosv_cond_wait`, `nosv_cond_signal` and `nosv_cond_broadcast` events VA{oOgGkK}.
- nosv 2.3.0
- Add `nosv.can_breakdown` attribute to metadata for breakdown checks.
- nosv 2.2.0
- Add support for progress events `VP{pra}`.
- nosv 2.1.0
- Add support for `nosv_mutex_lock`, `nosv_mutex_trylock` and `nosv_mutex_unlock` events `VA{lLtTuU}`.
- Add support for `nosv_barrier_wait` event `VA{bB}`.
- nosv 2.0.0
- Add support for parallel tasks, adding a new `bodyid` argument in `VT*` events.
- Remove support for old attach events `VH{aA}`.
- nosv 1.1.0
- Ignore old attach events `VH{aA}`.
- Add new API attach `VA{aA}` and detach `VA{eE}` events.
- nosv 1.0.0: Initial version.

View File

@ -24,9 +24,11 @@ If you are using SLURM, you may want to use something like:
you must invoke srun twice.
By default, it will generate the `ovni/clock-offsets.txt` file, with the
relative offsets to the rank 0 of MPI. The emulator will automatically pick the
offsets when processing the trace. Use the ovnisync `-o` option to select a
different output path (see the `-c` option in ovniemu to load the file).
relative offsets to the rank 0 of MPI. If the `OVNI_TRACEDIR` environment
variable is defined, the default file is `$OVNI_TRACEDIR/clock-offsets.txt`.
The emulator will automatically pick the offsets when processing the trace.
Use the ovnisync `-o` option to select a different output path (see the `-c`
option in ovniemu to load the file).
Here is an example table with three nodes, all units are in nanoseconds. The
standard deviation is less than 1 us:

56
doc/user/runtime/env.md Normal file
View File

@ -0,0 +1,56 @@
# Environment variables
Some environment variables can be used to adjust settings during the execution
of libovni, they all begin with the `OVNI_` prefix. Be sure that all threads of
the same node use the same environment variables.
## OVNI_TMPDIR
During the execution of your program, a per-thread buffer is kept where the new
events are being recorded. When this buffer is full, it is written to disk and
emptied, an operation known as flush. This may take a while depending on the
underlying filesystem.
Keep in mind that the thread will be blocked until the flush ends, so if your
filesystem is slow it would interrupt the execution of your program for a long
time. It is advisable to use the fastest filesystem available (see the tmpfs(5)
and df(1) manual pages).
You can select a temporary trace directory where the buffers will be flushed
during the execution by setting the environment variable `OVNI_TMPDIR`. The last
directory will be created if doesn't exist. In that case, as soon as a process
calls `ovni_proc_fini()`, the traces of all its threads will be moved to the
final directory at `$PWD/ovni`. Example:
OVNI_TMPDIR=$(mktemp -u /dev/shm/ovni.XXXXXX) srun ./your-app
To test the different filesystem speeds, you can use hyperfine and dd. Take a
closer look at the max time:
```
$ hyperfine 'dd if=/dev/zero of=/gpfs/projects/bsc15/bsc15557/kk bs=2M count=10'
Benchmark 1: dd if=/dev/zero of=/gpfs/projects/bsc15/bsc15557/kk bs=2M count=10
Time (mean ± σ): 71.7 ms ± 130.4 ms [User: 0.8 ms, System: 10.2 ms]
Range (min … max): 14.7 ms … 1113.2 ms 162 runs
Warning: Statistical outliers were detected. Consider re-running this
benchmark on a quiet PC without any interferences from other programs. It
might help to use the '--warmup' or '--prepare' options.
$ hyperfine 'dd if=/dev/zero of=/tmp/kk bs=2M count=10'
Benchmark 1: dd if=/dev/zero of=/tmp/kk bs=2M count=10
Time (mean ± σ): 56.2 ms ± 5.7 ms [User: 0.6 ms, System: 14.8 ms]
Range (min … max): 45.8 ms … 77.8 ms 63 runs
$ hyperfine 'dd if=/dev/zero of=/dev/shm/kk bs=2M count=10'
Benchmark 1: dd if=/dev/zero of=/dev/shm/kk bs=2M count=10
Time (mean ± σ): 11.4 ms ± 0.4 ms [User: 0.5 ms, System: 11.1 ms]
Range (min … max): 9.7 ms … 12.5 ms 269 runs
```
## OVNI_TRACEDIR
By default, the runtime trace will be placed in the `ovni` directory, inside the
working directory. You can specify a different location to place the trace by
setting the `OVNI_TRACEDIR` environment variable. It accepts a relative or
absolute path, which will be created if it doesn't exist.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

123
doc/user/runtime/index.md Normal file
View File

@ -0,0 +1,123 @@
# Introduction
To use *libovni* to instrument a program follow the next instructions
carefully or you may end up with an incomplete trace that is rejected at
emulation.
You can also generate a valid trace from your own software or hardware
directly following the [trace specification](trace_spec.md).
## Initialization
To initialize libovni follow these steps in all threads:
1. **Check the version**. Call `ovni_version_check()` once before calling any
ovni function. It can be called multiple times from any thread, but only one
is required.
2. **Init the process**. Call `ovni_proc_init()` to initialize the process. It
can only be called **once per process** and it must be called before the
thread is initialized.
3. **Init the thread**. Call `ovni_thread_init()` to initialize the thread.
Multiple attempts to initialize the same thread are ignored with a warning.
Must be called by all threads.
The `ovni_proc_init()` arguments are as follows:
```c
void ovni_proc_init(int app, const char *loom, int pid);
```
The `app` defines the "appid" of the program, which must be a number >0. This is
useful to run multiple processes some of which run the same "app", so you can
tell which one is which. The `loom` argument defines the
[loom](../concepts/part-model.md#loom) name and maps the process to that
loom. It must be composed of the host name, a dot and a suffix. The PID is the
one obtained by `getpid(2)`.
The `ovni_thread_init()` function only accepts one argument, the TID as returned
by `gettid(2)`.
## Setup metadata
Once the process and thread are initialized, you can begin adding metadata to
the thread stream.
1. **Require models**. Call `ovni_thread_require()` with the required model
version before emitting events for a given model. Only required once from a
thread in a given trace. The `ovni` model is implicitly required when calling
`ovni_thread_init()`, so there is no need to add it again.
2. **Emit loom CPUs**. Call `ovni_add_cpu()` to register each CPU in the loom. It can
be done from a single thread or multiple threads, in the latter the list of
CPUs is merged.
3. **Set the rank**. If you use MPI, call `ovni_proc_set_rank()` to register the
rank and number of ranks of the current execution. Only once per process.
When emitting the CPUs with:
```c
void ovni_add_cpu(int index, int phyid);
```
The `index` will be used to identify the CPU in the loom and goes from 0 to N -
1, where N is the number of CPUs in the loom. It must match the index that is
used in affinity events when a thread switches to another CPU. The `phyid` is
only displayed in Paraver and is usually the same as the index, but it can be
different if there are multiple looms per node.
## Start the execution
The current thread must switch to the "Running" state before any event can be
processed by the emulator. Do so by emitting a [`OHx`
event](../emulation/events.md#OHx) in the stream with the appropriate payload:
```c
static void thread_execute(int32_t cpu, int32_t ctid, uint64_t tag)
{
struct ovni_ev ev = {0};
ovni_ev_set_clock(&ev, ovni_clock_now());
ovni_ev_set_mcv(&ev, "OHx");
ovni_payload_add(&ev, (uint8_t *) &cpu, sizeof(cpu));
ovni_payload_add(&ev, (uint8_t *) &ctid, sizeof(ctid));
ovni_payload_add(&ev, (uint8_t *) &tag, sizeof(tag));
ovni_ev_emit(&ev);
}
```
The `cpu` is the logical index (not the physical ID) of the loom CPU at which
this thread will begin the execution. Use -1 if it is not known. The `ctid` and
`tag` allow you to track the exact point at which a given thread was created and
by which thread but they are not relevant for the first thread, so they can be
set to -1.
## Emit events
After this point you can emit any other event from this thread. Use the
`ovni_ev_*` set of functions to create and emit events. Notice that all events
refer to the current thread that emits them.
If you need to store metadata information, use the `ovni_attr_*` set of
functions. The metadata is stored in disk by `ovni_attr_flush()` and when the
thread is freed by `ovni_thread_free()`.
Attempting to emit events or writing metadata without having a thread
initialized will cause your program to abort.
## Finishing the execution
To finalize the execution **every thread** must perform the following steps,
otherwise the trace **will be rejected**.
1. **End the current thread**. Emit a [`OHe` event](../emulation/events.md#OHe) to inform the current thread ends.
2. **Flush the buffer**. Call `ovni_flush()` to be sure all events are written
to disk.
3. **Free the thread**. Call `ovni_thread_free()` to complete the stream and
free the memory used by the buffer.
4. **Finish the process**. If this is the last thread, call `ovni_proc_fini()`
to set the process state to finished.
If a thread fails to perform these steps, the complete trace will be rejected by
the emulator as it cannot guarantee it to be consistent.

218
doc/user/runtime/mark.md Normal file
View File

@ -0,0 +1,218 @@
# Mark events
The mark API allows you to add arbitrary events in a trace to mark regions of
interest while debugging or developing a new program or library. The events are
processed by the emulator to generate a timeline.
## Usage in runtime
Follow these steps to correctly use the API. Most problems will be detected in
emulation and cause a panic if you are not careful.
### Create a mark type
You can create up to 100 types of marks, each will be shown in its own Paraver
timeline. To create a new type, use the following call:
```c
void ovni_mark_type(int32_t type, long flags, const char *title);
```
The numeric value `type` must be a number between 0 and 99 (both included). The
`title` will be used to give a name to the Paraver timeline.
The default with flags set to zero, is to create a channel that can hold a
single value only (see [channels](../../dev/channels.md)). To use a stack of
values add the `OVNI_MARK_STACK` value to the flags.
Only one thread among all nodes needs to define a type to be available globally,
but the same type can be defined from multiple threads, as long as the same
flags and title argument are used. The idea is to avoid having to check if the
type was already defined or not.
### Define labels (optional)
The values that are written to the channel can have labels to display in the
Paraver timeline. The labels are optional, if not given the numeric value will
be shown in Paraver.
Use the following call to register a label for a value in a given type.
```c
void ovni_mark_label(int32_t type, int64_t value, const char *label);
```
A value can only have at most a single label associated. Multiple threads can
call the `ovni_mark_label()` with the same type and value as long as they use
the same label. New labels for the same type can be associated from different
threads, as long as the values are different.
All value and label pairs are combined from all threads and will be available in
the Paraver view for each type.
### Emit events
All mark channels begin with the default value *null*, which is not shown in
Paraver and will be displayed as the usual empty space. The value of the channel
can be changed over time with the following functions.
!!! warning
The value 0 is forbidden, as it is used by Paraver to represent the
"empty" state.
If you have used a single channel (without `OVNI_MARK_STACK`), then you must use
the following call to emit events at runtime:
```c
void ovni_mark_set(int32_t type, int64_t value);
```
It will update the value of the channel to the given `value`.
If you have used a stack channel (with `OVNI_MARK_STACK`), then you must use the
push/pop set of calls:
```c
void ovni_mark_push(int32_t type, int64_t value);
void ovni_mark_pop(int32_t type, int64_t value);
```
The value in the pop call must match the previous pushed value.
<details>
<summary>Example OmpSs-2 program</summary>
<br>
<div style="padding-left: 1em; border-left: 3px solid #ddd">
<p>
Here is a dummy program showing how to use the mark API with an OmpSs-2 program.
Notice that there is no initialization of the current thread or process, as it
already occurs inside the OmpSs-2 runtime before reaching the main.
```c
/* Build with:
* $ clang -fompss-2 -lovni dummy.c -o dummy
* Enable instrumentation in nanos6:
* $ echo 'version.instrument = "ovni"' > nanos6.toml
* Run:
* $ ./dummy
* Emulate:
* $ ovniemu ovni
* View timeline:
* $ wxparaver ovni/cpu.prv ovni/cfg/cpu/ovni/mark.cfg
*/
#include <ovni.h>
#include <unistd.h>
enum { INDEX = 0, RUN = 1 };
static void process(int run, int i)
{
ovni_mark_push(RUN, run + 1);
ovni_mark_push(INDEX, i + 1);
usleep(10000); // Dummy operation for 10 ms
ovni_mark_pop(INDEX, i + 1);
ovni_mark_pop(RUN, run + 1);
}
int main(void)
{
ovni_mark_type(INDEX, OVNI_MARK_STACK, "Index");
ovni_mark_type(RUN, OVNI_MARK_STACK, "Run");
for (int run = 0; run < 10; run++) {
for (int i = 0; i < 50; i++) {
#pragma oss task
process(run, i);
}
}
#pragma oss taskwait
return 0;
}
```
<!-- Images don't seem to work via markdown -->
<p>Here is the resulting timeline loaded in Paraver with the gradient color
configuration, showing the first mark type (the index):
<img style="margin-top: 1em" alt="" src="../fig/mark.png"></p>
</div>
</details>
<p></p>
## Usage in Paraver
Each thread holds a channel for each mark type that you have defined. The
information of the mark channels is propagated to the Paraver timeline in
Thread and CPU views.
When a thread is not *running*, the value of the mark channels is not shown in
Paraver. In the case of the CPU timeline, only the values of the running thread are
shown. If there are no running threads, nothing is shown.
Follow the next steps to create a configuration to suit your needs. You only
need to do it once, then you can save the configuration file and reuse it for
future traces.
### Filtering the type
To see a mark type, you will have to create a Paraver configuration that matches
the type that you have created. The mark `type` value gets converted into a PRV
type by adding 100 (as values from 0 to 99 are reserved).
You can use the `cpu/ovni/mark.cfg` and `thread/ovni/mark.cfg` configurations as
a starting point to create your own.
Go to "Window Properties" (the second button under "Files & Window Properties")
and then go to Filter > Events > Event type. Set Function to `=` and click the
Types value to display the `[...]` button, which will allow you to choose which
type to display.
In the "Events Selection" window, ensure that only one type is selected, and the
"Values" panel shows Function "All", to see all values for the selected type.
### Setting the title
In the "Window Properties" adjust the Name so it reflects what you are seeing.
This will be shown in the saved images, so it is good to use a proper
description.
### Configure the display method
By default, the timeline will display the values as "Code color". To switch to a
gradient or other methods, left-click in the timeline and go to "Paint As" and
select "Gradient" (or others).
You may also want to adjust the "Drawmode" which determines what happens when
there are multiple values under a given pixel. This is specially important when
you are viewing the trace with a large time range, before zooming into a given
region.
By default, the "Random not zero" mode is selected, which will select a
random value from the ones under each pixel, disregarding the occurrences of each
value. This mode will give importance to rare values, so it is usually a safe
starting point. The "Last" mode will show the last value in that pixel, which is
more or less fair, but will often hide rare values.
To change in both horizontal (Time) and in vertical (Objects) directions, go to:
left click on timeline > Drawmode > Both > Last.
### Ensure the range is good
Paraver will only display values in the timeline that are in the Semantic
range. If you see a red triangle in the lower left corner then there are values
outside the range that are not being displayed. You can click on this button to
expand the range to cover all values in the current view.
The opposite may also happen, where the range is too big for the current values.
You can also click on the same spot (even if the triangle is not shown) to
shrink the range to cover the values in the view, or go to the Window Properties
and modify the "Semantic Minimum" and "Semantic Maximum" values manually.
### Save the configuration
Once you finish configuring the timeline, save the configuration by
left-clicking the view and then "Save > Configuration...". You can use this
configuration in future traces to avoid doing these steps again.

Some files were not shown because too many files have changed in this diff Show More