Azienda Oracle sul lavoro di trasferimento delle modifiche correlate a DTrace nell'upstream e sui piani per implementare la tecnologia di debug dinamico di DTrace sopra l'infrastruttura nativa del kernel Linux, in particolare utilizzando sottosistemi come eBPF. Inizialmente, il principale problema nell'uso di DTrace su Linux era l'incompatibilità a livello di licenze, ma nel 2018 Oracle il codice DTrace sotto GPLv2.
DTrace è già disponibile come parte del kernel esteso per la distribuzione Oracle Linux, ma il suo utilizzo in altre distribuzioni richiede l'applicazione di patch aggiuntive al kernel, limitando così l'uso di tale tecnologia. Ad esempio, Oracle ha fornito istruzioni dettagliate per l'installazione e l'uso di DTrace in Fedora Linux. Per l'installazione è necessaria la compilazione e l'applicazione di un kernel Linux ricompilato con . Per automatizzare la compilazione del kernel con le patch Oracle e Fedora, è stato proposto .
eBPF è un interprete di bytecode integrato nel kernel Linux che consente di creare gestori di operazioni di rete, monitorare il funzionamento dei sistemi, intercettare chiamate di sistema, controllare l'accesso, gestire eventi mantenendo il timestamp (perf_event_open), contare la frequenza e il tempo di esecuzione delle operazioni, eseguire il tracciamento utilizzando kprobes/uprobes/tracepoints. Grazie all'uso della compilazione JIT, il bytecode viene tradotto in istruzioni di macchina al volo e viene eseguito con prestazioni paragonabili al codice nativo. DTrace può essere implementato sopra eBPF, similmente a come sopra eBPF esistono strumenti di tracciamento.
La tecnologia DTrace è stata sviluppata per il sistema operativo Solaris per affrontare le sfide del tracciamento dinamico del kernel del sistema e delle applicazioni finali, fornendo all'utente la possibilità di monitorare in dettaglio il comportamento del sistema e di diagnosticare i problemi in tempo reale. Durante il processo di debug, DTrace non influisce sul funzionamento delle applicazioni esaminate e non ha alcun impatto sulle loro performance, permettendo così di analizzare i sistemi in esecuzione al volo. Tra i punti di forza di DTrace si evidenzia il linguaggio di alto livello D, simile a AWK, che semplifica notevolmente la creazione di script di tracciamento rispetto all'uso degli strumenti di scrittura dei gestori per eBPF in linguaggi come C, Python e Lua con librerie esterne.
Gli ingegneri di Oracle stanno anche lavorando alla creazione di un backend eBPF per GCC e hanno già pubblicato per l'integrazione del supporto eBPF in GCC e l'inclusione del codice per il supporto di eBPF in GNU binutils. Inizialmente, il backend per il supporto di eBPF si basa su tecnologie LLVM, ma Oracle è interessata a fornire in GCC la capacità nativa di generare programmi per eBPF, consentendo di utilizzare un unico set di strumenti tanto per la costruzione del kernel Linux quanto per la costruzione di programmi per eBPF.
Oltre al backend per la generazione di bytecode, le patch proposte per GCC includono anche il porting di libgcc per eBPF e strumenti per la creazione di file ELF, che consentono l'esecuzione del codice nella macchina virtuale eBPF utilizzando i caricamenti forniti dal kernel. Attualmente, il codice in linguaggio C può essere tradotto in bytecode (non tutte le funzionalità del linguaggio sono disponibili), ma in futuro ci si aspetta un ampliamento delle capacità applicabili del linguaggio C, l'aggiunta del supporto per altri linguaggi, la creazione di un simulatore e l'inclusione del supporto GCC per il debug dei programmi eBPF senza il caricamento nel kernel.
Fonte: opennet.ru
