WisIO: Workflow I/O Analysis Tool
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)
| File | Size | Uploaded | |
|---|---|---|---|
| wisio-0.2.1.tar.gz | 102.0 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| 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
|