Overview:
Using real-life applications to evaluate cross-application interference is arguably not appropriate because (1) it is difficult to differentiate inner and outer causes of performance degradations in applications that exhibit a complex access pattern, (2) they may not be representative of generic interference patterns that applications with perfectly optimized I/O would exhibit, and (3) we need a way to control precisely the moment when these applications perform I/O. Therefore, we developed Ifer, a benchmark similar to IOR that starts by splitting its set of processes into groups running on two separate sets of nodes. Each group of processes executes a series of collective I/O operations following a specified pattern, simulating two applications accessing the file system in contention. We measure the time taken by each group of processes to complete its set of I/O operations. This IOR-like benchmark allows us to control the access patterns of each group of processes (for example, contiguous or strided with a specified number of blocks and block sizes, in a way similar to IOR).
This benchmark is designed to measure the write/write interference at the MPI-IO level for HPC storage systems. Ifer offers two different access patterns:
Contiguous: In this pattern, each process issues a write request with a defined size in a contiguous way in a shared file, at an offset given by rank × request size.
Strided: We represent the non contiguous case by a one-dimensional strided access pattern. Each process issues provided number of requests with a given request size.
Using Ifer:
Ifer is a simple MPI application. To run it:
mpirun -np 960 -f hostfile ./Ifer config
This command will execute Ifer on 960 processes with the given configuration file “config”. A sample configuration file can be found under the same directory as Ifer. Configuration file fields are:
- testfileName: path to data file
- iterations: number of repetitions for the application
- blockSize: continuous bytes to write per process
- numBlocks: block count; while for the contiguous pattern these number of blocks will be written continuously per process, for strided pattern these blocks will be distributed along the file per process depending on their offsets.
- interArrivalTime: sleep time for the second application which is simply the delay between the I/O phases of these two different applications. Ifer will run between – interArrivalTime and +interArrivalTime with the defined incremental value as given below, “incValue”.
- incValue: incremental time value for varying from -interArrivalTime to +interArrivalTime in sleeping time.
- appSize: number of processes for the second application. Therefore, the size of the first application is equal to “number of procs – appSize”.
- accessPattern: defines the access pattern for both applications; 0 → contiguous, 1 → strided pattern.
Sample output:
#ApplicationID #Iteration #CurrentDelay #WriteTime
0 1 10 37.131243
1 1 10 35.868140
Download:
Download Ifer.zip which includes the executable, the code and sample configuration file. If you use this benchmark in your work or research, please let us know about it. We also encourage you to cite our paper:
-
On the Root Causes of Cross-Application I/O Interference in HPC Storage Systems, O. Yildiz, M. Dorier, S. Ibrahim, R. Ross, G. Antoniu, in Proceedings of the IPDPS – International Parallel and Distributed Processing Symposium, May 2016, Chicago, United States. BibTeX
Credits:
This benchmark is developed by Orçun YILDIZ during his internship at Argonne National Laboratory, within the framework of the Joint Laboratory for Extreme Scale Computing (JLESC), a collaboration between INRIA, the University of Illinois at Urbana Champaign, Argonne National Laboratory, Barcelona Supercomputing Center, Jülich Supercomputing Center and Riken Advanced Institute for Computational Science.
Contact Information:
Please contact Orçun YILDIZ (orcun.yildiz@inria.fr) for further information. While we may not be able to provide technical support, let us know about suggested improvements.