原文:Optimal buffer size for write(2)
翻譯:
前說一下,我想要寫1GB的數(shù)據(jù)到文件中陡叠,在Linux ext3文件系統(tǒng)中使用 write(2)系統(tǒng)調(diào)用,發(fā)生了非常繁忙的環(huán)境(許多IO操作)译红。在這期間最佳的緩沖大小是多少呢侦厚,比如說,4kb诗宣,4Mb想诅,什么時(shí)候:
1.不使用 O_DIRECT打開標(biāo)識(shí)来破,或者
2.使用 O_DIRECT
請(qǐng)不要使用“取決于你自己”這樣的答案----我想得到一些答案從文件系統(tǒng)的使用者中。
Answers1:
正如評(píng)論中討論的那樣诅诱,我相信精確的大小不是很重要娘荡,比如說:
1.文件系統(tǒng)大小的一小塊
2.2的冪(因此系統(tǒng)和內(nèi)核喜歡它)
3.不太大(適合處理器的一些緩存炮沐,比如L2緩存)
4.內(nèi)存對(duì)齊(例如page大小使用posix_memalign)
所以央拖,在 16kbytes到幾M字節(jié)之間的2的冪的數(shù)都應(yīng)該是可以的鲜戒。大部分的時(shí)間應(yīng)該是花費(fèi)了在讀磁盤上遏餐。文件系統(tǒng)和硬盤的基準(zhǔn)應(yīng)該差不多伦腐。
4kbytes通常是page和硬盤chunk的大小。
當(dāng)然失都,你可以調(diào)整這些事情柏蘑,在你使用 mke2fs制作文件系統(tǒng)的時(shí)候。
我敢打賭最佳的情況取決于你的硬盤(SSD還是普通硬盤)和你的系統(tǒng)(負(fù)載)粹庞。
Answers2:
根據(jù)我的經(jīng)驗(yàn)回答咳焚,更多取決于底層設(shè)備和硬件而不是文件系統(tǒng)本身--即設(shè)備上的緩存,以及設(shè)備寫入小塊的能力庞溜。然而革半,你不應(yīng)該寫入比你文件系統(tǒng)塊更小的數(shù)據(jù)(stat(.),一般是4kb)--同樣流码,你不應(yīng)該超出CPU L2又官、L3緩存大小,在大多數(shù)情況下漫试,大小可能低到512kb六敬。
SSD設(shè)備一般使用64kb作為操作單元驾荣,因此我建議緩沖的大小在 64kb~128kb應(yīng)該是最優(yōu)的--這樣是我的經(jīng)驗(yàn)值。
Answers3:
包含stdio.h頭文件割笙,應(yīng)該將BUFSIZ定義為系統(tǒng)的最佳大小般码。 這絕不是保證,但如果你無法執(zhí)行廣泛的基準(zhǔn)測(cè)試,這是正確的值橘洞,或者這是一個(gè)進(jìn)行基準(zhǔn)測(cè)試的一個(gè)起始值。