GCC agora inclui backend para compilação em eBPF

Incluído no conjunto de compiladores GCC aceito código para compilar programas para o interpretador de bytecode embutido no kernel do Linux eGMP. Graças ao uso da compilação JIT, o bytecode do kernel é traduzido dinamicamente em instruções de máquina e executado com o desempenho do código nativo. Patches com suporte eBPF aceitaram no ramo a partir do qual a versão do GCC 10 é desenvolvida.

Além de um backend para geração de bytecode, o GCC inclui uma porta libgcc para eBPF e ferramentas para geração de arquivos ELF que possibilitam a execução de código na máquina virtual eBPF usando carregadores fornecidos pelo kernel. Patches para suporte ao eBPF no GCC foram preparados por engenheiros da Oracle, que já haviam forneceu Suporte eBPF em binutils GNU. Um simulador e patches para GDB também estão em desenvolvimento, o que permitirá depurar programas eBPF sem carregá-los no kernel.

Os programas para eBPF podem ser definidos em um subconjunto da linguagem C, compilados e carregados no kernel. Antes da execução, o interpretador eBPF verifica o bytecode quanto ao uso de instruções permitidas e impõe certas regras ao código (por exemplo, sem loops).
Inicialmente, ferramentas baseadas em LLVM foram usadas para compilar o eBPF no Linux. O suporte eBPF no GCC é interessante porque permite usar um kit de ferramentas para construir o kernel Linux e programas eBPF, sem instalar dependências adicionais.

Na forma de programas eBPF, você pode criar manipuladores de operação de rede, filtrar tráfego, gerenciar largura de banda, monitorar sistemas, interceptar chamadas de sistema, controlar acesso, contar a frequência e o tempo de operações e realizar rastreamento usando kprobes/uprobes/tracepoints.

Fonte: opennet.ru

Adicionar um comentário