EBPF

eBPF
ТипВіртуальна машина
АвторОлексій Старовоїтов,
Даніель Боркман[1][2]
РозробникСпільнота з відкритим вихідним кодом, Meta, Google, Isovalent, Microsoft, Netflix[1]
Стабільний випуск (2014; 10 років тому (2014))
Операційна системаLinux, Windows[3]
Мова програмуванняC
ЛіцензіяLinux: GPL
Windows: MIT License
РепозиторійLinux: git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
Windows: github.com/Microsoft/ebpf-for-windows/
Вебсайтebpf.io

eBPF є технологією, яка може виконувати програми в привілейованому контексті, такому як ядро операційної системи.[4] Це наступник Berkeley Packet Filter (BPF, де "e" спочатку означало "розширений") механізму фільтрації в Linux і також використовується в не мережевих частинах ядра Linux.

Він використовується для безпечного та ефективного розширення можливостей ядра під час виконання без необхідності вносити зміни до початкового коду ядра або завантажувати модулі ядра.[5] Безпека забезпечується через внутрішньоядерний верифікатор, який виконує статичний аналіз коду та відхиляє програми, які викликають збої, зависання або іншим чином негативно впливають на ядро.[6][7]

Ця модель валідації відрізняється від середовищ з пісочницею, де середовище виконання обмежене і не має уявлення про програму.[8] Прикладом програм, які автоматично відхиляються, є програми без надійних умов завершення (наприклад, цикли for/while без умов завершення) та програми, які здійснюють розіменування вказівників без перевірок на безпеку.[9]

Дизайн

Завантажені програми, які пройшли перевірку, або інтерпретуються, або компілюються в ядрі за допомогою компіляції під час виконання (JIT) для досягнення високої продуктивності. Модель виконання є подійно-орієнтованою та, за рідкими винятками, працює за принципом виконання до завершення,[2] що означає, що програми можуть бути прикріплені до різних точок перехоплення в ядрі операційної системи та виконуються під час спрацювання події. Випадки використання eBPF включають (але не обмежуються) мережеві підсистеми, такі як XDP, трасування та підсистеми безпеки.[4] Завдяки ефективності та гнучкості eBPF відкрилися нові можливості для вирішення виробничих проблем, і Брендан Ґреґґ знаменито назвав eBPF "суперсилою для Linux".[10] Лінус Торвальдс зазначив: "BPF насправді був дуже корисним, і його реальна сила полягає в тому, як він дозволяє створювати спеціалізований код, який активується лише тоді, коли це потрібно".[11] Завдяки успіху в Linux, середовище виконання eBPF було портовано на інші операційні системи, такі як Windows.[3]

Історія

eBPF еволюціонував із класичного Berkeley Packet Filter (cBPF, ретроактивно надана назва). На базовому рівні він запровадив використання десяти 64-бітних регістрів (замість двох 32-бітних регістрів у cBPF), інші семантики переходів, інструкцію виклику та відповідну конвенцію передачі регістрів, нові інструкції та інше кодування для цих інструкцій.[12]

Найважливіші етапи еволюції eBPF
Дата Подія
Квітень 2011 Перший JIT-компілятор (Just-in-time compiler) для класичного фільтра пакетів Берклі (BPF) був інтегрований в ядро Linux.[13]
Січень 2012 Перше некласичне використання класичного фільтра пакетів Берклі — seccomp-bpf.[14]
Березень 2014 Девід С. Міллер, головний адміністратор мережевої підсистеми Linux, прийняв переробку старого інтерпретатора BPF в ядрі. Його замінив інтерпретатор eBPF, а ядро Linux тепер перекладає класичний BPF (cBPF) у команди eBPF.[15]
Вересень 2014 Введено системний виклик bpf, який забезпечив доступ до набору інструкцій eBPF з користувацького простору.[16]
Березень 2015 Можливість прикріплювати eBPF до kprobe була інтегрована як перший випадок використання для трасування.[17]
Серпень 2015 Модуль компілятора eBPF був інтегрований у версію LLVM 3.7.0.[18]
Вересень 2015 Брендан Грегг оголосив про новий набір інструментів для трасування на основі eBPF, відомий як проект bcc.[19]
Липень 2016 eBPF отримав можливість бути прикріпленим до ядра драйвера для обробки вхідних пакетів. Цей рівень відомий як eXpress DataPath XDP.[20]
Серпень 2016 Cilium був представлений як проект для швидкої мережевої комунікації IPv6 для контейнерів за допомогою eBPF і XDP.[21]
Листопад 2016 Netronome додав можливість оффлоаду програм eBPF для XDP та BPF.[22]
Травень 2017 Впроваджено балансувальник навантаження Katran від Meta, який використовує eBPF та XDP.[23]
Листопад 2017 eBPF став окремим підсистемою ядра для спрощення управління патчами ядра.[24]
Січень 2018 Випущена нова родина сокетів AF_XDP для високошвидкісної обробки пакетів.[25]
Грудень 2019 Випущено першу книгу на 880 сторінок про BPF, написану Бренданом Греггом.[26]
Липень 2022 Microsoft випустила eBPF для Windows.[3]

Архітектура та концепції

eBPF мапи

eBPF мапи — це ефективні сховища ключ/значення, які знаходяться в просторі ядра та можуть використовуватися для обміну даними між декількома програмами eBPF або для комунікації між користувацьким простором та кодом eBPF, що працює в ядрі. Програми eBPF можуть використовувати мапи eBPF для зберігання та отримання даних у широкому спектрі структур даних. Реалізації мап надаються ядром. Існують різні типи,[27] включаючи хеш-мапи, масиви та кільцеві буфери.

На практиці eBPF мапи зазвичай використовуються у таких сценаріях, як запис конфігураційної інформації програмою користувацького простору для отримання програмою eBPF, збереження стану програмою eBPF для подальшого отримання іншою програмою eBPF (або під час повторного запуску тієї ж програми), або запис результатів чи метрик програмою eBPF у мапу для отримання програмою користувацького простору, яка представить результати.[28]

Віртуальна машина eBPF

Віртуальна машина eBPF працює в межах ядра та приймає програму у вигляді байткоду eBPF, який конвертується у нативні машинні інструкції, що виконуються на процесорі. Ранні реалізації eBPF виконували інтерпретацію байткоду, проте тепер цей процес замінено на компіляцію Just-in-Time (JIT) для підвищення продуктивності та безпеки.[28] Віртуальна машина eBPF складається з одинадцяти 64-бітних регістрів з 32-бітними підрегістрами, лічильника команд та 512-байтного стека BPF. Ці регістри загального призначення зберігають стан під час виконання програм eBPF.[29]  

Tail calls (хвостові виклики)

Хвостовий виклик дозволяє викликати та виконувати іншу програму eBPF, замінюючи контекст виконання, подібно до того, як системний виклик execve() працює для звичайних процесів. Це дозволяє програмі eBPF викликати іншу програму eBPF. Хвостові виклики реалізуються як довгий стрибок, використовуючи ту саму фрейм стека. Хвостові виклики особливо корисні в eBPF, де стек обмежений 512 байтами. Під час виконання функціональність може бути додана або замінена атомарно, змінюючи поведінку виконання програми BPF.[29] Популярним випадком використання хвостових викликів є розподіл складності програм eBPF на кілька програм. Інший варіант використання — заміна або розширення логіки шляхом заміни вмісту масиву програми під час її використання. Наприклад, для оновлення версії програми без перерви в роботі або для ввімкнення/вимкнення логіки.[30]

Виклики BPF до BPF

Загальноприйнятою практикою в розробці програмного забезпечення є групування загального коду в функції, що інкапсулюють логіку для повторного використання. До версії ядра Linux 4.16 та LLVM 6.0 типова програма eBPF на мові C повинна була явно вказувати компілятору вбудовувати функцію, що призводило до створення об'єктного файлу BPF з дубльованими функціями. Це обмеження було знято, і сучасні компілятори eBPF тепер підтримують написання функцій у програмах eBPF природним чином. Це зменшує розмір згенерованого коду eBPF, роблячи його більш дружнім до кешу інструкцій процесора.[28][29]

Верифікатор eBPF

Верифікатор є основним компонентом eBPF, і його головне завдання — гарантувати, що програма eBPF є безпечною для виконання. Він проводить статичний аналіз байткоду eBPF для забезпечення його безпеки. Верифікатор аналізує програму, оцінюючи всі можливі шляхи виконання. Він крокує по інструкціях у порядку їх виконання і оцінює їх. Процес верифікації починається з пошуку в глибину по всіх можливих шляхах програми, при цьому верифікатор симулює виконання кожної інструкції, відстежуючи стан регістрів і стека. Якщо якась інструкція може призвести до небезпечного стану, верифікація не проходить. Процес триває доти, поки всі шляхи не будуть проаналізовані або не буде знайдено порушення. Залежно від типу програми, верифікатор перевіряє порушення певних правил. До цих правил може входити перевірка того, що програма eBPF завжди завершується за розумний час (без нескінченних циклів або нескінченної рекурсії), перевірка того, що програмі eBPF не дозволяється читати довільну пам'ять, оскільки це може дозволити програмі витікати конфіденційну інформацію, перевірка того, що програми, пов'язані з мережею, не мають доступу до пам'яті поза межами пакета, оскільки сусідня пам'ять може містити конфіденційну інформацію, перевірка того, що програми не можуть створювати взаємне блокування, тому всі Spinlock повинні бути звільнені, і одночасно можна утримувати лише один замок, щоб уникнути взаємного блокування між кількома програмами, перевірка того, що програми не мають доступу до неініціалізованої пам'яті. Це не є вичерпним списком перевірок верифікатора, і є винятки з цих правил. Наприклад, програми трасування мають доступ до хелперів, які дозволяють їм читати пам'ять контрольованим чином, але такі типи програм вимагають привілеїв суперкористувача і тому не становлять загрози для безпеки.[30][28]

З часом верифікатор eBPF розвинувся, включивши нові функції та оптимізації, такі як підтримка обмежених циклів, Елімінація мертвого коду, верифікація по функціям і зворотні виклики.

eBPF CO-RE (Compile Once - Run Everywhere)

Програми eBPF використовують пам'ять і структури даних ядра. Деякі структури можуть змінюватися між різними версіями ядра, змінюючи розташування пам'яті. Оскільки ядро Linux постійно розвивається, немає гарантії, що внутрішні структури даних залишаться незмінними в різних версіях. CO-RE є основним поняттям у сучасній розробці eBPF, яке дозволяє програмам eBPF бути портативними між різними версіями та конфігураціями ядра. Це вирішує проблему варіацій у структурах ядра між різними дистрибутивами Linux і версіями. CO-RE складається з BTF (BPF Type Format) — формату метаданих, який описує типи, що використовуються в ядрі та програмах eBPF, і надає детальну інформацію про структури, зсуви полів і типи даних. Це забезпечує доступ до типів ядра під час виконання, що є ключовим для розробки та верифікації програм BPF. BTF включений в образ ядра для підтримуваних версій. Спеціальні релокації генеруються компілятором (наприклад, LLVM). Ці релокації захоплюють опис високого рівня того, до якої інформації програма eBPF має намір звертатися. Бібліотека libbpf адаптує програми eBPF для роботи з макетом структури даних на цільовому ядрі, де вони виконуються, навіть якщо цей макет відрізняється від того, на якому код було скомпільовано. Для цього libbpf потребує інформацію про релокації BPF CO-RE, згенеровану Clang під час процесу компіляції.[28] Скомпільована програма eBPF зберігається у форматі ELF (Executable and Linkable Format). Цей файл містить інформацію про типи BTF та релокації, згенеровані Clang. Формат ELF дозволяє завантажувачу eBPF (наприклад, libbpf) обробляти та налаштовувати програму BPF динамічно для цільового ядра.[31]

Брендинг

Назва eBPF часто використовується взаємозамінно з BPF,[2][32] наприклад, у спільноті ядра Linux. eBPF і BPF згадуються як технологія, подібно до LLVM.[2] eBPF розвинувся з машинної мови для фільтруючої віртуальної машини в Фільтр Berkeley Packet як розширена версія, але оскільки його сфери використання вийшли за межі мереж, сьогодні "eBPF" найчастіше тлумачиться як псевдоакронім.[2]

Бджола є офіційним логотипом eBPF. Під час першого саміту eBPF було проведено голосування, на якому маскот-бджолу назвали "eBee".[33][34] Логотип спочатку був створений Вадимом Щеколдіним.[34] Раніше існували неофіційні маскоти eBPF,[35] але вони не отримали широкого поширення.

Управління

Фонд eBPF був створений у серпні 2021 року з метою розширення внесків, спрямованих на розширення потужних можливостей eBPF та виходу за межі Linux.[1] Засновниками виступили Meta, Google, Isovalent, Microsoft та Netflix. Метою є збір, бюджетування та витрачання коштів на підтримку різних проєктів з відкритим вихідним кодом, відкритими даними та/або відкритими стандартами, пов'язаних із технологіями eBPF,[36] для подальшого розвитку та впровадження екосистеми eBPF. З моменту заснування до них приєдналися Red Hat, Huawei, CrowdStrike, Tigera, DaoCloud, Datoms, FutureWei.[37]

Впровадження

eBPF був прийнятий рядом великих користувачів на виробництві, наприклад:

  • Meta використовує eBPF через свій балансувальник навантаження 4-го рівня Katran для всього трафіку, що йде на facebook.com.[38][39][40][23]
  • Google використовує eBPF у GKE, розробив та використовує BPF LSM для заміни аудиту та використовує eBPF для роботи в мережі.[41][42][43][44]
  • Cloudflare використовує eBPF для балансування навантаження, захисту від DDoS та забезпечення безпеки.[45][46][47][48][49]
  • Netflix використовує eBPF для моніторингу мережі в масштабах усієї інфраструктури та діагностики продуктивності.[50][51]
  • Dropbox використовує eBPF через Katran для балансування навантаження на 4-му рівні.[52]
  • Android використовує eBPF для NAT46 і моніторингу трафіку.[53][54][55]
  • Samsung Galaxy використовує eBPF для мережевих рішень.[56]
  • Yahoo! Inc використовує eBPF через Cilium для балансування навантаження на 4-му рівні.[57]
  • LinkedIn використовує eBPF для спостереження за інфраструктурою.[58]
  • Alibaba використовує eBPF для балансування навантаження в Kubernetes Pod.[59]
  • Datadog використовує eBPF для мережевих рішень і забезпечення безпеки в Kubernetes Pod.[60][61][62]
  • Trip.com використовує eBPF для мережевих рішень в Kubernetes Pod.[63][64]
  • Shopify використовує eBPF для виявлення вторгнень через Falco.[65]
  • DoorDash використовує eBPF через BPFAgent для моніторингу на рівні ядра.[66]
  • Microsoft переніс eBPF та XDP на Windows.[67][68][69]
  • Seznam використовує eBPF через Cilium для балансування навантаження на 4-му рівні.[70]
  • DigitalOcean використовує eBPF та XDP для обмеження доступу до внутрішніх сервісів у своїй віртуальній мережі.[71]
  • CapitalOne використовує eBPF для мережевих рішень в Kubernetes Pod.[72]
  • Bell Canada використовує eBPF для модернізації телекомунікаційних мереж за допомогою SRv6.[73]
  • Elastic_NV використовує eBPF для профілювання коду як частину своєї пропозиції по спостереженню.[74]
  • Apple використовує eBPF для забезпечення безпеки Kubernetes Pod.[75]
  • Sky використовує eBPF для мережевих рішень у Kubernetes Pod.[76]
  • Walmart використовує eBPF для балансування навантаження на 4-му рівні.[77][78]
  • Huawei використовує eBPF через свою систему захищеного завантаження DIGLIM.[79]
  • Ikea використовує eBPF для мережевих рішень у Kubernetes Pod.[80]
  • The New York Times використовує eBPF для мережевих рішень.[81]
  • Red Hat використовує eBPF в масштабах для балансування навантаження та трасування в їх приватному хмарі.
  • Palantir Technologies використовує eBPF для налагодження мережевих проблем у великих кластерах Kubernetes.[82]

Безпека

Через легкість програмування, eBPF використовувався як інструмент для реалізації мікроархітектурних атак через бічний канал, таких як Spectre, проти вразливих мікропроцесорів.[83] Хоча eBPF без привілеїв реалізовував міграційні заходи проти атак тимчасового виконання,[84] використання без привілеїв зрештою було відключене спільнотою ядра за замовчуванням для захисту від використання проти майбутніх апаратних вразливостей.[85]

Див. також

Примітки

  1. а б в Meta, Google, Isovalent, Microsoft і Netflix заснували eBPF Foundation в рамках Linux Foundation. Linux Foundation. 12 серпня 2021. Процитовано 1 липня 2022.
  2. а б в г д BPF Internals. USENIX LISA 2021 conference. 1 червня 2021. Процитовано 1 липня 2022.
  3. а б в Зробити eBPF працездатним на Windows. Microsoft Open Source Blog. 10 травня 2021. Процитовано 1 липня 2022.
  4. а б eBPF Документація: Що таке eBPF?. eBPF.io. Процитовано 1 липня 2022.
  5. eBPF - Переосмислення ядра Linux. QCon 2020. Процитовано 1 липня 2022.
  6. Безпечні програми — основа BPF. eBPF Summit 2021. 8 листопада 2020. Процитовано 1 липня 2022.
  7. BPF та Spectre: Пом'якшення атак тимчасового виконання. POPL 2022 conference. 22 січня 2022. Процитовано 1 липня 2022.
  8. eBPF — Тиха революція платформи від Cloud Native (PDF). SIGCOMM 2023, 1-а майстерня з eBPF та розширення ядра. 10 вересня 2023. Процитовано 5 жовтня 2023.
  9. Hedam, Niclas (26 травня 2023). eBPF - З погляду програміста (PDF) (укр.). doi:10.13140/RG.2.2.33688.11529/4.
  10. Суперсили Linux BPF. Блог Брендана Ґреґґа. 5 березня 2016. Процитовано 1 липня 2022.
  11. Лінус Торвальдс про повернення до роботи над Linux. zdnet Інтерв'ю з Лінусом Торвальдсом. 23 жовтня 2018. Процитовано 1 липня 2022.
  12. Класичний BPF проти eBPF. LWN. березень 2014. Процитовано 6 січня 2023.
  13. net: filter: Just In Time compiler. lore.kernel.org. April 2011. Процитовано 1 липня 2022.
  14. Yet another new approach to seccomp. LWN. 1 January 2012. Процитовано 1 липня 2022.
  15. BPF updates. lore.kernel.org. March 2014. Процитовано 1 липня 2022.
  16. Happy birthday BPF!. lore.kernel.org. September 2014. Процитовано 1 липня 2022.
  17. tracing: attach eBPF programs to kprobes. lore.kernel.org. March 2015. Процитовано 1 липня 2022.
  18. LLVM 3.7 Release Notes. releases.llvm.org. August 2015. Процитовано 1 липня 2022.
  19. bcc: Taming Linux 4.3+ Tracing Superpowers. brendangregg.com. September 2015. Процитовано 1 липня 2022.
  20. Add driver bpf hook for early packet drop and forwarding. lore.kernel.org. July 2016. Процитовано 1 липня 2022.
  21. Cilium - Fast IPv6 Container Networking with BPF and XDP. slideshare.net. August 2016. Процитовано 1 липня 2022.
  22. nfp ring reconfiguration and XDP support. lore.kernel.org. November 2016. Процитовано 1 липня 2022.
  23. а б XDP 1.5 Years In Production. Evolution and Lessons Learned. lpc.events. Листопад 2018. Процитовано 16 серпня 2022.
  24. pull-request: bpf 2017-11-23. lore.kernel.org. November 2017. Процитовано 1 липня 2022.
  25. Introducing AF_XDP support. lore.kernel.org. January 2018. Процитовано 1 липня 2022.
  26. BPF Performance Tools (book). brendangregg.com. December 2019. Процитовано 16 серпня 2022.
  27. bpf.h - include/uapi/linux/bpf.h - Linux source code v5.15.86 - Bootlin. elixir.bootlin.com. Процитовано 1 серпня 2024.
  28. а б в г д Rice, Liz (2023). Learning eBPF: programming the Linux Kernel for enhanced observability, networking, and security (вид. First). Sebastopol, CA: O'Reilly Media. ISBN 978-1-0981-3512-6. OCLC 1353981026.
  29. а б в BPF Architecture — Cilium 1.16.0 documentation. docs.cilium.io. Процитовано 1 серпня 2024.
  30. а б Tail calls - eBPF Docs. ebpf-docs.dylanreimerink.nl. Процитовано 4 серпня 2024.
  31. BPF CO-RE - eBPF Docs. ebpf-docs.dylanreimerink.nl. Процитовано 7 серпня 2024.
  32. Брендан Грегг (Грудень 2019). BPF Performance Tools. Addison-Wesley. ISBN 978-0136554820.
  33. eBPF Summit Day Two. cilium.io. Жовтень 2020. Процитовано 1 липня 2022.
  34. а б What is the bee named?. ebpf.io. Процитовано 1 липня 2022.
  35. eBPF: One Small Step. Блог Брендана Грегга. Травень 2015. Процитовано 1 липня 2022.
  36. Статут фонду eBPF. ebpf.foundation. Червень 2021. Процитовано 16 серпня 2022.
  37. Управління фондом eBPF. ebpf.foundation. Серпень 2022. Процитовано 16 серпня 2022.
  38. Open-sourcing Katran, a scalable network load balancer. fb.com. Травень 2018. Процитовано 16 серпня 2022.
  39. BPF at Facebook. youtube.com. Грудень 2019. Процитовано 16 серпня 2022.
  40. From XDP to socket. lpc.events. Вересень 2021. Процитовано 16 серпня 2022.
  41. New GKE Dataplane V2 increases security and visibility for containers. cloud.google.com. Травень 2021. Процитовано 16 серпня 2022.
  42. eCHO episode 29: BPF LSM with KP Singh. youtube.com. Листопад 2021. Процитовано 16 серпня 2022.
  43. BPF security auditing at Google - Brendan Jackman/KP Singh. youtube.com. Листопад 2021. Процитовано 16 серпня 2022.
  44. Replacing HTB with EDT and BPF. netdevconf.info. Липень 2020. Процитовано 16 серпня 2022.
  45. Cloudflare architecture and how BPF eats the world. blog.cloudflare.com. Травень 2019. Процитовано 16 серпня 2022.
  46. It's crowded in here!. blog.cloudflare.com. Жовтень 2019. Процитовано 16 серпня 2022.
  47. Production ready eBPF, or how we fixed the BSD socket API. blog.cloudflare.com. Лютий 2022. Процитовано 16 серпня 2022.
  48. Live-patching security vulnerabilities inside the Linux kernel with eBPF Linux Security Module. blog.cloudflare.com. Червень 2022. Процитовано 16 серпня 2022.
  49. Unimog - Cloudflare's edge load balancer. blog.cloudflare.com. Вересень 2020. Процитовано 16 серпня 2022.
  50. How Netflix uses eBPF flow logs at scale for network insight. netflixtechblog.com. Червень 2021. Процитовано 16 серпня 2022.
  51. Extending Vector with eBPF to inspect host and container performance. netflixtechblog.com. Лютий 2019. Процитовано 16 серпня 2022.
  52. Dropbox traffic infrastructure: Edge network. dropbox.tech. Жовтень 2018. Процитовано 16 серпня 2022.
  53. eBPF Traffic Monitoring. source.android.com. Серпень 2022. Процитовано 16 серпня 2022.
  54. Extending the Kernel with eBPF. source.android.com. Серпень 2022. Процитовано 16 серпня 2022.
  55. NAT46 translation with BPF. lore.kernel.org. Квітень 2022. Процитовано 16 серпня 2022.
  56. BPF for Android: How we leverage BPF for our networking solutions - Madhan Raj Kanagarathinam. www.youtube.com. Лютий 2024. Процитовано 19 лютого 2022.
  57. Software L4 Load Balancing for Kubernetes Services at Yahoo! – Karthikeyan Thangaraj, Verizon Media (англ.), 19 серпня 2021, процитовано 3 лютого 2024
  58. Skyfall: eBPF agent for infrastructure observability. www.linkedin.com (англ.). Процитовано 3 лютого 2024.
  59. How Does Alibaba Cloud Build High-Performance Cloud-Native Pod Networks in Production Environments?. alibabacloud.com. Вересень 2020. Процитовано 16 серпня 2022.
  60. Datadog on eBPF. datadogon.datadoghq.com. Лютий 2021. Процитовано 16 серпня 2022.
  61. Runtime Security Monitoring with eBPF (PDF). sstic.org. Лютий 2021. Процитовано 16 серпня 2022.
  62. Our eBPF Journey at Datadog - Laurent Bernaille & Tabitha Sable, Datadog. youtube.com. Листопад 2020. Процитовано 16 серпня 2022.
  63. User Story - How Trip.com uses Cilium. cilium.io. Лютий 2020. Процитовано 16 серпня 2022.
  64. Trip.com: Stepping into Cloud Native Networking Era with Cilium+BGP. arthurchiao.art. Листопад 2020. Процитовано 16 серпня 2022.
  65. Keynote: Open Source Intrusion Detection for Containers at Shopify - Shane Lawrence & Kris Nóva (англ.), 4 вересня 2020, процитовано 9 лютого 2024
  66. Rogers, Patrick (15 серпня 2023). BPFAgent: eBPF for Monitoring at DoorDash - DoorDash Engineering Blog. DoorDash Engineering Blog (амер.). Процитовано 9 лютого 2024.
  67. Making eBPF work on Windows. cloudblogs.microsoft.com. Травень 2021. Процитовано 16 серпня 2022.
  68. Getting Linux based eBPF programs to run with eBPF for Windows. cloudblogs.microsoft.com. Лютий 2022. Процитовано 16 серпня 2022.
  69. Progress on making eBPF work on Windows. cloudblogs.microsoft.com. Листопад 2019. Процитовано 16 серпня 2022.
  70. Cilium Standalone Layer 4 Load Balancer XDP. cilium.io. Липень 2022. Процитовано 16 серпня 2022.
  71. Rate limiting access to internal services in a virtual network – Nick Bouliane, DigitalOcean (англ.), 19 серпня 2021, процитовано 4 лютого 2024
  72. Building a Secure and Maintainable PaaS - Bradley Whitfield, Capital One. youtube.com. Листопад 2020. Процитовано 16 серпня 2022.
  73. Why eBPF is changing the telco networking space – Daniel Bernier, Bell Canada (англ.), 31 серпня 2021, процитовано 9 лютого 2024
  74. Elastic Universal Profiling (англ.), процитовано 26 лютого 2024
  75. Think eBPF for Kernel Security Monitoring - Falco at Apple - Eric Sage & Melissa Kilby, Apple. youtube.com. Жовтень 2021. Процитовано 16 серпня 2022.
  76. eBPF & Cilium at Sky – Sebastian Duff, Anthony Comtois, Jospeh [sic] Samuel, Sky. youtube.com. Серпень 2021. Процитовано 16 серпня 2022.
  77. Running and orchestrating multiple XDP and TC programs – Brian Merrell, Walmart. youtube.com. Серпень 2021. Процитовано 16 серпня 2022.
  78. High Performance Load Balancing @Walmart – Kanthi Pavuluri & Karan Dalal, Walmart. youtube.com. Серпень 2021. Процитовано 16 серпня 2022.
  79. DIGLIM eBPF: secure boot at application level with minimal changes to distros - Roberto Sassu. youtube.com. Серпень 2022. Процитовано 16 серпня 2022.
  80. IKEA Private Cloud, eBPF Based Networking, Load Balancing, and Observability with... Karsten Nielsen. youtube.com. Травень 2022. Процитовано 16 серпня 2022.
  81. Panel Discussion: Is There Actually a Byte Behind All the Buzz? eBPF in Production! (англ.), 28 жовтня 2022, процитовано 9 лютого 2024
  82. Using user-space tracing to solve DNS problems – Andrius Grabauskas, Palantir (англ.), 19 серпня 2021, процитовано 9 лютого 2024
  83. Читання привілейованої пам'яті через бічний канал. googleprojectzero.blogspot.com. 3 січня 2018. Процитовано 16 серпня 2022.
  84. BPF та Spectre: Міграція від атак тимчасового виконання. popl22.sigplan.org. Процитовано 16 серпня 2022.
  85. bpf: Вимкнути безпривілейний bpf за замовчуванням. kernel.org. Процитовано 16 серпня 2022.

Подальше читання

  • Gregg, Brendan (Грудень 2019). BPF Performance Tools. Addison-Wesley. ISBN 978-0136554820.
  • David Calavera, Lorenzo Fontana (Грудень 2019). Linux Observability With BPF. O'Reilly Media, Incorporated. ISBN 978-1492050209.
  • Gregg, Brendan (Грудень 2020). Systems Performance, Second edition. ISBN 978-0136820154.
  • Rice, Liz (Квітень 2022). What Is eBPF?. ISBN 978-1492097259.
  • Rice, Liz (Квітень 2023). Learning eBPF: Programming the Linux Kernel for Enhanced Observability, Networking, and Security. O'Reilly Media. ISBN 978-1098135126.

Зовнішні посилання

  • eBPF.io - Вступ, посібники та ресурси спільноти eBPF
  • eBPF.foundation - Сайт eBPF Foundation Фонду Linux
  • Документальний фільм про eBPF - Документальний фільм про початки eBPF