À esquerda, Kernek original com eBPF | Certo: bpftime
Bpftime é um projeto posicionado como um tempo de execução e uma VM projetada para execute drivers eBPF no espaço do usuário.
Bpftime permite rastreamento de eBPF e programas de intervenção em processos executado inteiramente no espaço do usuário, usando funções como uprobe e interceptação de chamadas do sistema.
Sobre bpftime
Uma das características notáveis do bpftime é a sua capacidade de reduzir drasticamente a sobrecarga eliminando mudanças de contexto desnecessárias. Comparado com o uso de funções uprobe e uretsonda fornecido pelo kernel Linux, bpftime pode alcançar até dez vezes mais redução de sobrecarga o que não apenas melhora o desempenho, mas também simplifica bastante o processo de depuração.
Menciona-se que o Interceptação de chamadas de sistema e integração de verificações de levantar implementado usando a técnica de reescrita de código executável (reescrita binária). Essa técnica envolve a modificação do código de máquina do aplicativo em execução, onde as chamadas para chamadas do sistema, pontos de entrada e funções locais são substituídas por uma transição para manipuladores de depuração.
Além disso, bpftime oferece a vantagem de ser potencialmente utilizável em sistemas sem kernel Linux e não requer privilégios elevados para carregar um aplicativo eBPF no kernel. Isso o torna altamente acessível e versátil em uma variedade de ambientes e configurações de sistema.
Bpftime oferece uma ampla gama de operações para manipular e controlar funções, anexar manipuladores, filtrar chamadas do sistema e executar diversas ações, incluindo:
- Substituição ou modificação de funções.
- Anexe controladores (ganchos) e filtros.
- Redirecione, bloqueie ou substitua parâmetros de chamada do sistema.
- Interceptação de pontos de entrada e saída de funções.
- Substituindo um manipulador em um deslocamento arbitrário no código.
Uma característica notável do Bpftime é sua capacidade de se conectar a qualquer processo em execução no sistema sem a necessidade de reiniciá-lo ou reconstruí-lo. A substituição de Bpftime em processos pode ser feita para executar processos por meio rastreamento e carregue-os via LD_PRELOAD.
Com o bpftime, sistemas de rastreamento como BCC, bpftrace e Deepflow podem ser executados no espaço do usuário. Por exemplo, demonstramos o uso do script sslsniff da estrutura BCC para analisar e salvar o tráfego criptografado no nginx. Nos testes, o desempenho do nginx cai 58% ao executar o sslsniff no lado do kernel e 12,3% ao mover o driver para o espaço do usuário.
Além disso, como parte do Bpftime, está sendo desenvolvido um tempo de execução que permite que programas eBPF sejam anexados a chamadas de sistema e pontos de rastreamento de teste. A máquina virtual eBPF com JIT permite a execução isolada de programas eBPF no nível do processo do usuário, com suporte para compilação AOT. Um processo em segundo plano facilita a interação com o kernel e organiza a colaboração com o subsistema sondar do núcleo.
A máquina virtual eGMP é empacotado como uma biblioteca de plugins e fornece uma API semelhante a ubpf, o que permite que a funcionalidade eBPF seja facilmente integrada a outros projetos. Para agregação resumida de dados de múltiplos processos, é suportada a criação de mapas eBPF conjuntos localizados em memória compartilhada.
Ao todo, Bpftime não oferece apenas um conjunto completo de ferramentas para manipulação e controle de funções em tempo de execução, mas também facilita a integração da funcionalidade eBPF em outros projetos, fornecendo assim uma solução flexível e poderosa para diversas aplicações e cenários de uso. Além disso, o suporte para drivers eBPF padrão escritos para uso no kernel e o uso de ferramentas padrão baseadas em clang e libbpf para compilação garantem uma experiência de desenvolvimento eficiente e consistente.
Para os interessados no projeto, saiba que o código do projeto é escrito em C/C++ e é distribuído sob a licença MIT, o que garante sua acessibilidade e transparência para a comunidade.
Se quiser aprenda mais sobre isso, você pode verificar os detalhes no link a seguir