优先读写文件

优先读写文件

美好的一天,我有一个问题但找不到答案。我测试了我的硬盘,使用 dd 安装在 /media/data 上。一些简单的脚本:

写:

echo "3" > /proc/sys/vm/drop_caches 
for i in {1..10}; do 
  dd if=/dev/zero of=/media/data/test/testfile-$i bs=4096 count=1310720 conv=fdatasync 
done

result: 
my-home# bash test1
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 30,7945 s, 174 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 30,8114 s, 174 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 30,9237 s, 174 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 30,9386 s, 174 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 30,8568 s, 174 MB/s

iostat:
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2,17    0,00    4,22   21,23    0,00   72,38
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0,00         0,00         0,00          0          0
sdb             172,00         0,00    176128,00          0     176128

读:

echo "3" > /proc/sys/vm/drop_caches 
for i in $(ls /media/data/iso); do 
  dd if=/media/data/iso/$i of=/dev/null bs=4096 
done 

result:
my-home# bash test1_read
632291328 bytes (632 MB, 603 MiB) copy, 3,46719 s, 182 MB/s
3994091520 bytes (4,0 GB, 3,7 GiB) copy, 21,4655 s, 186 MB/s
1317427200 bytes (1,3 GB, 1,2 GiB) copy, 7,03572 s, 187 MB/s
4696938496 bytes (4,7 GB, 4,4 GiB) copy, 25,0823 s, 187 MB/s
699400192 bytes (699 MB, 667 MiB) copy, 3,77014 s, 186 MB/s

iostat:
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1,13    0,00    2,89   10,30    0,00   85,68

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0,00         0,00         0,00          0          0
sdb            1432,00    183296,00         0,00     183296          0

速度很好,但是当我在不同的终端中同时运行这些脚本时。 Write-script 运行速度更快并占用所有硬盘资源:

my-home# bash test1
Sep 29 7:57:57 UTC 2016
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 31,9903 s, 168 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 32,0175 s, 168 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 32,0138 s, 168 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 31,9956 s, 168 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 32,0198 s, 168 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 32,136 s, 167 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 31,9074 s, 168 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 32,237 s, 167 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 32,0998 s, 167 MB/s
5368709120 bytes (5,4 GB, 5,0 GiB) copy, 32,4163 s, 166 MB/s

my-home# bash test1_read 
Sep 29 7:57:57 UTC 2016
632291328 bytes (632 MB, 603 MiB) copy, 3,46899 s, 182 MB/s
3994091520 bytes (4,0 GB, 3,7 GiB) copy, 149,177 s, 26,8 MB/
4696938496 bytes (4,7 GB, 4,4 GiB) copy, 214,307 s, 21,9 MB/s
263127040 bytes (263 MB, 251 MiB) copy, 1,44909 s, 182 MB/s

iostat:
                    Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
29.09.2016 08:03:17 sdb             164,00         1,38       157,03          2        314
29.09.2016 08:03:19 sdb             172,00         1,50       161,52          3        323
29.09.2016 08:03:21 sdb             163,00         1,38       156,52          2        313
29.09.2016 08:03:23 sdb             169,50         0,88       166,00          1        332
29.09.2016 08:03:25 sdb             164,50         0,38       162,01          0        324
29.09.2016 08:03:27 sdb             161,50         1,38       154,52          2        309
29.09.2016 08:03:29 sdb             168,00         0,50       165,51          1        331
29.09.2016 08:03:31 sdb             160,50         0,75       156,02          1        312
29.09.2016 08:03:33 sdb             164,00         0,38       162,00          0        324
29.09.2016 08:03:35 sdb             164,50         0,25       162,01          0        324
29.09.2016 08:03:37 sdb             277,50         0,88       156,52          1        313
29.09.2016 08:03:39 sdb             318,00         0,25       161,00          0        322
29.09.2016 08:03:41 sdb             313,50         1,00       154,35          2        308
29.09.2016 08:03:43 sdb             758,00        80,31        88,19        160        176
29.09.2016 08:03:45 sdb            1398,00       174,63         0,00        349          0
29.09.2016 08:03:47 sdb            1429,00       178,62         0,00        357          0
29.09.2016 08:03:49 sdb            1429,50       178,69         0,00        357          0
29.09.2016 08:03:51 sdb            1427,00       178,31         0,00        356          0
29.09.2016 08:03:53 sdb            1430,50       178,81         0,00        357          0
29.09.2016 08:03:55 sdb            1431,00       178,88         0,00        357          0
29.09.2016 08:03:57 sdb            1431,00       178,88         0,00        357          0
29.09.2016 08:03:59 sdb            1431,00       178,88         0,00        357          0
29.09.2016 08:04:01 sdb            1423,00       177,81         0,00        355          0
29.09.2016 08:04:03 sdb            1431,50       178,94         0,00        357          0

为什么写优先于读?我的调度程序是 Linux Mint 18 的默认调度程序:

my-home# cat /sys/block/sdb/queue/scheduler 
noop [deadline] cfq 

对于这个调度程序来说,读取的优先级高于写入,但事实并非如此。

相关内容