È stata presentata la prima versione della libreria Aya, che consente di creare gestori eBPF in linguaggio Rust, eseguiti all'interno del kernel Linux in una particolare macchina virtuale con JIT. A differenza di altri strumenti per lo sviluppo di programmi eBPF, Aya non utilizza libbpf e il compilatore bcc, ma offre una propria implementazione scritta in Rust, che utilizza il crate libc per accedere direttamente alle chiamate di sistema del kernel. Non è necessario avere a disposizione strumenti per il linguaggio C e i file header del kernel per compilare Aya.
Funzionalità principali:
- Supporto per il formato BTF (BPF Type Format), che fornisce informazioni sui tipi nel pseudocodice BPF per il controllo dei tipi e il mapping con i tipi forniti dal kernel attuale. L'applicazione di BTF consente di creare gestori eBPF universali, utilizzabili senza ricompilazione con diverse versioni del kernel Linux.
- Supporto per chiamate "bpf-to-bpf", variabili globali e inizializzatori, che consente di scrivere programmi per eBPF in modo simile a programmi normali, utilizzando Aya come runtime che ridefinisce le funzioni tenendo conto del funzionamento in eBPF.
- Supporto per vari tipi di kernel, inclusi array normali, hash (hash map), stack, code, tracciamenti dello stack, oltre a strutture per socket e monitoraggio delle prestazioni.
- Possibilità di creare vari tipi di programmi eBTF, tra cui programmi per filtraggio e gestione del traffico, gestori cgroup e varie operazioni con socket, programmi XDP.
- Supporto per piattaforme per la gestione delle richieste in modo asincrono con modalità non bloccante, come tokio e async-std.
- Compilazione rapida, senza dipendenze dalla compilazione del kernel e dai file header del kernel.
Il progetto è ancora considerato sperimentale: l'API non è ancora stabilizzata e continua a evolversi. Inoltre, non tutte le funzionalità previste sono state implementate. Entro la fine dell'anno, gli sviluppatori sperano di portare la funzionalità di Aya a livello di parità con libbpf, e a gennaio 2022 di formare la prima versione stabile. È inoltre previsto di unire parti di Aya necessarie per scrivere codice in Rust per il kernel Linux con componenti utilizzati nello spazio utente e necessari per il caricamento, l'allegato e l'interazione con i programmi eBPF.
Ricordiamo che eBPF è un interprete di bytecode integrato nel kernel Linux, che consente di creare gestori per operazioni di rete, monitorare le attività di sistema, intercettare chiamate di sistema, controllare l'accesso, gestire eventi mantenendo la temporizzazione, contare la frequenza e il tempo di esecuzione delle operazioni, eseguire tracciamenti utilizzando kprobes, uprobes e tracepoints. Grazie all'uso della compilazione JIT, il bytecode viene tradotto al volo in istruzioni macchina ed eseguito con le prestazioni del codice nativo. XDP fornisce strumenti per eseguire programmi BPF a livello del driver di rete, con accesso diretto al buffer DMA dei pacchetti, il che consente di creare gestori ad alte prestazioni per operare sotto carico di rete intenso.
Fonte: opennet.ru
