Linux

FUSE 是否支持 O_DIRECT/directI/O

  • October 14, 2016

你好 Linux FUSE(使用者空間中的文件系統)支持 O_DIRECT 嗎?因為我使用 fio benchmark 來測試 fuse 但是當我使用 directIO 時它總是顯示錯誤

我的機器是 Ubuntu 4.4.0-38 x86_64 fio_version = 2.14 下面是我的配置文件

[global]
ioengine=libaio
**direct=1**
time_based
runtime=60
ramp_time=30
size=64g
group_reporting

[S_100RW_1M_R]
rw=read
numjobs=1
iodepth=32
bs=1m
stonewall

[S_100RW_1M_W]
rw=write
numjobs=1
iodepth=32
bs=1m
stonewall

當我執行 :sudo fio fio.cfg並完成時,它顯示了 seq 的結果。無序閱讀。寫。它顯示如下:

fio: io_u error on file xxxxx : Invalid argument: write offset=0, buflen=1048576

我每次都嘗試過,即使我更換了測試設備,結果也是一樣的。

怎麼會這樣?

多謝

是的,從 2.4 版開始

2.4 中的新功能

  • 允許在打開時根據具體情況設置“direct_io”和“keep_cache”選項。

我會冒險可能發生的幾件事之一:

  1. 你的保險絲版本不夠新。
  2. 實際的底層文件系統不支持直接 IO,並且 fuse 只是返回一個傳遞錯誤。(這確實假設 fuse 將直接 IO 請求傳遞到底層文件系統,該文件系統實際上將數據保存在磁碟上的某處。)
  3. 保險絲程式碼中某處的錯誤。Linux 上的直接 IO 可能非常特殊/古怪。

引用自:https://unix.stackexchange.com/questions/315833