DTrace

DTrace  este un cadru de urmărire dinamic creat de Sun Microsystems pentru depanarea în timp real a nucleului și a aplicațiilor. DTrace a fost creat inițial pentru Solaris , apoi lansat sub licența comună de dezvoltare și distribuție (CDDL) și portat pe o serie de sisteme asemănătoare Unix .

DTrace poate fi utilizat pentru a monitoriza cantitatea de memorie consumată, timpul CPU , sistemele de fișiere și resursele de rețea utilizate de procesele active pe un sistem care rulează. De asemenea, puteți obține informații mai detaliate, cum ar fi o listă de argumente cu care este apelată fiecare funcție sau o listă de procese care utilizează un anumit fișier.

Scripturile de urmărire sunt dezvoltate într-un limbaj specializat . Instrumentul acceptă interacțiunea cu codul generat pentru programele scrise în următoarele limbaje de programare : C , C++ , Java , Erlang , JavaScript , Perl , PHP , Python , Ruby , Tcl , recunoscând apelurile de funcții și contextele de apel originale. O serie de programe Unix acceptă DTrace, oferind urmărirea operațiunilor și a apelurilor de sistem, în special, sunt dezvoltați furnizori speciali DTrace pentru MySQL , PostgreSQL , Oracle Database , Univa Grid Engine , browser Firefox .

Instrumentul este sigur de utilizat într-un mediu live: aproape nu există nicio degradare a performanței în timpul testării.

Limbajul de scripting

Scripturile de urmărire sunt scrise într-un limbaj special dezvoltat pentru instrumentul D cu o sintaxă asemănătoare C și echipat cu funcții gata făcute și variabile specifice urmăririi [1] . Programele D sunt structural similare cu programele awk ; acestea includ o listă de sonde cărora  le corespund acțiunile . Când este îndeplinită o anumită condiție, senzorul este declanșat și se ia măsurile corespunzătoare. O condiție poate fi, de exemplu, deschiderea unui anumit fișier, începerea unui proces sau executarea unei anumite linii de cod. Este posibil să transferați informații de la un senzor la altul.

Deoarece instrumentul oferă urmărire cu o suprasolicitare minimă, zeci de mii de senzori pot rula în același timp, noi senzori pot fi creați dinamic.

Exemple de utilizare

Scripturile DTrace pot fi rulate din linia de comandă folosind unul sau mai mulți senzori ca argumente. Exemple:

# Procese noi cu argumente, dtrace -n 'proc:::exec-success { trace(curpsinfo->pr_psargs); }' # Fișiere deschise prin proces, dtrace -n 'syscall::open*:entry { printf ("%s %s",execname,copyinstr(arg0)); }' # Număr de apeluri de sistem în funcție de program, dtrace -n 'syscall:::entry { @num[execname] = count(); }' # Număr de apeluri de sistem după apel de sistem, dtrace -n 'syscall:::entry { @num[probefunc] = count(); }' # Număr de apeluri de sistem în funcție de proces, dtrace -n 'syscall:::entry { @num[pid,execname] = count(); }' # Dimensiunea discului în funcție de proces, dtrace -n 'io:::start { printf("%d %s %d",pid,execname,args[0]->b_bcount); }' # pagini paginate prin proces, dtrace -n 'vminfo:::pgpgin { @pg[execname] = sum(arg0); }'

Platforme acceptate

DTrace a fost introdus în noiembrie 2003 și a fost lansat oficial ca parte a sistemului de operare Solaris 10 în ianuarie 2005. A devenit prima componentă a proiectului OpenSolaris care are codul sursă lansat sub licența comună de dezvoltare și distribuție ( CDDL ).

La începutul lui 2009, DTrace a fost portat pe FreeBSD (versiunea 7.1).

Apple a adăugat suport pentru DTrace în Mac OS X 10.5 „Leopard”, inclusiv programul de grafică Instruments . Spre deosebire de alte platforme, Mac OS X are un steag ( P_LNOATTACH ) care dezactivează urmărirea proceselor prin instrumente precum DTrace sau gdb . Inițial, acest lucru a creat probleme deoarece alte informații de sistem nu au putut fi testate ca urmare a aplicării acestui indicator. Această problemă a fost rezolvată câteva luni mai târziu în actualizarea Mac OS X 10.5.3.

Portarea DTrace la QNX 7 a fost raportată .

Datorită faptului că CDDL este incompatibil cu GPL , portarea la Linux este posibilă , dar nu este legală . Pentru Linux, este dezvoltat un utilitar cu funcționalități similare numit SystemTap , bazat pe mecanismul de instrumentare kprobes . Cu toate acestea, Oracle a adăugat o versiune beta a DTrace la Oracle Linux în 2011 [2] , o versiune stabilă a fost lansată în decembrie 2012, instrumentul este disponibil ca parte a Unbreakable Enterprise Kernel (începând cu a doua lansare), în timp ce kernelul DTrace modulul a păstrat licența CDDL [3] .

Analogii aproximativi

Microsoft WPP/ETW, acceptat de Windows Vista .

Tehnologia se bazează pe WMI , în primul rând evenimente WMI, și nimic mai mult decât să faciliteze scrierea codului care generează aceste evenimente.

Fișierele sursă cu apeluri care generează evenimente trebuie procesate de un fel de preprocesor care va elimina toate liniile de format (apelul de a genera un eveniment este similar cu printf() ) într-un fișier binar separat (.TMF), lăsând doar parametrii de apel în codul sursă refactorizat.

Fără un fișier TMF pentru componentă, aplicația consumatoare vede doar numerele și parametrii evenimentului, nu descrierile textuale.

Acest lucru îmbunătățește considerabil performanța sistemului. De asemenea, tehnologia nu duce la degradarea performanței dacă nu există o aplicație pentru consumatori.

Începând cu mijlocul anilor 2010, Microsoft nu a publicat fișiere TMF pentru nicio componentă standard Windows, cu excepția NDIS (publicat la sfârșitul anului 2010).

Note

  1. Acesta este un limbaj special specific domeniului creat pentru DTrace, care nu are nimic de-a face cu limbajul de programare D cu scop general .
  2. încercând dtrace . Consultat la 10 decembrie 2012. Arhivat din original la 18 aprilie 2015.
  3. DTrace pe Linux (link descendent) . Data accesului: 10 decembrie 2012. Arhivat din original pe 7 iulie 2014. 

Link -uri

În engleză

În rusă