libaio引擎应该只与无缓冲的io(直接)一起使用吗?

时间:2015-12-12 03:25:50

标签: performance-testing

我试图使用fio工具和ioengine作为libaio来获得性能数字(简单的4K随机读取)。 我观察到如果直接io被禁用(直接= 0),那么iops大幅下降。当direct = 1时,iops的效果要好50倍!

setup: fio being run from a linux client connected to a PCIe based 
appliance over Fibre Channel.

这是从我的fio配置文件中删除的:

[global]
filename=/dev/dm-30
size=10G
runtime=300
time_based
group_reporting

[test]
rw=randread
bs=4k
iodepth=16
runtime=300
ioengine=libaio
refill_buffers
ioscheduler=noop
#direct=1

通过这个设置,我观察到iops大约为8000,当我在上面显示的配置文件中启用direct = 1时,我看到iops跳到250K! (在我正在使用的设置的情况下这是现实的)

所以,我的问题是如果我们使用libaio引擎,使用缓冲的i / o有什么问题吗?是强制性的,如果我们使用libaio,我们应该坚持直接io?

1 个答案:

答案 0 :(得分:0)

the docs on Kernel Asynchronous I/O (AIO) Support for Linux

  

什么不起作用?

     
      
  • AIO读取和写入没有O_DIRECT打开的文件(即正常缓冲文件系统AIO)。在ext2,ext3,jfs,xfs和nfs上,这些不会返回显式错误,而是静默地默认为同步或非AIO行为(即io_submit在这些情况下等待I / O完成)。对于大多数其他文件系统,报告了-EINVAL。
  •   

简而言之,如果你不使用O_DIRECT,AIO仍然“适用于”许多最常见的文件系统,但在同步I / O上变得很慢(你可能刚刚使用过read / write并为您节省了一些系统调用。大量的性能提升是实际受益于异步行为的结果。

所以要回答标题中的问题:是的,libaio只应与未缓冲的/ O_DIRECT文件描述符一起使用,如果您希望获得任何的好处来自它。