High Performance Computing

Chapter 9
Data-Intensive HPC and Storage Systems

Post Graduate Diploma in Data Science
High Performance Computing   •   Post Graduate

9. Data-Intensive HPC and Storage Systems

Introduction and Context

High-performance computing is often introduced through processors, accelerators, and interconnection networks. Yet in many contemporary workloads, computation is not the dominant constraint. Scientific simulations, machine-learning training, genomic analysis, remote sensing, financial modelling, and large-scale graph processing repeatedly move, transform, and store enormous data collections. When processors wait for data, adding more processors may increase cost without improving performance. Data-intensive HPC therefore treats storage, movement, locality, and persistence as central elements of system design rather than as secondary infrastructure.

A useful distinction is between compute-intensive and data-intensive workloads. Compute-intensive applications spend most of their time performing arithmetic on a relatively small data set. Data-intensive applications repeatedly read, write, filter, join, shuffle, checkpoint, or communicate large volumes of data. Many real applications combine both characteristics. A climate model, for example, may perform extensive numerical computation but also generate terabytes of intermediate and output data.

This chapter examines the storage hierarchy and data paths that support such workloads. It explains parallel file systems, distributed object and block storage, locality-aware partitioning, caching, serialization, compression, checkpointing, and high-throughput pipelines. The emphasis is not merely on naming technologies, but on choosing designs that balance bandwidth, latency, capacity, reliability, cost, and operational complexity.

Learning Objectives

After studying this chapter, students should be able to:

1. Distinguish latency, bandwidth, IOPS, throughput, and metadata performance in HPC storage.

2. Explain the architecture and use of parallel and distributed storage systems.

3. Design data partitions and placements that exploit locality and parallelism.

4. Evaluate caching, serialization, compression, and checkpointing strategies.

5. Construct and assess high-throughput data pipelines for large-scale analytics.

6. Diagnose storage bottlenecks using quantitative reasoning and suitable metrics.

7. Discuss reliability, security, governance, and emerging developments in data-intensive HPC.

9.1 The Storage Hierarchy and the Data Path

Data moves through a hierarchy whose levels differ in speed, capacity, persistence, and cost. Registers and processor caches are extremely fast but small. Main memory provides greater capacity, while local NVMe or SSD devices provide persistent storage with low access latency. Parallel file systems and distributed storage offer very large shared capacity. Tape and archival object storage are slower but economical for long-term retention.

Performance depends on the complete data path. A typical path may involve an application, serialization library, user-space buffer, operating-system cache, local device, storage server, network fabric, and disk or flash media. A fast device cannot compensate for inefficient application access patterns, serialization overhead, network congestion, or metadata contention.

Several measures must be distinguished:

  • Latency is the time required for an individual operation to complete.
  • Bandwidth is the volume of data transferred per unit time, commonly measured in GB/s.
  • IOPS represents the number of input/output operations completed per second.
  • Throughput is the sustained rate at which a workload completes useful data processing.
  • Metadata performance concerns operations such as create, open, stat, rename, and delete.

Large sequential reads usually emphasize bandwidth. Millions of small files emphasize metadata operations and IOPS. A system may deliver excellent sequential bandwidth while performing poorly on small random requests. Consequently, storage evaluation must use workload-representative benchmarks rather than a single headline specification.

The effective application rate can be approximated as:

Effective rate = useful data processed / elapsed time.

Elapsed time includes reading, decoding, computation, communication, synchronization, writing, and recovery. Compression may reduce bytes transferred but consume CPU cycles; it improves performance only when the saved I/O and network time outweigh the additional processing time.

9.2 Parallel File Systems and Distributed Storage

A parallel file system enables multiple clients to access data concurrently across several storage servers or targets. Instead of treating a file as residing on one disk, the system may stripe its blocks across multiple devices. Concurrent processes can then read different portions in parallel.

A typical architecture contains clients, metadata services, object or data storage targets, and a high-speed interconnect. Metadata services manage names, directories, permissions, and file layout. Data services store file contents. Separating metadata and data paths helps prevent directory operations from competing directly with large transfers, although metadata services can themselves become bottlenecks.

File striping is a central design choice. A file can be divided into fixed-size chunks distributed across storage targets. A large stripe size is often suitable for sequential scientific I/O because each process transfers substantial contiguous data. Small stripes may improve load balance for many independent accesses but can increase coordination and fragmentation. The appropriate configuration depends on access size, process count, concurrency, and whether accesses are aligned with stripe boundaries.

Collective I/O allows a group of processes to coordinate requests. Rather than issuing many small, scattered operations, a library aggregates them into larger operations that match the physical layout. MPI-IO and higher-level scientific data formats commonly exploit this principle. Collective I/O is not automatically faster: poor access patterns, excessive synchronization, or an unsuitable file layout can reduce its benefit.

Distributed storage systems use multiple machines to provide capacity, replication, fault tolerance, and scalable access. They may expose file, block, or object interfaces. Distributed file systems present hierarchical namespaces; block systems provide virtual volumes; object stores manage immutable or semi-structured objects through keys and metadata. Object storage is highly scalable and durable, but its request semantics differ from those of a POSIX file system. Operations such as in-place modification, directory locking, and low-latency random updates may require additional layers or redesigned applications.

Replication stores multiple copies of data, improving availability but consuming capacity and write bandwidth. Erasure coding divides data into fragments and parity pieces, allowing recovery from failures with lower storage overhead than full replication. It generally introduces more computation and communication during writes and reconstruction. Thus, frequently modified hot data may use replication, whereas cold archival data may use erasure coding.

9.3 Locality, Partitioning, and Placement

Data locality means placing computation close to the data it uses. Locality reduces network traffic, lowers latency, and improves cache effectiveness. In a cluster, locality may be temporal, spatial, or topological. Temporal locality occurs when recently accessed data is likely to be accessed again. Spatial locality occurs when nearby records are accessed together. Topological locality refers to proximity within a rack, node, NUMA domain, or device.

Partitioning divides a data set into units that can be processed independently or with limited communication. Common strategies include:

  • Range partitioning, which assigns intervals of ordered values to partitions.
  • Hash partitioning, which distributes records according to a hash function.
  • Round-robin partitioning, which balances records without regard to key values.
  • Spatial partitioning, which groups geographical or multidimensional regions.
  • Time partitioning, which separates data by day, month, or another temporal interval.

Range and time partitioning support efficient pruning when queries specify ranges. Hash partitioning usually balances records well and supports key-based joins, but it may scatter range queries. Round-robin placement can provide simple balance but often offers weak query locality.

Partitioning creates a tension between balance and locality. If one partition receives disproportionate traffic, a hotspot develops. If data is distributed too evenly without regard to access patterns, every query may require communication with all nodes. Skew can arise from popular keys, uneven file sizes, or nonuniform computational cost. Remedies include salting heavy keys, adaptive repartitioning, replication of popular data, and workload-aware placement.

Data locality is particularly important for NUMA systems. A thread accessing memory attached to another processor socket may experience greater latency and lower bandwidth. Storage-aware applications should therefore consider not only which cluster node holds a file, but also which local device, memory region, and accelerator will process it.

9.4 Caching and Buffering

Caching stores frequently or recently used data in a faster layer. HPC systems may use page caches, client-side file-system caches, distributed caches, memory-mapped regions, application caches, and device caches. Buffering, in contrast, temporarily accumulates data to combine small operations into larger transfers. Both techniques can improve performance but can also obscure actual storage behavior.

A cache is beneficial when the workload has reuse. If every item is read once, caching consumes memory without reducing future I/O. A cache should be evaluated through hit rate, miss penalty, memory occupancy, consistency requirements, and eviction policy. Least recently used policies are useful for recency-based workloads, while frequency-aware approaches may better support repeated access to a stable hot set.

Write-back caching acknowledges writes in a fast layer and flushes them later. It can greatly improve application latency, but data may be lost if the cache fails before persistence. Write-through caching offers stronger durability visibility but imposes more immediate storage cost. The appropriate choice depends on recovery objectives and the meaning of a successful write.

Read-ahead can improve sequential access by fetching data before the application requests it. Excessive read-ahead wastes bandwidth and displaces useful cache contents. Similarly, large application buffers can improve throughput but increase memory pressure and checkpoint recovery time. Cache coherence and consistency become difficult when several processes update shared data. Many analytics systems therefore prefer immutable files and append-oriented designs, which simplify caching and concurrency.

9.5 Serialization, Data Layout, and Compression

Serialization converts in-memory structures into a transferable or persistent representation. A useful format must balance compactness, decoding cost, portability, schema evolution, and access granularity. Text formats are human-readable and convenient for interchange but often require more space and parsing time. Binary formats are compact and faster, although they require compatible readers and careful version management.

Row-oriented storage places fields from one record together. It is suitable when applications retrieve complete records or update individual rows. Column-oriented storage groups values from the same field together. It is effective for analytical queries that scan a few columns across many records because irrelevant columns can be skipped and similar values often compress well.

A data format should support self-description, type information, null handling, compatibility, and selective access. Serialization choices also affect language interoperability. A format tied to memory addresses or a particular compiler may be fast locally but unsuitable for long-term storage or heterogeneous clusters.

Compression reduces storage volume and data movement. Lossless compression preserves exact values and is required for most transactional, scientific, and analytical data. Lossy compression permits controlled information loss and may be appropriate for images, signals, or approximate scientific output when error bounds are acceptable.

Compression involves a three-way trade-off among ratio, CPU cost, and access granularity. Compressing an entire multi-terabyte file may achieve a strong ratio but force a complete decompression for a small query. Compressing independently addressable blocks supports parallel decoding and predicate-based access. Delta encoding, run-length encoding, dictionary encoding, and bit packing exploit different data patterns. Compression should be measured together with decompression speed and query selectivity, not judged solely by the compression ratio.

9.6 Checkpointing and Fault Recovery

Large HPC jobs may run for hours or days, making failure recovery essential. A checkpoint is a saved representation of application state from which execution can resume. Without checkpointing, a failure may require restarting from the beginning; with it, recovery loses only the work since the latest valid checkpoint.

The simplest method is coordinated global checkpointing: all processes reach a consistent point and collectively write their state. It is conceptually straightforward but can create a burst of I/O and force fast processes to wait for slow ones. Uncoordinated checkpointing allows processes to save independently but requires recovery metadata and may produce inconsistent dependencies. Incremental checkpointing records only changes since a previous checkpoint, reducing volume at the cost of reconstruction complexity.

Checkpoint interval should be selected economically. If failures occur with mean time between failures M and a checkpoint takes C, a very rough model treats checkpoint overhead as C divided by the interval, while expected lost work grows with the interval. The optimal interval depends on failure rate, checkpoint cost, restart cost, storage bandwidth, and application tolerance. A mathematically optimal interval is not necessarily operationally desirable if it creates severe storage bursts.

Useful strategies include asynchronous checkpointing, differential checkpoints, burst buffers, replication of critical state, and tiered movement from fast local storage to durable shared storage. Checkpoint data should be versioned, integrity-checked, and tested through actual restart procedures. A checkpoint that can be written but not restored is not a reliable recovery mechanism.

9.7 High-Throughput Data Pipelines

A high-throughput pipeline moves data through stages such as ingestion, validation, decoding, transformation, partitioning, computation, aggregation, and persistence. Pipeline performance is constrained by the slowest stage or by queueing and synchronization between stages. If stage rates are r1, r2, ..., rn, the steady-state throughput cannot exceed the minimum stage rate, after accounting for buffering and coordination.

A practical pipeline separates control flow from data flow. Control flow manages task assignment, metadata, retries, and lineage. Data flow carries the large payloads. This separation prevents a central scheduler or metadata database from becoming a bottleneck.

Backpressure is necessary when downstream stages cannot keep up. Without it, queues grow until memory is exhausted or data is repeatedly spilled to storage. Batching amortizes per-operation overhead, while excessive batching increases latency and delays failure detection. Parallelism should be limited by available CPU, memory, network, storage bandwidth, and external service capacity rather than by the number of input records alone.

A robust pipeline is generally designed to be restartable and idempotent. Idempotent processing produces the same final result when a task is retried. Temporary outputs, atomic renames, transaction logs, and manifest files help distinguish complete data from partially written data. Data lineage records where an output came from, which code version produced it, and which inputs were used.

For analytics, columnar formats, predicate pushdown, partition pruning, vectorized execution, and local aggregation can reduce data movement. A query that filters before a join usually transfers less data than one that joins complete tables first. In distributed systems, shuffle—the redistribution of records by key—is frequently expensive and should be reduced through appropriate partitioning and pre-aggregation.

9.8 Performance Analysis and Design Decisions

Storage design should begin with a workload description: data volume, object and file sizes, read/write ratio, concurrency, access order, reuse, durability requirements, growth rate, and acceptable recovery time. The design should then identify the dominant resource. A bandwidth-bound workload needs wider parallel transfers; a metadata-bound workload may need file aggregation or namespace redesign; a latency-bound workload may require local NVMe or memory caching.

Useful measurements include application throughput, read and write bandwidth, request latency percentiles, queue depth, cache hit rate, CPU utilization during compression, network utilization, metadata operation rate, checkpoint duration, recovery duration, and cost per stored or processed terabyte. Percentiles are important because averages can hide tail latency that stalls synchronized jobs.

A common mistake is to optimize storage in isolation. Increasing storage bandwidth does not help if the application generates serialized requests. Adding workers does not help if all workers read the same hot partition. Compression does not help if decompression saturates CPUs. Replication does not guarantee recoverability if corruption is copied to every replica. Performance engineering therefore requires end-to-end measurement and controlled experiments.

9.9 Applied Case: A Genomic Analytics Cluster

Background

Consider an illustrative research institute processing whole-genome sequencing data for population studies. Each project produces raw reads, quality-control results, aligned sequences, variant tables, and intermediate indexes. Analysts run both batch pipelines and interactive queries.

Situation and Problem

Initially, each sample was stored as many small files on a shared file system. The pipeline created large metadata loads, and analysts experienced unpredictable query times. Checkpoints were written directly to the shared system, causing severe contention with active analyses. Network traffic was high because every stage repeatedly reread the same reference data.

Analysis

The workload contained several distinct classes. Raw data was written once and read several times. Reference genomes were read frequently by nearly every task. Intermediate alignment files were large and temporary. Variant tables were queried by genomic region and sample. The bottlenecks were metadata operations, repeated network reads, and synchronized checkpoint bursts rather than insufficient arithmetic capacity.

Approach

The institute aggregated small files into larger immutable containers with explicit genomic and sample metadata. Variant data was partitioned by chromosome and sample cohort, enabling partition pruning. Reference genomes were replicated to local node storage and cached in memory for frequently used indexes. Large sequential files were striped across storage targets, while temporary alignment data used local NVMe and was deleted after validated downstream outputs were produced.

The pipeline adopted columnar storage for analytical tables, block-level lossless compression, and predicate pushdown. Checkpoints were made incremental and written asynchronously to local burst storage before being transferred to durable shared storage. Manifest files recorded completed partitions, software versions, checksums, and input identifiers. Retries were made idempotent by writing to temporary paths and committing results only after validation.

Outcome

The redesigned system reduced metadata pressure, avoided repeated retrieval of reference data, and separated temporary I/O from durable project data. Its principal improvement came not from one faster device but from matching data layout and placement to access patterns. Operational monitoring also made it possible to distinguish slow computation from storage congestion.

Learning Points

The case demonstrates that data-intensive HPC is an architectural problem. File size, partitioning, caching, compression, checkpoint placement, and workflow semantics must be considered together. It also shows why durability and performance should be assigned according to data value: reproducible temporary data need not receive the same protection as irreplaceable primary results.

9.10 Risks, Governance, and Professional Practice

Storage systems contain sensitive scientific, personal, commercial, and regulated information. Access control should follow least privilege, and data should be protected during transfer and at rest. Encryption can introduce CPU and key-management overhead, so its placement and hardware support should be assessed rather than ignored.

Integrity requires checksums, validation, versioned schemas, and controlled writes. Availability requires redundancy, monitoring, tested restoration, and documented failure procedures. Retention policies should distinguish legal requirements, reproducibility needs, and unnecessary duplication. Deleting data is also a governance action: metadata, derived products, and backups may preserve information after an apparent deletion.

Common mistakes include creating millions of small files, using a shared file system as a database, selecting partitions without examining query patterns, over-replicating transient data, relying on untested backups, and treating successful writes as proof of durable persistence. Another error is reporting device bandwidth rather than application-level throughput.

9.11 Emerging Directions

Storage-class memory and persistent memory narrow the distinction between memory and storage. Computational storage places filtering or reduction near the device, potentially reducing data movement, although programming models and portability remain challenges. High-speed fabrics and disaggregated storage allow compute and storage resources to be composed more flexibly.

Data-management systems increasingly use metadata catalogs, automated tiering, workload-aware placement, and observability tools. Machine learning may predict cache demand, detect anomalous I/O, or identify likely hotspots, but automated decisions require safeguards against unstable feedback and unfair resource allocation. Object storage and cloud-compatible interfaces are becoming common in hybrid HPC environments, while data sovereignty, egress cost, and variable network performance remain important design constraints.

Best Practices

1. Characterize the workload before selecting storage technology.

2. Match layout and partitioning to dominant access patterns.

3. Prefer large, meaningful I/O operations over uncontrolled small-file access.

4. Separate temporary, frequently accessed, and archival data tiers.

5. Measure application throughput, tail latency, metadata load, and recovery time.

6. Use immutable outputs, manifests, checksums, and idempotent retries.

7. Compress data in independently readable blocks and test CPU trade-offs.

8. Place checkpoints according to recovery value and storage cost.

9. Test restoration and restart, not merely backup creation.

10. Treat security, provenance, retention, and reproducibility as design requirements.

Chapter Summary

Data-intensive HPC performance depends on the movement and organization of data as much as on computation. Parallel file systems provide concurrent access through striping, metadata services, and collective I/O, while distributed storage offers scalable capacity and fault tolerance through replication or erasure coding. Partitioning and locality determine how much data must cross the network and whether work is balanced or concentrated in hotspots. Caching and buffering improve reuse and transfer efficiency, but require attention to consistency and durability. Serialization, columnar layout, and compression influence both storage volume and analytical speed. Checkpointing limits failure-related loss, and high-throughput pipelines require batching, backpressure, idempotence, lineage, and recovery-aware design. Effective engineering combines workload characterization, end-to-end measurement, governance, and tested operational procedures.

Key Terms

Latency: Time required to complete an individual operation.

Bandwidth: Amount of data transferred per unit time.

IOPS: Number of input/output operations completed per second.

Metadata: Information describing files, objects, permissions, layouts, and locations.

Parallel file system: A file system that distributes data and access across multiple storage resources.

Striping: Splitting file contents across storage targets for concurrent access.

Collective I/O: Coordinated I/O by multiple processes to form efficient storage operations.

Object storage: Storage that manages data as objects identified by keys and metadata.

Data locality: Placement of computation near the data it processes.

Partitioning: Dividing a data set into independently manageable units.

Data skew: Uneven distribution of records or workload across partitions.

Cache: Faster storage holding data likely to be reused.

Serialization: Conversion of in-memory data into a persistent or transferable representation.

Columnar storage: Layout that stores values of the same field together.

Compression: Representation of data using fewer bits.

Checkpoint: Saved application state used for restart after failure.

Backpressure: Regulation that slows upstream production when downstream capacity is limited.

Data lineage: Record of the origin, transformations, and versions associated with data.

Erasure coding: Fault-tolerance method using data and parity fragments for reconstruction.

Predicate pushdown: Applying filters near the data source to reduce transferred data.

Review Questions

Short Answer Questions

1. Distinguish bandwidth from latency in an HPC storage workload.

2. What is the purpose of file striping?

3. Why can a workload with excellent sequential bandwidth still perform poorly?

4. Define data locality and state one benefit.

5. What is an idempotent pipeline operation?

Long Answer Questions

1. Explain the architecture and trade-offs of a parallel file system.

2. Compare replication and erasure coding for hot and archival data.

3. Discuss how partitioning, caching, serialization, and compression jointly affect analytics performance.

4. Explain coordinated, uncoordinated, and incremental checkpointing.

5. Describe the design of a reliable high-throughput data pipeline.

Analytical / Application Questions

1. A cluster processes millions of small files and shows low device utilization but very high metadata load. Diagnose the problem and propose a redesign.

2. An analytical query reads two columns from a very wide table partitioned randomly. Evaluate the likely costs and recommend a better layout.

3. A checkpoint takes 20 minutes and causes active jobs to stall. Develop a strategy involving checkpoint frequency, placement, buffering, and recovery validation.

22. Multiple Choice Questions with Answers

Question 1

Which workload is most likely to be metadata-bound?

A. A single sequential read of a large file

B. Millions of processes reading a few large contiguous blocks

C. Creation and inspection of millions of small files

D. A GPU performing arithmetic on data already in memory

Correct Answer: C. Creation and inspection of millions of small files

Question 2

What is the principal purpose of striping a file across storage targets?

A. To eliminate the need for file permissions

B. To enable concurrent access to different portions of the file

C. To compress the file automatically

D. To guarantee zero data loss

Correct Answer: B. To enable concurrent access to different portions of the file

Question 3

Which partitioning strategy is generally most suitable for pruning queries over date ranges?

A. Time or range partitioning

B. Random round-robin partitioning

C. Unkeyed replication

D. Memory interleaving

Correct Answer: A. Time or range partitioning

Question 4

A cache is least likely to improve performance when the workload

A. repeatedly accesses a small hot data set

B. has strong temporal locality

C. reads every item once without reuse

D. uses a fast memory tier for frequently accessed data

Correct Answer: C. reads every item once without reuse

Question 5

Why is columnar storage effective for many analytical queries?

A. It forces every column to be read for each record

B. It permits irrelevant columns to be skipped and often compresses similar values well

C. It eliminates the need for partitioning

D. It guarantees lower latency for every update workload

Correct Answer: B. It permits irrelevant columns to be skipped and often compresses similar values well

Question 6

Which checkpointing approach records only changes since an earlier checkpoint?

A. Full checkpointing

B. Incremental checkpointing

C. Round-robin checkpointing

D. Metadata striping

Correct Answer: B. Incremental checkpointing

Question 7

In a pipeline, backpressure is used primarily to

A. increase data duplication

B. prevent upstream production from overwhelming downstream stages

C. remove all buffering

D. convert row data into columnar data

Correct Answer: B. prevent upstream production from overwhelming downstream stages

Question 8

A query scans a large table but needs only a small subset of rows and columns. Which combination most directly reduces data movement?

A. Predicate pushdown and columnar storage

B. Larger metadata directories and full replication

C. Random partitioning and disabled compression

D. Synchronous global checkpointing

Correct Answer: A. Predicate pushdown and columnar storage

Question 9

Why might erasure coding be preferred over full replication for archival data?

A. It always has lower write latency

B. It provides fault tolerance with lower storage overhead

C. It removes the need for integrity checks

D. It is designed only for frequently modified hot data

Correct Answer: B. It provides fault tolerance with lower storage overhead

Question 10

A pipeline retries failed tasks and occasionally produces duplicate outputs. Which design change is most appropriate?

A. Use idempotent processing and commit validated results atomically

B. Disable all retries

C. Store every intermediate result as a separate permanent copy

D. Increase compression ratio without changing write semantics

Correct Answer: A. Use idempotent processing and commit validated results atomically

High Performance Computing
Chapter 9 of 15