Skip to main content

WisIO: Workflow I/O Analysis Tool

Build and Test PyPI - Version PyPI - Wheel PyPI - Python Version

Overview

WisIO (Wisdom from I/O Behavior) is an open-source tool designed to efficiently analyze multi-terabyte-scale workflow performance data over distributed resources. It provides a comprehensive analysis of I/O performance, identifying bottlenecks and potential root causes through advanced rule-based analysis. With its extensible design, WisIO can be tailored to various use cases, providing actionable insights for improving application performance and resource utilization. By leveraging parallel computing and multi-perspective views, WisIO enables rapid detection of complex I/O issues, making it an invaluable asset for HPC professionals and researchers.

Installation

To install WisIO through pip (recommended for most users):

# Ensure runtime dependencies for optional features (e.g., Darshan, DFTracer) are installed.
# This might involve using your system's package manager or a tool like Spack.
# Example using Spack to prepare the environment:
# spack -e tools install
pip install wisio[darshan,dftracer]

Note: On Python 3.13 the darshan extra is a no-op (pydarshan does not yet ship a CPython 3.13 wheel). The core WisIO package and dftracer/web extras work on 3.13+.

To install WisIO from source (for developers or custom builds):

# 1. Install system dependencies:
#    Refer to the "Install system dependencies" step in .github/workflows/ci.yml
#    (e.g., build-essential, cmake, libarrow-dev, libhdf5-dev, etc.).
#    Alternatively, tools like Spack can help manage these:
#    # spack -e tools install

# 2. Install Python build dependencies:
python -m pip install --upgrade pip meson-python setuptools wheel

# 3. Install WisIO from the root of this repository:
#    The following command includes optional C++ components (tests and tools).
#    The --prefix argument is optional and specifies the installation location.
pip install .[darshan,dftracer,web] \
  -Csetup-args="--prefix=$HOME/.local" \
  -Csetup-args="-Denable_tests=true" \
  -Csetup-args="-Denable_tools=true"

# (Optional) Install dependencies for running tests if you plan to contribute or run local tests:
# pip install -r tests/requirements.txt

Usage

Here's an example of how to run WisIO with the recorder analyzer using sample data included in the repository:

# Before running, ensure the sample data is extracted.
# For example, to extract the 'recorder-parquet' sample used below:
# mkdir -p tests/data/extracted 
# tar -xzf tests/data/recorder-parquet.tar.gz -C tests/data/extracted
wisio +analyzer=recorder percentile=0.99 trace_path=tests/data/extracted/recorder-parquet

This command will analyze the traces and print a summary of I/O characteristics and detected bottlenecks. Below is a sample of the "I/O Characteristics" output:

╭───────────────────────────────────── CM1 I/O Characteristics ─────────────────────────────────────╮
│                                                                                                   │
│  Runtime          667.81 seconds                                                                  │
│  I/O Time         4.12 seconds                                                                    │
│                   ├── Read - 0.00 seconds (0.05%)                                                 │
│                   ├── Write - 0.58 seconds (14.08%)                                               │
│                   └── Metadata - 3.53 seconds (85.89%)                                            │
│  I/O Operations   27,463 ops                                                                      │
│                   ├── Read - 1,282 ops (4.67%)                                                    │
│                   ├── Write - 2,303 ops (8.39%)                                                   │
│                   └── Metadata - 23,878 ops (86.95%)                                              │
│  I/O Size         21.18 GiB                                                                       │
│                   ├── Read - 20.03 GiB (94.59%)                                                   │
│                   └── Write - 1.15 GiB (5.41%)                                                    │
│  Read Requests    4 MiB-16 MiB - 1,282 ops                                                        │
│                   └── 4-16 MiB - 1,282 ops (100.00%)                                              │
│  Write Requests   4 kiB-16 MiB - 2,303 ops                                                        │
│                   ├── <4 kiB - 397 ops (17.24%)                                                   │
│                   ├── 4-16 kiB - 1,092 ops (47.42%)                                               │
│                   ├── 16-64 kiB - 722 ops (31.35%)                                                │
│                   ├── 64-256 kiB - 1 ops (0.04%)                                                  │
│                   └── 4-16 MiB - 91 ops (3.95%)                                                   │
│  Nodes            1 node                                                                          │
│  Apps             1 app                                                                           │
│  Processes/Ranks  1,280 processes                                                                 │
│  Files            775 files                                                                       │
│                   ├── Shared: 38 files (4.90%)                                                    │
│                   └── FPP: 737 files (95.10%)                                                     │
│  Time Periods     393 time periods (Time Granularity: 10,000,000.0)                               │
│  Access Pattern   Sequential: 3,585 ops (100.00%) - Random: 0 ops (0.00%)                         │
│                                                                                                   │
╰─ R: Read - W: Write - M: Metadata  ───────────────────────────────────────────────────────────────╯

WisIO also identifies potential I/O bottlenecks. Here is a snippet of the "I/O Bottlenecks" section from the same run:

╭────────────────── I/O Operations per Second: 25 I/O Bottlenecks with 56 Reasons ──────────────────╮
│                                                                                                   │
│  Time View (4 bottlenecks with 7 reasons)                                                         │
│  ├── [CR1] 32 processes access 2 files within 1 time period (5) across 32 I/O operations and      │
│  │   have an I/O time of 2.19 seconds which is 53.26% of overall I/O time of the workload.        │
│  │   └── [Excessive metadata access] Overall 100.00% (2.19 seconds) of I/O time is spent on       │
│  │       metadata access, specifically 100.00% (2.19 seconds) on the 'open' operation.            │
│  ├── [CR2] 1 process accesses 6 files within 1 time period (634) across 40 I/O operations and     │
│  │   has an I/O time of 0.33 seconds which is 7.97% of overall I/O time of the workload.          │
│  │   ├── [Excessive metadata access] Overall 99.35% (0.33 seconds) of I/O time is spent on        │
│  │   │   metadata access, specifically 99.13% (0.33 seconds) on the 'open' operation.             │
# ... (further bottleneck details omitted for brevity) ...
│                                                                                                   │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯

Output artifacts: The console output also saves result.html, result.txt, and result.svg in the Hydra run directory for sharing and archiving.

WisIO Web App

WisIO includes a browser-based interface ("WisIO Web") for interactive analysis:

# Install the web extra (Streamlit + Altair)
pip install wisio[web]

# Launch the app
streamlit run streamlit_app.py

Features:

  • Drag-and-drop trace upload (max 20 MB per upload, auto-detects Darshan/DFTracer/Recorder format)
  • Interactive bottleneck exploration with severity-badged findings (Critical → Trivial)
  • Altair visualizations of I/O characteristics and operation distributions
  • Runs on Streamlit Community Cloud — try the live instance; the repo includes deployment-ready configuration

The web app uses the same analysis engine and rule set as the CLI, so results are consistent.

Further Information

For more details, to report issues, or to contribute to WisIO, please refer to the following resources:

  • Official WisIO Documentation: For detailed usage, configuration options, and information about analyzers.
  • Issue Tracker: To report bugs or suggest new features.
  • Contributing Guidelines: For information on how to contribute to the project, including setting up a development environment and coding standards.
  • Citation File: If you use WisIO in your research, please cite it using the information in this file.

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. This material is based upon work supported by the U.S. Department of Energy, Office of Science, Office of Advanced Scientific Computing Research under the DOE Early Career Research Program (LLNL-CONF-862440). Also, this research is supported in part by the National Science Foundation (NSF) under Grants OAC-2104013, OAC-2313154, and OAC-2411318.

Metadata

Release files for wisio 0.2.1

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

Source distribution (sdist)

Source distribution for wisio 0.2.1
File Size Uploaded
wisio-0.2.1.tar.gz 102.0 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for wisio 0.2.1
File
wisio-0.2.1-cp313-cp313-manylinux_2_39_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.39+ x86-64 Details
wisio-0.2.1-cp313-cp313-manylinux_2_35_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.35+ x86-64 Details
wisio-0.2.1-cp312-cp312-manylinux_2_39_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.39+ x86-64 Details
wisio-0.2.1-cp312-cp312-manylinux_2_35_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.35+ x86-64 Details
wisio-0.2.1-cp311-cp311-manylinux_2_39_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.39+ x86-64 Details
wisio-0.2.1-cp311-cp311-manylinux_2_35_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.35+ x86-64 Details
wisio-0.2.1-cp310-cp310-manylinux_2_39_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.39+ x86-64 Details
wisio-0.2.1-cp310-cp310-manylinux_2_35_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.35+ x86-64 Details

Total release size: 274.3 MB

Release files / wisio-0.2.1.tar.gz

Download URL wisio-0.2.1.tar.gz
Size 102.0 kB
Tags Source
SHA-256 checksum
How to use checksums
dd0d511b6540a6d9eff46566227f819c4be4d9fcd6bf1f042da5d01eeeaff32f
BLAKE2b-256 checksum
How to use checksums
18e1335d9a26d7f1b0d1428f531cf5c194ef4fafd3cda4e495f6e7e7e7e31eb3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / wisio-0.2.1-cp313-cp313-manylinux_2_39_x86_64.whl

Download URL wisio-0.2.1-cp313-cp313-manylinux_2_39_x86_64.whl
Size 34.9 MB
Tags CPython 3.13 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
654ff9df62c9112d606a8ae4d71b7ac322b736ec95c49e3e3ad7745e5b15ceda
BLAKE2b-256 checksum
How to use checksums
0023ec6f6f0e96e6bf5a5c839332e0c28c2afae0ca7181c43123858f4789ae8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / wisio-0.2.1-cp313-cp313-manylinux_2_35_x86_64.whl

Download URL wisio-0.2.1-cp313-cp313-manylinux_2_35_x86_64.whl
Size 33.7 MB
Tags CPython 3.13 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
2d002c2bcebed308c1223828e204134536ed6eee20c123de77307fdb48c00e02
BLAKE2b-256 checksum
How to use checksums
c83afc7c92ce101b356aa40ca02a6529e9e2d1e48e3f4adec05dce7f2cad6e7d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / wisio-0.2.1-cp312-cp312-manylinux_2_39_x86_64.whl

Download URL wisio-0.2.1-cp312-cp312-manylinux_2_39_x86_64.whl
Size 34.9 MB
Tags CPython 3.12 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
ac5bcc7d5b90ddc38df13b92c2a1b42ce9669919f8b78a0def273ce4b920715f
BLAKE2b-256 checksum
How to use checksums
cc011e46139d436c06843442955b9c448b2bddc25542d924dfd309099321da4e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / wisio-0.2.1-cp312-cp312-manylinux_2_35_x86_64.whl

Download URL wisio-0.2.1-cp312-cp312-manylinux_2_35_x86_64.whl
Size 33.7 MB
Tags CPython 3.12 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
f82f6f1e6f86cff0d6c22884daea0b4e0d632bc12ceb86112289b4a6764015c0
BLAKE2b-256 checksum
How to use checksums
333b40f7b4399a6f1d326fde93065d1780ee5c989450b94ae2cff1fe2c665baf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / wisio-0.2.1-cp311-cp311-manylinux_2_39_x86_64.whl

Download URL wisio-0.2.1-cp311-cp311-manylinux_2_39_x86_64.whl
Size 34.9 MB
Tags CPython 3.11 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
1ebddc4cba1b54bcf53cf8dfceaa21aa211dc7d4dd3e26ac365136db0d751c6e
BLAKE2b-256 checksum
How to use checksums
a3bb709d38ad6c57e5b9ab3ca8e95f6cfd52a7ab37feebaf50da505420a12752
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / wisio-0.2.1-cp311-cp311-manylinux_2_35_x86_64.whl

Download URL wisio-0.2.1-cp311-cp311-manylinux_2_35_x86_64.whl
Size 33.7 MB
Tags CPython 3.11 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
977c49ef4bc10fb3d0da892da84b9acf35f3c8f9be0003bd7f4ea215d7452e0b
BLAKE2b-256 checksum
How to use checksums
30c1817b8fae967286ab6aa0defd68af3408faf542ab9fbb8835633f6bd1c71e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / wisio-0.2.1-cp310-cp310-manylinux_2_39_x86_64.whl

Download URL wisio-0.2.1-cp310-cp310-manylinux_2_39_x86_64.whl
Size 34.9 MB
Tags CPython 3.10 Linux glibc 2.39+ x86-64
SHA-256 checksum
How to use checksums
0cdf94352549657ec9bdb719619954a08ed99ce55b58d117080508fcacd870e1
BLAKE2b-256 checksum
How to use checksums
bedeff321206a2602b82991c6c4f71b9ffd7d408b8edfe00442e371b2c17f928
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / wisio-0.2.1-cp310-cp310-manylinux_2_35_x86_64.whl

Download URL wisio-0.2.1-cp310-cp310-manylinux_2_35_x86_64.whl
Size 33.7 MB
Tags CPython 3.10 Linux glibc 2.35+ x86-64
SHA-256 checksum
How to use checksums
839f20345cee47c3c79e3b4373125a39b6c02de5f656c88d33eafa95c9e1125f
BLAKE2b-256 checksum
How to use checksums
756f71b96be8a22cb19625eb62ad312b5139387db06308da522f81550f95f80d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.2.2

9 release files

This release

0.2.1 This release

9 release files

0.2.0

9 release files

0.1.1

7 release files

0.1.0

7 release files

0.0.6

11 release files

0.0.5

11 release files

0.0.4

11 release files

0.0.2

11 release files

0.0.1

1 release file

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