Linux 使用内核AIO的应用程序

Linux 使用内核AIO的应用程序,linux,asynchronous,io,key-value-store,aio,Linux,Asynchronous,Io,Key Value Store,Aio,有人能告诉我一些使用内核AIO(即io_submit()系列)的应用程序(最好是常用的),比如任何SQL/no SQL数据库等吗。?我希望它能够在每个线程上发出队列深度超过1的异步读取,以完全饱和支持64>正在运行的请求而不会明显降级的高度并行SSD 我知道InnoDB,但我正在寻找更简单的东西(可能是KV商店) 更新:我不是在寻找示例代码,也不是像fio+libaio这样的合成基准测试。我很想找到一组能够在更现实的环境中使设备饱和的应用程序。一个简单的io_submit/io_getevent

有人能告诉我一些使用内核AIO(即io_submit()系列)的应用程序(最好是常用的),比如任何SQL/no SQL数据库等吗。?我希望它能够在每个线程上发出队列深度超过1的异步读取,以完全饱和支持64>正在运行的请求而不会明显降级的高度并行SSD

我知道InnoDB,但我正在寻找更简单的东西(可能是KV商店)


更新:我不是在寻找示例代码,也不是像
fio+libaio
这样的合成基准测试。我很想找到一组能够在更现实的环境中使设备饱和的应用程序。

一个简单的io_submit/io_getevents示例是在fio中,这是一个对测试和分析块设备有巨大帮助的程序。它有许多不同的I/O后端,以支持不同的操作系统和不同的访问技术。Linux AIO包装器位于github上的作者存储库中:

fio代码很简单,但是它缺少eventfd集成,这是您可能需要的。为此,QEMU块层中稍微复杂但简单的代码提供了一个很好的示例:


你可能会发现你可以从一个线程饱和你的SSD!或者,至少,它值得测试。在编写代码之前,Fio可以让您很好地了解预期的吞吐量。您甚至可以将其配置为执行多个线程。

谢谢@gubblebozer。我了解
fio
,因此我知道该设备可以并行提供高达64 4KB的随机读取。我正在寻找一个现实的情况,可以推动设备的努力。你知道的权利,你不需要异步I/o来实现这一点?大型i/o块被分为多个块以增加队列深度-实际上PCIe无法一次爆破超过4Kb,因此无论发生什么情况,这都是您的最大i/o块。此外,大多数非直接i/o异步文件i/o内核实现(Windows除外)都是作为用户空间或内核空间中的线程实现的,因此在这些系统上使用线程池可以获得更好的性能。出于这个原因,大多数数据库都提供了基于线程池的后端。让我换一种方式说:启动四个复制数据的“dd”命令副本将很容易使任何SSD饱和,即使是高端PCIe SSD。队列深度迅速达到最大值。