谁能指出我一些使用内核AIO(即io_submit()系列)的应用程序(例如,常用的),例如任何SQL/no-SQL数据库等?我希望它能够在每个线程上以大于1的队列深度发出异步读取,以完全饱和高度并行的SSD,该SSD支持64个进行中的请求而不会出现明显的降级。

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

更新:我不是在寻找示例代码或fio+libaio之类的综合基准。我感兴趣的是找到一组可以在更实际的设置中使设备饱和的应用程序。

最佳答案

io_submit/io_getevents的一个简单示例在fio中,该程序对测试和分析块设备很有帮助。它具有许多不同的I/O后端,以支持不同的OS和不同的访问技术。 Linux AIO包装器位于github上的作者存储库中:https://github.com/axboe/fio/blob/master/engines/libaio.c

fio代码很简单,但是缺少您可能需要的eventfd集成。 (我一直都有。)为此,QEMU的块层中稍微复杂但简单的代码提供了一个很好的示例:https://github.com/qemu/qemu/blob/331ac65963ab74dd84659b748affa0b111486f06/block/linux-aio.c

您可能会发现您可以从一个线程中饱和SSD!或者,至少值得进行测试。在编写代码之前,Fio可以为您提供预期的吞吐量的好方法。您甚至可以将其配置为执行多个线程。

10-05 18:11