Streaming I/O and vectored I/O
Wednesday, October 23 at 17:20–18:10
Room: Ilissos
Traditionally, PostgreSQL did all relation I/O as sequential 8KB pread() or pwrite() system calls. This talk is about a new "streaming" programming model that allows multiple blocks to be read or written at the same time, and eventually in the background ahead of time.
We will talk about several things that cover new features in PostgreSQL 17 and ongoing work in PostgreSQL 18:
- overview of system file I/O interfaces
- storage manager changes for multi-buffer operations
- buffer manager changes for multi-buffer operations
- the stream abstraction
- "synchronous" streaming I/O
- partial steps to asynchronous I/O
- use cases (heap/index scans, vacuum, recovery, ...)
We will also talk more briefly about some aspects of the next stages of the larger AIO project:
- overview of kernel buffering, pros, cons and motivations for escaping from it
- why asynchronous I/O and direct I/O go together
- a peek at WIP asynchronous I/O system
- asynchronous streaming I/O