ĂshtĂ« prezantuar njĂ« edicion eksperimental i mjetit tĂ« ndihmĂ«s dinamike DTrace pĂ«r Linux 2.0.0-1.14, i realizuar si njĂ« proces nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit, qĂ« pĂ«rdor nĂ«n-sistemin e eBPF dhe mekanizmat e ndjekjes qĂ« ofrohen nga bĂ«rthama Linux. NĂ« funksionalitet, implementimi DTrace i bazuar nĂ« eBPF Ă«shtĂ« afĂ«r implementimit tĂ« parĂ« tĂ« DTrace pĂ«r Linux, i bĂ«rĂ« nĂ« formĂ«n e njĂ« moduli bĂ«rthamor. Kodi i projektit shpĂ«rndahet nĂ«n licencĂ«n GPLv2.
Mjeti mund të përdoret me bërthamat standarde të Linux që mbështesin BPF. Për funksionimin kërkohet biblioteka libctf me implementimin e mbështetjes për formatin e ndihmës CTF (Compact Type Format), e cila është pjesë e paketës binutils, duke filluar nga shpërndarja 2.40, ose biblioteka libdtrace-ctf, e portuar nga Solaris. Ofrohen dy patches opsionale për bërthamën 6.7, që lejojnë aktivizimin e mundësive të zgjeruara për të marrë të dhëna shtesë mbi modulet dhe bërthamën.
Teknologjia DTrace është zhvilluar për të adresuar detyrat e ndjekjes dinamike të bërthamës dhe aplikacioneve përfundimtare në sistemin operativ Solaris. DTrace i ofron përdoruesit mundësinë për të ndjekur në detaje sjelljen e sistemit dhe për të diagnostikuar problemet në kohë reale. Gjatë procesit të ndihmës, DTrace nuk ndikon në veprimin e aplikacioneve të hetuara dhe nuk ndikon në performancën e tyre, duke lejuar analizën e sistemeve në funksion. Nga përfitimet e DTrace është gjuha e nivelit të lartë D, e ngjashme me AWK, në të cilën është shumë më e lehtë të krijohen skenarë ndihme sesa duke përdorur mjetet e propozuara për eBPF për të shkruar trajtues në gjuhët C, Python dhe Lua me biblioteka të jashtme.
Funksionalitetet kryesore:
- Ofertat e disponueshme:
- cpc (CPU Performacne Counter) - marrja e informacionit mbi performancën.
- dtrace - trajtuesit BEGIN, END dhe ERROR, që aktivizohen para ose pas kontrolleve të tjera, si dhe kur ndodhin gabime.
- fbt (Function Boundary Tracing) - ndjekja e thirrjeve në funksionet e bërthamës.
- lockstat - ndjekja e gjendjes së bllokimeve.
- pid - ndjekja e thirrjeve në funksionet në proceset që punojnë në hapësirën e përdoruesit.
- proc - ndjekja e aktiviteteve që lidhen me proceset, siç janë nisja dhe përfundimi (fork, exec, exit, fault).
- profile - ruajtja e statistikave mbi performancën nëpërmjet intervaleve të specifikuara.
- sdt, rawtp - ndihmë statike për bërthamën (SDT - Statically Defined Tracing).
- usdt: ndihmë statike për aplikacione (USDT - Userspace Statically Defined Tracing)
- sched - ndjekja e shpërndarjes së burimeve të CPU.
- sycall - ndjekja e hyrjes në thirrjet sistemike dhe daljes nga ato.
- Agregimi i të dhënave të mbledhura: mundësia e përdorimit 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ë array normale dhe asociative.
- Mbështetje për ndihmën spekulative, duke lejuar ndjekjen efemere të të dhënave, duke vendosur se cilat prej tyre duhet të regjistrohen në bufferin e ndihmës dhe cilat duhet të hidhen. Funksionet e disponueshme: speculation, speculate, commit dhe discard.
- Mbështetje për variablat globalë dhe lokalë, TLS (Thread-Local Storage), array asocijuese 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 veprimet: 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ë dhënash, që nuk bien në buferat e ndihmës.
- Mbështetje për kompilimin e skenarëve të ndihmës në gjuhën D në formën e programeve BPF.
- Parakompilimi i funksioneve BPF për thirrjet e bibliotikës.
- Opsioni bpflog për marrjen e logut të verifikimit të programeve BPF që ngarkohen.
- Generimi dinamik i kodit dhe parakompilimi i kodit për përdorim të ripërsëritur në programet BPF.
Ndryshimet në versionin e ri:
- Në ofruesin pid, i aplikuar për ndjekjen e proceseve në hapësirën e përdoruesit, është shtuar mbështetje për ndjekjen e ekzekutimit të instruksioneve sipas offsetit të 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 e eliminimit të elementeve të çdo tipi nga array asocijuese përmes caktimit të literalit 0.
- Shtuar veprimi print për të printuar të dhënat e strukturuara me annotime të tipeve.
- Shtuar funksione të reja të integruara cleanpath(), d_path() dhe link_ntop().
- Shtuar parametri «-xcpu», i cili lejon lidhjen e kontrollimeve me CPU të caktuara.
- Shtuar parametri «-xlockmem» për të kufizuar madhësinë e memorisë.
- Siguruar mundësinë e ruajtjes së të dhënave të ndjekjes së proceseve (USDT) midis rilindjeve të dtprobed.
- Mbështetje për mekanizmin BTF (BPF Type Format), i cili ofron informacion për verifikimin e llojeve në pseudokod BPF.
- Mundësi për të përdorur skriptin configure për ndërtim.
Burimi: opennet.ru
