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, Recorder) 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]

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] \
  -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) ...
│                                                                                                   │
╰───────────────────────────────────────────────────────────────────────────────────────────────────╯

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.

Download files

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

Source Distribution

wisio-0.2.0.tar.gz (101.0 kB view details)

Uploaded Source

Built Distributions

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

wisio-0.2.0-cp313-cp313-manylinux_2_39_x86_64.whl (34.9 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

wisio-0.2.0-cp313-cp313-manylinux_2_35_x86_64.whl (33.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.35+ x86-64

wisio-0.2.0-cp312-cp312-manylinux_2_39_x86_64.whl (34.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

wisio-0.2.0-cp312-cp312-manylinux_2_35_x86_64.whl (33.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

wisio-0.2.0-cp311-cp311-manylinux_2_39_x86_64.whl (34.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

wisio-0.2.0-cp311-cp311-manylinux_2_35_x86_64.whl (33.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ x86-64

wisio-0.2.0-cp310-cp310-manylinux_2_39_x86_64.whl (34.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ x86-64

wisio-0.2.0-cp310-cp310-manylinux_2_35_x86_64.whl (33.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

File details

Details for the file wisio-0.2.0.tar.gz.

File metadata

  • Download URL: wisio-0.2.0.tar.gz
  • Upload date:
  • Size: 101.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for wisio-0.2.0.tar.gz
Algorithm Hash digest
SHA256 83c6895f45c17b6d00296107082ec0ad4177f3f228dc7065fe001514d9f00416
MD5 a7651c66c28a104904070a553ed6361c
BLAKE2b-256 f706ff6b3f964f7192d589803d50fa810b76ef0ca1503930337c4d373698b32f

See more details on using hashes here.

File details

Details for the file wisio-0.2.0-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for wisio-0.2.0-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 7e22f84a03224d03a1d3303a48149e6640dbca388824566cbd004aaecf00ce6e
MD5 7250412e980506b08a79acaa516147fc
BLAKE2b-256 0c19bed95358f205268cfae8182530881ad8683ded928616e5c20b6e31a1b52f

See more details on using hashes here.

File details

Details for the file wisio-0.2.0-cp313-cp313-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for wisio-0.2.0-cp313-cp313-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 81e7435902cbb3d0d62f01575c56003510e36cae8f8186eefade493d0f30f1a6
MD5 ef14ca4d00483783a2ca01e9098ef1ee
BLAKE2b-256 663f3af76eb48417ac727046462c7b9ee3240970b646b4e353b2ba2406527212

See more details on using hashes here.

File details

Details for the file wisio-0.2.0-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for wisio-0.2.0-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 1efa77ebe0b478f4dc07522227fb178b1c8982ae5be9aa5d6b53fe0926a42195
MD5 4640081147e2af1b5de590752c7e84e1
BLAKE2b-256 e47af618c9b5ae6438c78c2f6ad01f2b84575a9f8e04489087cc55282e0558ff

See more details on using hashes here.

File details

Details for the file wisio-0.2.0-cp312-cp312-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for wisio-0.2.0-cp312-cp312-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 6f2f8546cfda5a0212067f74baeeeef13a7b9fdbf7e9df9368bb98de2860fce3
MD5 2041d095aba7af04040b27f530e9c9fa
BLAKE2b-256 33f618bb97cd5b7669d93e674a590558f690057dea1759a95ce689b1f373f793

See more details on using hashes here.

File details

Details for the file wisio-0.2.0-cp311-cp311-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for wisio-0.2.0-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f688d61f616fe80ead20011e0a92fbff9bfa9cb7ffb5fac39c90dd810eb4b476
MD5 0d31e7b7b59b9141b9b7306819956bf7
BLAKE2b-256 9f07aab37838c835b38d72f1d64472cff662f8749b009fa3a1fd5eee219d53cb

See more details on using hashes here.

File details

Details for the file wisio-0.2.0-cp311-cp311-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for wisio-0.2.0-cp311-cp311-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 0b2472e9ac1baf1c4809943345fb122045cb811aa3280d3c81186ac1d5eca2ca
MD5 08b04294a512253c793255da1a24c2c9
BLAKE2b-256 0ae87cde48afd807b4a6b26921ecaab05da633a094f1a67ac3087637ec633720

See more details on using hashes here.

File details

Details for the file wisio-0.2.0-cp310-cp310-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for wisio-0.2.0-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 1a0ef149a2a6032cc7e3f4098849a89f90cf004c75f8b05d21059459af9a3464
MD5 2e4b7d0540883c192d850b5ef6395df1
BLAKE2b-256 dcc68d33e6b196820f4f12bea7c0a32aba906374308200b7eaa950025ce868ca

See more details on using hashes here.

File details

Details for the file wisio-0.2.0-cp310-cp310-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for wisio-0.2.0-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 f80acb057f77033f4db13165de691dda2c7952fd1cf0a2f6d66085a2e8c9cec2
MD5 1bfe65341bf90517f82db1ef2ece4bb9
BLAKE2b-256 547983161a5b7f15803b403a6256a64262f26fe59456b5659d8a6886363e09b3

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.0 This release

9 files

0.1.1

7 files

0.1.0

7 files

0.0.6

11 files

0.0.5

11 files

0.0.4

11 files

0.0.2

11 files

0.0.1

1 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