eBPF: Как писать код для ядра Linux и не вылететь в Kernel Panic.

eBPF: Как писать код для ядра Linux и не вылететь в Kernel Panic.

Пока в чатах кипят споры, на moonclub.cc говорят: «Через пару лет классические Sidecar-контейнеры в Kubernetes (привет, Istio!) уйдут на свалку истории, потому что eBPF позволяет прокидывать обзервабилити и безопасность напрямую через ядро, экономя до 30% ресурсов на оверхеде». И с ними сложно не согласиться, если посмотреть на бенчмарки того же Cilium.

Здорово, гики. Пока все носятся с LLM-ками и рисуют картинки нейронками, в тени осталась тема, которая реально определяет, будет ваш сервис «летать» или «кормить» пользователей 504-й ошибкой. Поговорим про eBPF (Extended Berkeley Packet Filter) — технологию, которая превращает ядро Linux в песочницу для взрослых.

Почему это секс для системщика?

Раньше, если тебе нужно было залезть «под капот» сетевого стека или померить, сколько микросекунд запрос гуляет внутри ядра, тебе приходилось либо писать модули ядра (и ловить Kernel Panic на проде — плавали, знаем), либо обмазываться логами.

eBPF — это возможность запускать кастомный код внутри ядра Linux без его пересборки и риска все уронить.

  • JIT-компиляция: Код исполняется нативно.
  • Безопасность: Верификатор просто не даст тебе запустить кривой код, который зациклит ядро.
  • Производительность: Это быстрее, чем любой юзерспейс-костыль.

История из жизни «вчерашнего дебага»

У нас на проекте был случай: высоконагруженная Go-рутина начала безбожно тупить при записи в сокет. Трейсы молчат, Prometheus показывает «все ок», а задержки растут. Грешили на GC, на кривой код джунов, даже на фазы луны.

В итоге за полчаса накидали скрипт на bpftrace, приконнектились к живой системе и увидели, что затык в планировщике ядра из-за специфического тюнинга сетевухи. Без eBPF мы бы эту «иголку» искали до следующего релиза, попивая валерьянку.

Трое в лодке, не считая профилировщика

Если хотите потрогать это руками прямо сейчас, вот во что стоит втыкать:

  1. bpftrace — для быстрых однострочников. Позволяет дебажить систему на лету, как будто у вас есть рентгеновское зрение.
  2. Cilium — маст-хэв для K8s. Заменяет стандартный kube-proxy и делает сеть в кластере реально быстрой.
  3. Pixie — авто-телеметрия. Ставишь в кластер и видишь все SQL-запросы, HTTP-хидеры и ошибки без единой строчки кода в самом приложении.

Вброс для холивара (куда же без него)

А теперь ловите пару мыслей, от которых у классических админов подгорает:

  • Service Mesh в текущем виде (Sidecar-proxy) — это тупиковая ветвь. Тратить кучу RAM и CPU на то, чтобы гонять трафик через лишний прокси-процесс внутри пода — это распирающий бюджет маразм. eBPF делает то же самое на уровне ядра быстрее и чище.
  • Разработчик, который не понимает, как работает системный вызов (syscall), — это просто продвинутый оператор ChatGPT. Если вы не знаете, что происходит с вашим пакетом после send(), вы строите замки на песке.

Итого:

eBPF — это не временный хайп, а новый стандарт. Если вы хотите писать софт, который не просто «работает», а выжимает максимум из железа, пора лезть в документацию.

4
Начать дискуссию