DTrace

Jegyzetvázlat a DTrace előadáshoz (előadó: Fischer Erik, Sun)

Készítette Mészáros Tamás, BME MIT, 2009

A feladat: hibakeresés, diagnosztika, optimalizáció

  • végzetes hibák
  • tranziens hibák
  • percepcionális "hibák" ("lassú a gép") okainak felderítése

Korábbi megoldások: gyenge megfigyelhetőség és invazív technikák

  • egyszerű, nem túl rugalmas megfigyelő parancsok (vmstat, iostat, stb.)
  • bináris vagy forráskódú beavatkozások szükségesek a hibakereséshez
  • rendszerkönyvtár és kernel debug változatok használata szükséges
  • erőszakosak, nehézkesek, időigényesek, korlátozottak, élő rendszeren nem alkalmazhatók, új hibákat vihetnek a rendszerbe

A DTrace összetevői:

  • mérőrendszer: mérőpontok függvény be- és kilépési pontokon és adatfeldolgozók (fogyasztók)
  • a mérőrendszer programozási nyelve (D)
  • a megvalósító kernel modul

A mérési helyek (ún. provider-ekben):

  • felhasználói függvények
  • rendszerhívások
  • kernel függvények
  • összesen > 50 ezer mérőpont

Provider-ek:

  • lista: dtrace -l
  • fbt: kernel függvények (~45 ezer)
  • syscall: rendszerhívások (~ 400 db mérőpont)
  • I/O, processz, ütemezés, zárolás, stb.

Fogyasztók:

  • DTrace parancs (szkriptek)
  • programozási nyelvekben
  • stb.

Működési mód:

  • dinamikus mérőkód beszúrás a megfelelő fv. be/kilépési pontokra
  • kernel szintű adatgyűjtés a meghatározott mérőpontokról
  • a fogyasztók (pl. "dtrace" parancs) lekérdezik az adatgyűjtőt

A DTrace programozási nyelve: D

  • C, awk, perl keverék
  • szokásos adattípusok
  • speciális típusok: asszociatív tömb
  • aggregációs műveletek
  • beépített változók (pid, ppid, execname, stb.)
  • szálakra lokális változók: this->...
  • nanoszekundum felbontású időmérés
  • hozzáférés a megfigyelt függvények argumentumaihoz és visszatérési értékeihez
  • megjelenítés: printf, pinta (asszociatív tömbökre)
  • akciók (destruktívak is, pl. stop(), panic(), ha engedélyezzük)

DTrace mintapéldák

  • l. fóliák