[英]Optimal buffer size for write(2)
假設我想在文件中寫入1 GB的數據,比如說使用write(2)
系統調用的ext3
Linux文件系統,這種情況發生在一個非常繁忙的環境中 (很多類似的I / O很簡單)。 間隔中的最佳緩沖區大小是多少,例如, [4 kB, 4 MB]
O_DIRECT
打開標志,或 O_DIRECT
? 請不要“自己檢查”答案 - 我想從“文件系統”人那里得到答案。
根據我的經驗,答案更多地依賴於底層設備和硬件而不是文件系統本身 - 即設備上的緩沖區緩存,以及設備以小塊等方式寫入的功能 - 但是你永遠不應該寫入尺寸小於文件系統塊大小( stat(.)
- 可能大約4kb ) - 同樣地,你不應該超出CPU的L2 / L3高速緩存大小,在許多情況下可以低至512kb 。
鑒於SSD設備和類似像 64KB作為操作的單元,然后我會建議64KB-128KB的緩沖區大小的最優化-這也符合我的作為具有最高吞吐量的實際經驗。
正如評論中所討論的那樣,我認為確切的大小並不重要,假設它是:
stat(".")
等) posix_memalign
對頁面大小)。 因此,16k字節和幾兆字節之間的2的功率應該是合適的。 大部分時間都花在閱讀磁盤上。 文件系統和磁盤基准測試在該范圍內非常平坦。
4Kbytes似乎通常是頁面大小和磁盤塊大小。
當然,在使用文件系統塊大小mke2fs
創建文件系統時,您可以調整內容,甚至調整。
我敢打賭,最優化實際上取決於您的硬件(SSD,硬盤?)和您的系統(及其負載)。
包括stdio.h應該將BUFSIZ定義為系統的最佳大小。 這絕不是保證,但如果您沒有能力進行廣泛的基准測試,那么它是正確的使用價值,並且它是此類基准測試的良好起點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.