Я сейчас настраиваю сервер на Proxmox VE. Я хотел, чтобы все диски были зашифрованы, поэтому я решил установить luks на всех дисках, а поверх luks я установил LVM.
Теперь, когда я передаю данные с быстрого диска (SSD) на более медленный диск (HDD) при использовании dd он запускается очень быстро с некоторыми ГБ / с. А потом тормозит. Затем я замечаю, что ожидание ввода-вывода достигает 10%, а нагрузка на систему возрастает до 36. Некоторые виртуальные машины подвержены этому воздействию и зависают.
Дальнейший мониторинг показал, что во время ожидания большого количества операций ввода-вывода dmcrypt_write
использует 99% операций ввода-вывода. Итак, я установил Netdata, чтобы получить несколько графиков, и он показал, что жесткий диск пишет со скоростью от 120 до 150 МБ / с.
Через некоторое время kworkers погибают из-за того, что слишком долго работали. После некоторых исследований я изменил dirty_ratio
и dirty_background_ratio
на более низкое значение, это помогло, но значительно снизило скорость. Примерно до 25 МБ / с. Это предотвратило огромные зависания, но все еще вызывает некоторые задержки. Это также снизило скорость записи самого жесткого диска. Вместо записи со скоростью 150 МБ / с жесткий диск теперь будет записывать только со скоростью 50 МБ / с.
Честно говоря, я не знаю, что делать дальше. Есть ли какой-нибудь кеш, который я еще не нашел? Или, может быть, есть способ ограничить скорость записи в Linux скоростью записи дисков, как это должно быть?
Моя единственная цель - скопировать данные из A в B, не ограничивая скорость вручную и не беспокоясь о зависании виртуальных машин.
Информация о системе:
ЦП: 2x Intel Xeon E5-2650 v2
ОЗУ: 128 ГБ DDR3 ECC
ОС: Debian 10 с установленным вручную Proxmox VE
Ядро: Linux 5.3.18-3-pve # 1 SMP PVE 5.3.18-3 (Вт, 17 марта 2020 г. 16:33:19 +0100) x86_64 GNU / Linux
SSD, с которых я разрешил dd read - это два корпоративных SAS-SSD Toshiba в массиве RAID 1. Жесткие диски - это некоторые жесткие диски SATA со скоростью 5400 об / мин (так что ... не самые быстрые). Они также находятся в RAID 1.
RAID-массивами управляет DELL PERC H710 mini (встроенный). Все RAID имеют Adaptive Read Ahead
в качестве политики чтения и Write Through
в качестве политики записи.
Я также заметил странно выглядящий график Dirty / Writeback: щелкните, чтобы просмотреть изображение (защита для новичков)
Проблема была вызвана слишком высоким dirty_ratio
и dirty_background_ratio
. Поскольку оперативная память относительно велика, кеш страниц тоже был большим. Система блокирует ввод-вывод, если кеш страницы заполнен, и ожидает его очистки. Это то, что вызвало большое ожидание ввода-вывода.
Уменьшение их до гораздо меньшего значения (64 МБ для background_ratio и 4 ГБ для dirty_ratio) решило мою проблему.