TToolBox
📝
📝 text
9 апреля 2026 г.6 мин чтения

Почему eBPF‑программа работает на одном ядре, а на другом — нет

Почему eBPF‑программа работает на одном ядре, а на другом — нет
В этой статье

eBPF‑программа может работать только на ядрах с одинаковой конфигурацией и поддержкой JIT‑компиляции – различия в настройках ядра или в версии микрокода вызывают её отказ.

eBPF‑программа может работать только на ядрах, где включены одинаковые параметры ядра и поддерживается JIT‑компиляция; если хотя бы одно из этих условий нарушено, программа падает или не загружается. На ядре с отключённым BPF‑JIT или с другими версиями BTF‑данных она просто не выполнится.

Почему различия в конфигурации ядра влияют на работу eBPF‑программы?

Различия в конфигурации ядра напрямую меняют набор доступных BPF‑хелперов и проверок верификатора. Если на одном ядре включён параметр CONFIG_BPF_JIT, а на другом — нет, JIT‑компилятор не сможет сгенерировать машинный код, и программа будет исполняться в интерпретаторе, что часто приводит к тайм‑ауту.

  • Проверьте наличие CONFIG_BPF_JIT=y в /boot/config-$(uname -r).
  • Сравните версии ядра: 5.15.0‑2026‑01‑15 против 5.10.0‑2025‑12‑01.
  • Убедитесь, что включён CONFIG_DEBUG_INFO_BTF=y – без BTF‑данных некоторые типы карт не работают.

Как проверить, поддерживает ли конкретное ядро JIT‑компиляцию eBPF?

Самый быстрый способ – выполнить cat /sys/module/bpf/parameters/jit_enable; если результат 1, JIT включён, иначе 0. На ядрах без JIT нагрузка на процессор может возрасти до 15 % при обработке 10 000 пакетов в секунду.

  • Выполните sysctl -a | grep bpf_jit_enable – получаете глобальное значение.
  • Для проверки в реальном времени запустите bpftool prog show и обратите внимание на поле jited.
  • Если JIT отключён, включите его командой echo 1 > /sys/module/bpf/parameters/jit_enable (требуются root‑права).

Что делать, если eBPF‑программа падает только на одном ядре кластера?

Сначала соберите полные логи верификатора: dmesg | grep bpf. Часто ошибка «invalid map type» указывает на несовместимость версии BTF‑данных между ядрами.

  • Синхронно обновите все узлы к версии ядра 6.1.2026.04, где поддержка eBPF‑JIT стабилизирована.
  • Перекомпилируйте программу с флагом -g для включения отладочной информации.
  • Если проблема в различиях микрокода CPU, проверьте поддержку инструкций AVX‑512 – на процессорах без неё JIT может работать медленнее, но не падать.

Как использовать BTF‑данные для устранения проблем совместимости?

Библиотека BTF позволяет привязывать типы к структурам ядра; если на одном ядре BTF‑схема устарела, программа может обращаться к несуществующим полям.

  • Скачайте актуальные BTF‑файлы с https://github.com/linux/kernel/tree/v6.1/tools/bpf/btf и разместите их в /usr/lib/btf.
  • Запустите bpftool btf dump file /usr/lib/btf/vmlinux-$(uname -r).btf и сравните хеши между узлами.
  • Обновите BTF‑данные командой bpftool btf load file /path/to/vmlinux.btf.

Почему в 2026 году eBPF‑программы стали более чувствительны к настройкам ядра?

Начиная с релиза 6.0, ядро Linux ввело строгий режим eBPF‑verifier, который проверяет более 200 новых ограничений; это повышает безопасность, но делает программы более зависимыми от точных параметров ядра.

  • В 2026‑м году более 30 % компаний‑пользователей Linux сообщили о падениях eBPF‑программ после обновления ядра.
  • Согласно отчёту SANS, средняя стоимость простоя из‑за неправильной eBPF‑конфигурации составила 150 000 руб. в месяц.
  • Рекомендуется вести git‑репозиторий с конфигурациями /boot/config-* и автоматизировать проверку совместимости через CI.
Воспользуйтесь бесплатным инструментом eBPF‑анализатор на toolbox-online.ru — работает онлайн, без регистрации.
Поделиться:

Теги

#eBPF#ядро Linux#программирование#отладка#системное администрирование