Снижение скорости передачи при копировании большого объема данных

Я использую систему Ubuntu 16.04.3 LTS (4.10.0-40-generic) с двумя жесткими дисками и несколькими разделами на каждом диске. Когда я копирую данные (< 5 ГБ) между двумя дисками, я получаю скорость передачи около 70 МБ / с. Однако, когда я пытаюсь скопировать большой объем данных (> 30 ГБ) с одного диска на другой, я замечаю несколько проблем с производительностью.

У меня вопрос: нормально ли это поведение и ожидаемо ли это в системах Linux?
Может кто-нибудь объяснить мне это и посоветовать, как избежать такого снижения производительности?

Ниже я опишу свои наблюдения. В этом примере я скопировал файл образа диска объемом 54 ГБ из sda8 (раздел 325 ГБ) в sdb8 (раздел 1.6 ТБ)

1) Скорость передачи данных уменьшается, а iowait увеличивается
Когда я пытаюсь скопировать более 50 ГБ, я замечаю, что скорость передачи постепенно уменьшается. Я наблюдаю за производительностью, используя glances, atop, iotop и iostat. При прогрессе 30 ГБ скорость передачи упала до 58 МБ / с, при 46 ГБ до 36 МБ / с, при 52 ГБ до 12 МБ / с. После этого скорость передачи действительно начинает колебаться и падает ниже 1 МБ / с. В то же время я вижу, что iowait увеличивается с 0% до 62% в конце. Во время копирования диск sd8 имеет процент занятости между 40% и 60%. Диск sdb постоянно занят на 100%. Не только скорость передачи падает, но и моя система становится менее отзывчивой. Я ожидаю, что причиной этого будет Айоваит.
Это нормальное поведение? Как избежать снижения производительности?

2) IOwait остается высоким после копирования
Когда копирование закончилось, я заметил, что iowait все еще остается высоким и постепенно начинает снижаться до нормальных значений. Это займет пару минут. Я думаю, что в течение этого времени данные все еще записываются в SDB со скоростью около 1 или 2 МБ / с. Используя iotop, похоже, что процесс "jdb2 / sdb4-8" вызывает запись на диск. В то время как IOwait уменьшается, моя система все еще страдает от плохой отзывчивости. Также видно, что диск sda больше не занят, но диск sdb по-прежнему работает на 100%.
Что является причиной того, что моя система имеет плохую отзывчивость в течение пары минут после действия копирования?
Можно ли этого избежать?

3) Копирование с сетевого диска увеличивает эффекты
Когда я пытаюсь скопировать с моего Synology NAS на мой локальный диск (sdb8), эффекты еще хуже. Сначала сетевой диск монтируется в моей системе, а затем начинается копирование. Первоначально также реализуется скорость передачи 70 МБ / с, но скорость передачи должна снижаться быстрее. Через пару ГБ скорость передачи упала намного ниже 1 МБ / с. Копирование было выполнено с использованием перетаскивания из Nautilus, команды "cp", команды rsync, приложения FreeFileSync, но все показали низкую производительность.
Что может быть причиной того, что эффекты снижения производительности хуже при использовании сетевых дисков?

Дополнительная информация
Во время копирования «iostat -dx 5» использовался для мониторинга производительности диска. Около 5 ГБ мониторинга процесса копирования показывает:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0,00     0,00  530,40    0,00 68064,80     0,00   256,65     1,62    3,06    3,06    0,00   1,63  86,72
sdb               0,00 18767,20    0,20  112,40    23,20 73169,60  1300,05   144,32 1345,39  308,00 1347,23   8,88 100,00

Когда копирование достигло 52 ГБ, оно показывает:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0,00     0,00   64,60    0,00  8268,80     0,00   256,00     0,22    3,41    3,41    0,00   1,76  11,36
sdb               0,00  1054,40    0,20   10,60     6,40  6681,60  1238,52   148,56 9458,00    0,00 9636,45  92,59 100,00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0,00     0,00   50,20    0,00  6425,60     0,00   256,00     0,16    3,09    3,09    0,00   1,64   8,24
sdb               0,00  2905,80    0,40   17,00     8,80 10289,60  1183,72   141,86 10199,77  652,00 10424,42  57,47 100,00

Я понимаю, что это несколько вопросов, но я подозреваю, что они все связаны с одной и той же причиной и надеются, что кто-то сможет прояснить мне это.

7
задан 15 January 2018 в 02:46

1 ответ

К сожалению, это нормально и ожидается для вашего случая использования большого файла. Ваш случай с двумя жесткими дисками и файлом 50G + устраняет много вводящих в заблуждение разговоров о «медленных устройствах», «медленных шинах» и «медленных файловых системах», и у вас остается необъяснимая проблема медленной копии. У вас должно быть достаточно памяти, чтобы получить производительность, необходимую для файлов 30G. Системные буферы используются, заполняются, и после того, как ваша команда копирования завершается, в конечном итоге она сбрасывается в цель, что несколько усложняет реальное время / скорость (даже команда «время» завершится задолго до того, как буферы окончательно очистятся.

Единственный «обходной путь», который я нашел, - это использовать команду «копировать», которая позволяет вам самим устанавливать явные буферы, как это могут сделать tar или cpio. Установка буфера 2M в tar позволила мне ускорить 10M / секундная копия файла 50G со скоростью около 35 М / с - все еще намного медленнее, чем номинальная 100 М / с, которую я получаю для небольших файлов (или в Windows).

1
ответ дан 15 January 2018 в 02:46

Другие вопросы по тегам:

Похожие вопросы: