Skip to main content

Pallas is a scalable trace format for HPC applications.

Project description

Pallas

BSD-3 License Dev 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
mkdir -p pallas/build && cd pallas/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. You need to enable building it with -DENABLE_PYTHON=ON

Its requirements are the following:

  • Python >=3.11
  • Numpy
  • pybind11

You can then read 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.17.0.tar.gz (1.7 MB view details)

Uploaded Source

Built Distributions

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

pallas_trace-0.17.0-cp314-cp314-manylinux_2_39_x86_64.whl (754.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.39+ x86-64

pallas_trace-0.17.0-cp313-cp313-manylinux_2_39_x86_64.whl (753.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

File details

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

File metadata

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

File hashes

Hashes for pallas_trace-0.17.0.tar.gz
Algorithm Hash digest
SHA256 47bf538136555c56c921b4a26ebe0f11799ef9566c317c450ec88e2c594997c0
MD5 345d3040937f7691f97372de7b5b8cce
BLAKE2b-256 0d91a633f06d88bb6de73ebeab18738dcea8e986076e803239e986b597c98c6b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pallas_trace-0.17.0-cp314-cp314-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 b85765ffe9b8505b3dccc11a97a3cead5ccbda1b912db758306255eb43fcbf2d
MD5 31f3569cfb96661120dc324b2fec870e
BLAKE2b-256 d2a183e211abed2dd54f86ba0a46e3790aa9e7f34948f5f7bc12a6f078c5ba27

See more details on using hashes here.

File details

Details for the file pallas_trace-0.17.0-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for pallas_trace-0.17.0-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 954b3b644358525d114cabf63e55d27b5a316a5a566918a4fab540b8837eb3ba
MD5 be7edb9dd2a569555fbe19d1ea74e747
BLAKE2b-256 3da6452fe48e679848d90822ed2ba328d8e4cbdc6864b64cc6f3f5b0c846afe6

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