天天看點

提高io性能的技巧

1 合理設計你的檔案粒度,太小的檔案造成太多的磁盤随機讀寫,太大的檔案會降低系統的可靠性,例如檔案header損壞,你丢失的資料就更多

2 同上道理,慎用fseek,這也需要你合理設計你檔案中的資料結構

3 采用合适的buf機制,你可以

read/write 無buf

fread/fwrite 有buf,用setbuf/setvbuf增大buf可以增加效率,但它的作用不是無效發揮的,如果你讀寫調用粒度太小,它就失去了優化,另外要注意你的讀寫頻率,如果讀寫不頻繁,就不适合用太大的buf

iostream 在linux上性能還可以,windows性能較弱,iostream.getline < iostream.read/write < fread/fwrite,測試發現,從後到前,每一個速度要慢3倍

除了read/write,上面的調用帶來了3級buf,cache<->clib/iostream buf<->user defined buf,這本身也降低了性能,在必要的适合使用mmap,避免cache和應用buf間的拷貝

4 direct io使用比較麻煩,感覺不如mmap,畢竟前者也要在應用内建立buf,完成從磁盤到應用buf的拷貝

mmap > read/write > fread/fwrite > iostream

如果業務邏輯需要随機讀寫,一定要在業務讀寫與實際io讀寫間加一層,詳見NBU dedupe container寫機制