Sha*_*nky 6 performance-testing
我试图使用 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.
Run Code Online (Sandbox Code Playgroud)
这是我的 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
Run Code Online (Sandbox Code Playgroud)
通过此设置,我观察到 iops 约为 8000,当我在上面显示的配置文件中启用 direct=1 时,我看到 iops 跃升至 250K!(对于我正在使用的设置来说这是现实的)
所以,我的问题是如果我们使用 libaio 引擎,使用缓冲 I/O 有什么问题吗?如果我们使用libaio,我们是否必须坚持直接io?
根据Linux 的内核异步 I/O (AIO) 支持的文档:
什么不起作用?
- 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
| 归档时间: |
|
| 查看次数: |
2735 次 |
| 最近记录: |