Включить функцию ядра по умолчанию

Вопрос или проблема

Я использую 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

вы также можете найти полезной информацию здесь, которая дает альтернативную настройку:

https://docs.redhat.com/en/documentation/red_hat_enterprise_linux_for_real_time/7/html/tuning_guide/real_time_throttling#Real_Time_Throttling

.

Ответ или решение

Введение:
Когда речь идет о конфигурации ядра Linux, одной из часто встречаемых задач является необходимость активировать определенные функции по умолчанию, чтобы их состояние сохранялось между перезагрузками. В данном случае мы имеем дело с необходимостью активировать функцию RT_RUNTIME_SHARE в Ubuntu 24.04 LTS. Эта операция, обычно выполняемая вручную, может быть автоматизирована, что существенно упрощает администрирование системы и гарантирует стабильность конфигурации.

Теория:
RT_RUNTIME_SHARE — это функция ядра, связанная с планированием заданий в реальном времени, которая регулирует способ использования процессорного времени. Когда эта функция отключена, распределение времени выполнения может быть не таким эффективным, особенно в системах, требующих жесткого соблюдения тайминговых ограничений. Включение данной функции может улучшить производительность задач реального времени, однако оно также может потребовать настройки системы для достижения оптимального баланса между задачами реального времени и другими процессами.

Как правило, функции ядра активируются через системные файлы, однако в данном случае изменение необходимо делать через систему файлов /sys, которая предоставляет интерфейс для взаимодействия с различными подсистемами ядра. Поскольку такое изменение не сохраняется между перезагрузками, требуется способ автоматического применения данной настройки при запуске системы.

Пример:
В качестве примера можно рассмотреть несколько подходов для достижения нашей цели:

  1. Файл rc.local: Это традиционный способ выполнения скриптов при старте системы. Можно отредактировать файл /etc/rc.local и добавить туда команду:

    echo RT_RUNTIME_SHARE > /sys/kernel/debug/sched/features

    Однако этот метод более устаревший и некоторые современные системы не поддерживают его из коробки.

  2. 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
  3. Sysctl конфигурация: Хотя в указанном вопросе было предложено использовать sysctl, обычно конфигурация sysctl используется для настройки параметров в /proc/sys, а не в /sys/kernel/debug.

  4. Другое: Теоретически, вы можете патчить ядро с изменением значений по умолчанию и пересобиранием, но это требует углубленного знания системы и может привести к нестабильности.

Применение:
Оптимальным решением в данном случае является использование systemd. Systemd—это современная система инициализации, которая управляет запуском всех сервисов в Linux. Она гибкая и обеспечивает эффективный способ управления процессами. Использование unit-файлов обеспечивает более чистую интеграцию в систему и упрощает управление конфигурацией.

Более того, создание отдельного сервиса позволяет вносить изменения в конфигурацию без необходимости редактирования системного стартапа напрямую. Это также обеспечивает лучшую возможность аудита и управления системой в долгосрочной перспективе, так как каждый сервис и его конфигурация четко задокументированы и управляемы через менеджер systemd.

Заключение:
Автоматизация активации функций ядра по умолчанию — важная задача для системных администраторов, стремящихся к стабильной и надежной работе системы. Используя systemd, вы обеспечиваете современный и устойчивый подход к настройкам конфигурации системы, который соответствует текущим стандартам управления Linux.

Настоятельно рекомендуется протестировать ваши изменения в контролируемой среде перед развертыванием на производственные системы, чтобы убедиться, что все работает как ожидается и что производительность задачи в реальном времени действительно улучшена.

Оцените материал
Добавить комментарий

Капча загружается...