rsync медленное копирование с одного диска на другой
Я получил два диска одной модели, которые подключены с помощью SATA.
При тестировании скорости чтения с помощью hdparm -t /dev/sdX
Скорости около 160MB/s
возвращаются. При тестировании скорости записи с использованием dd if=/dev/zero of=testfile bs=1M count=500 conv=fdatasync
Скорости около 140MB/s
возвращаются.
Однако при копировании одного 10GB-файла с помощью rsync --progress /mnt/hd1/file /mnt/hd2/file
Скорость записи только о 35MB/s
,
Почему это так медленно? Как я могу сделать это быстрее?
2 ответа
Согласно многим сайтам, которые я обнаружил при исследовании этой проблемы (например, этот), это просто нормально, поскольку узким местом rsync обычно является мощность процессора.
Результаты с dd и cp были близки к скоростям, которые я изначально оценивал. Похоже, что двухъядерный 2,2 ГГц просто недостаточно для rsync с высокой скоростью.
В ходе дальнейших исследований я также узнал об этом:
Правильно, rsync не имеет возможности полностью отключить контрольную сумму после передачи. Я реализовал патч для rsync 2.6.9, который добавляет опцию --trust-append, которая ограничивает контрольную сумму после передачи добавленной частью, а не всем файлом. Патч прилагается. Это должно быть достаточно, но если вы действительно хотите полностью отключить контрольную сумму, просто закомментируйте оставшиеся вызовы sum_update в match.c и receive.c.
Rsync всегда проверяет суммы всего файла, что занимает много времени. Используя вышеупомянутый патч, мне удалось увеличить скорость rsync примерно до 90 МБ / с. Все еще не велик, но намного лучше чем прежде. К сожалению, патч так и не попал в rsync-trunk.
У меня была точно такая же проблема (на Linux), то есть: 35BM/s.
Оказывается, rsync привязан к процессору И не запускает процессор по требованию, поэтому процессор зависает на самой низкой скорости (800 МГц в моем случае против 3000 МГц)
Вы можете проверить с помощью:
cat / proc / cpuinfo | grep МГц
Исправление заключается в настройке регулятора ЦП.
echo "70"> / sys / devices / system / cpu / cpufreq / ondemand / up_threshold
Чтобы сделать его постоянным, поместите его в /etc/rc.local
Для объяснения смотрите: http://random-linux-stuff.blogspot.co.nz/2013/01/boost-performance-of-ondemand-cpu.html