关于DirectIO时的IO放大探究分析
大小:0.6 MB 人气: 2017-10-10 需要积分:1
标签:
DirectIO时的IO放大探究2016-06-21 10:51前段时间在对我们自己开发的文件系统测试过程中发现一个有趣的现象:IO放大。测试现象描述如下:
• 现象1:iostat –x /dev/sdh1,观察发现每秒完成的读请求次数100+,而测试程序统计的实际IOPS为50,约为iostat统计数据的一半;
• 现象2:cat /sys/block/sdh1/stat发现测试程序运行过程中,该设备被读的数据量为77292KB,而测试程序实际读数据量为40000KB。
我们会在下面的两个测试以及原理分析中揭示这些额外IO来自何方。
测试1:不同offset读文件测试
测试目的
测试ext3文件系统元数据(索引块)对文件读性能影响
测试方法
顺序读数据目录(500个1GB大小文件)所有文件,每个文件读一次,每轮测试中读文件offset一致,一共执行五轮,offset分别为32KB,48KB,64KB,1GB-40KB,每轮测试之前清空缓存(echo 3 》 /proc/sys/vm/drop_caches),使用O_DIRECT方式读,每次读4KB。
测试结果

结论
上面的测试较为有力地解释了ext3文件系统元数据(主要指索引块)对杜性能影响。在元数据缓存未命中情况下,读文件offset越大,产生额外IO越多,IOPS越低。
测试2:元数据缓存性能测试
测试目的
测试ext3文件系统元数据(主要指索引块)缓存与否对文件读性能影响
测试方法
顺序读数据目录下所有文件(500个,每个大小为1GB),每个文件只读一次,offset为1GB-40KB(根据计算,ext3此时使用二级间接索引)。测试共执行两轮,第一轮测试之前清cache,第二轮测试之前不清理cache,使用O_DIRECT方式读,读大小4KB。
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%
