Назад | Перейти на главную страницу

Почему dd в первый раз показывает низкую скорость диска?

Я проверяю скорость жесткого диска на CentOS 6 с помощью команды dd. Это установка DRBD, причем этот сервер является основным. Чтобы убедиться, что я получаю правильные значения, я выполняю команду dd 3 раза с разными выходными файлами, а затем измеряю среднее время чтения / записи. Однако первое чтение команды dd на порядок медленнее, чем следующее 2. Например.

time -p dd if=/dev/zero of=/mailstore/testfile bs=16k count=16384
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 88.5175 s,
3.0 MB/s
real 90.12
user 0.00
sys 0.66

time -p dd if=/dev/zero of=/mailstore/testfile1 bs=16k count=16384
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 0.226015 s, 1.2 GB/s
real 0.30
user 0.00
sys 0.22


time -p dd if=/dev/zero of=/mailstore/testfile2 bs=16k count=16384
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 0.22094 s, 1.2 GB/s
real 0.22
user 0.00
sys 0.21

Это нормально ? Следует ли игнорировать первое чтение и после этого взять еще 3?

Как было предложено poige, команда dd дает согласованный вывод с использованием опции opflag = direct. Например.

time -p dd if=/dev/zero of=/mailstore/filetest33 bs=16k count=16384 oflag=direct
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 296.587 s, 905 kB/s
real 296.61
user 0.03
sys 1.07

time -p dd if=/dev/zero of=/mailstore/filetest44 bs=16k count=16384 oflag=direct
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 260.308 s, 1.0 MB/s
real 260.42
user 0.04
sys 1.13

time -p dd if=/dev/zero of=/mailstore/filetest56 bs=16k count=16384 oflag=direct
16384+0 records in
16384+0 records out
268435456 bytes (268 MB) copied, 253.681 s, 1.1 MB/s
real 253.68
user 0.03
sys 1.06

dd имеет direct опция, которая требует, чтобы ядро ​​обходило любое кеширование и отправляло данные напрямую на блочное устройство. Если вам нужно протестировать свое устройство, а не оперативную память, вы должны использовать его, например, e. грамм.:

dd if=/dev/zero of=direct_output bs=1M count=100 oflag=direct

Итак, вы сказали, что он был установлен по сети. Какая файловая система, CIFS или NFS? В любом случае, я подозреваю, что вам делегировали файл. Когда вашему клиенту делегируется файл, он может кэшировать записи локально. Однако, когда вы используете O_DIRECT (что означает oflag = direct), записи отправляются на сервер немедленно, а не кэшируются.

В любом случае происходит что-то странное. Вы должны получать более 1,1 МБ / с, если на самом деле не используете Ethernet 10 Мбит / с.

Кроме того, вы можете получить обновление скорости в середине передачи, запустив в другом окне команду killall -USR1 dd. Если вы проверите страницу руководства dd, вы увидите, что сигнал USR1 не уничтожает / останавливает dd, а распечатывает I / О статистика. Я часто делаю это, ожидая передачи больших дисков:

во время сна 10; сделать killall -USR1 dd; сделано

О, и если вы подозреваете кеширование диска, используйте эту команду для очистки кэша чтения: echo 1> / proc / sys / vm / drop_caches

Удачи!