DD от / dev / zero до / dev / null… что на самом деле происходит

12

Что происходит в команде

sudo dd if=/dev/zero of=/dev/null bs=500M count=1. 

Куда вообще идут нули и что вообще происходит? Скорость 905 МБ / с

Если я перехожу на ramdisk, скорость составляет всего 388 МБ / с. И если я ddк своему HDD скорость только 63,2 МБ / с

AGZ
источник
1
/dev/nullявляется хорошим местом для тестирования / синхронизации операций чтения . /dev/zeroявляется хорошим источником для операций тестирования / записи по времени . Объединение этого источника и назначения в одной операции не имеет особого смысла. Даже не уверен, дает ли это какое-либо значимое количество служебных данных.
опилки
@sawdust И наоборот, нет?
Джейми
2
Да, @sawdust, ваш комментарий выше неприятен (для новичков). of = / dev / sda перезапишет чьи-то разделы на жестком диске, содержимое и т. д. of = ~ / bigfile.tmp был бы лучшим примером для использования ...
Кевин Траас
2
Я знаю, что довольно поздно опаздываю на вечеринку, но в случае, если кто-то захочет попробовать это для себя: нет необходимости запускать эту команду от имени пользователя root и, следовательно, нет необходимости в sudo.
Роэль Шровен
@ Джейми Нет, это правильный путь.
Аун

Ответы:

14

/dev/zeroобеспечивает бесконечный поток нулевых байтов при чтении. Эта функция предоставляется ядром и не требует выделения памяти. Все записи в /dev/nullотбрасываются молча.

В результате, когда вы выполняете dd, система генерирует 500 мегабайт в нулевых байтах, которые просто отбрасываются. За исключением временного буфера, никакие данные не сохраняются ни до, ни во время, ни после этой операции.

Скорость перевода из /dev/zeroв /dev/nullопределяется прежде всего скоростью вашего процессора и соответствующими системными вызовами. (В вашем случае размер буфера составляет 500 МБ, и, следовательно, операция также проверяет скорость вашей памяти.)

bwDraco
источник
7

Я переведу эту команду для вас:

dd if=/dev/zero of=/dev/null bs=500M count=1

Дублируйте данные ( dd) из входного файла ( if) из /dev/zero(виртуальной неограниченной поставки 0) в выходной файл ( of) из /dev/null(виртуальной раковины), используя блоки размером 500 М ( bs= размер блока), и повторите это ( count) только один раз ( 1).

В общем, эта команда должна измерять только память и скорость шины. Тем не менее, это может произойти сбой, если у вас нет 500 МБ оперативной памяти. Таким образом, в некотором смысле это также неявно показывает, как быстро ваша ОС может выделять большие куски памяти.

MVP
источник
Если он измеряет память, почему запись на виртуальный диск значительно медленнее?
AGZ
2
Поскольку ramdisk все еще должен быть отформатирован, чтобы иметь файловую систему, которая должна поддерживаться драйвером ядра. Это также означает, что запись на ramdisk будет сопряжена с копированием данных из пространства пользователя в пространство ядра - не совсем бесплатно. С / dev / zero или / dev / null эти издержки практически равны нулю.
Mvp
Я никогда не видел «дубликаты данных» раньше. Я помню, как читал в старых справочных страницах SunOS, что dd означает «копировать и конвертировать» (был взят cc).
Дэн Притц
5

/ dev / null - это черная дыра. Он не является точным для тестирования обычных операций записи, так как фактически не записывает на диск, как это делал бы обычный файл. Вместо того, чтобы записывать головку на диск, данные удаляются сразу после записи на устройство, поэтому они всегда будут быстрее, чем обычные локальные записи.

/ dev / zero аналогичен для чтения. Он не требует движения головы для чтения, это просто неограниченный набор нулевых символов, поэтому он всегда будет читать быстрее, чем любое локальное чтение.

Другими словами, это похоже на тестирование в пустоте и не даст точной картины того, что должны дать обычные локальные операции чтения и записи.

MaQleod
источник
Рам также не участвует, я предполагаю ... так что же этот тест ... тактовая частота?
AGZ
1
  1. /dev/nullнигде нет; записанные в него данные просто удаляются.

  2. Ваш виртуальный диск имеет файловую систему, которую он должен использовать. ddдолжен создать запись в файловой системе и написать в соответствии с правилами файловой системы. Также ваша ОС одновременно использует вашу память для других вещей, поэтому ваша операция записи получает то, что осталось.

  3. Не SSD Жесткие диски просто медленные, что тоже правильно.

cybernard
источник