При записи на диск (SATA) я заметил, что tar, похоже, сильно ударил по производительности. Я пытаюсь скопировать относительно большой файл .dmg (556 МБ) с моего клиента (OSX) через локальную сеть как часть резервной копии на мой сервер (debian). При использовании типичного метода результаты были довольно плохими с точки зрения скорости передачи данных от клиента и ввода-вывода на сервере.
Для мониторинга ввода / вывода на сервере использовались: iostat -Ndx 1 и iotop -oa
scp: ~18 minutes пропускной способности на клиенте ~500KB/s-540KB/s на сервере ~800kB/s-1100kB/s (time scp <my_file> user@host:/path/to/dir/)
sftp: ~ 50% быстрее ~9 minutes пропускной способности на клиенте ~1MB/s МБ / с ввода-вывода на сервере ~1500kB/s-2000kB/s но не может быть написано в сценарии, так как я использовал графический интерфейс cyberduck
Дополнительные исследования дали этот пост, и поэтому я попробовал следующее:
На клиенте:
(tar -cf - <my_file> | pv -s $(du -sb <my_file> | awk '{print $1}') | nc -l 8888)
На сервере:
(nc <source_ip> 8888 | tar xf -)
ПРИМЕЧАНИЕ. Я прекратил использование pigz так как, по-видимому, пропускная способность клиента часто снижалась до 0 Kb/s во время передачи.
Это дало наихудшие результаты - около ~33 minutes при пропускной способности на клиенте ~300-400KB/s и вводе / выводе на сервере ~800-1200KB/s которые за последние 5 минут упали до ~200KB/s и я / O ~800KB/s соответственно.
Чтобы убедиться, что это не сеть, я изменил сервер на (nc <source_ip> 8888 > /dev/null) и время передачи сократилось до ~2minutes с пропускной способностью клиента ~6-7MB/s .
В результате дополнительных поисков на странице справки я решил изменить размер блока (-b, --blocking-factor) на более высокие значения, т. Е. 128, 512, 1024 и т.д., Что дало гораздо лучшую производительность записи при сопоставлении -b1024 с тест перенаправления в /dev/null . Справочная страница выглядит довольно устаревшей, любая ссылка относится только к изменению этой опции по отношению к записи на ленту и не упоминает современные медиа. Возможно ли, что для этого существуют негативные последствия для целостности данных? С помощью этой модификации и в соответствии с man-страницей я предполагаю, что tar пытается записать данные блоками по 512 байт, поэтому изменив их на 512 * 1024, то есть блоки по 512 КБ, я не знаю, возникнет ли проблема для ОС, чтобы написать это.
Редакция:
Первоначально размещены вдали от компьютеров, поэтому я обновил фактические используемые команды, предоставил более точное время и исправил опечатки. Также попробовал предложенное шифрование scp как предложено ниже и включил результаты
scp: ~17.5 minutes пропускной способности на клиенте ~500KB/s-540KB/s на сервере ~1100kB/s-1500kB/s
(scp -C <my_file> user@host:/path/to/dir/)
с измененным размером блока: ~42 seconds пропускная способность на клиенте и I/O на сервере ~15MB/s
клиент: (tar --disable-copyfile -cf - <my_file> | pv -s $(du <my_file> | awk '{size = $1 * 512} END {print size}') | nc -l 8888)
сервер: (nc 10.0.1.28 8888 | tar -b1024 -xf -)
