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

Почему scp со сжатием медленнее, чем без него?

Мне нужно было передать 20 ГБ KVM vdisk, хранящий корневую файловую систему виртуальной машины CentOS 6.5, с одного лабораторного сервера на другой. Большой размер файла и тот факт, что я однажды сжал такой файл виртуального диска до нескольких сотен мегабайт, заставили меня инстинктивно включить сжатие с помощью scp но я был удивлен, увидев довольно низкую скорость передачи. Потом я попробовал bzip2 в комбинации с ssh и cat и был поражен. Вот сводка методов и средней пропускной способности.

Разве сжатие не должно было быть быстрее?

РЕДАКТИРОВАТЬ: Я не знаю, почему вопрос был отклонен. Я думал, здесь есть чему поучиться.

После получения ssh(1) Совет по странице руководства от @sven, я попробовал несколько альтернативных методов передачи файлов без сжатия, оба с лучшими результатами.

С помощью nc оказался самым быстрым методом копирования!

В прошлом, scp -C работал очень хорошо, когда я думал, что это будет. Например, при передаче системных журналов (/var/log/messages*) размером в несколько ГБ. Скорость передачи без сжатия в несколько сотен КБ / с увеличится до 1-2 МБ / с. Этот пример действительно подходит для случая медленного соединения, как было указано на странице руководства.

У меня есть случай, когда вновь созданный образ виртуального диска для раздела 20 ГБ имеет сжатый размер всего 200 МБ. Со скоростью передачи около 25 МБ / с мы могли сделать копирование всего за 8 секунд вместо 13 минут! Ясно, scp без сжатия в этом случае неэффективен и scp -C еще хуже.

Думаю, главный урок здесь заключается в том, что scp -C следует рассматривать только как удобство. Если файл может быть значительно сжат, то лучше сначала сжать его в источнике, передать сжатую форму и, наконец, выполнить dcompress в месте назначения. Инструменты, которые быстро выполняют сжатие и распаковку (например, pbzip2) будет большим подспорьем.

Цитирование man ssh (это база, используемая scp):

Сжатие желательно на модемных линиях и других медленных соединениях, но только замедлит работу в быстрых сетях.

Проблема в том, что сжатие данных занимает больше времени, чем просто их отправка по сети.

Кроме того, помимо сжатия, nc получает лучшую скорость, потому что также не шифрует. А сжатие без потерь основано на поиске избыточных разделов данных, которые, когда это делается на сетевом уровне, вы можете посмотреть максимум [размер буфера] байтов, где, когда выполняется сначала со всем файлом, это [размер файла] байтов. внутри которого можно искать и обрабатывать повторяющиеся байтовые предложения.

Также для перемещения образов дисков вы должны использовать инструмент, поддерживающий файловую систему, например ntfsclone / partclone, потому что даже сжатие не может победить простой пропуск нераспределенных блоков - ваша скорость передачи бесконечна, если вам не нужно передавать какие-либо данные. Также не забудьте уничтожить файлы подкачки и гибернации в разделе Windows, иначе вы копируете ненужные файлы, которые все равно будут выброшены и созданы заново.