Saltar para o conteúdo

Usuário:X spager/EBPF

Origem: Wikipédia, a enciclopédia livre.
eBPF
BPF_logo.png
Autor Alexei Starovoitov,
Daniel Borkmann[1][2]
Desenvolvedor Open source community, Meta, Google, Isovalent, Microsoft, Netflix[1]
Lançamento 2014; há 10 anos[3]
Escrito em C
Sistema operacional Linux, Windows[4]
Gênero(s) Sistema de tempo de execução
Licença Linux: GPL
Windows: MIT License
Página oficial ebpf.io
Repositório Linux: git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
Windows: github.com/Microsoft/ebpf-for-windows/

eBPF é uma tecnologia que pode executar programas em um contexto privilegiado, como o kernel do sistema operacional . [5] É o sucessor do mecanismo de filtragem Berkeley Packet Filter (BPF, com o "e" originalmente significando "estendido") no Linux e também é usado em outras partes do kernel do Linux. Ele é usado para estender com segurança e eficiência os recursos do kernel em tempo de execução, sem exigir alterações no código-fonte do kernel ou carregar módulos do kernel . [6] A segurança é fornecida por meio de um verificador no kernel que executa análise estática de código e rejeita programas que travam, travam ou interferem negativamente no kernel. [7] [8]

Este modelo de validação difere dos ambientes em sandbox, onde o ambiente de execução é restrito e o tempo de execução não tem insights sobre o programa. [9] Exemplos de programas que são rejeitados automaticamente são programas sem fortes garantias de saída (ou seja, loops for/while sem condições de saída) e programas que desreferenciam ponteiros sem verificações de segurança. [10]

Os programas carregados que passaram no verificador são interpretados ou compilados just-in-time no kernel (compilados JIT) para desempenho de execução nativo. O modelo de execução é orientado a eventos e, com poucas exceções , é executado até a conclusão, o que significa que os programas podem ser anexados a vários pontos de gancho no kernel do sistema operacional e executados após o acionamento de um evento. Os casos de uso de eBPF incluem (mas não estão limitados a) redes como XDP, rastreamento e subsistemas de segurança . [5] Dado que a eficiência e flexibilidade do eBPF abriram novas possibilidades para resolver problemas de produção, Brendan Gregg apelidou o eBPF de "superpoderes para Linux". [11] Linus Torvalds disse: "O BPF tem sido realmente muito útil, e o verdadeiro poder dele é como ele permite que as pessoas criem códigos especializados que não são habilitados até serem solicitados". [12] Devido ao seu sucesso no Linux, o tempo de execução do eBPF foi portado para outros sistemas operacionais como o Windows .

O eBPF foi construído sobre o Berkeley Packet Filter (cBPF). No nível mais baixo, introduziu o uso de dez registradores de 64 bits (em vez de dois registradores longos de 32 bits para cBPF), semântica de salto diferente, uma instrução de chamada e convenção de passagem de registrador correspondente, novas instruções e uma codificação diferente para estes. instruções. [13]

Marcos mais significativos na evolução do eBPF
Data Evento
Abril de 2011 O primeiro compilador jit dentro do kernel Linux do clássico Berkley Packet Filter é mesclado.[14]
Janeiro de 2012 O primeiro caso de uso não relacionado a redes do clássico Berkeley Packet Filter, seccomp-bpf,[15] aparece. Permite que chamadas de sistema sejam filtradas usando um politica implementada através e instruções BPF.
Março de 2014 David S. Miller, primary maintainer of the Linux networking stack, accepted the rework of the old in-kernel BPF interpreter. It was replaced by an eBPF interpreter and the Linux kernel internally translates classic BPF (cBPF) into eBPF instructions.[16]
Março de 2015 The ability to attach eBPF to kprobes as first tracing use case was merged.[18] In the same month, initial infrastructure work got accepted to attach eBPF to the networking traffic control (tc) layer allowing to attach eBPF to the core ingress and later also egress paths of the network stack, later heavily used by projects such as Cilium.[19][20][21]
Agosto de 2015 The eBPF compiler backend got merged into LLVM 3.7.0 release.[22]
Setembro de 2015 Brendan Gregg announced a collection of new eBPF-based tracing tools as the bcc project, providing a front-end for eBPF to make it easier to write programs.[23]
Julho de 2016 eBPF got the ability to be attached into network driver's core receive path. This layer is known today as eXpress DataPath (XDP) and was added as a response to DPDK to create a fast data path which works in combination with the Linux kernel rather than bypassing it.[24][25][26]
Agosto de 2016 Cilium was initially announced during LinuxCon as a project providing fast IPv6 container networking with eBPF and XDP. Today, Cilium has been adopted by major cloud provider's Kubernetes offerings and is one of the most widely used CNIs.[27][21][28]
Novembro de 2016 Netronome added offload of eBPF programs for XDP and tc BPF layer to their NIC.[29]
Maio de 2017 Meta's layer 4 load-balancer, Katran, went live. Every packet towards facebook.com since then has been processed by eBPF & XDP.[30]
Novembro de 2017 eBPF becomes its own kernel subsystem to ease the continuously growing kernel patch management. The first pull request by eBPF maintainers was submitted.[31]
Setembro de 2017 Bpftool was added to the Linux kernel as a user space utility to introspect the eBPF subsystem.[32]
Janeiro de 2018 A new socket family called AF_XDP was published, allowing for high performance packet processing with zero-copy semantics at the XDP layer.[33] Today, DPDK has an official AF_XDP poll-mode driver support.[34]
Fevereiro de 2018 The bpfilter prototype has been published, allowing translation of a subset of iptables rulesets into eBPF via a newly developed user mode driver. The work has caused controversies due to the ongoing nftables development effort and has not been merged into mainline.[35][36]
Outubro de 2018 The new bpftrace tool has been announced by Brendan Gregg as DTrace 2.0 for Linux.[37]
Novembro de 2018 eBPF introspection has been added for kTLS in order to support the ability for in-kernel TLS policy enforcement.[38]
Novembro de 2018 BTF (BPF Type Format) has been added to the Linux kernel as an efficient meta data format which is approximately 100x smaller in size than DWARF.[39]
Dezembro de 2019 The first 880-page long book on BPF, written by Brendan Gregg, was released.[40]
Março de 2020 Google upstreamed BPF LSM support into the Linux kernel, enabling programmable Linux Security Modules (LSMs) through eBPF.[41]
Setembro de 2020 The eBPF compiler backend for GNU Compiler Collection (GCC) was merged.[42]

O alias eBPF é frequentemente usado de forma intercambiável com BPF, [43] por exemplo pela comunidade do kernel Linux. eBPF e BPF são chamados de nomes de tecnologia como LLVM . [2] O eBPF evoluiu do Berkeley Packet Filter como uma versão estendida, mas seu caso de uso superou a rede, e hoje o eBPF como pseudo-acrônimo é o preferido. [2]

A abelha é o logotipo oficial da eBPF. No primeiro Summit da eBPF houve votação e a mascote abelha foi batizada de “eBee”. [44] [45] O logotipo foi originalmente criado por Vadim Shchekoldin. [45] Mascotes eBPF não oficiais anteriores existiram no passado, [46] mas não foram amplamente adotados.

A Fundação eBPF foi criada em agosto de 2021 com o objetivo de expandir as contribuições feitas para ampliar os poderosos recursos do eBPF e crescer além do Linux. [1] Os membros fundadores incluem Meta, Google, Isovalent, Microsoft e Netflix . O objetivo é arrecadar, orçamentar e gastar fundos em apoio a vários projetos de código aberto, dados abertos e/ou padrões abertos relacionados às tecnologias eBPF [47] para impulsionar ainda mais o crescimento e a adoção do ecossistema eBPF. Desde o início, Red Hat, Huawei, Crowdstrike, Tigera, DaoCloud, Datoms, FutureWei também aderiram. [48]

O eBPF foi adotado por vários usuários de produção em larga escala, por exemplo:

Devido à facilidade de programação, o eBPF tem sido usado como uma ferramenta para implementar ataques de canal lateral de temporização microarquitetural, como Spectre, contra microprocessadores vulneráveis. [93] Embora o eBPF sem privilégios tenha implementado mitigações contra ataques de execução transitórios, [94] o uso sem privilégios foi finalmente desabilitado pela comunidade do kernel por padrão para proteger contra uso contra futuras vulnerabilidades de hardware. [95]

Referências

  1. a b c «Meta, Google, Isovalent, Microsoft and Netflix Launch eBPF Foundation as Part of the Linux Foundation». Linux Foundation. 12 de Agosto de 2021. Consultado em 1 de Julho de 2022  Erro de citação: Código <ref> inválido; o nome ":1" é definido mais de uma vez com conteúdos diferentes
  2. a b c «BPF Internals». USENIX LISA 2021 conference. 1 de Junho de 2021. Consultado em 1 de Julho 2022 
  3. «eBPF and Kubernetes: Little Helper Minions for Scaling Microservices». CNCF KubeCon + CloudNativeCon Europe 2020. 19 de Agosto de 2020. Consultado em 1 de Julho de 2022 
  4. «Making eBPF work on Windows». Microsoft Open Source Blog. 10 de Maio de 2021. Consultado em 1 de Julho de 2022 
  5. a b «eBPF Documentation: What is eBPF?». eBPF.io. Consultado em 1 de Julho de 2022  Erro de citação: Código <ref> inválido; o nome ":8" é definido mais de uma vez com conteúdos diferentes
  6. «eBPF - Rethinking the Linux Kernel». QCon 2020. Consultado em 1 de Julho de 2022 
  7. «Safe Programs The Foundation of BPF.». eBPF Summit 2021. 8 de Novembro de 2020. Consultado em 1 de Julho de 2022 
  8. «BPF and Spectre: Mitigating transient execution attacks». POPL 2022 conference. 22 de Janeiro de 2022. Consultado em 1 de Julho de 2022 
  9. «eBPF - The Silent Platform Revolution from Cloud Native» (PDF). SIGCOMM 2023, 1st Workshop on eBPF and Kernel Extensions. 10 de Setembro de 2023. Consultado em 5 de Outubro de 2023 
  10. Hedam, Niclas (26 de Maio de 2023). «eBPF - From a Programmer's Perspective» (PDF) (em inglês). doi:10.13140/RG.2.2.33688.11529/4 
  11. «Linux BPF Superpowers». Brendan Gregg's Blog. 5 de Março de 2016. Consultado em 1 de Julho de 2022 
  12. «Linus Torvalds talks about coming back to work on Linux». zdnet Interview with Linus Torvalds. 23 de Outubro de 2018. Consultado em 1 de Julho de 2022 
  13. «Classic BPF vs eBPF». LWN. Março de 2014. Consultado em 6 de Janeiro de 2023 
  14. «net: filter: Just In Time compiler». lore.kernel.org. Abril de 2011. Consultado em 1 de Julho de 2022 
  15. «Yet another new approach to seccomp». LWN. 1 de Janeiro de 2012. Consultado em 1 de Julho de 2022 
  16. «BPF updates». lore.kernel.org. Março de 2014. Consultado em 1 de Julho de 2022 
  17. «Happy birthday BPF!». lore.kernel.org. Setembro de 2014. Consultado em 1 de Julho de 2022 
  18. «tracing: attach eBPF programs to kprobes». lore.kernel.org. Março de 2015. Consultado em 1 de Julho de 2022 
  19. «eBPF support for cls_bpf». lore.kernel.org. Março de 2015. Consultado em 1 de Julho de 2022 
  20. «net, sched: add clsact qdisc». lore.kernel.org. Janeiro de 2016. Consultado em 1 de Julho de 2022 
  21. a b «eBPF-based Networking, Observability, Security». cilium.io. Janeiro de 2016. Consultado em 1 de Julho 2022 
  22. «LLVM 3.7 Release Notes». releases.llvm.org. Agosto de 2015. Consultado em 1 de Julho de 2022 
  23. «bcc: Taming Linux 4.3+ Tracing Superpowers». brendangregg.com. Setembro de 2015. Consultado em 1 de Julho 2022 
  24. «Add driver bpf hook for early packet drop and forwarding». lore.kernel.org. Julho de 2016. Consultado em 1 de Julho de 2022 
  25. «eCHO episode 9: XDP and Load Balancing». youtube.com. Junho de 2021. Consultado em 1 de Julho de 2022 
  26. Høiland-Jørgensen, Toke; Brouer, Jesper Dangaard; Borkmann, Daniel; Fastabend, John; Herbert, Tom; Ahern, David; Miller, David (Dezembro de 2018). «The eXpress data path: Fast programmable packet processing in the operating system kernel». Proceedings of the 14th International Conference on emerging Networking EXperiments and Technologies. pp. 54–66. ISBN 9781450360807. doi:10.1145/3281411.3281443Acessível livremente 
  27. removed
  28. a b «New GKE Dataplane V2 increases security and visibility for containers». cloud.google.com. Maio de 2021. Consultado em 16 de Agosto de 2022 
  29. «nfp ring reconfiguration and XDP support». lore.kernel.org. Novembro de 2016. Consultado em 1 de Julho 2022 
  30. a b «XDP 1.5 Years In Production. Evolution and Lessons Learned.». lpc.events. Novembro de 2018. Consultado em 16 de Agosto de 2022 
  31. «pull-request: bpf 2017-11-23». lore.kernel.org. Novembro de 2017. Consultado em 1 de Julho de 2022 
  32. «tools: add bpftool». lore.kernel.org. Setembro de 2017. Consultado em 1 de Julho de 2022 
  33. «Introducing AF_XDP support». lore.kernel.org. Janeiro de 2018. Consultado em 1 de Julho de 2022 
  34. «AF_XDP Poll Mode Driver». doc.dpdk.org. Agosto de 2022. Consultado em 16 de Agosto de 2022 
  35. «BPF comes to firewalls». lwn.net. Fevereiro de 2018. Consultado em 1 de Julho de 2022 
  36. «Why is the kernel community replacing iptables with BPF?». cilium.io. Abril de 2018. Consultado em 1 de Julho de 2022 
  37. «bpftrace (DTrace 2.0) for Linux 2018». brendangregg.com. Outubro de 2018. Consultado em 16 de Agosto de 2022 
  38. «Combining kTLS and BPF for Introspection and Policy Enforcement» (PDF). vger.kernel.org. Novembro de 2018. Consultado em 1 de Julho de 2022 
  39. «BTF deduplication and Linux kernel BTF». nakryiko.com. Novembro de 2018. Consultado em 1 de Julho de 2022 
  40. «BPF Performance Tools (book)». brendangregg.com. Dezembro de 2019. Consultado em 16 de Agosto de 2022 
  41. «MAC and Audit policy using eBPF (KRSI)». lore.kernel.org. Março de 2020. Consultado em 16 de Agosto de 2022 
  42. «BPF in GCC». lwn.net. Setembro de 2020. Consultado em 16 de Agosto de 2022 
  43. Brendan Gregg (Dezembro de 2019). BPF Performance Tools. [S.l.]: Addison-Wesley. ISBN 978-0136554820 
  44. «eBPF Summit Day Two». cilium.io. Outubro de 2020. Consultado em 1 de Julho de 2022 
  45. a b «What is the bee named?». ebpf.io. Consultado em 1 de Julho de 2022 
  46. «eBPF: One Small Step». Brendan Gregg's Blog. Maio de 2015. Consultado em 1 de Julho de 2022 
  47. «eBPF Foundation Charter». ebpf.foundation. Junho de 2021. Consultado em 16 de Agosto de 2022 
  48. «eBPF Foundation Governance». ebpf.foundation. Agosto de 2022. Consultado em 16 de Agosto de 2022 
  49. «Open-sourcing Katran, a scalable network load balancer». fb.com. Maio de 2018. Consultado em 16 de Agosto de 2022 
  50. «BPF at Facebook». youtube.com. Dezembro de 2019. Consultado em 16 de Agosto de 2022 
  51. «From XDP to socket». lpc.events. Setembro de 2021. Consultado em 16 de Agosto de 2022 
  52. «eCHO episode 29: BPF LSM with KP Singh». youtube.com. Novembro de 2021. Consultado em 16 de Agosto de 2022 
  53. «BPF security auditing at Google - Brendan Jackman/KP Singh». youtube.com. Novembro de 2021. Consultado em 16 de Agosto de 2022 
  54. «Replacing HTB with EDT and BPF». netdevconf.info. Julho de 2020. Consultado em 16 de Agosto de 2022 
  55. «Cloudflare architecture and how BPF eats the world». blog.cloudflare.com. Maio de 2019. Consultado em 16 de Agosto de 2022 
  56. «It's crowded in here!». blog.cloudflare.com. Outubro de 2019. Consultado em 16 de Agosto de 2022 
  57. «Production ready eBPF, or how we fixed the BSD socket API». blog.cloudflare.com. Fevereiro de 2022. Consultado em 16 de Agosto de 2022 
  58. «Live-patching security vulnerabilities inside the Linux kernel with eBPF Linux Security Module». blog.cloudflare.com. Junho de 2022. Consultado em 16 de Agosto de 2022 
  59. «Unimog - Cloudflare's edge load balancer». blog.cloudflare.com. Setembro 2020. Consultado em 16 de Agosto de 2022 
  60. «How Netflix uses eBPF flow logs at scale for network insight». netflixtechblog.com. Junho 2021. Consultado em 16 de Agosto de 2022 
  61. «Extending Vector with eBPF to inspect host and container performance». netflixtechblog.com. Fevereiro de 2019. Consultado em 16 de Agosto de 2022 
  62. «Dropbox traffic infrastructure: Edge network». dropbox.tech. Outubro de 2018. Consultado em 16 de Agosto de 2022 
  63. «eBPF Traffic Monitoring». source.android.com. Agosto de 2022. Consultado em 16 de Agosto de 2022 
  64. «Extending the Kernel with eBPF». source.android.com. Agosto de 2022. Consultado em 16 de Agosto de 2022 
  65. «NAT46 translation with BPF». lore.kernel.org. Abril de 2022. Consultado em 16 de Agosto de 2022 
  66. «BPF for Android: How we leverage BPF for our networking solutions - Madhan Raj Kanagarathinam». www.youtube.com. Fevereiro de 2024. Consultado em 19 de Fevereiro de 2022 
  67. Software L4 Load Balancing for Kubernetes Services at Yahoo! – Karthikeyan Thangaraj, Verizon Media (em inglês), consultado em 3 de fevereiro de 2024 
  68. «Skyfall: eBPF agent for infrastructure observability». www.linkedin.com (em inglês). Consultado em 3 de fevereiro de 2024 
  69. «How Does Alibaba Cloud Build High-Performance Cloud-Native Pod Networks in Production Environments?». alibabacloud.com. Setembro de 2020. Consultado em 16 de Agosto de 2022 
  70. «Datadog on eBPF». datadogon.datadoghq.com. Fevereiro 2021. Consultado em 16 de Agosto de 2022 
  71. «Runtime Security Monitoring with eBPF» (PDF). sstic.org. Fevereiro 2021. Consultado em 16 de Agosto de 2022 
  72. «Our eBPF Journey at Datadog - Laurent Bernaille & Tabitha Sable, Datadog». youtube.com. Novembro de 2020. Consultado em 16 de Agosto de 2022 
  73. «User Story - How Trip.com uses Cilium». cilium.io. Fevereiro de 2020. Consultado em 16 de Agosto de 2022 
  74. «Trip.com: Stepping into Cloud Native Networking Era with Cilium+BGP». arthurchiao.art. Novembro de 2020. Consultado em 16 de Agosto de 2022 
  75. Keynote: Open Source Intrusion Detection for Containers at Shopify - Shane Lawrence & Kris Nóva (em inglês), consultado em 9 de fevereiro de 2024 
  76. Rogers, Patrick (15 de agosto de 2023). «BPFAgent: eBPF for Monitoring at DoorDash - DoorDash Engineering Blog». DoorDash Engineering Blog (em inglês). Consultado em 9 de fevereiro de 2024 
  77. «Making eBPF work on Windows». cloudblogs.microsoft.com. Maio 2021. Consultado em 16 de Agosto de 2022 
  78. «Getting Linux based eBPF programs to run with eBPF for Windows». cloudblogs.microsoft.com. Fevereiro 2022. Consultado em 16 de Agosto de 2022 
  79. «Progress on making eBPF work on Windows». cloudblogs.microsoft.com. Novembro 2019. Consultado em 16 de Agosto de 2022 
  80. «Cilium Standalone Layer 4 Load Balancer XDP». cilium.io. Julho de 2022. Consultado em 16 de Agosto de 2022 
  81. Rate limiting access to internal services in a virtual network – Nick Bouliane, DigitalOcean (em inglês), consultado em 4 de fevereiro de 2024 
  82. «Building a Secure and Maintainable PaaS - Bradley Whitfield, Capital One». youtube.com. Novembro de 2020. Consultado em 16 de Agosto de 2022 
  83. Why eBPF is changing the telco networking space – Daniel Bernier, Bell Canada (em inglês), consultado em 9 de fevereiro de 2024 
  84. Elastic Universal Profiling (em inglês), consultado em 26 de fevereiro de 2024 
  85. «Think eBPF for Kernel Security Monitoring - Falco at Apple- Eric Sage & Melissa Kilby, Apple». youtube.com. Outubro de 2021. Consultado em 16 de Agosto de 2022 
  86. «eBPF & Cilium at Sky – Sebastian Duff, Anthony Comtois, Jospeh [sic] Samuel, Sky». youtube.com. Agosto de 2021. Consultado em 16 de Agosto de 2022 
  87. «Running and orchestrating multiple XDP and TC programs – Brian Merrell, Walmart». youtube.com. Agosto de 2021. Consultado em 16 de Agosto de 2022 
  88. «High Performance Load Balancing @Walmart – Kanthi Pavuluri & Karan Dalal, Walmart». youtube.com. Agosto de 2021. Consultado em 16 de Agosto de 2022 
  89. «DIGLIM eBPF: secure boot at application level with minimal changes to distros - Roberto Sassu». youtube.com. Agosto de 2022. Consultado em 16 de Agosto de 2022 
  90. «IKEA Private Cloud, eBPF Based Networking, Load Balancing, and Observability with... Karsten Nielsen». youtube.com. Maio 2022. Consultado em 16 de Agosto de 2022 
  91. Panel Discussion: Is There Actually a Byte Behind All the Buzz? eBPF in Production! (em inglês), consultado em 9 de fevereiro de 2024 
  92. Using user-space tracing to solve DNS problems – Andrius Grabauskas, Palantir (em inglês), consultado em 9 de fevereiro de 2024 
  93. «Reading privileged memory with a side-channel». googleprojectzero.blogspot.com. 3 de Janeiro de 2018. Consultado em 16 de Agosto de 2022 
  94. «BPF and Spectre: Mitigating transient execution attacks». popl22.sigplan.org. Consultado em 16 de Agosto de 2022 
  95. «bpf: Disallow unprivileged bpf by default». kernel.org. Consultado em 16 de Agosto de 2022 


Leitura adicional

[editar | editar código-fonte]
[editar | editar código-fonte]

[[Categoria:Software usando a licença MIT]] [[Categoria:Softwares de sistema livres]] [[Categoria:Software livre programado em C]] [[Categoria:!Páginas com traduções não revistas]]