Я запускаю сервер с md-raid (программное обеспечение) уровня 1 (зеркальное отображение 2 жестких дисков) и на нем работают несколько различных приложений. ] Проблема возникает, когда задания с интенсивным использованием файлов (например, извлечение больших архивов) выполняются, когда некоторые пользователи также используют приложения реального времени (например, игровые серверы). Работа с большим количеством файлов заполнит очередь ввода-вывода, заставляя md-raid блокировать дальнейший ввод-вывод до тех пор, пока два диска не будут синхронизированы, что приведет к нехватке ресурсов для приложений реального времени и заставит их останавливаться и ждать, что, в свою очередь, вызывает серьезное раздражение пользователей.
Задание с интенсивным вводом-выводом выполняется с самыми низкими приоритетами процесса и io ( nice -n +19 ionice -c 3 ...
) с планированием CFQ, но другие приложения все еще не работают.
Есть ли способ сделать md-raid более снисходительным по отношению к синхронизации дисков?
Есть ли другие возможные решения, чтобы не замораживать важные приложения?
Вероятно, проблема вызвана не заполнением очереди ввода/вывода, а промывкой страниц кэша.
Чтобы проверить это, попробуйте распутать большой архив и в другом терминале сделайте cat /proc/meminfo
. Вы увидите некоторые большие значения в разделе Dirty
памяти; когда эта "грязная" память будет очищена, произойдет большой объем ввода/вывода, и ваше реальное приложение пострадает.
Его поведение можно настроить, однако, это не тривиально, так как по умолчанию стек ввода/вывода в Linux предпочитает пропускную способность, а не латентность. В любом случае, в качестве хорошего старта попробуйте использовать планировщик deadline
и убедитесь, что NCQ включен на ваших дисках.