Jegyzetvázlat a Solaris előadáshoz ---------------------------------- 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. külön