Table of Contents
Fetching ...

Asynchronous I/O -- With Great Power Comes Great Responsibility

Constantin Pestka, Marcus Paradies, Matthias Pohl

TL;DR

The complexities that the usage of these contemporary I/O APIs introduces to applications are discussed, which are believed to be mostly responsible for their low adoption rate.

Abstract

The performance of storage hardware has improved vastly recently, leaving the traditional I/O stack incapable of exploiting these gains due to increasingly large relative overheads. Newer asynchronous I/O APIs, such as io_uring, have significantly improved performance by reducing such overheads, but exhibit limited adoption in practice. In this paper, we discuss the complexities that the usage of these contemporary I/O APIs introduces to applications, which we believe are mostly responsible for their low adoption rate. Finally, we share implications and trade offs made by architectures that may be used to integrate asynchronous I/O into DB applications.

Asynchronous I/O -- With Great Power Comes Great Responsibility

TL;DR

The complexities that the usage of these contemporary I/O APIs introduces to applications are discussed, which are believed to be mostly responsible for their low adoption rate.

Abstract

The performance of storage hardware has improved vastly recently, leaving the traditional I/O stack incapable of exploiting these gains due to increasingly large relative overheads. Newer asynchronous I/O APIs, such as io_uring, have significantly improved performance by reducing such overheads, but exhibit limited adoption in practice. In this paper, we discuss the complexities that the usage of these contemporary I/O APIs introduces to applications, which we believe are mostly responsible for their low adoption rate. Finally, we share implications and trade offs made by architectures that may be used to integrate asynchronous I/O into DB applications.

Paper Structure

This paper contains 22 sections, 4 figures.

Figures (4)

  • Figure 1: IOPS queue depth scaling. Uses io_uring, direct I/O, SQ and I/O poll, 1M 4K sequential reads per run, 10 runs each, preceded by preconditioning run. Run on a Ryzen 3900X, Samsung 990 Pro 1TB and Linux 6.8.0-39.
  • Figure 2: Frequency set in the BIOS (Parameters cf. Figure \ref{['fig:IOPSvsSMT']})
  • Figure 3: IOPS scaling with post I/O operation callback latency (Parameters cf. Figure \ref{['fig:IOPSvsSMT']}, but using random reads)
  • Figure 4: Static I/O thread pool