Гарантируем быстродействие оболочки в привязанной системе

Гарантируем быстродействие оболочки в привязанной системе

Итак, моя система получает DOS, или я только что открыл какой-то огромный файл (openstreetmaps planet.osm). Система полностью перестает отвечать... настолько перестает отвечать, что мне понадобится около 10 минут, чтобы войти в свою оболочку, запустить top и убить проблемный процесс. Я готов нажать кнопку сброса.

Вопрос: возможно ли выделить определенный минимальный объем системных ресурсов, так что если моя система загрузится, у меня все равно останется 2% процессора (система 2 ГГц ~ 40 МГц! - должно быть достаточно для оболочки, верно? Я имею в виду, это работало в начале 90-х) где-то зарезервировано? Или есть какой-то способ притормозить неисправные процессы?

У меня бывают такие ситуации, когда я хочу, чтобы ОС притормозила неконтролируемые процессы, чтобы я мог продолжать использовать систему, даже если это означало бы падение производительности на 10%. Возможность действовать в таких ситуациях вместо того, чтобы быть полностью беспомощным, была бы... хороша.

решение1

Забавно, что вы говорите "хорошо". Одним из решений является "переименование" проблемного процесса, чтобы он не нагружал процессор (по сути, снижение приоритета приложения).

Чтобы запустить процесс с более низким приоритетом:

nice <program> &

Чтобы изменить приоритет запущенного процесса:

renice 4 <program>

Шкала приоритетов варьируется от -20 до 20. 0 — значение по умолчанию, 20 — самый низкий приоритет, -20 — самый высокий приоритет.

решение2

Вы можете написать скрипт для поиска процессов, запущенных на tty0 или ttyS0 или где бы вы ни хотели иметь приоритетный вход root, и установить для этих процессов приоритет планирования в реальном времени. Сам скрипт должен быть запущен с приоритетом в реальном времени.

Получение доступа к памяти во время swap storm — более сложная задача. Вы можете использовать cgroups Linux. Вы можете написать программу на C вместо скрипта и использовать mlockall для блокировки ее памяти в RAM. Затем эта программа может использовать ptrace, чтобы проникнуть в другие процессы и заставить их вызвать mlockall. Вы можете использовать это, чтобы получить оболочку bash, на которую не повлияет swap.

Если вы не программист и не можете найти того, кто уже это написал (я не нашел), cgroups, вероятно, является более простым способом зарезервировать часть высокоприоритетной памяти.

Связанный контент