我正在编写一个C程序,通过直接从原始块设备文件读取数据从SSD驱动器读取数据。
我正在尝试Linux (我指的是Linux,即linuxaio.h提供的函数,如io_submit(...)等,而不是POSIX )。我使用O_DIRECT标志打开块设备文件,并确保对缓冲区的写入符合块大小。
我注意到Linux比使用同时带有O_DIRECT标志的同步IO要快得多。
最让我惊讶的是,使用Linux对几个KBs进行多个小随机读取所获得的吞吐量非常高,甚至比使用同步I/O和O_DIRECT对少数MBs进行大(顺序)读取的吞吐量还要高。
所以,我想知道:为什么Linux比同步I/O更好?当使用AIO时,内核会做什么?内核是否执行请求重新排序?使用Linux是否比使用同步I/O带来更大的CPU利用率?
提前谢谢
发布于 2015-03-12 13:23:56
简短的回答:最有可能是AIO实现“更快”,因为它并行提交多个IOs,而同步实现有零个或一个I/O在运行中。它与写入内存无关,也与内核I/O路径无关,同步I/O有额外的开销。
您可以使用iostat -x -d 1检查这一点。查看avgqu(平均队列大小=飞行中I/O的平均数量)和%util (利用率=设备至少发出一个I/O的时间百分比)。
长答案:
https://stackoverflow.com/questions/28999765
复制相似问题