Oracle ha pubblicato DTrace per Linux 2.0.0-1.14

È stata presentata una versione sperimentale dello strumento di debug dinamico DTrace per Linux 2.0.0-1.14, implementata come processo che opera in user-space, utilizzando il sottosistema eBPF e i meccanismi di traccia forniti dal kernel Linux. Dal punto di vista funzionale, l'implementazione di DTrace basata su eBPF è simile alla prima implementazione di DTrace per Linux, realizzata come modulo del kernel. Il codice del progetto è distribuito sotto licenza GPLv2.

Lo strumento può essere utilizzato con i kernel Linux standard che supportano BPF. Sono necessari la libreria libctf, che implementa il supporto per il formato di debug CTF (Compact Type Format), inclusa nel pacchetto binutils a partire dalla versione 2.40, o la libreria libdtrace-ctf, portata da Solaris. Due patch opzionali per il kernel 6.7 sono disponibili per attivare funzionalità avanzate per raccogliere ulteriori dati sui moduli e sul kernel.

La tecnologia DTrace è stata sviluppata per affrontare compiti di tracciamento dinamico del kernel e delle applicazioni finali nel sistema operativo Solaris. DTrace consente all'utente di monitorare dettagliatamente il comportamento del sistema e di diagnosticare problemi in tempo reale. Durante il debug, DTrace non influisce sul funzionamento delle applicazioni analizzate e non incide sulle loro prestazioni, consentendo di effettuare analisi di sistemi operativi in tempo reale. Tra i punti di forza di DTrace, si segnala un linguaggio di alto livello D, simile ad AWK, che facilita notevolmente la creazione di script di tracciamento rispetto agli strumenti proposti per eBPF, che richiedono scrittori di handler in C, Python e Lua con librerie esterne.

Funzionalità principali:

  • Provider disponibili:
    • cpc (CPU Performance Counter) — per ottenere informazioni sulle prestazioni.
    • dtrace — gestori BEGIN, END ed ERROR, eseguiti prima o dopo altre verifiche, nonché in caso di errori.
    • fbt (Function Boundary Tracing) — per monitorare le chiamate alle funzioni del kernel.
    • lockstat — monitoraggio dello stato dei lock.
    • pid — monitoraggio delle chiamate alle funzioni nei processi operanti in user-space.
    • proc — monitoraggio dell'attività legata ai processi, come l'avvio e la chiusura (fork, exec, exit, fault).
    • profile — rilevazione delle statistiche delle prestazioni a intervalli temporali specificati.
    • sdt, rawtp — tracciamento statico del kernel (SDT — Statically Defined Tracing).
    • usdt: tracciamento statico delle applicazioni (USDT — Userspace Statically Defined Tracing).
    • sched — monitoraggio della distribuzione delle risorse CPU.
    • sycall — monitoraggio dell'ingresso e dell'uscita dalle chiamate di sistema.
  • Aggregazione dei dati raccolti: possibilità di utilizzare funzioni aggregative (avg, count, llquantize, lquantize, max, min, quantize, stddev e sum) e azioni aggregative (clear, normalize, printa). Supporto per il salvataggio dei risultati delle funzioni aggregative in array normali e associativi.
  • Supporto per la tracciatura speculativa, che consente di monitorare effimeramente i dati, decidendo quali di essi devono essere registrati nel buffer di tracciamento e quali devono essere scartati. Funzioni disponibili: speculation, speculate, commit e discard.
  • Supporto per variabili globali e locali, TLS (Thread-Local Storage), array associativi e stringhe.
  • Fornitura di variabili incorporate: arg0 — arg9, args[], caller, curcpu, curthread, epid, errno, execname, gid, id, pid, ppid, probefunc, probemod, probename, probeprov, stackdepth, tid, timestamp, ucaller, uid, uregs[], ustackdepth, walltimestamp.
  • Supporto per azioni: exit, freopen, ftruncate, mod, printa, printf, raise, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack e usym.
  • Disponibilità di funzioni incorporate: alloca, basename, bcopy, copyin, copyinstr, copyinto, copyout, copyoutstr, dirname, getmajor, getminor, htonl, htonll, htons, index, inet_ntoa, lltostr, mutex_owned, mutex_owner, mutex_type_adaptive, mutex_type_spin, ntohl, ntohll, ntohs, progenyof, rand, rindex, rw_iswriter, rw_read_held, rw_write_held, strchr, strjoin, strlen, strrchr, strstr, strtok, substr.
  • Disponibilità di contatori per dati che non vengono registrati nei buffer di tracciamento.
  • Supporto per la compilazione di script di tracciamento in linguaggio D in programmi BPF.
  • Precompilazione di funzioni BPF per chiamate di libreria.
  • Opzione bpflog per ottenere un log di verifica dei programmi BPF caricati.
  • Generazione dinamica del codice e precompilazione del codice per il riutilizzo nei programmi BPF.

Modifiche nella nuova versione:

  • Nel provider pid, utilizzato per monitorare i processi nello user space, è stato aggiunto supporto per il monitoraggio dell'esecuzione delle istruzioni in base ai loro offset nel codice.
  • Aggiunto supporto per l'uso delle funzioni stack() e ustack() per aggregare i dati raccolti.
  • Possibilità di rimuovere elementi di qualsiasi tipo dagli array associativi attraverso l'assegnazione del letterale 0.
  • Aggiunta dell'azione print per visualizzare dati strutturati con annotazioni sui tipi.
  • Aggiunte nuove funzioni incorporate cleanpath(), d_path() e link_ntop().
  • Aggiunto il parametro «-xcpu», che consente di collegare i controlli a specifici CPU.
  • Aggiunto il parametro «-xlockmem» per limitare la dimensione della memoria.
  • Garantita la possibilità di salvare i dati di tracciamento dei processi (USDT) tra i riavvii di dtprobed.
  • Supporto per il meccanismo BTF (BPF Type Format), che fornisce informazioni per il controllo dei tipi nel pseudocodice BPF.
  • Possibilità di utilizzare lo script configure per la compilazione.

Fonte: opennet.ru

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster