A DTrace funkcióinak alkalmazásához léteznie kell egy DTrace eszköznek. Ennek létrehozásához be kell töltenünk a megfelelő modult:
#
kldload dtraceall
Innentől már működésre kész a DTrace. Rendszeradminisztrátorként a következő módon kérdezhetjük le a rendelkezésre álló vizsgálatokat:
#
dtrace -l | more
Mivel lekérdezés eredménye pillanatok
alatt betöltené az egész képernyőt,
ezért az egészet még
átirányítjuk a more
parancshoz. Ha ez rendesen lefut, akkor a DTrace
ténylegesen használhatónak tekinthető.
Ezt követően tekintsük át a
hozzá tartozó eszközkészletet.
Ez a mellékelt eszközkészlet lényegében a rendszerrel kapcsolatos információk összegyűjtésére alkalmas szkripteket tartalmaz. Vannak szkriptek, amelyekkel a megnyitott állományokat, a memóriát, a processzorhasználatot és még sok minden mást kérdezhetünk le. A szkriptek a következő parancs segítségével tömöríthetőek ki:
#
gunzip -c DTraceToolkit* | tar xvf -
A cd
parancs
segítségével lépjünk be az
így keletkező könyvtárba, és a
kisbetűs névvel rendelkező
állományok engedélyeit állítsuk
be a 755
módra.
Mindegyik szkriptben el kell végeznünk némi
módosítást: a /usr/bin/ksh
hivatkozásokat írjuk át mindenhol a
/usr/local/bin/ksh
névre, illetve a
/usr/bin/sh
hivatkozásokat
/bin/sh
névre, majd
végezetül pedig a /usr/bin/perl
hivatkozásokat a /usr/local/bin/perl
névre.
Itt még egyszer kiemelnénk, hogy a FreeBSD-ben jelenleg megtalálható DTrace támogatás még nem teljes és kísérleti jelleggel szerepel. Ezért bizonyos szkriptek nem fognak működni, vagy azért, mert túlságosan Solaris™ lehetőségeihez igazodnak, vagy pedig azért, mert a jelenlegi implementáció által még nem ismert vizsgálatokra támaszkodnak.
Jelenlegi ismereteink szerint a FreeBSD egyelőre csak
két szkriptet támogat teljes mértékben,
ezek a hotkernel
és a
procsystime
. A szakasz további
részében ezzel a kettővel fogunk
részletesebben foglalkozni.
A hotkernel
feladata segíteni
beazonosítani azokat a függvényeket, amelyek a
legtöbb időt veszik igénybe a rendszermagon
belül. A szkript futtatásakor nagyjából
a következőt csinálja:
#
./hotkernel
Sampling... Hit Ctrl-C to end.A folyamat Ctrl+C billentyűkombináció hatására állítható meg. A szkript futásának befejeződésekor különböző rendszermagbeli függvények és a hozzájuk tartozó idők jelennek meg, az utóbbi szerint növekvő sorrendben:
Ez a szkript modulok esetén is alkalmazható.
Ezt a módját a -m
kapcsoló
megadásával aktiválhatjuk:
#
./hotkernel -m
Sampling... Hit Ctrl-C to end.
^C
MODULE COUNT PCNT
0xc107882e 1 0.0%
0xc10e6aa4 1 0.0%
0xc1076983 1 0.0%
0xc109708a 1 0.0%
0xc1075a5d 1 0.0%
0xc1077325 1 0.0%
0xc108a245 1 0.0%
0xc107730d 1 0.0%
0xc1097063 2 0.0%
0xc108a253 73 0.0%
kernel 874 0.4%
0xc10981a5 213781 99.6%A procsystime
szkript egy adott
azonosítóval vagy névvel rendelkező
programhoz tudja megadni az általa kezdeményezett
rendszerhívások által felhasznált
időt. A most következő példában
elindítjuk a /bin/csh
egy újabb
példányát. A
procsystime
elindul, majd megvárja,
amíg kiadunk néhány parancsot a
csh
frissen indított
másolatában. A teszt eredményei tehát
a következők lesznek:
#
./procsystime -n csh
Tracing... Hit Ctrl-C to end...
^C
Elapsed Times for processes csh,
SYSCALL TIME (ns)
getpid 6131
sigreturn 8121
close 19127
fcntl 19959
dup 26955
setpgid 28070
stat 31899
setitimer 40938
wait4 62717
sigaction 67372
sigprocmask 119091
gettimeofday 183710
write 263242
execve 492547
ioctl 770073
vfork 3258923
sigsuspend 6985124
read 3988049784Jól megfigyelhető, hogy (nanomásodpercekben
mérve) a legtöbb időt a
read()
, a legkevesebb időt pedig a
getpid()
rendszerhívás vette
igénybe.
Ha kérdése van a FreeBSD-vel kapcsolatban, a
következő címre írhat (angolul):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.