Недавно Представлен Oracle опубликовав свою новую систему «бпфтьюн» который из предназначен для автоматической оптимизации конфигурации ядра на основе выполняемых задач, активности системы и шаблонов нагрузки.
bpftune работает в фоновом режиме и отслеживает использование системы и сетевой стек. Причиной создания проекта является необходимость оптимизации автономных систем, рассчитанных на работу с минимальным вмешательством администратора, а также возрастающая сложность современного ядра, увеличивающая трудоемкость ручных оптимизаций.
И это ядро предоставляет более 1500 параметров которые влияют на производительность и потребление ресурсов, и зачастую администратор просто копирует готовые рецепты, не вникая подробно в их суть и не надеясь, что они помогут).
Bpftune автоматически и постоянно корректирует конфигурацию ядра. Мониторинг системы осуществляется с помощью соответствующих функций Berkeley Packet Filter (BPF).
Ядро Linux содержит более 1500 настраиваемых параметров, и правильная установка этих параметров может значительно улучшить производительность и использование системы! В течение многих лет мы пытались предоставить правильные подсказки для этих настраиваемых параметров с помощью примечаний к выпуску программного обеспечения и улучшенных значений по умолчанию, но многие системные нагрузки выиграют от динамической настройки этих значений.
Представляем bpftune, автоматический конфигуратор, который отслеживает ваши рабочие нагрузки и устанавливает правильные значения параметров ядра! bpftune — это проект с открытым исходным кодом, доступный в репозиториях Oracle Linux.
О Bpftune
Bpftune постоянно отслеживает состояние системы, адаптивно настраивает параметры ядра, влияющие на производительность, и оценивает изменение поведения для получения оптимальных результатов. Благодаря БНФ, учитывается не только статистика всей системы, но и детали поведения отдельных компонентов, который, например, позволяет настроить параметры на уровне отдельных розеток и устройств.
Реализация отдельные оптимизации переносятся на плагины которые загружаются при запуске процесса в виде библиотек. Каждый подключаемый модуль, реализующий конкретную оптимизацию, содержит драйвер BPF, работающий в ядре, и компонент, работающий в пользовательском пространстве.
Основные преимущества, которые он обеспечивает:
- Непрерывный мониторинг и настройка поведения системы с помощью функций наблюдения BPF (Berkeley Packet Filter).
- Настройка поведения системы на мелкозернистом уровне стала возможной благодаря тому, что мы можем наблюдать за более подробной информацией о состоянии системы с помощью BPF.
Все подключаемые модули используют общий глобальный кольцевой буфер BPF для передачи событий ядра в пространство пользователя. Плагины могут быть выбраны в соответствии с потребностями администратора и их также можно отключить автоматически, если администратор вручную изменит конфигурацию ядра, связанную с ними.
В процессе автоматической настройки bpftune пытается достичь оптимального баланса между подачей и потреблением ресурсов, с учетом косвенного влияния изменений. Например, для повышения производительности нужно увеличить размер сетевого буфера, но его увеличение приводит к большему потреблению памяти и большим задержкам передачи данных, поэтому эти параметры необходимо учитывать при увеличении размера буфера.
Плагины, доступные для использования, включают:
- bpftune-tcp-cong: автоматический выбор оптимального алгоритма управления перегрузкой сети
- bpftune-neigh: автоматический выбор размера таблицы MAC-адресов соседних хостов
- bpftune-route: автоматический выбор размера таблицы маршрутизации.
- bpftune-sysctl — отслеживает настройки sysctl и отключает связанный тюнер, если он конфликтует с ручными настройками.
- bpftune-tcp-buffer: автоматический выбор начального и максимального размера буферов TCP
- bpftune-net-buffer: автоматическая настройка базовых сетевых буферов
- bpftune-netns — Отслеживает добавление и удаление сетевых пространств имен (net namespace).
В конце концов если вам интересно узнать об этом больше, вы должны знать, что код проекта написан на языке C и распространяется под лицензией GPLv2 и вы можете проверить подробности в по следующей ссылке.