Apresentado KernelScript — uma linguagem de programação experimental para o desenvolvimento de programas eBPF, carregadores personalizados e extensões do núcleo Linux a partir de uma única base de código. O projeto desenvolve Multikernel Technologies, uma empresa que promove a arquitetura split-kernel / multikernel para Linux. O KernelScript foi apresentado pelo fundador da empresa Cong Wang na Linux Foundation Open Source Summit; o código do projeto foi publicado no GitHub sob a licença Apache 2.0.
eBPF (Extended Berkeley Packet Filter) — é uma tecnologia que permite executar pequenos programas diretamente no núcleo do Linux, sem alterar seu código e sem comprometer a estabilidade do sistema. O eBPF ajuda a resolver diversas tarefas, desde monitoramento de desempenho até segurança e otimização de rede. Por exemplo, com o eBPF, é possível rastrear chamadas de sistema, tráfego de rede e outros eventos em tempo real. Isso permite identificar gargalos de desempenho e otimizar o sistema (Habr).
A ideia do KernelScript é tornar o desenvolvimento de eBPF menos complicado do que usar a combinação C + libbpf, sem se limitar apenas ao rastreamento, como o bpftrace. Os desenvolvedores descrevem a linguagem como um DSL seguro em tipo, que combina eBPF, desenvolvimento em espaço do usuário e kernelspace: a partir de um único arquivo de origem, o compilador deve gerar código para programas eBPF, parte do espaço do usuário e integração com módulos do núcleo através de kfunc.
As funcionalidades prometidas do KernelScript:
Compilação para diferentes alvos a partir de um único arquivo — funções com atributos como @xdp, @tc, @helper e @kfunc são automaticamente atribuídas à parte correta: programa XDP/TC, função helper, função do núcleo ou código comum do espaço do usuário.
Automatização de chamadas tail — em vez de configurar manualmente o array de programas e chamar bpf_tail_call(), o desenvolvedor é incentivado a escrever uma chamada normal para outra função, enquanto a geração do código eBPF de baixo nível é deixada para o compilador.
Trabalho simplificado com dynptr e mapas eBPF — a linguagem oculta parte do trabalho manual com bpf_ringbuf_reserve_dynptr, bpf_dynptr_write e APIs similares. Os mapas eBPF podem ser usados como variáveis globais acessíveis a diferentes programas.
Controle do ciclo de vida dos programas — os programas eBPF são apresentados como valores tipados, o que, segundo os autores, permite prevenir, durante a compilação, erros como a tentativa de executar attach() antes de um load() bem-sucedido.
Suporte a kfunc — O KernelScript permite declarar funções com o atributo @kfunc, que são executadas no espaço do kernel e podem ser chamadas a partir de programas eBPF; promete geração automática de módulos do kernel e registros BTF.
Suporte aos principais tipos de programas eBPF — O README apresenta exemplos para XDP, TC, programas probe e perf_event, incluindo o trabalho com contadores de desempenho de hardware.
Os autores enfatizam que o KernelScript não é um substituto para o núcleo do Linux ou um novo runtime eBPF. É mais um compilador e uma linguagem de alto nível que deve gerar os habituais componentes de baixo nível: código eBPF, carregadores de userspace, Makefile e, se necessário, módulos do kernel.
Por enquanto, o projeto deve ser encarado como um experimento inicial. O repositório indica claramente que o KernelScript está em fase beta, o sintaxe e a API podem mudar sem garantir compatibilidade anterior, e seu uso em produção não é recomendado por enquanto.
Fonte: linux.org.ru
