rsync очень медленный (фактор от 8 до 10) по сравнению с cp при копировании файлов из nfs-share в локальный каталог

17

У меня есть недавно установленный Ubuntu-сервер, который должен стать новым резервным сервером для нашего виртуального хранилища. Сервер имеет 4 сетевых адаптера, 2 из которых 10 Гбит (на самом деле это Intel x540-T2 с новейшим доступным драйвером), которые используются для подключения к сети SAN. Я установил локальный ресурс nfs и сравнил различия в скорости при копировании каталога с ~ 30 файлами, около 15 vm-образов и соответствующими файлами журналов. Размер изображения составляет от 8 до 600 ГБ.

С помощью:

cp -rf /mnt/nfs-share /backup-storage/

Следовательно, bmon показывает около 600 МБ / с.

С помощью

rsync -av /mnt/nfs-share /backup-storage/

bmon показывает некоторые пакеты в первые секунды, останавливается примерно на 30 секунд, а затем набирает примерно 60-75 МБ / с. Процессор составляет около 60%.

Что следует / можно изменить, чтобы использовать rsyncс той же производительностью, что и cp?

soulpath
источник

Ответы:

20

Я думаю, что эти различия довольно хорошо установлены между cpи rsync. См. Эту статью в качестве ссылки под названием: Взгляд на производительность rsync .

выдержка:
The four commands tested were:

    rsync $SRC $DEST
    echo $SRC | cpio -p $DEST
    cp  $SRC $DEST
    cat $SRC > $DEST/$SRC

The results for rsync, cpio, cp, and cat were:

user    sys     elapsed hog MiB/s   test
5.24    77.92   101.86  81% 100.53  cpio
0.85    53.77   101.12  54% 101.27  cp
1.73    59.47   100.84  60% 101.55  cat
139.69  93.50   280.40  83% 36.52   rsync

Я пользуюсь rsyncежедневно. Есть вещи, которые вы можете сделать, чтобы улучшить ситуацию.

Например, вы можете попробовать использовать -Wпереключатель:

-W, --whole-file            copy files whole (w/o delta-xfer algorithm)

Кроме того, я хотел бы предложить , убедившись , что у вас есть 3.x версии rsync. Были заметные улучшения, когда мы перешли на более новые версии.

SLM
источник
15

Способ сделать так, чтобы rsync имел ту же производительность, что и cp, это записать его как «cp».

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

Есть ли какая-то причина, по которой вы хотите использовать rsync? Поскольку cp копирует "вслепую", вы увидите более высокую производительность. Если для набора условий запуска используется механизм rsync «дельта-передача», вы увидите снижение скорости передачи и увеличение использования ЦП в том виде, в котором вы сообщаете.

MSW
источник
Я знаю о поведении, но не ожидал такого эффекта. Я подумал, что учитывая то, что CPU-Power и IOPS rsync должны выполняться как минимум со скоростью 300 МБ / с, особенно если файл для копирования не существует. Я еще не закончил тестирование. Резервное копирование с помощью rsync было бы более удобным, но я также могу написать скрипт, используя cp, dd или что-то еще, что приходит на ум. Теперь я хочу протестировать различные возможности на разных файловых системах, чтобы оценить, что подходит лучше всего.
soulpath
6
Вы можете называть меня эмпириком, но когда ваши ожидания и реальность расходятся, обычно ошибается не реальность. Есть дюжина причин, по которым вы можете понести это наказание; даже чередование операций чтения и записи в сети SAN может привести к значительному снижению производительности в зависимости от мелких деталей программного обеспечения.
MSS
3
Я не сомневался в реальности, просто в rsync, но из-за этих различий я пойду писать сценарий с использованием cp и некоторых контрольных сумм. Спасибо за ваш совет!
soulpath
Нет, просто не используйте rsync в сетевых файловых системах. Ваш компьютер должен загрузить весь файл, поэтому вы потеряете все преимущества rsync.
Джакомо Катенацци
К сожалению, этот ответ неверен в деталях. При копировании между «локальными» файловыми системами (и да, монтирование NFS является локальной файловой системой в этом контексте), rsync не читает целевой файл при копировании, если вы явно не включили эту контрпродуктивную операцию с --whole-file. В этой ситуации это так же, как очень медленно cp.
Ройма