IOSage: Detecting HPC I/O Bottleneck Patterns to Guide LLM Recommendations
Abstract
HPC applications often leave much of their parallel file system's bandwidth unused, and turning their Darshan logs into concrete I/O fixes still requires a scarce I/O expert. Rule-based tools flag counters against thresholds set by experts, and in tools built on large language models (LLMs), such as ION and IOAgent, the LLM decides which bottlenecks a log contains. We present IOSage, in which a classifier trained on many labeled logs, not the LLM, makes that decision, since a single log gives an LLM no baseline for what is abnormal. The LLM receives the I/O bottleneck patterns the classifier detects, the job's configuration files, per-file Darshan evidence, and for each pattern a card built from benchmark training runs, and writes recommended changes. Applied by hand and measured in repeated paired runs, the changes IOSage names speed up median total wall time 4.38x for an openPMD kernel (4.02x on a second storage tier) and 1.42x for hourly WRF restarts. For 5 of the 6 application scenarios with a helpful change, IOSage with Claude Sonnet 4 names it, including the change for 10-minute WRF restarts (up to 1.93x faster); with GPT-4o and Llama 3.1 as well, the classifier and cards name more helpful changes than the LLM alone. On 78 benchmark test runs without a pattern, the LLM deciding alone proposes changes for 64; with the classifier, for 9. The classifier reaches 0.929 Micro-F1 on 488 labeled benchmark test runs (0.916 as the gate; 0.832 on the 158 from configurations and jobs outside training), above Drishti's rules, WisIO, and IOAgent's pipeline without its literature retrieval. On TraceBench's nine expert-labeled traces from production systems, it has the highest precision of the tools compared (0.82), with 2 false positives against 12 for the keyword-mapped LLM diagnoses shipped with TraceBench and 5 for Drishti, on the five issue labels that match registered patterns.
Figures & tables
| Pattern | Behavior | Inducing configurations | Card change template | When the change does not apply |
|---|---|---|---|---|
| access granularity | many small reads or writes | IOR with 64 B to 16 KiB transfers; DLIO with small records; h5bench with small blocks; HACC-IO with few particles per rank | increase the transfer size to at least 1 MB; aggregate small writes; use collective I/O | the small requests carry a negligible share of the I/O time |
| metadata intensity | metadata time dominates | mdtest with 1,000 to 50,000 creates, cross-node stat, deep trees | reduce the file count; batch metadata operations; use shared files for small data | the files are required outputs, such as per-step files read by other tools |
| parallelism efficiency | unequal I/O across ranks | mpi4py programs in which rank 0 writes 2 to 20 times more | balance I/O across ranks; use collective I/O | one rank owns the data by design, such as configuration or log output |
| access pattern | nonsequential offsets | IOR random offsets on a shared file; DLIO with shuffled files | sort offsets; access sequentially; enable data sieving | the data layout fixes the order, or sieving would read far more than needed |
| interface choice | shared-file I/O without collective MPI-IO | IOR POSIX on a shared file; MPI-IO independent with collective buffering off; h5bench independent data | use collective calls ( MPI_File_write_all ); enable collective buffering | ranks write large disjoint blocks, where independent I/O performs as well |
| file strategy | too many files | IOR file per process with 64 to 256 ranks; mdtest with 100 to 5,000 files per rank; HACC-IO file per process | use shared files with collective MPI-IO, or HDF5 or ADIOS2 [ 19 ] | downstream tools need one file per process |
| Application | Change | Wall time (s) | Speedup | Write | |
| and scenario | without | with | median [3rd, 9th] | step | |
| Faster: interval above 1 | |||||
| openPMD kernel | HDF5 collective | 76.0 | 16.6 | 4.38 [2.41, 5.35] | 4.94 |
| on flash tier | 66.1 | 16.1 | 4.02 [3.68, 4.80] | 5.32 | |
| WaComM++ | no input copy | 59.1 | 30.3 | 1.95 [1.47, 2.62] | n/a |
| WRF restart, hourly | PnetCDF restart | 48.4 | 33.9 | 1.42 [1.37, 1.50] | 2.09 |
| Setting | Claude | GPT-4o | Llama |
|---|---|---|---|
| IOSage | 5-6 ( 4 ) | 4-5 ( 4 ) | 3-4 ( 3 ) |
| no cards | 3 (2) | 3 (2) | 2 (1) |
| no classifier | 4 (3) | 3 (2) | 2 (2) |
| LLM alone | 2 (1) | 2 (1) | 1 (0) |
| Method | Micro-F1 | Macro-F1 | Hamming | Subset |
|---|---|---|---|---|
| IOSage classifier | 0.929 0.003 | 0.929 0.004 | 0.019 0.001 | 0.878 0.006 |
| no production logs | 0.909 0.001 | 0.904 0.001 | 0.026 <0.001 | 0.852 0.003 |
| Other learners, same data | ||||
| Random forest | 0.916 0.003 | 0.917 0.005 | 0.023 0.001 | 0.850 0.008 |
| MLP | 0.881 0.004 | 0.884 0.006 | 0.033 0.001 | 0.814 0.005 |
| Drishti rules | 0.364 | 0.285 | 0.227 | 0.283 |
High-Performance Computing
High-performance computing (HPC) uses parallel systems and optimized software to solve computationally demanding scientific and engineering problems.
See all 147 papers