Oracle hà publicatu DTrace per Linux 2.0.0-1.14

Una versione sperimentale di u toolkit di debugging dinamica DTrace per Linux 2.0.0-1.14 hè presentata, implementata cum'è un prucessu di u spaziu di l'utilizatori chì usa u sottosistema eBPF è i meccanismi di traccia standard furniti da u kernel Linux. In termini di funziunalità, l'implementazione DTrace basata in eBPF hè vicinu à a prima implementazione DTrace per Linux, implementata in forma di un modulu di kernel. U codice di u prugettu hè distribuitu sottu a licenza GPLv2.

U toolkit pò esse usatu cù kernels Linux chì supportanu BPF. Per travaglià, avete bisognu di a libreria libctf cù l'implementazione di supportu per u formatu di debugging CTF (Compact Type Format), chì hè inclusu in u pacchettu binutils da a versione 2.40, o a libreria libdtrace-ctf purtata da Solaris. Opcionalmente, dui patch sò offerti per u kernel 6.7, chì permettenu di utilizà funzioni avanzate per ottene dati supplementari nantu à i moduli è u kernel.

A tecnulugia DTrace hè stata sviluppata per risolve i prublemi di traccia dinamicamente u kernel è l'applicazioni finali in u sistema operatore Solaris. DTrace dà à l'utilizatore a capacità di monitorà u cumpurtamentu di u sistema in dettagliu è di diagnosticà i prublemi in tempu reale. Duranti u prucessu di debugging, DTrace ùn affetta micca u funziunamentu di l'applicazioni in studiu è ùn hà micca in alcun modu a so prestazione, chì vi permette di urganizà l'analisi di i sistemi in esecuzione nantu à a mosca. Unu di i punti di forza di DTrace hè a lingua D d'altu livellu, simile à AWK, in quale hè assai più faciule per creà script di traccia chì l'utilizazione di l'arnesi pruposti per scrive eBPF handlers in C, Python è Lua cù biblioteche esterne.

Funzioni chjave:

  • Fornitori dispunibuli:
    • cpc (CPU Performacne Counter) - ottene informazioni di rendiment.
    • dtrace - I gestori BEGIN, END è ERROR eseguite prima o dopu à altri cuntrolli, è ancu quandu l'errore si verificanu.
    • fbt (Function Boundary Tracing) - traccia di e chjama à e funzioni di u kernel.
    • lockstat - seguimentu di u statu di i chjusi.
    • pid - Trace e chjama di funzione in i prucessi in esecuzione in u spaziu di l'utilizatori.
    • proc - monitorizza l'attività di prucessu cum'è l'iniziu è l'arrestu (fork, exec, exit, fault).
    • prufilu - salvà statistiche di rendiment à intervalli specificati.
    • sdt, rawtp - traccia statica di u kernel (SDT - Tracciamentu definitu staticamente).
    • usdt: traccia di l'applicazione statica (USDT - Userspace Statically Defined Tracing)
    • sched - monitora l'assignazione di risorse CPU.
    • sycall - Tracks l'entrata è l'uscita di e chjama di u sistema.
  • Agregazione di dati raccolti: a capacità d'utilizà funzioni aggregate (avg, count, llquantize, lquantize, max, min, quantize, stddev è sum) è azzioni aggregate (clear, nurmalize, nurmalize, print). Supportu per l'almacenamiento di i risultati di l'applicazione di funzioni aggregate in arrays regularmente è associative.
  • Supportu per a traccia speculativa, chì vi permette di monitorà efemeramenti dati, decide quale di elli deve esse catturatu in u buffer di traccia è quale deve esse scartatu. E funzioni dispunibuli sò speculazione, speculazione, commit è scartà.
  • Supportu per variabili glubale è lucali, TLS (Thread-Local Storage), arrays associativi è stringhe.
  • Fornisce variabili integrati: 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.
  • Azioni supportate: exit, freeopen, ftruncate, mod, printa, printf, raise, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack è usym.
  • Disponibilità di e funzioni integrate: alloca, basename, bcopy, copyin, copyinstr, copyinto, copyout, copyoutstr, dirname, getmajor, getminor, htonl, htonll, htons, index, inet_ntoa, lltostr, mutex_owned, mutex_owner, mutex_type_adaptaptive, mutex_typehls, mutex_typehls , ntohll, ntohs, progenyof, rand, rindex, rw_iswriter, rw_read_held, rw_write_held, strchr, strjoin, strlen, strrchr, strstr, strtok, substr.
  • Presenza di cuntatori di dati chì ùn sò micca inclusi in i buffer di traccia.
  • Supportu per a compilazione di script di traccia D in forma di prugramma BPF.
  • Precompilazione di funzioni BPF per e chjama di a biblioteca.
  • Opzione bpflog per ottene un logu di verificazione di i prugrammi BPF caricati.
  • Generazione di codice dinamica è precompilazione di codice per a reutilizazione in i prugrammi BPF.

Cambiamenti in a nova versione:

  • U fornitore pid, utilizatu per seguità i prucessi in u spaziu di l'utilizatori, hà aghjustatu supportu per seguità l'esekzione di l'istruzzioni da u so offset in u codice.
  • Aghjunghje supportu per l'usu di e funzioni stack () è ustack () per aggregate e dati raccolti.
  • A capacità di caccià elementi di ogni tipu da array associative assignendu u literal 0.
  • Aggiunta azzione di stampa per pruduce dati strutturati cù annotazioni di tipu.
  • Aghjunghjite novi funzioni integrate cleanpath(), d_path() è link_ntop().
  • Aggiuntu u paràmetru "-xcpu", chì permette di ligà cuntrolli à CPU specifichi.
  • Aggiunta l'opzione "-xlockmem" per limità a dimensione di memoria.
  • Furnitu a capacità di salvà dati di traccia di prucessu (USDT) trà dtprobed restarts.
  • Supportu per u mecanismu BTF (BPF Type Format), chì furnisce infurmazioni di cuntrollu di tipu in pseudocode BPF.
  • Capacità di utilizà u script di cunfigurazione per custruisce.

Source: opennet.ru

Add a comment