谁能指出一些使用内核 AIO(即 io_submit() 系列)的(最好是常用的)应用程序,例如任何 SQL/no-SQL 数据库等?我希望它能够在每个线程上发出队列深度大于 1 的异步读取,以使高度并行的 SSD 完全饱和,该 SSD 支持 64> 个正在进行的请求而不会出现明显的降级。
我知道 InnoDB,但正在寻找更简单的东西(可能是 KV 存储)。
更新:我不是在寻找示例代码,也不是像fio+libaio
. 我有兴趣找到一组可以使设备在更真实的环境中饱和的应用程序。
谁能指出一些使用内核 AIO(即 io_submit() 系列)的(最好是常用的)应用程序,例如任何 SQL/no-SQL 数据库等?我希望它能够在每个线程上发出队列深度大于 1 的异步读取,以使高度并行的 SSD 完全饱和,该 SSD 支持 64> 个正在进行的请求而不会出现明显的降级。
我知道 InnoDB,但正在寻找更简单的东西(可能是 KV 存储)。
更新:我不是在寻找示例代码,也不是像fio+libaio
. 我有兴趣找到一组可以使设备在更真实的环境中饱和的应用程序。
io_submit/io_getevents 的一个简单示例是在 fio 中,这是一个对测试和分析块设备有巨大帮助的程序。它有许多不同的 I/O 后端来支持不同的操作系统和不同的访问技术。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 可以让您很好地了解可以预期的吞吐量。您甚至可以将其配置为执行多个线程。