eBPF: Linux Kernel Observability Vocabulary (англійською)

Вивчіть англійську лексику, що використовується у розробці eBPF і можливості спостереження — програми, карти, зонди, відстеження і правила безпеки, пояснені для фахівців з інформаційних технологій.

Introduction

eBPF (розширений фільтр пакетів Berkeley) є однією з найцікавіших технологій у сучасному програмуванні систем Linux. Цей інструмент надає вам змогу запускати програми у пісочниці ядра без зміни коду ядра або завантаження модулів ядра. Інструменти, такі як Cilium, Falco, Tetragon і bpftrace, побудовані на eBPF, і вони мають багатий словник. Незалежно від того, пишете ви програми eBPF, використовуєте інструменти спостереження, засновані на eBPF, або просто обговорюєте їх у оглядах архітектури, цей словник є обов’ язковим.

Програми eBPF і Verifier

** Програма eBPF ** це невеликий шматок коду, який виконується всередині ядра Linux. Перед запуском, кожна програма eBPF проходить через verifier — компонент ядра, який перевіряє програму на безпеку. Інженери описують це так:

  • «Верификационная система отклоняет небезопасные программы» — програми з доступом до пам’яті поза межами, нескінченними петлями або використанням заборонених функцій відкидаються
  • «Ми пишемо програму на обмеженому C і компіляємо до BPF байт-коду» — типовий процес розробки
  • «Програма повинна завершитися» — перевіряючий намагається, щоб всі шляхи коду мали обмежений час виконання
  • «Програма збірки JIT» — після перевірки, ядро перекладає байт-код BPF на рідний машинний код для продуктивності

Фраза «пройти перевірку» використовується як проходження тесту: «Наша перша версія програми не пройшла перевірку через необмежений цикл — нам довелося реструктурувати логіку»

** eBPF- карти ** — це структури даних, які спільно використовуються програмою eBPF і кодом у просторі користувача. Інженери кажуть: « ми використовуємо карту гешів для відстеження стану кожного з’ єднання » або « ми читаємо лічильники з карти у просторі користувача ». До типових типів карт належать карти гешів, масиви, буфери кільця і карти LRU.

Позначає точки і точки спостереження

Програми eBPF приєднуються до певних ** точок прив’ язки ** у ядрі або просторі користувача. Важливо знати словниковий запас для цих точок прив’ язки:

  • ** kprobe ** — приєднується до запису функції ядра; « ми приєднуємо kprobe до tcp_sendmsg для відстеження всіх надісланих TCP »
  • ** kretprobe ** — приєднується до функції ядра, що повертає; « ми використовуємо kretprobe для отримання значення повернення »
  • ** tracepoint ** — стабільна, задокументована точка прив’ язки у ядрі; « ми віддаємо перевагу tracepoints перед kprobes, оскільки вони стабільні у всіх версіях ядра »
  • ** uprobe ** — приєднується до функції простору користувача; « ми використовуємо uprobe для відстеження викликів до бібліотеки OpenSSL без її зміни »
  • XDP (eXpress Data Path) — приєднується на рівні мережевого драйвера; «ми використовуємо XDP для високопродуктивного фільтрування пакетів перед мережевим стеком ядра»
  • ** tc ** (контроль трафіку) — приєднується до мережевого стека на рівні контролю трафіку; « ми використовуємо tc hooks для мережевої політики на рівні піду в Cilium »

Інженери часто кажуть « ми приєднуємо програму до точки трасування », а не « ми встановлюємо » або « ми розгортаємо ». Слово ** приєднати ** є правильним дієсловом у контексті eBPF.

Можливість спостереження за bpftrace і BCC

Два поширені інструменти для eBPF-заснованої спостережливості є bpftrace і BCC (BPF Compiler Collection). Їхній словник:

  • ** one- line ** — короткий скрипт bpftrace, який відстежує певну поведінку; « this bpftrace one- line traces all open syscalls »
  • ** probe ** — визначення того, до чого слід долучати і що робити; у bpftrace зонди записуються як tracepoint:syscalls:sys_enter_open
  • «Ми агрегуємо в ядрі» — збір статистики всередині програми eBPF, а не надсилання кожної події в простір користувача; критичне для продуктивності
  • ** flamegraph ** — візуалізація стеків викликів; « ми створюємо flamegraphs з даних perf, зібраних за допомогою eBPF »

Безпека і політика

eBPF використовується для забезпечення безпеки у таких інструментах, як Falco і Tetragon:

  • ** LSM hook ** (Linux Security Module) — точка приєднання для забезпечення політики безпеки; « ми використовуємо LSM hooks для забезпечення політики доступу до файлів »
  • ** policy enforcement ** — блокування або попередження про порушення правил; « правила Tetragon забезпечують, щоб жодний процес не міг відкрити оболонку після запуску контейнера »
  • «Спостерігати, аудитувати, забезпечувати» — три етапи безпеки; «ми починаємо з режиму спостереження, щоб зрозуміти нормальну поведінку перед вмиканням забезпечення»

Ключовий словник

TermDefinition
eBPF programA sandboxed program that runs inside the Linux kernel
verifierThe kernel component that checks eBPF programs for safety before execution
eBPF mapA data structure shared between kernel eBPF programs and user-space code
kprobeDynamic attachment point at a kernel function entry
tracepointA stable, documented kernel hook point preferred over kprobes
uprobeAttachment point at a user-space function entry
XDPeXpress Data Path — the fastest eBPF attachment point for network packet processing
JIT-compiledeBPF bytecode translated to native machine code by the kernel
aggregate in-kernelCollect statistics inside the eBPF program to reduce user-space overhead
LSM hookLinux Security Module hook point for enforcing security policy

Практичні поради

  1. ** Запуск однорядкових команд bpftrace на тестовій системі. ** Навіть прості команди, такі як трасування викликів open syscall, надають вам практичний досвід роботи з словником eBPF. Напишіть речення англійською мовою, у якому пояснюється, що робить кожен з однорядкових команд перед запуском.

  2. ** Прочитайте блог і книгу Брендана Грегг. ** Брендан Грегг є провідним автором з продуктивності Linux і eBPF. Його письмо технічно відмінне і використовує послідовний, точний англійський словник. Його блоги - чудова практика читання.

  3. ** Вправлятися у розмові щодо помилок перевірки. ** Якщо програма eBPF не пройшла перевірку, вам слід пояснити, чому. Практика: «Перевірник відхилив програму, тому що кількість ітерацій петлі не обмежена — нам потрібно обмежити її відомим максимальним значенням»

  4. ** Використовуйте « attach », а не « deploy » або « install ». ** У дискусіях eBPF, правильним дієсловом для з’ єднання програми з точкою прив’ язки є « attach ». Використання правильного слова свідчить про досвід.

Conclusion

Словник eBPF — перевірка, карти, kprobes, точки трасування, XDP і агрегування у ядрі — є точним і специфічним для програмування на рівні ядра. Оскільки інструменти, засновані на eBPF, стають стандартом у спостережливості та безпеці хмарних систем, розуміння цього словника допоможе вам оцінити інструменти, внести свій внесок у обговорення архітектури і написати чітку документацію. Технологія потужна, але складна, і точна мова є необхідною для ефективного обговорення її з колегами.

На практиці: Навігація нюансів для не-народжені мовці

eBPF (розширений фільтр пакетів Berkeley) швидко стає ключовим елементом сучасної спостережливості Linux. Але термінологія може бути щільною, наповненою точним вираженням, що є ключовим для ефективного спілкування в командах розробників і під час розгортання. Для розробників, чия перша мова не є англійською, особливо коли справа доходить до технічних концепцій, розуміння цих нюансів є надзвичайно важливим. Це не просто переклад слів; це про розуміння * як * вони зазвичай використовуються в професійних контекстах - тонкі наслідки вибору, що можуть вплинути на перегляд коду, стратегію розгортання або навіть політику безпеки.

Розглянемо звичайний сценарій: ви переглядаєте запит на захоплення, надісланий колегою. У описі PR йдеться: « Цей зонд збирає дані про трасі для HTTP- запитів розміром більше 1 КБ, використовуючи карту для фільтрування відомого внутрішнього трафіку ». Людина, яка не є носієм мови, може не розуміти багатошарового значення цього слова. « Пробка » — це не просто інструмент моніторингу; це спеціально розроблений шматок коду eBPF, який * активно * спостерігає і записує події. « Дані про траси » означає докладну інформацію про ці події — штампи часу, аргументи, повернені значення — всі ці відомості є важливими для зневадження проблем з швидкодією або визначення вузлів. Використання « використання карти для фільтрування від відомого внутрішнього трафіку » підкреслює важливість ефективності; карти є ключовими значеннями, що зберігаються у eBPF, які дозволяють вам швидко визначити і відкинути незначні дані, запобігаючи перевантаженню вашої системи вашими зондами. Це розуміння не тільки того, що робиться, але і чому це було обрано таким чином — навмисна оптимізація для продуктивності і точності. Аналогічно, при обговоренні політики безпеки, такі фрази як «заборонити трафік на основі IP-адреси джерела» вимагають ретельного розгляду наслідків блокування доступу проти його дозволу.

Інший приклад може з’явитися в розмові Slack: “Гей команда, чи може хтось дослідити, чому ми бачимо високі піки затримки? Давайте зосередимося на зондах eBPF, які стежать за обробкою мережевих пакетів — зокрема, за обробкою, пов’ язаною з керуванням перевантаженнями TCP. » Ця фраза навмисно є технічною і передбачає загальне розуміння ролі eBPF. « Піки затримки » відразу ж вказують на проблему з продуктивністю, яка потребує негайної уваги. Інструкція «фокус» передбачає пріоритизацію розслідувань, а вказівка відповідного зонда допомагає звузити сферу застосування. Це не просто про звіти; це про направлення зусиль на конкретну область занепокоєння.

Нарешті, при написанні PR-описів або документації, завжди прагніть до ясності і точності. Уникайте жаргонних слів, якщо це не абсолютно необхідно, а якщо ви використовуєте технічні терміни, надайте короткі пояснення, щоб всі члени команди розуміли один одного. Пам’ ятайте, що ефективне спілкування так само важливо, як і сам код eBPF; саме це дозволяє вам ефективно співпрацювати і будувати надійні, спостережувані системи.

# Example of creating a simple eBPF map using bpftool
bpftool maps create my_http_request_map TYPE hash SIZE 1024 KEY name VALUE http_url

Поширені запитання

Про що ця стаття "eBPF: Linux Kernel Observability Vocabulary (англійською)"?

Вивчіть англійську лексику, що використовується у розробці eBPF і можливості спостереження — програми, карти, зонди, відстеження і правила безпеки, пояснені для фахівців з інформаційних технологій.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "eBPF: Linux Kernel Observability Vocabulary (англійською)"?

Приблизно 7 min.