Tvrtka Oracle objavila je DTrace za Linux 2.0.0-1.14

Predstavljen je eksperimentalni izdanak alata za dinamičko otklanjanje grešaka DTrace za Linux 2.0.0-1.14, implementiran kao proces koji radi u korisničkom prostoru, koristeći eBPF podsustav i standardne mehanizme praćenja koje pruža Linux jezgra. Funkcionalnost DTrace implementacije temeljene na eBPF bliska je prvoj implementaciji DTrace za Linux, koja je provedena kao modul jezgre. Kod projekta distribuira se pod GPLv2 licencom.

Alat može koristiti standardna Linux jezgra koja podržavaju BPF. Za rad je potrebna biblioteka libctf koja podržava format otklanjanja grešaka CTF (Compact Type Format), a koja je uključena u paket binutils od verzije 2.40, ili biblioteka libdtrace-ctf, portirana iz Solarisa. Opcionalno su dostupna dva patcha za jezgru 6.7, koja omogućuju korištenje naprednih mogućnosti za prikup dodatnih podataka o modulima i jezgre.

Tehnologija DTrace razvijena je za rješavanje zadataka dinamičkog praćenja jezgre i krajnjih aplikacija u operativnom sustavu Solaris. DTrace korisniku omogućava detaljno praćenje ponašanja sustava i dijagnosticiranje problema u realnom vremenu. Tijekom otklanjanja grešaka DTrace ne utječe na rad istraživanih aplikacija i ne odražava se na njihovoj izvedbi, što omogućava analizu radnih sustava u hodu. Među značajkama DTrace ističe se visokorazinski jezik D, sličan AWK-u, koji znatno olakšava stvaranje skripti za praćenje u usporedbi s korištenjem dostupnih eBPF alata za pisanje obrada na jezicima C, Python i Lua uz vanjske biblioteke.

Glavne mogućnosti:

  • Dostupni pružatelji:
    • cpc (CPU Performance Counter) — prikupljanje informacija o performansama.
    • dtrace — obrada BEGIN, END i ERROR, pokreće se prije ili nakon drugih provjera, kao i u slučaju grešaka.
    • fbt (Function Boundary Tracing) — praćenje poziva funkcijama jezgre.
    • lockstat — praćenje stanja zaključavanja.
    • pid — praćenje poziva funkcijama u procesima koji rade u korisničkom prostoru.
    • proc — praćenje aktivnosti povezanih s procesima, kao što su pokretanje i završavanje rada (fork, exec, exit, fault).
    • profil — čuvanje statistike o performansama tokom određenih vremenskih intervala.
    • sdt, rawtp — statičko praćenje jezgra (SDT — Statically Defined Tracing).
    • usdt: statičko praćenje aplikacija (USDT — Userspace Statically Defined Tracing)
    • sched — praćenje raspodele CPU resursa.
    • sycall — praćenje ulaza i izlaza u sistemske pozive.
  • Agregacija prikupljenih podataka: mogućnost primene agregatnih funkcija (avg, count, llquantize, lquantize, max, min, quantize, stddev i sum) i agregatnih akcija (clear, normalize, printa). Podrška za čuvanje rezultata primene agregatnih funkcija u običnim i asocijativnim nizovima.
  • Podrška za spekulativno praćenje, omogućavajući efemerno praćenje podataka, odlučujući koji od njih treba zapisati u buffer za praćenje, a koji odbaciti. Dostupne funkcije: speculation, speculate, commit i discard.
  • Podrška za globalne i lokalne promenljive, TLS (Thread-Local Storage), asocijativne nizove i stringove.
  • Pruža ugrađene promenljive: 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.
  • Podrška za akcije: exit, freopen, ftruncate, mod, printa, printf, raise, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack i usym.
  • Postojanje ugrađenih funkcija: 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.
  • Postojanje brojača podataka koji ne ulaze u buffere za praćenje.
  • Podrška za kompilaciju skripti za praćenje na jeziku D u oblik BPF programa.
  • Predkompilacija BPF funkcija za bibliotečke pozive.
  • Opcija bpflog za dobijanje loga verifikacije učitanih BPF programa.
  • Dinamička generacija koda i predkompilacija koda za ponovnu upotrebu u BPF programima.

Promjene u novoj verziji:

  • U provajderu pid, koji se koristi za praćenje procesa u korisničkom prostoru, dodata je podrška za praćenje izvršenja instrukcija putem njihovih pomeraja u kodu.
  • Dodana podrška za korišćenje funkcija stack() i ustack() za agregaciju prikupljenih podataka.
  • Mogućnost uklanjanja elemenata bilo kojih tipova iz asocijativnih nizova dodeljivanjem literala 0.
  • Dodana je akcija print za ispis strukturiranih podataka s anotacijama tipova.
  • Dodane nove ugrađene funkcije cleanpath(), d_path() i link_ntop().
  • Dodana je opcija «-xcpu», koja omogućava vezivanje provjera za određene CPU.
  • Dodana je opcija «-xlockmem» za ograničavanje veličine memorije.
  • Omogućeno je pohranjivanje podataka o tracenju procesa (USDT) između ponovnih pokretanja dtprobed.
  • Podrška za mehanizam BTF (BPF Type Format), koji pruža informacije za provjeru tipova u pseudokodu BPF.
  • Mogućnost korištenja skripte configure za izgradnju.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster