12

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

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

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

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

4 ответа4

13

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

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

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

7

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

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

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

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

5

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

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

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

1
  1. /dev/null - это нигде; записанные в него данные просто удаляются.

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

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

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