Filesystems

文件系統塊大小混淆

  • March 28, 2016

我知道塊大小一般來說是文件系統的最小操作單元,但是我被 I/O 性能基準工具 fio 弄糊塗了,它有一個bs參數來設置“塊大小”。

如果塊大小是針對文件系統的,為什麼 fio 可以為基准設置一個?它們是相同的“塊大小”嗎?

如果我發現 1M 的“fio 塊大小”性能最佳,因為 fio 可以做到這一點,我是否可以強制在此文件系統上執行的所有程序使用 1M 塊大小來實現最佳性能?用保險絲掛載的遠端文件系統怎麼樣,我可以在掛載時設置塊大小嗎?

這裡有很多細節,我會在這裡嘗試總結要點。

文件系統塊大小是一次可以保留的最小分配單元。因此,如果文件系統的塊大小為 4096,那麼大小為 1 字節的文件在硬碟上仍佔用 4096 字節。

這是因為文件系統必須知道硬碟的哪個部分屬於哪個文件。如果塊大小更小,則分配表會更大。如果塊大小更大,那麼小文件會浪費更多的空間。

根據使用的文件系統,還有其他為文件分配空間的策略。但這是最常用的基本策略。

但是,在應用程序級別,參數是執行基準測試時使用bs的單個寫入/讀取操作的塊大小。fio較大的寫入/讀取操作大小可以提供更好的性能,因為可以組合多個文件系統級別的塊寫入。

您不能強制應用程序使用任何特定的塊大小。他們隨時寫入/讀取他們想要的數據量。單個寫入/讀取操作的大小從幾個字節到幾兆字節不等,這都取決於應用程序。

fio這裡是一個例外,因為它是一個基準工具。

遠端文件系統在遠端伺服器的文件系統之上執行,因此遠端伺服器上的實際文件系統指定了硬碟上使用的塊大小。

訪問遠端伺服器文件系統時使用的協議也有一些“塊大小”,通常由 TCP 段大小定義,由 MTU 確定。MTU 在 Internet 中通常為 1500 字節。在某些本地環境中,MTU 可以是 9000 字節。這需要網路所有部分(交換機、路由器和 NIC)的支持才能正常工作。

引用自:https://serverfault.com/questions/766417