FUSE I/O 模式

FUSE 支援以下 I/O 模式:

  • direct-io

  • 快取 + 寫直通 + 寫回快取

direct-io 模式可在 FUSE_OPEN 回覆中透過 FOPEN_DIRECT_IO 標誌選擇。

在 direct-io 模式下,讀寫操作會完全繞過頁快取。不進行預讀。共享 mmap 預設停用。要允許共享 mmap,可以在 FUSE_INIT 回覆中啟用 FUSE_DIRECT_IO_ALLOW_MMAP 標誌。

在快取模式下,讀取可以從頁快取中滿足,核心可能會預讀資料以填充快取。對檔案進行任何寫入後,快取始終保持一致。支援所有 mmap 模式。

快取模式有兩種子模式,控制寫入的處理方式。寫直通模式是預設模式,並受所有核心支援。寫回快取模式可在 FUSE_INIT 回覆中透過 FUSE_WRITEBACK_CACHE 標誌選擇。

在寫直通模式下,每個寫入都會立即作為一個或多個 WRITE 請求傳送到使用者空間,同時更新任何已快取的頁(並快取先前未快取但已完全寫入的頁)。寫入時不會發送 READ 請求,因此當未快取的頁被部分寫入時,該頁會被丟棄。

在寫回快取模式下(透過 FUSE_WRITEBACK_CACHE 標誌啟用),寫入只進入快取,這意味著 write(2) 系統呼叫通常可以非常快地完成。髒頁會隱式地(後臺回寫或記憶體壓力下的頁回收)或顯式地(由 close(2)、fsync(2) 呼叫,以及當檔案上的最後一個引用在 munmap(2) 上被釋放時)寫回。此模式假定對檔案系統的所有更改都透過 FUSE 核心模組進行(大小和 atime/ctime/mtime 屬性由核心保持最新),因此通常不適用於網路檔案系統。如果寫入部分頁,則需要首先從使用者空間讀取該頁。這意味著,即使對於以 O_WRONLY 模式開啟的檔案,核心也可能生成 READ 請求。