Repository navigation
Releases: grc-iit/wisio
Release list
v0.2.2
WisIO 0.2.2 modernizes project metadata and packaging workflows, introducing PyPI Trusted Publishing and peer-reviewed paper citation links.
Highlights
PyPI Trusted Publishing & Modernized Project URLs
- PyPI Trusted Publishing (OIDC): Automated package deployment via GitHub Actions OIDC (
pypienvironment), eliminating static API tokens and enabling the Verified by PyPI badge and live GitHub Statistics on PyPI (#19). - Standardized URL Labels: Upgraded project URLs in
pyproject.tomlwith standard title-cased labels (Homepage,Documentation,Repository,Issues,Changelog) matching PyPI icon conventions (#19).
Paper Citation & Documentation
- Paper Section in README: Added prominent citation details for the peer-reviewed ACM ICS'25 paper (WisIO: Automated I/O Bottleneck Detection with Multi-Perspective Views for HPC Workflows) with direct DOI link (#20).
- PyPI-Safe Links: Replaced relative file links in
README.mdwith absolute GitHub URLs to prevent 404s when browsing on PyPI (#20).
v0.2.1
WisIO 0.2.1 is a patch release fixing CI/CD build issues, updating subproject URLs, and improving documentation.
CI/CD & Build Fixes
- Arrow APT Pin: Bumped the Apache Arrow APT package pin to
25.0.1-1in CI and CD workflows, restoring package installation on Ubuntu runners (#17). - Subproject wrap URL: Updated
cpp-loggerwrap URL to canonicalhttps://github.com/llnl-asr/cpp-logger.git(and updated relatedioppreferences tollnl-asr), resolving 301 redirect credential issues (#17).
Documentation & Web App
- Development Environment: Documented Dev Container (
.devcontainer.json/Dockerfile) and Python virtual environment setup inCONTRIBUTING.md(#16). - Coding Standards: Updated Ruff line length in
CONTRIBUTING.mdto 119 characters to matchpyproject.toml(#16). - Installation Notes: Clarified that the
darshanextra is a no-op on Python 3.13, and corrected pip extras (dftracerrather thanrecorder) inREADME.md(#16). - Console Output: Documented saved artifact files (
result.html,result.txt,result.svg) in the Hydra run directory (#16). - WisIO Web App: Added full documentation for the Streamlit web application (
streamlit_app.py,pip install wisio[web], 20 MB upload limits) and link to the live deployment (#16).
v0.2.0
WisIO 0.2.0 is a modernization release. Every Python version 0.1.1 supported
had reached end of life, so the package could not be installed on a current
interpreter at all. This release moves the floor to 3.10, adds 3.13, makes the
analysis several times faster, and ships a web app.
Breaking changes
requires-pythonmoves from>=3.8,<3.11to>=3.10, and 3.13 joins the
supported set. CI covers 3.10 through 3.13.- New required dependency:
betterframe[dask]>=0.3.0, which supplies the
engine adapter behind the pandas view path below. - DFTracer Parquet output changed schema. The
hash,fhashandhhash
columns are nowstringrather thanInt64, because current DFTracer writes
hex digests that overflow a signed 64-bit integer. Anything reading WisIO's
Parquet output directly will see the difference. - Dependency floors raised: dask
~=2023.4to>=2024.1, numpy unpinned
from==1.24.3. pandas stays below 3.0 deliberately -- copy-on-write and the
default string dtype are a migration of their own. - The DFTracer reader is now
dftracer-utils, replacing the zindex-based
reader. - The
[darshan]extra is 3.10-3.12 only. pydarshan publishes CPython
wheels only to cp312; on 3.13 the extra resolves to nothing rather than
installing a build with nolibdarshan-util.sothat fails at import. WisIO
itself supports 3.13 -- DFTracer and Recorder analysis work there and are
covered by CI.
Performance
Views are small -- on the DFTracer fixture the largest is 78 rows -- but each
one was paying for a Dask graph to be built and shipped. The cost tracked view
count, not trace size: 60x the data made no difference. Views that are provably
small are now computed in pandas, and the view loop, scoring and rule engine run
on whichever frame they are handed.
| fixture | wall clock | perspectives | attach reasons |
|---|---|---|---|
| dftracer-posix | 68 → 19s | 9.91 → 0.85s | 10.15 → 3.30s |
| dftracer-dlio | 59 → 23s | 9.93 → 0.99s | 10.05 → 3.63s |
| recorder-parquet | 54 → 21s | 8.76 → 0.96s | 9.49 → 3.70s |
Characterization drops from ~270s to ~97s. Both engines are held to the same
result by a test that runs the whole analyzer twice and compares the Parquet
output, dtypes exactly and values to a tolerance well inside floating-point
summation order.
WisIO Web
A Streamlit app for uploading traces and reading the findings, sized to fit
Streamlit Community Cloud's resource limits. Findings are grouped by view in an
accordion, led by severity, capped at the top 20 per view, and restricted to
root and logical views so a real trace does not produce hundreds of entries.
Uploads are capped at 20 MB; the worker mode is chosen from the upload size.
Analysis output
Each bottleneck now says why it is severe, in both the console and the web
app: how much of the I/O time it takes relative to its share of operations.
Fixes
- The cluster and client are shut down when a run finishes. They were left
running, which a one-shot CLI run never notices because process exit takes the
workers with it. Any process analyzing more than one trace leaked a full
cluster per analysis, and the next analysis started its own on top. - Dask end-to-end path repaired for modern dask-expr. Meta derivation runs
predicates against synthetic frames,delayed()cannot unpack dask-expr
collections, andmap_partitionsdoes not substitute collection kwargs --
each broke a different part of the pipeline. - Expensive work moved out of the dask-expr query optimizer.
repartition(partition_size=)measured memory while the graph was still being
built, which deadlocked on 3.10 and 3.11 and merely cost several times too
much on 3.12. - An optional reader that fails on import no longer takes down the package.
The guard caughtModuleNotFoundErroronly, but pydarshan raises
RuntimeErrorand a broken zindex_py wheel raisedImportError. import wisioworks off the main thread.dask_jobqueuecalls
signal.signalat import, which fails on a worker thread.- Builds against current Arrow headers, which need C++20 for
std::span,
std::popcountandstd::bit_width. - DXT
proc_nameuses the real hostname.
v0.1.1
v0.1.0
Full Changelog: https://github.com/grc-iit/wisio/commits/v0.1.0