ovni/CHANGELOG.md

8.7 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

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}.

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.