Резюме
Как настроить Linux для чтения с локального диска / файловой системы и одновременной записи в общую сетевую папку, в отличие от чтения, когда данные не передаются по сети, а затем отправки этих данных по сети, когда локальный диск холостой ход?
Гораздо быстрее читать и писать одновременно, вместо того, чтобы выполнять только одну операцию, а затем другую поочередно.
Детали
Я перемещаю большой объем данных с локальных дисков на компьютере с Linux на устройство NAS.
Я использую rsync
в основном скопировать /srv/data
в /mnt/nas
, который является CIFS крепление.
Все началось хорошо: чтение со скоростью 100 МБ / с и запись в NAS со скоростью 100 МБ / с (ограничение гигабитной сети), при этом чтение и запись выполняются одновременно.
Однако теперь, спустя несколько часов, я обнаружил, что он читает с локального диска, затем останавливает чтение, пока записывает в NAS, затем, когда больше нет данных для записи в NAS, он возобновляет чтение с диска. опять таки. Сеть находится в режиме ожидания, пока диск читается, а диск не используется, когда сеть используется.
Излишне говорить, что чтение 200 МБ, а затем запись 200 МБ занимает гораздо больше времени, чем чтение и запись этих 200 МБ одновременно.
Как я могу настроить ядро так, чтобы оно придерживалось более раннего поведения чтения и записи одновременно, а не чередовало чтение и запись, выполняя только одну операцию за раз?
Некоторые наблюдения: Когда локальный диск читает со скоростью 100+ МБ / с, кажется, что все параллельно происходит просто отлично, но как только диск замедляется (кажется, сейчас он работает со скоростью всего 20 МБ / с по какой-то причине), именно тогда происходит чтение / запись. переключение, кажется, происходит.
Я также могу запустить sync
вручную каждые несколько секунд , чтобы получить , что запись происходит параллельно с чтений (хотя , очевидно , при сниженных скоростях) , однако ввод sync
в while
петле так , что она проходит через каждые пять секунд , не кажется правильным решение ...
Кажется, что ядро кеширует около 1 ГБ данных, а затем записывает их по сети настолько быстро, насколько это возможно - и это хорошо - я просто не понимаю, почему медленный диск должен перестать считываться, пока данные отправляются через сеть.