U publikua një version eksperimental i mjetit të debugging dinamik DTrace për Linux 2.0.0-1.14, i implementuar si një proces që punon në hapësirën e përdoruesit, duke përdorur nën-sistemin e eBPF dhe mekanizmat e ndjekjes të ofruara nga kerneli Linux. Në funksionalitet, implementimi i DTrace mbi eBPF është i ngjashëm me implementimin e parë të DTrace për Linux, i realizuar në formën e një moduli të kernelit. Kodi i projektit shpërndahet nën licencën GPLv2.
Mjeti mund të përdoret me kernelët standard të Linux që mbështesin BPF. Për funksionimin e tij kërkohet biblioteka libctf me implementimin e mbështetjes për formatin e debugging CTF (Compact Type Format), e cila është pjesë e paketës binutils, duke filluar nga versione 2.40, ose biblioteka libdtrace-ctf, e portuar nga Solaris. Dy patches opsionale për kernelin 6.7 ofrohen për të aktivizuar mundësi të avancuara për marrjen e të dhënave të mëtejshme mbi modulet dhe kernelin.
Teknologjia DTrace është zhvilluar për të zgjidhur detyra të ndjekjes dinamike të kernelit dhe aplikacioneve përfundimtare në sistemin operativ Solaris. DTrace i jep përdoruesit mundësinë për të ndjekur me detaje sjelljen e sistemit dhe për të kryer diagnostikimin e problemeve në kohë reale. Në procesin e debugging DTrace nuk ndikon në punën e aplikacioneve të hulumtuara dhe nuk reflekton në performancën e tyre, çka mundëson organizimin e analizës së sistemeve që punojnë në flukse. Një prej forcave të DTrace është gjuha e nivelit të lartë D, e ngjashme me AWK, ku është shumë më e lehtë të krijoni skenarë ndjekjeje se sa me mjetet e ofruara për eBPF për shkrimin e trajtuesve në gjuhët C, Python dhe Lua me biblioteka të jashtme.
Karakteristikat kryesore:
- Ofruesit e disponueshëm:
- cpc (CPU Performance Counter) â marrja e informacionit mbi performancĂ«n.
- dtrace â trajtuesit BEGIN, END dhe ERROR, qĂ« aktivizohen para ose pas kontrollimeve tĂ« tjera, si dhe nĂ« rastin e gabimeve.
- fbt (Function Boundary Tracing) â ndjekja e thirrjeve nĂ« funksionet e kernelit.
- lockstat â ndjekja e gjendjes sĂ« bllokimeve.
- pid â ndjekja e thirrjeve nĂ« funksione nĂ« procese qĂ« punojnĂ« nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit.
- proc â ndjekja e aktivitetit tĂ« lidhur me proceset, siç janĂ« fillimi dhe pĂ«rfundimi i punĂ«s (fork, exec, exit, fault).
- profile â ruajtja e statistikave mbi performancĂ«n pĂ«rmes intervaleve tĂ« caktuara kohore.
- sdt, rawtp â gjurmim statik i bĂ«rthamor (SDT â Statically Defined Tracing).
- usdt: gjurmim statik i aplikacioneve (USDT â Userspace Statically Defined Tracing)
- sched â gjurmimi i shpĂ«rndarjes sĂ« burimeve CPU.
- sycall â gjurmimi i hyrjeve nĂ« thirrjet sistemike dhe daljeve prej tyre.
- Agregimi i të dhënave të mbledhura: mundësia e aplikimit të funksioneve agregate (avg, count, llquantize, lquantize, max, min, quantize, stddev dhe sum) dhe veprimeve agregate (clear, normalize, printa). Mbështetje për ruajtjen e rezultateve të aplikimit të funksioneve agregate në përshkrime normale dhe asociative.
- Mbështetje për gjurmimin spekulativ, që lejon gjurmimin efemer të të dhënave, duke vendosur se cilat prej tyre duhet të regjistrohen në tamponin e gjurmimit dhe cilat të shpallen. Disponohen funksionet: speculation, speculate, commit dhe discard.
- Mbështetje për variabla globale dhe lokale, TLS (Thread-Local Storage), përshkrime asociative dhe vargje.
- Ofrimi i variablave tĂ« integruar: 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.
- Mbështetje për veprime: exit, freopen, ftruncate, mod, printa, printf, raise, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack dhe usym.
- Prania e funksioneve të integruara: 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.
- Prania e numëruesve të të dhënave që nuk kapen në tamponët e gjurmimit.
- Mbështetje për compilimin e skenarëve të gjurmimit në gjuhën D në formën e programeve BPF.
- Parakomplimi i funksioneve BPF për thirrjet e bibliotekës.
- Opsioni bpflog për marrjen e logut të verifikimit të programeve BPF që ngarkohen.
- Gjenerimi dinamik i kodit dhe parakomplimi i kodit për ripërdorim në programet BPF.
Ndryshimet në versionin e ri:
- Në ofruesin pid, i aplikuar për gjurmimin e proceseve në hapësirën e përdoruesit, është shtuar mbështetje për gjurmimin e ekzekutimit të instruksioneve sipas pozitës së tyre në kod.
- Shtuar mbështetje për përdorimin e funksioneve stack() dhe ustack() për agregimin e të dhënave të mbledhura.
- Mundësia për të fshirë elemente të çdo lloji nga përshkrimet asociative duke i caktuar atyre literal 0.
- Shtuar veprimi print për të shpërndarë të dhëna të strukturuara me annotacione tipesh.
- Shtuar funksionet e reja të integruara cleanpath(), d_path() dhe link_ntop().
- Shtesa e parametrave «-xcpu», e cila mundëson lidhjen e kontrolleve me CPU të caktuara.
- Shtesa e parametrave «-xlockmem» për të kufizuar madhësinë e memories.
- E mundësuar ruajtja e të dhënave të gjurmimit të proceseve (USDT) midis rilindjeve të dtprobed.
- Mbështetje për mekanizmin BTF (BPF Type Format), i cili ofron informacion për verifikimin e tipeve në pseudokodin BPF.
- Mundësia për përdorimin e skriptit configure për ndërtim.
Burimi: opennet.ru
