Foi lançado o primeiro versão da biblioteca Aya, que permite criar manipuladores eBPF na linguagem Rust, executados dentro do núcleo Linux em uma máquina virtual especial com JIT. Ao contrário de outras ferramentas para desenvolver programas eBPF, Aya não utiliza libbpf e o compilador bcc, oferecendo em vez disso sua própria implementação, escrita em Rust, que usa o pacote crate libc para acessar diretamente as chamadas de sistema do núcleo. Não é necessário ter ferramentas da linguagem C ou arquivos de cabeçalho do núcleo para compilar Aya. O código da biblioteca é distribuído sob as licenças MIT e Apache 2.0.
Principais funcionalidades:
- Suporte ao formato BTF (BPF Type Format), que fornece informações sobre tipos em pseudocódigo BPF para verificação de tipos e correspondência com os tipos disponibilizados pelo núcleo atual. A aplicação de BTF possibilita a criação de manipuladores eBPF universais que podem ser usados sem recompilação com diferentes versões do núcleo Linux.
- Suporte a chamadas 'bpf-to-bpf', variáveis globais e inicializadores, permitindo a elaboração de programas para eBPF de forma semelhante a programas comuns, utilizando aya como runtime, que redefine funções levando em conta a operação em eBPF.
- Suporte a vários tipos de núcleo, incluindo arrays comuns, tabelas hash (hash map), pilhas, filas, rastreamentos de pilha, bem como estruturas para sockets e monitoramento de desempenho.
- Capacidade de criar diferentes tipos de programas eBTF, incluindo programas para filtragem e controle de tráfego, manipuladores de cgroup e várias operações com sockets, programas XDP.
- Suporte a plataformas para processamento assíncrono de solicitações em modo não bloqueante, como tokio e async-std.
- Compilação rápida, sem a necessidade de vinculação à compilação do núcleo e aos arquivos de cabeçalho do núcleo.
O projeto ainda é considerado experimental — a API não está estabilizada e continua a evoluir. Além disso, nem todos os recursos planejados foram implementados. Até o final do ano, os desenvolvedores esperam que a funcionalidade do Aya atinja paridade com o libbpf, e em janeiro de 2022, lancem a primeira versão estável. Também está previsto integrar partes do Aya necessárias para escrever código em Rust para o núcleo Linux com componentes que operam no espaço do usuário e que são utilizados para carregar, anexar e interagir com programas eBPF.
Lembramos que o eBPF é um interpretador de bytecode embutido no núcleo do Linux, permitindo a criação de manipuladores de operações de rede, o rastreamento do funcionamento de sistemas, a interceptação de chamadas de sistema, o controle de acesso, o processamento de eventos com a preservação de temporização, a contagem de frequência e tempo de execução de operações, e a execução de traçamentos utilizando kprobes/uprobes/tracepoints. Graças à aplicação da compilação JIT, o bytecode é traduzido em tempo real para instruções de máquina e executado com a performance de código nativo. O XDP fornece os meios para executar programas BPF no nível do driver de rede, com a possibilidade de acesso direto ao buffer DMA de pacotes, o que permite a criação de manipuladores de alta performance para operar sob condições de alta carga de rede.
Fonte: opennet.ru
