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