GCC ora include un backend per la compilazione su eBPF

Incluso nella suite del compilatore GCC accettato codice per compilare programmi per l'interprete bytecode integrato nel kernel Linux eGMP. Grazie all'utilizzo della compilazione JIT, il bytecode del kernel viene tradotto al volo in istruzioni macchina ed eseguito con l'esecuzione del codice nativo. Patch con supporto eBPF accettato al ramo da cui viene sviluppata la versione GCC 10.

Oltre a un backend per la generazione di bytecode, GCC include una porta libgcc per eBPF e strumenti per generare file ELF che consentono di eseguire codice nella macchina virtuale eBPF utilizzando caricatori forniti dal kernel. Le patch per supportare eBPF in GCC sono state preparate dagli ingegneri di Oracle, che lo avevano già fatto fornito Supporto eBPF nelle binutils GNU. Sono in fase di sviluppo anche un simulatore e patch per GDB, che permetteranno di eseguire il debug dei programmi eBPF senza caricarli nel kernel.

I programmi per eBPF possono essere definiti in un sottoinsieme del linguaggio C, compilati e caricati nel kernel. Prima dell'esecuzione, l'interprete eBPF controlla il bytecode per l'utilizzo delle istruzioni consentite e impone determinate regole al codice (ad esempio, nessun loop).
Inizialmente, per compilare eBPF su Linux venivano utilizzati strumenti basati su LLVM. Il supporto eBPF in GCC è interessante perché consente di utilizzare un toolkit per creare il kernel Linux e i programmi eBPF, senza installare dipendenze aggiuntive.

Sotto forma di programmi eBPF, è possibile creare gestori delle operazioni di rete, filtrare il traffico, gestire la larghezza di banda, monitorare i sistemi, intercettare le chiamate di sistema, controllare l'accesso, contare la frequenza e il tempo delle operazioni ed eseguire il tracciamento utilizzando kprobes/uprobes/tracepoint.

Fonte: opennet.ru

Aggiungi un commento