我正在编写一个 C 程序,通过直接从原始块设备文件读取数据来从 SSD 驱动器读取数据。
我正在尝试Linux AIO(我说的是Linux AIO API,即由linuxaio.h
诸如io_submit(...)
等提供的功能,而不是POSIX AIO API)。我使用标志打开块设备文件,O_DIRECT
并确保写入缓冲区与块大小对齐。
我注意到 Linux AIO 它比使用带有O_DIRECT
标志的同步 IO 快得多。
最让我惊讶的是,通过使用 Linux AIO 发出许多几 KB 的小随机读取所获得的吞吐量明显高于使用同步 I/O 和O_DIRECT
.
所以,我想知道:为什么 Linux AIO 的性能比同步 I/O 更好?使用 AIO 时内核做了什么?内核是否执行请求重新排序?与使用同步 I/O 相比,使用 Linux AIO 会导致更高的 CPU 利用率吗?
非常感谢提前