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