BufferedIO和DirectIO混用导致的脏页回写问题
October 15th, 2012
8 comments
原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: BufferedIO和DirectIO混用导致的脏页回写问题
今天曲山同学在线上问道:
我测试发现,如果cp一个文件,然后direct io读这个文件,会消耗很长时间。
我猜测dio不能用page cache,而这个文件cp以后都在cache里面,要强制刷到磁盘,才能读?
我cp这个文件很大,超过256M
由于数据文件默认是用bufferedio方式打开的,也就是说它的数据是先缓冲在pagecache里面的,写入的数据会导致大量的脏页,而且这部分数据如果内核内存不紧张的话,是一直放在内存里面的的。我们知道directio是直接旁路掉pagecache直接发起设备IO的,也就是说在发起IO之前要保证数据是先落地到介质去,所以如果文件比较大的话,这个时间会比较长。从pagecahce的回写行为我们可以知道,只要脏页的数量不超过总内存的10%, 我们的机器有4G的内存,所以2个100M的文件总共才200M,不会导致writeback发生,我们可以很顺利的观察到这个现象。
有了上面的分析,下面我们来重现下这个问题。以下是我的步骤:
Read more…
Post Footer automatically generated by wp-posturl plugin for wordpress.
Recent Comments