使用 FUSE 傳遞到 tmpfs + swap 時出現高延遲

使用 FUSE 傳遞到 tmpfs + swap 時出現高延遲

我在記憶體檔案系統 (tmpfs) 上建立填充層,以便可以攔截檔案系統命令並進行額外處理(最終目標是透過網路複製寫入以實現容錯)。為了攔截檔案系統指令,我使用了 FUSE。對於記憶體檔案系統,我使用 tmpfs。為了克服記憶體較小的問題,我在 SSD 上創建了足夠的交換空間供 tmpfs 使用。

總而言之,我有一個dir使用 tmpfs 掛載的目錄。我創建了另一個目錄shim,所有應用程式都寫入該目錄。 FUSE 安裝在shim並將所有操作重定向到dir.

透過使用 Filebench 直接寫入的一些微基準測試dir,我發現 tmpfs + swap 具有超低延遲,特別是與磁碟上的 ext4 相比。當 tmpfs 從寫入 RAM 切換到寫入交換空間時,沒有明顯的減速,我假設是因為一些聰明的預讀。

當我用 FUSE 覆蓋它時passthrough_hp.c然而,即使啟用多線程,檔案建立也會變得超級慢,延遲比 tmpfs + swap 高 60 倍。使用htop,我注意到它只會在寫入交換而不是內存時減慢(內存很快就會填滿,然後交換緩慢增加)。除此之外,FUSE 本身的開銷相當小。

有誰知道為什麼 FUSE 在單獨使用 swap 和 tmpfs 時不會受到延遲影響,以及我將如何優化消除這種額外的開銷?

相關內容