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

Низкая производительность операций копирования файлов из-за большого времени простоя (rsync, cp, ..)

В настоящее время я копирую большое дерево каталогов с внешнего жесткого диска на внутреннее хранилище моего сервера. Производительность операции копирования в основном неплохая, т.е. 35 МБ / с при подключении внешнего жесткого диска через USB2.

Однако я получаю эту производительность только около 30 секунд, а затем процесс копирования не требует процессорного времени. Это означает, что rsync (а также cp) не копирует никаких данных, не обновляет свой стандартный вывод и не реагирует на SIG-TERM. Примерно через 1 минуту он снова расписывается и снова копирует со скоростью 35 МБ / с в течение 30 секунд, а затем снова ничего и так далее.

Кто-нибудь знает, что здесь может произойти, или назовите мне какой-нибудь инструмент, с помощью которого я мог бы исследовать происходящее? Я уже увеличил значение nice процесса rsync до 19, но это ничего не меняет. Во время простоя rsync вся система простаивает (нет других операций ввода-вывода или других процессов, использующих ЦП. В основном, вся система простаивает). Во время активного времени у процесса rsync есть три потока, которые переключаются между режимами «работа», «непрерывный сон» и «прерывистый сон». В течение неактивного времени все потоки находятся в состоянии «непрерывного сна» или «прерывистого сна». Из-за этого, я думаю, что rsync должен дождаться какой-то длительной операции ввода-вывода. Но как определить, какая операция занимает столько времени?

Система работает на ядре Linux 5.4.34-1-pve, а внутренним хранилищем является файловая система ZFS с шифрованием LUKS на LVM. LVM находится поверх mdadm RAID 5. Я использовал команду для запуска rsync: rsync -ah --no-compress --progess

Спасибо за любое предложение!

Мы выяснили, что проблема заключалась в кешах, используемых ZFS. Проблема в том, что мы не создавали дополнительных кешей для чтения и записи. В результате ZFS использует кеши по умолчанию, которые размещаются в / рядом с zpool, содержащим данные. Таким образом, для любой операции чтения данные записываются и читаются с RAID, записываются в кэш (который также поступает в RAID), а затем предоставляются пользователю. Аналогично для записи. Поскольку RAID зашифрован, каждое чтение и запись вызывает несколько операций шифрования / дешифрования и синхронизации RAID, что приводит к падению производительности через некоторое время после заполнения буферов RAM.

Мы решили эту проблему, добавив дополнительные кеши чтения / записи для ZFS (L2ARC и ZIL SLOG в ZFS) - в нашем случае два дополнительных небольших HDD. Даже если кеши размещаются на жестких дисках, мы получаем гораздо более высокие скорости чтения и записи и не снижаем производительность.