Почему такая большая разница в записи на диск при проверке с помощью команды dd without bs и with bs

дд если =/dev/zero of =/tmp/test.log count = 100000000

100000000+0 records in
100000000+0 records out
51200000000 bytes (51 GB) copied, 289.564 s, 177 MB/s

dd if =/dev/zero of =/tmp/test1.log bs = 1G count = 50 oflag = dsync

50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 150.427 s, 357 MB/s

дд если =/dev/zero of =/tmp/test2.log count = 100000000

100000000+0 records in
100000000+0 records out
51200000000 bytes (51 GB) copied, 288.614 s, 177 MB/s

дд если =/dev/zero of =/tmp/test3.log bs = 1G count = 50 oflag = direct

50+0 records in
50+0 records out
53687091200 bytes (54 GB) copied, 109.774 s, 489 MB/s

Я вытаращил через выкатывание , но не получить конкретный пример , однако есть хорошая статья здесь , которая имеет несколько хороших caveates.

1 ответ1

3

Без параметра bs dd будет использовать стандартный размер блока устройства, очень часто 512 байт. Это означает, что

  • за каждые 512 байт полезной нагрузки вы переносите накладные расходы на запрос.
  • Если размер блока 512 не является оптимальным размером блока для вашего устройства (например, секторы 4K с эмуляцией 512 или твердотельные накопители), вы отвлекаете устройства от оптимальной рабочей точки.

В зависимости от вашего оборудования, возможно, будет возможно получить еще лучшие цифры с меньшим значением bs как они будут помещаться в кэш устройств. Например, для RAID-контроллера с кешем 1 ГБ вы можете попробовать размер блока 10 МБ.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .