Я хотел сделать резервную копию пути от компьютера в моей сети к другому компьютеру в той же сети по линии 100 Мбит / с. Для этого я сделал
dd if=/local/path of=/remote/path/in/local/network/backup.img
что дало мне очень низкую скорость передачи данных по сети, порядка 50-100 кБ / с, что заняло бы целую вечность. Поэтому я остановил его и решил попробовать распаковать его на лету, чтобы сделать его намного меньше, чтобы сумма перевода была меньше. Так я и сделал
dd if=/local/path | gzip > /remote/path/in/local/network/backup.img.gz
Но теперь я получаю примерно 1 МБ / с скорости передачи по сети, так что в 10-20 раз быстрее. Заметив это, я проверил это на нескольких путях и файлах, и это всегда было одинаково.
Почему dd
прохождение по трубопроводу gzip
также увеличивает скорость передачи в значительной степени, а не только уменьшает длину байта потока в значительной степени? Вместо этого я ожидал даже небольшого снижения скорости передачи из-за более высокого потребления ЦП при сжатии, но теперь я получаю двойной плюс. Не то чтобы я не был счастлив, но мне просто интересно. ;)
dd
вывод со скоростью 1 МБ / с ... прямо вgzip
канал ожидания . Это имеет очень мало общего с размером блока.Ответы:
dd
по умолчанию используется очень маленький размер блока - 512 байт (!!). То есть много маленьких читает и пишет. Кажется, чтоdd
, наивно использованный в вашем первом примере, генерировал большое количество сетевых пакетов с очень маленькой полезной нагрузкой, таким образом уменьшая пропускную способность.С другой стороны,
gzip
достаточно умен, чтобы делать ввод-вывод с большими буферами. То есть меньшее количество больших записей по сети.Можете ли вы попробовать еще
dd
раз с большимbs=
параметром и посмотреть, работает ли он лучше на этот раз?источник
gzip
и размер блокаbs=10M
-> быстрая передача по сети что-то около 3 или 4 МБ / с. Более высокий размер блокаgzip
ничего не изменил по сравнению с маленьким размером блокаgzip
.write(3)
в буфер.Немного опоздал, но могу добавить ...
В одном из интервью меня как-то спросили, каким будет самый быстрый из возможных методов клонирования побитовых данных и грубых ответов с использованием
dd
илиdc3dd
( финансируется DoD ). Интервьюер подтвердил, что передача по каналу более эффективна, поскольку это просто позволяет одновременноdd
выполнять чтение / запись или программисту , в результате чего скорость записи удваивается, а время передачи увеличивается вдвое.dd
stdin/stdout
источник
dd status=progress if=/dev/zero count=100000 bs=1M of=/dev/null
было 22,5 ГБ / с,dd status=progress if=/dev/zero count=100000 bs=1M | dd of=/dev/null bs=1M
было 2,7 ГБ. Так что труба делает это медленнее.Конг правильно. Вы передаете блоки с диска без сжатия на удаленный хост. Ваш сетевой интерфейс, сеть и ваш удаленный сервер являются ограничением. Сначала вам нужно повысить производительность DD. Задание параметра bs =, который выравнивается с буферной памятью дисков, обеспечит максимальную производительность диска. Например, bs = 32M. Затем он заполнит буфер gzip на скорости линии sata или sas из буфера накопителей. Диск будет более склонен к последовательной передаче, дающей лучше через пут. Gzip сожмет данные в поток и отправит их в ваше местоположение. Если вы используете NFS, это позволит минимизировать передачу nfs. Если вы используете SSH, то вы подвергаетесь инкапсуляции SSH и накладным расходам шифрования. Если вы используете netcat, то у вас нет шифрования над головой.
источник
Здесь я предполагаю, что о «скорости передачи», на которую вы ссылаетесь, сообщается
dd
. Это действительно имеет смысл, потому чтоdd
на самом деле скорость передачи данных в 10 раз выше, чем в секунду ! Однакоdd
не передается по сети - эта задача обрабатываетсяgzip
процессом.Некоторый контекст:
gzip
потребляет данные из своего входного канала так быстро, как может очистить свой внутренний буфер. Скорость, с которойgzip
очищается буфер, зависит от нескольких факторов:Таким образом, в этом случае сеть может обрабатывать 100 кБ / с и
gzip
сжимает данные примерно в 10: 1 (и не является узким местом ЦП). Это означает, что, пока он выдает 100 КБ / с, онgzip
может потреблять 1 МБ / с, а скорость потребления - это то, чтоdd
видно.источник