Unde s-a dus viteza?

Limbajul de programare dtrace (uneori denumit D) este foarte asemănător cu C în sintaxa sa, dar are completări utile, cum ar fi tablouri și agregari asociative, care sunt moduri simple de combinare a colecțiilor de puncte de date pentru a oferi rezultate precum „medie”, „număr” și „suma”. Pentru ca dtrace să funcționeze, trebuie introdus în nucleul sistemului de operare. În mod similar cu Java, D este compilat într-un cod intermediar care poate fi verificat de securitate înainte de execuție. Ceea ce este foarte inteligent la dtrace este că nu adaugă nicio suprasarcină sistemului atunci când este în uz: nu afectează performanța în afara sondelor utilizate. De asemenea, poate fi dezactivat și pornit într-un sistem care rulează și poate monitoriza un proces de execuție fără ca acel proces să știe că este urmărit.

Unde s-a dus viteza?

Nu vă voi plictisi cu exemplele obișnuite de programare banale – „hello world” scris în dtrace nu este mai interesant decât în ​​orice altă limbă. Există câteva introduceri bune și recomand să descărcați Dtrace Toolkit de pe http://opensolaris.org/os/community/dtrace/dtracetoolkit

Pentru a vă oferi o idee despre domeniul și puterea dtrace, trebuie mai întâi să luăm în considerare numărul de sonde. Pe sistemul meu Mac OS X, rularea comenzii „dtrace -l” spune că există 18.156 de sonde, în timp ce pe un sistem Solaris 10 spune că există 44.261. Folosirea doar a câtorva dintre aceste sonde într-o urmărire de o linie poate produce rezultate interesante. Luați, de exemplu, acest program dtrace:

iostart { @size[execname] = quantize (args[0]->b_bcount); }

Aceasta spune că monitorizați sonda „iostart”, care se declanșează ori de câte ori începe o operație I/O. Programul creează o matrice numită „dimensiune” cu valori cuantificate (ceea ce înseamnă că se împarte pe baza puterilor de 2) în funcție de dimensiunea în octeți (b_count) a operațiunii I/O. Dacă rulați această linie pentru câteva minute, ca în captura de ecran de alăturat, vă va arăta cât de mult I/O face fiecare program de pe mașina dvs., grupat după dimensiune. Rețineți că puteți intra în fiecare program individual, nu doar acolo unde există un furnizor de procese. Folosind această caracteristică, puteți urmări fiecare apel de funcție din proces, într-un mod similar cu fiecare sondă din nucleu.

Două exemple din viața reală

Pentru a arăta puterea dtrace, vă vom oferi două exemple bazate pe probleme reale pe sisteme reale – un Macintosh care rulează Mac OS X 10.5 și un server Sun care rulează Solaris 10. Am fost întotdeauna un proprietar de Mac și, la fel ca majoritatea proprietarilor de Mac, tind să mă agăz de mașinile mele pentru o lungă perioadă de timp, astfel încât atunci când vin în sfârșit să le înlocuiesc, mi se par a fi jalnic de lenți. Acest lucru este scris pe PowerBook-ul meu G4, deși până la tipărire sper că un MacBook Air va fi în mâinile mele.

Apple a portat utilitarul dtrace la cea mai recentă variantă de Mac OS X (Leopard), astfel încât să fie disponibil când Mac-ul meu a început să ruleze încet. Problema era legată de e-mail: de ani de zile, foloseam Eudora, care funcționa, dar începea să mă simt destul de obosit. Eudora este acum un produs open-source bazat pe Mozilla Thunderbird (care este foarte matur), așa că am crezut că era timpul să trec la asta, dar am rezistat aproximativ trei luni înainte să mă îmbolnăvesc de asta și am decis că trebuie să fie ceva mai bine.

M-am gândit să mă întorc la vechea Eudora, dar apoi am decis că Apple Mail era un pariu mai bun și am schimbat. Totul a fost bine la început și a funcționat bine cu un server IMAP, dar apoi a început să încetinească până la un punct în care s-a oprit - trimiterea unui e-mail părea să dureze o vârstă, iar rezoluția mea de Anul Nou de a-mi citi toate e-mailurile a fost ruptă rapid pentru că pur și simplu nu am putut ajunge la lor. În disperare, am decis să aplic dtrace problemei.