【问题标题】:should libaio engine to be used with unbuffered io (direct)only?libaio 引擎应该仅与无缓冲 io(直接)一起使用吗?
【发布时间】:2015-12-12 03:25:50
【问题描述】:

我试图使用 fio 工具和 ioengine 作为 libaio 来获取性能数字(简单的 4K 随机读取)。 我观察到如果直接 io 被禁用(direct=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?

【问题讨论】:

标签: performance-testing


【解决方案1】:

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 上会成为一种慢速形式(您不妨刚刚使用过@987654323 @/write 并为自己节省了一些系统调用)。性能的大幅提升实际上是受益于异步行为的结果。

所以回答你标题中的问题:是的,libaio 应该只与 unbuffered/O_DIRECT 文件描述符一起使用,如果你希望从中获得任何好处。

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多