Kompania Oracle publikoi DTrace për Linux 2.0.0-1.14

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

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster