簡體   English   中英

寫入的最佳緩沖區大小(2)

[英]Optimal buffer size for write(2)

假設我想在文件中寫入1 GB的數據,比如說使用write(2)系統調用的ext3 Linux文件系統,這種情況發生在一個非常繁忙的環境中 (很多類似的I / O很簡單)。 間隔中的最佳緩沖區大小是多少,例如, [4 kB, 4 MB]

  1. 不使用O_DIRECT打開標志,或
  2. 使用O_DIRECT

請不要“自己檢查”答案 - 我想從“文件系統”人那里得到答案。

根據我的經驗,答案更多地依賴於底層設備和硬件而不是文件系統本身 - 即設備上的緩沖區緩存,以及設備以小塊等方式寫入的功能 - 但是你永遠不應該寫入尺寸小於文件系統塊大小( stat(.) - 可能大約4kb ) - 同樣地,你不應該超出CPU的L2 / L3高速緩存大小,在許多情況下可以低至512kb

鑒於SSD設備和類似 64KB作為操作的單元,然后我會建議64KB-128KB的緩沖區大小的最優化-這也符合我的作為具有最高吞吐量的實際經驗。

正如評論中所討論的那樣,我認為確切的大小並不重要,假設它是:

  • 文件系統大小的一小部分(見Joachim Pileborg評論建議stat(".")等)
  • 兩個人的力量(因為計算機和像他們一樣的內核)
  • 不太大(例如適合處理器內的某些緩存,例如L2緩存)
  • 在內存中對齊(例如使用posix_memalign對頁面大小)。

因此,16k字節和幾兆字節之間的2的功率應該是合適的。 大部分時間都花在閱讀磁盤上。 文件系統和磁盤基准測試在該范圍內非常平坦。

4Kbytes似乎通常是頁面大小和磁盤塊大小。

當然,在使用文件系統塊大小mke2fs創建文件系統時,您可以調整內容,甚至調整。

我敢打賭,最優化實際上取決於您的硬件(SSD,硬盤?)和您的系統(及其負載)。

包括stdio.h應該將BUFSIZ定義為系統的最佳大小。 這絕不是保證,但如果您沒有能力進行廣泛的基准測試,那么它是正確的使用價值,並且它是此類基准測試的良好起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM