当我并行提交10个dd命令时,2个获得500 MB / s吞吐量,其他8个获得200MB / s。
这不仅发生在10个平行dd,这种变化在大约8 dd并行开始变得显着,并且在18左右停止,见框图here。
当我使用oflags = direct进行无磁盘缓存测试时,变化消失了,所有线程的执行几乎完全相同。
vm.dirty-background-ratio = 50因此,在128 GB * 50%= 64 GB的情况下,Dirty阈值未被命中,并且没有发生回写。 vm.dirty_expire_centisecs = 3000并且还没有被击中30秒。
造成这种变化的原因是什么?我怎么能摆脱它?
这是一个32核RHEL6 64位系统,具有128GB内存和ext4格式化磁盘。 这种行为是可重复的,也在我拥有的另一个RHEL盒子上。
我用来测试它的命令是:
dd if=/dev/zero of=/mnt/fs1/aaa$j bs=256k count=5000
我用于测试的完整脚本是:
outfile=./dd-${HOSTNAME}-$(date '+%Y%m%d%H%M%S').dat
for fs in '/data/tmp'; do
for i in `seq -w 1 20`; do
rm $fs/aaa* 2>/dev/null
for j in `seq -w 1 $i`; do
{ echo `date +'%d%b%y:%H:%M:%S'` $fs $i $j; time dd if=/dev/zero of=$fs/aaa$j bs=256k count=5000 ; } 2>&1 | paste -s -d " " | tr "\t" " " | tr -s " " >> $outfile &
done
wait
rm $fs/aaa* 2>/dev/null
done
done
生成以下输出:并行10个线程:
16Aug14:21:45:52 /data/tmp 10 01 5000+0 records in 5000+0 records out 1310720000 bytes (1.3 GB) copied, 1.94452 s, 674 MB/s real 0m1.946s user 0m0.005s sys 0m1.939s
16Aug14:21:45:52 /data/tmp 10 10 5000+0 records in 5000+0 records out 1310720000 bytes (1.3 GB) copied, 2.33119 s, 562 MB/s real 0m2.332s user 0m0.000s sys 0m2.331s
16Aug14:21:45:52 /data/tmp 10 09 5000+0 records in 5000+0 records out 1310720000 bytes (1.3 GB) copied, 6.56941 s, 200 MB/s real 0m6.570s user 0m0.003s sys 0m5.528s
16Aug14:21:45:52 /data/tmp 10 03 5000+0 records in 5000+0 records out 1310720000 bytes (1.3 GB) copied, 6.61216 s, 198 MB/s real 0m6.614s user 0m0.002s sys 0m5.745s
16Aug14:21:45:52 /data/tmp 10 02 5000+0 records in 5000+0 records out 1310720000 bytes (1.3 GB) copied, 6.62207 s, 198 MB/s real 0m6.623s user 0m0.005s sys 0m5.574s
16Aug14:21:45:52 /data/tmp 10 04 5000+0 records in 5000+0 records out 1310720000 bytes (1.3 GB) copied, 6.63135 s, 198 MB/s real 0m6.632s user 0m0.004s sys 0m5.574s
16Aug14:21:45:52 /data/tmp 10 05 5000+0 records in 5000+0 records out 1310720000 bytes (1.3 GB) copied, 6.63068 s, 198 MB/s real 0m6.632s user 0m0.005s sys 0m5.756s
16Aug14:21:45:52 /data/tmp 10 07 5000+0 records in 5000+0 records out 1310720000 bytes (1.3 GB) copied, 6.6317 s, 198 MB/s real 0m6.633s user 0m0.006s sys 0m5.587s
16Aug14:21:45:52 /data/tmp 10 06 5000+0 records in 5000+0 records out 1310720000 bytes (1.3 GB) copied, 6.63953 s, 197 MB/s real 0m6.641s user 0m0.006s sys 0m5.769s
16Aug14:21:45:52 /data/tmp 10 08 5000+0 records in 5000+0 records out 1310720000 bytes (1.3 GB) copied, 6.65992 s, 197 MB/s real 0m6.662s user 0m0.005s sys 0m5.739s
谢谢,巴特