对程序来说,读写文件的快慢,是操作系统提供的能力。
在写的时候,操作系统一般会有缓存,称buffer,然后定期刷到磁盘。所以操作系统内存(这部分内容叫buffer)足够的情况下,程序短暂的写会表现得很好; 如果是长期持续写入,那缓存作用不大,写入能力就基本等同于磁盘的写能力;
在读的时候,如果要读取的内容是之前写入的,数据已经在内存,这部分内容叫cache,那么读取就不需要去读磁盘,这个时候对程序来说,读操作等同于读内存,速度很快;如果文件内容不在缓存,则读取速度等同于读取磁盘。所以一般在Linux操作系统,第一次读文件可能慢,但第二次是飞快的,因为内容已经进入cache了。
一溜的回复很精彩,把操作系统的缓存特性说的非常清楚。
那怎么看待磁盘性能与操作系统的缓存之间的关系呢:
通常场景是数据读写都走系统缓存,由内核定期刷到磁盘,那么如果为了测试磁盘性能,拼命地去调用read或者write函数,那不是真正磁盘的性能,sysbench默认磁盘性能测试就是调用pread函数和pwrite函数,所以没有真正测试到磁盘性能。
如何正确测试磁盘性能,那就要绕开缓存,直接读写磁盘,通过设置文件的访问模式为 O_DIRECT,就可以真正测试磁盘性能。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。