Oracle ha pubblicato DTrace per Linux 2.0.0-1.14

È stato presentato un rilascio sperimentale dello strumento di debug dinamico DTrace per Linux 2.0.0-1.14, implementato come un processo operante nello spazio utente, che utilizza il sottosistema eBPF e i meccanismi di tracciamento forniti dal kernel Linux. In termini di funzionalità, l'implementazione di DTrace basata su eBPF è simile alla prima realizzazione di DTrace per Linux, realizzata sotto forma di modulo del kernel. Il codice del progetto è distribuito con licenza GPLv2.

Lo strumento può essere utilizzato con i kernel Linux standard che supportano BPF. È necessaria la libreria libctf con il supporto per il formato di debug CTF (Compact Type Format), che è inclusa nel pacchetto binutils a partire dalla versione 2.40, oppure la libreria libdtrace-ctf, portata da Solaris. Sono disponibili opzionalmente due patch per il kernel 6.7, che consentono di sfruttare funzionalità avanzate per ottenere ulteriori dati sui moduli e sul kernel.

La tecnologia DTrace è stata sviluppata per risolvere problemi di tracciamento dinamico del kernel e delle applicazioni finali nel sistema operativo Solaris. DTrace consente all'utente di monitorare in dettaglio il comportamento del sistema e di eseguire diagnosi dei problemi in tempo reale. Durante il debug, DTrace non influisce sul funzionamento delle applicazioni esaminate e non ha alcun impatto sulle loro prestazioni, consentendo di organizzare un'analisi delle sistemi operanti al volo. Tra i punti di forza di DTrace si evidenzia il linguaggio di alto livello D, simile ad AWK, che rende molto più semplice la creazione di script di tracciamento rispetto all'uso degli strumenti proposti per la scrittura di gestori in linguaggi C, Python e Lua con librerie esterne.

Caratteristiche principali:

  • Provider disponibili:
    • cpc (CPU Performance Counter) — raccolta di informazioni sulle prestazioni.
    • dtrace — gestori BEGIN, END e ERROR, eseguiti prima o dopo altre verifiche, nonché in caso di errore.
    • fbt (Function Boundary Tracing) — monitoraggio delle chiamate alle funzioni del kernel.
    • lockstat — monitoraggio dello stato dei blocchi.
    • pid — monitoraggio delle chiamate alle funzioni nei processi che operano nello spazio utente.
    • proc — monitoraggio delle attività relative ai processi, come avvio e termine (fork, exec, exit, fault).
    • profile — registrazione delle statistiche sulle prestazioni a intervalli di tempo 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 delle chiamate di sistema in entrata e in uscita.
  • Aggregazione dei dati raccolti: possibilità di applicare funzioni aggregate (avg, count, llquantize, lquantize, max, min, quantize, stddev e sum) e azioni aggregate (clear, normalize, printa). Supporto per il salvataggio dei risultati delle funzioni aggregate in array normali e associativi.
  • Supporto per il tracciamento speculativo, che consente di monitorare temporaneamente i dati, decidendo quali di essi devono essere registrati nel buffer di tracciamento e quali scartare. 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.
  • Presenza di contatori di dati che non rientrano nei buffer di tracciamento.
  • Supporto per la compilazione di script di tracciamento nel linguaggio D in forma di programmi BPF.
  • Precompilazione delle funzioni BPF per le chiamate di libreria.
  • Opzione bpflog per ottenere il log di verifica dei programmi BPF caricati.
  • Generazione dinamica di codice e precompilazione del codice per il riutilizzo nei programmi BPF.

Modifiche nella nuova versione:

  • Nel provider pid, applicato per il monitoraggio dei processi nello spazio utente, è stata aggiunta la possibilità di monitorare l'esecuzione delle istruzioni secondo il loro offset nel codice.
  • Aggiunta la possibilità di utilizzare le funzioni stack() e ustack() per aggregare i dati raccolti.
  • Possibilità di rimuovere dagli array associativi elementi di qualsiasi tipo attraverso l'assegnazione di letterale 0.
  • Aggiunta l'azione print per l'output di dati strutturati con annotazioni di tipo.
  • Sono state aggiunte nuove funzioni integrate cleanpath(), d_path() e link_ntop().
  • È stato aggiunto il parametro «-xcpu», che consente di vincolare i controlli a specifici CPU.
  • È stato aggiunto il parametro «-xlockmem» per limitare la dimensione della memoria.
  • È stata garantita la possibilità di salvare i dati di tracciamento dei processi (USDT) tra i riavvii di dtprobed.
  • Supporto al meccanismo BTF (BPF Type Format), che fornisce informazioni per la verifica dei tipi nel pseudocodice BPF.
  • Possibilità di utilizzare uno script configure per la compilazione.

Fonte: opennet.ru

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