Skip to main content

Pallas is a scalable trace format for HPC applications.

Project description

Pallas

BSD-3 License Main Pipeline Maintained Badge HAL Badge

Documentation

A detailed documentation is available here.

Building

Building is done with CMake and any compiler (GCC, Clang, Intel OneAPI). ZSTD is required.

git clone https://gitlab.inria.fr/pallas/pallas.git
cd pallas
mkdir -p build && cd build
cmake ..
cmake --install . --config Release

Optional libraries

If you want to use SZ and ZFP, you should install them, then feed their install directory to CMake, using {SZ/ZFP}_ROOT_DIR

Python Library

Pallas comes with a Python library to read your traces. It is available on the PyPi repository : pip install pallas_trace

Building it locally

You need to install the Python library via pip by running pip install .. This will build and install a standalone version of the Pallas Python library. To link it dynamically instead, you can use the flag --config-settings=cmake.define.Python3_DYNAMIC=ON, but Pallas needs to be installed ( and in your LD_LIBRARY_PATH as well as in your pkg-config path).

Its requirements to build are the following:

  • Python >=3.11
  • pybind11 However, the library uses numpy and pandas, so you will need these as well.

Usage

You can then use it like this:

import pallas_trace as pallas
trace = pallas.open_trace("<my_trace_file>.pallas")
help( trace ) # Get some help reading you trace :)

A full documentation of the Pallas Python API is available here.

Usage

In your application

To use Pallas to log your application, you need to understand the hierarchical structure:

  • There's one GlobalArchive that stores global information.
  • Each Archive corresponds to a process / a self-contained information group. They're identified by LocationGroup
  • Each Thread refers to a group of events that are to be logged. They're identified by Location

There is a bit more nuance, but it's what you need for now. The following code should give you an idea of what to do to start logging your app in C++. There is also a C API that functions the same way. Their documentation is available here.

#include <pallas/pallas.h>
#include <pallas/pallas_write.h>
namespace pallas;
int main() {
    GlobalArchive globalArchive("<trace directory>", "<main trace file name>");
    globalArchive.addString(...);                   // Register a String

    // Add a process
    globalArchive.addLocationGroup(<processID>);    // Register a LocationGroup
    Archive archive(globalArchive, <processID>);
    // An Archive is the interface used to store local definitions
    // It's analogous to a process

    // Add a Thread
    archive.addLocation(<threadID>);         // Register a Location
    ThreadWriter threadWriter(archive, <threadID>);
    // A ThreadWriter is the interface used to log events
    // It's analogous to a Thread

    // Start logging
    pallas_record_generic(&threadWriter, <custom Attribute>, <timestamp>, <name>);

    // Write the trace to file
    threadWriter.close();
    globalArchive.close();
}

Using EZTrace

After compiling Pallas and its OTF2 API, install EZTrace. Make sure to build it from source, and to use the Pallas OTF2 library, not the normal OTF2 library. You can check which otf2-config to see if you have the correct one. If not, check your PATH and LD_LIBRARY_PATH variables.

Make sure to enable the relevant ezTrace modules. Then trace any program by running mpirun -np N eztrace -t <your modules> <your programm>. The trace file will be generated in the <your programm>_trace folder. You can then read it using pallas_print <your programm>_trace/eztrace_log.pallas

Visualizing Pallas traces

Blup is a web-based trace visualizer able to display Pallas traces. It uses Pallas Python API.

About

Pallas implements a subset of the OTF2 API. It also implements the Murmur3 hashing function.

Configuration

You can visualise your current (static) configuration with pallas_config. You can give your own dynamic configuration with the PALLAS_CONFIG_PATH environment variable. Here are the configuration options with specific values:

  • compressionAlgorithm: Specifies which compression algorithm is used for storing the timestamps. Its values are:
    • None
    • ZSTD
    • SZ
    • ZFP
    • Histogram
    • ZSTD_Histogram
  • encodingAlgorithm: Specifies which encoding algorithm is used for storing the timestamps. If the specified compression algorithm is lossy, this is defaulted to None. Its values are:
    • None
    • Masking
    • LeadingZeroes
  • loopFindingAlgorithm: Specifies what loop-finding algorithm is used. Its values are:
    • None
    • Basic
    • BasicTruncated
    • Filter

Here are the configuration options with number values:

  • zstdCompressionLevel: Specifies the compression level used by ZSTD. Integer.
  • maxLoopLength: Specifies the maximum loop length, if using a truncated loop finding algorithm. Integer.

Contributing

Contribution to Pallas are welcome. Just send us a pull request.

License

Pallas is distributed under the terms of both the BSD 3-Clause license.

See LICENSE for details

Citing Pallas

Feel free to use the following publications to reference Pallas:

@inproceedings{guelque:hal-04970114,
  TITLE = {{Pallas: a generic trace format for large HPC trace analysis}},
  AUTHOR = {Guelque, Catherine and Honor{\'e}, Valentin and Swartvagher, Philippe and Thomas, Ga{\"e}l and Trahay, Fran{\c c}ois},
  URL = {https://inria.hal.science/hal-04970114},
  BOOKTITLE = {{IPDPS 2025: 39th IEEE International Parallel \& Distributed Processing Symposium}},
  ADDRESS = {Milan, Italy},
  YEAR = {2025},
  MONTH = Jun,
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pallas_trace-0.20.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pallas_trace-0.20-cp314-cp314-manylinux_2_39_x86_64.whl (839.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.39+ x86-64

File details

Details for the file pallas_trace-0.20.tar.gz.

File metadata

  • Download URL: pallas_trace-0.20.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for pallas_trace-0.20.tar.gz
Algorithm Hash digest
SHA256 10dac44239b489ba8365ce49756efa5493d0db27f9e2a40d339418a7b8c45ddc
MD5 9df402dd5b712979d6521be35b090e75
BLAKE2b-256 018ab77b17b215c378cc56a9e77ad5b130d237bba17239323c8b1c1d7002b3e9

See more details on using hashes here.

File details

Details for the file pallas_trace-0.20-cp314-cp314-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for pallas_trace-0.20-cp314-cp314-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 b96fcb20f635aa69d206bef5238a3a32ab3c3a3b18e8575aa3d65bb6a2de6d7f
MD5 df9aa7df4d45c0672532df5d9829af41
BLAKE2b-256 ddb773c6d54de1119b2ea512a8ae3fb0f33b71f5ad85d76ecfe3eaaaca9e9001

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page