Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

DFTracer logo

DFTracer

Version: $(cat PACKAGE_VERSION 2>/dev/null || echo "2.0.2")

Build and Test Coverage Status Documentation Status PyPI - Version PyPI - Wheel PyPI - Python Version PyPI - License

Overview

DFTracer is a tracing tool designed to capture both application-code and I/O-call level events from workflows. It provides a unified tracing interface, optimized trace format, and compression mechanism to enable efficient distributed analysis for large-scale AI-driven workloads.

Prerequisites

Requirements for DFTracer

  1. Python>=3.7
  2. pybind11

Requirements for DFAnalyzer

  1. bokeh>=2.4.2
  2. dask>=2023.5.0
  3. distributed
  4. matplotlib>=3.7.3
  5. numpy>=1.24.3
  6. pandas>=2.0.3
  7. pyarrow>=12.0.1
  8. pybind11
  9. python-intervals>=1.10.0.post1
  10. rich>=13.6.0
  11. seaborn>=0.13.2
  12. zindex_py

Installation

Users can easily install DFTracer using pip, the standard tool for installing Python packages. This method works for both native Python and Conda environments.

From PyPI

pip install dftracer
pip install dftracer[dfanalyzer]
# if you want to use old version of DFAnalyzer
# pip install dftracer[dfanalyzer_old]

This installs a prebuilt wheel that traces POSIX and STDIO I/O. It needs nothing from the host, but it cannot trace MPI, HDF5 or HIP — see With MPI, HDF5 or HIP support.

Development builds are published from every merge into develop, versioned <last release>.postN.dev0, as both wheels and an sdist:

pip install --pre dftracer          # newest prerelease
pip install dftracer==2.1.0.post5.dev0   # a specific one

From Github

DFTRACER_VERSION=develop
pip install git+https://github.com/llnl-asr/dftracer.git@${DFTRACER_VERSION}
pip install git+https://github.com/llnl-asr/dftracer.git@${DFTRACER_VERSION}#egg=dftracer[dfanalyzer]
# if you want to use old version of DFAnalyzer
# pip install git+https://github.com/llnl-asr/dftracer.git@${DFTRACER_VERSION}#egg=dftracer[dfanalyzer_old]

From Source

git clone https://github.com/llnl-asr/dftracer.git
cd dftracer
# You can skip this for installing the dev branch.
# for latest stable version use master branch.
git checkout tags/<Release> -b <Release>
pip install .

With MPI, HDF5 or HIP support

These are compile-time options, so they need a build against the libraries you actually run with. The prebuilt wheel cannot carry them: DFTracer intercepts calls into the MPI/HDF5 library the application loads, and the interception is generated for a specific implementation and version, so a wheel built elsewhere would trace nothing. Build from the source distribution instead, the way mpi4py does:

# MPI and HDF5 must be discoverable by CMake (module load, spack load, ...)
DFTRACER_ENABLE_MPI=ON DFTRACER_ENABLE_HDF5=ON \
  pip install --no-binary dftracer dftracer

--no-binary dftracer is what makes pip build from source rather than take the wheel. Only dftracer itself is built from source; its build tools still come as wheels. The same works for a checkout (pip install .) or a release tarball.

The options below are read from the environment by setup.py and passed to CMake. All default to OFF unless stated:

Variable Effect
DFTRACER_ENABLE_MPI MPI rank in traces and MPI/MPI-IO interception
DFTRACER_ENABLE_HDF5 HDF5 interception
DFTRACER_ENABLE_HIP_TRACING AMD GPU tracing, needs ROCm/rocprofiler-sdk
DFTRACER_ENABLE_FTRACING function tracing via -finstrument-functions
DFTRACER_ENABLE_DYNAMIC_DETECTION detect HWLOC, MPI and HIP at run time instead of link time
DFTRACER_DISABLE_HWLOC HWLOC support, ON (disabled) by default
DFTRACER_MPI_IMPL override MPI implementation detection
DFTRACER_BUILD_TYPE Release (default) or Debug

Requirements for a source build: a C++17 compiler whose standard library provides std::filesystem (GCC 9 or newer; note that a system libstdc++ older than the compiler on the PATH can shadow it and fail the link), CMake 3.24 or newer, and the development packages of whatever you enable.

The C/C++ dependencies (cpp-logger, GOTCHA, brahma, yaml-cpp, libuv) are cloned and built automatically, so a source install needs access to their GitHub repositories.

To confirm the build traces what you enabled, run your application with DFTRACER_ENABLE=1 and check that the trace contains the matching categories (MPI, MPIIO, HDF5) and not only POSIX.

For detailed build instructions see docs/build.rst in this repository, or the rendered documentation when it is reachable.

Usage

from dftracer.python import dftracer, dft_fn
log_inst = dftracer.initialize_log(logfile=None, data_dir=None, process_id=-1)
dft_fn = dft_fn("COMPUTE")

# Example of using function decorators
@dft_fn.log
def log_events(index):
    sleep(1)

# Example of function spawning and implicit I/O calls
def posix_calls(val):
    index, is_spawn = val
    path = f"{cwd}/data/demofile{index}.txt"
    f = open(path, "w+")
    f.write("Now the file has more content!")
    f.close()
    if is_spawn:
        print(f"Calling spawn on {index} with pid {os.getpid()}")
        log_inst.finalize() # This need to be called to correctly finalize DFTracer.
    else:
        print(f"Not calling spawn on {index} with pid {os.getpid()}")

# NPZ calls internally calls POSIX calls.
def npz_calls(index):
    path = f"{cwd}/data/demofile{index}.npz"
    if os.path.exists(path):
        os.remove(path)
    records = np.random.randint(255, size=(8, 8, 1024), dtype=np.uint8)
    record_labels = [0] * 1024
    np.savez(path, x=records, y=record_labels)

def main():
    log_events(0)
    npz_calls(1)
    with get_context('spawn').Pool(1, initializer=init) as pool:
        pool.map(posix_calls, ((2, True),))
    log_inst.finalize()

if __name__ == "__main__":
    main()

For this example, as the dftracer.initialize_log do not pass logfile or data_dir, we need to set DFTRACER_LOG_FILE and DFTRACER_DATA_DIR. By default the DFTracer mode is set to FUNCTION. Example of running this configurations are:

# The process id, app_name and .pfw will be appended by DFTracer for each app and process.
# The name of the final log file will be ~/log_file-<APP_NAME>-<PID>.pfw
DFTRACER_LOG_FILE=~/log_file
# Colon separated paths to include in the tracing
DFTRACER_DATA_DIR=/dev/shm/:/p/gpfs1/$USER/dataset:$PWD/data
# Enable DFTracer
DFTRACER_ENABLE=1

For more examples, click here.

Documentation

Citation and Reference

The original SC'24 paper describes the design and implementation of the DFTracer code. Please cite this paper and the code if you use DFTracer in your research.

@inproceedings{devarajan_dftracer_2024,
    address = {Atlanta, GA},
    title = {{DFTracer}: {An} {Analysis}-{Friendly} {Data} {Flow} {Tracer} for {AI}-{Driven} {Workflows}},
    shorttitle = {{DFTracer}},
    urldate = {2024-07-31},
    booktitle = {{SC24}: {International} {Conference} for {High} {Performance} {Computing}, {Networking}, {Storage} and {Analysis}},
    publisher = {IEEE},
    author = {Devarajan, Hariharan and Pottier, Loic and Velusamy, Kaushik and Zheng, Huihuo and Yildirim, Izzet and Kogiou, Olga and Yu, Weikuan and Kougkas, Anthony and Sun, Xian-He and Yeom, Jae Seung and Mohror, Kathryn},
    month = nov,
    year = {2024},
}

@misc{devarajan_dftracer_code_2024,
    type = {Github},
    title = {Github {DFTracer}},
    shorttitle = {{DFTracer}},
    url = {https://github.com/llnl-asr/dftracer.git},
    urldate = {2024-07-31},
    journal = {DFTracer: A multi-level dataflow tracer for capture I/O calls from worklows.},
    author = {Devarajan, Hariharan and Pottier, Loic and Velusamy, Kaushik and Zheng, Huihuo and Yildirim, Izzet and Kogiou, Olga and Yu, Weikuan and Kougkas, Anthony and Sun, Xian-He and Yeom, Jae Seung and Mohror, Kathryn},
    month = jun,
    year = {2024},
}

Acknowledgments

This work was performed under the auspices of the U.S. Department of Energy by Lawrence Livermore National Laboratory under Contract DE-AC52-07NA27344; and under the auspices of the National Cancer Institute (NCI) by Frederick National Laboratory for Cancer Research (FNLCR) under Contract 75N91019D00024. This research used resources of the Argonne Leadership Computing Facility, a U.S. Department of Energy (DOE) Office of Science user facility at Argonne National Laboratory and is based on research supported by the U.S. DOE Office of Science-Advanced Scientific Computing Research Program, under Contract No. DE-AC02-06CH11357. Office of Advanced Scientific Computing Research under the DOE Early Career Research Program. Also, This material is based upon work partially supported by LLNL LDRD 23-ERD-045 and 24-SI-005. LLNL-CONF-857447.

License

DFTracer is distributed under the terms of the MIT license. All new contributions must be made under this license.

See LICENSE and NOTICE for details.

SPDX-License-Identifier: MIT

LLNL-CODE-2024514 — Applied Storage Research (ASR)

Metadata

Release files for dftracer 2.2.0.post15.dev0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dftracer 2.2.0.post15.dev0
File Size Uploaded Provenance Actions
dftracer-2.2.0.post15.dev0.tar.gz 13.7 MB Without provenance Details for dftracer-2.2.0.post15.dev0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for dftracer 2.2.0.post15.dev0
File Actions
dftracer-2.2.0.post15.dev0-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details for dftracer-2.2.0.post15.dev0-cp314-cp314-manylinux_2_28_x86_64.whl
dftracer-2.2.0.post15.dev0-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details for dftracer-2.2.0.post15.dev0-cp313-cp313-manylinux_2_28_x86_64.whl
dftracer-2.2.0.post15.dev0-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details for dftracer-2.2.0.post15.dev0-cp312-cp312-manylinux_2_28_x86_64.whl
dftracer-2.2.0.post15.dev0-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details for dftracer-2.2.0.post15.dev0-cp311-cp311-manylinux_2_28_x86_64.whl
dftracer-2.2.0.post15.dev0-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details for dftracer-2.2.0.post15.dev0-cp310-cp310-manylinux_2_28_x86_64.whl
dftracer-2.2.0.post15.dev0-cp39-cp39-manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64 Details for dftracer-2.2.0.post15.dev0-cp39-cp39-manylinux_2_28_x86_64.whl

Total release size: 116.4 MB

Release files / dftracer-2.2.0.post15.dev0.tar.gz

Download URL dftracer-2.2.0.post15.dev0.tar.gz
Size 13.7 MB
Tags Source
SHA-256 checksum
How to use checksums
a6de44cb9d86e5f7e6f3eb4919415fc6ea6f9e6c8baa5cf8ae6e7986f4d8c4fd
BLAKE2b-256 checksum
How to use checksums
ab6aa83e1305ba65f5c75cb9806ff618df452df4476b0e22a060506cd043d4b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / dftracer-2.2.0.post15.dev0-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL dftracer-2.2.0.post15.dev0-cp314-cp314-manylinux_2_28_x86_64.whl
Size 17.1 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
a109b8e54fcf630245e0b98e1b40687299b7442e3aceede7ce791b3579356350
BLAKE2b-256 checksum
How to use checksums
5f3efa877d310dbf02efc0ca62eed6b4825f6013c13ecb0fae37a78bda0c2c1f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / dftracer-2.2.0.post15.dev0-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL dftracer-2.2.0.post15.dev0-cp313-cp313-manylinux_2_28_x86_64.whl
Size 17.1 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
14b171449eae7cfc4b3b7fcd24006c5a20e988961e25a1714225837a0fe27ed2
BLAKE2b-256 checksum
How to use checksums
b6fd01664dc2a48d839efe5df2dbd5560b0107eb408f71bc5364dace013951e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / dftracer-2.2.0.post15.dev0-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL dftracer-2.2.0.post15.dev0-cp312-cp312-manylinux_2_28_x86_64.whl
Size 17.1 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
483b6d1484284f932aa825452fb53c6d666b69d63dc8074138884191a7ecc529
BLAKE2b-256 checksum
How to use checksums
dc95bf9a1a86c95f2f8989a5174752598b45483e43c960d76e16684f615d97d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / dftracer-2.2.0.post15.dev0-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL dftracer-2.2.0.post15.dev0-cp311-cp311-manylinux_2_28_x86_64.whl
Size 17.1 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
25f7bd2096d9eea483a60c837fa9d113286d0d91a4c5981111b139f58101c686
BLAKE2b-256 checksum
How to use checksums
bfdb1822b5a263a64700d5c583d96990c287b3d4f2e00f698b77160eb2bebe17
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / dftracer-2.2.0.post15.dev0-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL dftracer-2.2.0.post15.dev0-cp310-cp310-manylinux_2_28_x86_64.whl
Size 17.1 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7f22fae1e7b63efc02302d83fd5a43c7901c6807dfe0401eec88f25582423906
BLAKE2b-256 checksum
How to use checksums
28a4ff031379b575f8d5b1dd9a5776e725e178c3ac5d3b1830aae5d4daa87daf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / dftracer-2.2.0.post15.dev0-cp39-cp39-manylinux_2_28_x86_64.whl

Download URL dftracer-2.2.0.post15.dev0-cp39-cp39-manylinux_2_28_x86_64.whl
Size 17.1 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
73eebebb2c14a7336e5bc4ffa3b1408fb7e0ddd66e097c1a067389f5219a8cfc
BLAKE2b-256 checksum
How to use checksums
a45424ea134b14a46f2ad703f13099f3910c80301dbc7b1242e0fec2a49de2e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for dftracer 2.2.0.post15.dev0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page