Вопрос или проблема
Я использую Ubuntu 24.04 LTS. Ядро отключает RT_RUNTIME_SHARE по умолчанию. Чтобы включить, я могу выполнить:
echo RT_RUNTIME_SHARE > /sys/kernel/debug/sched/features
Я хотел бы, чтобы это было включено по умолчанию/при загрузке. Я мог бы настроить систему на выполнение этого при загрузке (например, в rc.local), но я не уверен, является ли это “правильным” способом сделать это. Есть ли другой способ включить это? например, файл конфигурации, как с sysctl?
согласно:
https://unix.stackexchange.com/questions/702434/what-changed-from-linux-kernel-5-9-to-5-10
вы можете включить RT_RUNTIME_SHARE при загрузке с помощью:
[…] Интересно, можно ли установить этот параметр ядра через файл конфигурации grub в Ubuntu? –
Leigh K
Комментарий от 29 июня 2022 в 20:19
Нельзя сделать это в grub, но вы можете добавить параметр в /etc/sysctl.conf, выполнить sysctl -p, а затем перезагрузить, чтобы параметр загружался при загрузке, а не во время выполнения. […] –
Leigh K
Комментарий от 30 июня 2022 в 15:06
вы также можете найти полезной информацию здесь, которая дает альтернативную настройку:
.
Ответ или решение
Введение:
Когда речь идет о конфигурации ядра Linux, одной из часто встречаемых задач является необходимость активировать определенные функции по умолчанию, чтобы их состояние сохранялось между перезагрузками. В данном случае мы имеем дело с необходимостью активировать функцию RT_RUNTIME_SHARE в Ubuntu 24.04 LTS. Эта операция, обычно выполняемая вручную, может быть автоматизирована, что существенно упрощает администрирование системы и гарантирует стабильность конфигурации.
Теория:
RT_RUNTIME_SHARE — это функция ядра, связанная с планированием заданий в реальном времени, которая регулирует способ использования процессорного времени. Когда эта функция отключена, распределение времени выполнения может быть не таким эффективным, особенно в системах, требующих жесткого соблюдения тайминговых ограничений. Включение данной функции может улучшить производительность задач реального времени, однако оно также может потребовать настройки системы для достижения оптимального баланса между задачами реального времени и другими процессами.
Как правило, функции ядра активируются через системные файлы, однако в данном случае изменение необходимо делать через систему файлов /sys, которая предоставляет интерфейс для взаимодействия с различными подсистемами ядра. Поскольку такое изменение не сохраняется между перезагрузками, требуется способ автоматического применения данной настройки при запуске системы.
Пример:
В качестве примера можно рассмотреть несколько подходов для достижения нашей цели:
-
Файл rc.local: Это традиционный способ выполнения скриптов при старте системы. Можно отредактировать файл
/etc/rc.local
и добавить туда команду:echo RT_RUNTIME_SHARE > /sys/kernel/debug/sched/features
Однако этот метод более устаревший и некоторые современные системы не поддерживают его из коробки.
-
Systemd и unit-файлы: Можно создать systemd unit, который выполнит необходимую команду при загрузке. Создайте файл, например,
/etc/systemd/system/enable-rt-runtime-share.service
и добавьте туда следующее содержимое:[Unit] Description=Enable RT_RUNTIME_SHARE on startup [Service] Type=oneshot ExecStart=/bin/sh -c 'echo RT_RUNTIME_SHARE > /sys/kernel/debug/sched/features' RemainAfterExit=yes [Install] WantedBy=multi-user.target
Затем активируйте сервис с помощью команд:
sudo systemctl enable enable-rt-runtime-share.service sudo systemctl start enable-rt-runtime-share.service
-
Sysctl конфигурация: Хотя в указанном вопросе было предложено использовать sysctl, обычно конфигурация sysctl используется для настройки параметров в
/proc/sys
, а не в/sys/kernel/debug
. -
Другое: Теоретически, вы можете патчить ядро с изменением значений по умолчанию и пересобиранием, но это требует углубленного знания системы и может привести к нестабильности.
Применение:
Оптимальным решением в данном случае является использование systemd. Systemd—это современная система инициализации, которая управляет запуском всех сервисов в Linux. Она гибкая и обеспечивает эффективный способ управления процессами. Использование unit-файлов обеспечивает более чистую интеграцию в систему и упрощает управление конфигурацией.
Более того, создание отдельного сервиса позволяет вносить изменения в конфигурацию без необходимости редактирования системного стартапа напрямую. Это также обеспечивает лучшую возможность аудита и управления системой в долгосрочной перспективе, так как каждый сервис и его конфигурация четко задокументированы и управляемы через менеджер systemd.
Заключение:
Автоматизация активации функций ядра по умолчанию — важная задача для системных администраторов, стремящихся к стабильной и надежной работе системы. Используя systemd, вы обеспечиваете современный и устойчивый подход к настройкам конфигурации системы, который соответствует текущим стандартам управления Linux.
Настоятельно рекомендуется протестировать ваши изменения в контролируемой среде перед развертыванием на производственные системы, чтобы убедиться, что все работает как ожидается и что производительность задачи в реальном времени действительно улучшена.