Назад | Перейти на главную страницу

Как уберечь md-raid от блокировки ввода-вывода?

Я запускаю сервер с md-raid (программное обеспечение) уровня 1 (зеркальное отображение 2 жестких дисков) и на нем работает несколько различных приложений.

Проблема возникает, когда задания с интенсивным использованием файлов (например, извлечение больших архивов) выполняются, когда некоторые пользователи также используют приложения реального времени (например, игровые серверы). Задание с интенсивным использованием файлов заполнит очередь ввода-вывода, заставляя md-raid блокировать дальнейший ввод-вывод до тех пор, пока два диска не будут синхронизированы, что приведет к нехватке ресурсов для приложений реального времени и заставит их останавливаться и ждать, что, в свою очередь, вызывает серьезное раздражение у пользователей.

Задание с интенсивным вводом-выводом выполняется с самыми низкими приоритетами процесса и io (nice -n +19 ionice -c 3 ...) с планированием CFQ, но другие приложения все еще не работают.

Есть ли способ сделать md-raid более снисходительным в отношении синхронизации дисков?

Есть ли другие возможные решения, позволяющие не замораживать важные приложения?

Проблема, скорее всего, вызвана очисткой кэша страниц, а не заполнением очереди ввода-вывода.

Чтобы проверить это, попробуйте распаковать большой архив и в другом терминале сделать cat /proc/meminfo. Вы увидите несколько больших значений под Dirty объем памяти; когда эта "грязная" память очищается, происходит большой ввод-вывод, и ваше приложение реального времени страдает.

Его поведение можно настроить, однако это нетривиально, поскольку по умолчанию стек ввода-вывода Linux предпочитает пропускную способность, а не задержку. В любом случае, в качестве хорошего начала попробуйте использовать deadline планировщик и убедитесь, что NCQ включен на ваших дисках.