提高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写机制 

你可能感兴趣的:(提高io性能的技巧)