aboutsummaryrefslogtreecommitdiff
path: root/hu_HU.ISO8859-2/books/handbook/dtrace/chapter.sgml
blob: 4af6711e9160836b96d325830f17d5855dac8782 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
<?xml version="1.0" encoding="iso-8859-2" standalone="no"?>
<!--
     The FreeBSD Documentation Project
     $FreeBSD$
-->

<!-- The FreeBSD Hungarian Documentation Project
     Translated by: PALI, Gabor <pgj@FreeBSD.org>
     %SOURCE%   en_US.ISO8859-1/books/handbook/dtrace/chapter.sgml
     %SRCID%    1.8
-->

<chapter id="dtrace" lang="hu">
  <chapterinfo>
    <authorgroup>
      <author>
	<firstname>Tom</firstname>
	<surname>Rhodes</surname>
	<contrib>Írta: </contrib>
      </author>
    </authorgroup>
  </chapterinfo>

  <title>&dtrace;</title>

  <sect1 id="dtrace-synopsis">
    <title>Áttekintés</title>

    <indexterm><primary>&dtrace;</primary></indexterm>
    <indexterm>
      <primary>&dtrace; támogatás</primary>
      <see>&dtrace;</see>
    </indexterm>

    <para>A &dtrace;, vagy más néven Dynamic Tracing
      technológiát a &sun; dolgozta ki szerverek
      teljesítményében jelentkezõ szûk
      keresztmetszetek felderítésének
      megkönnyítésére.  Ez nem egy
      nyomkövetésre szolgáló megoldást
      takar, hanem inkább a rendszer valós idejû
      elemzését és
      teljesítményének vizsgálatát
      elõsegítõ eszközt.</para>

    <para>A &dtrace; figyelemre méltó
      elemzõeszköz, rengeteg rendkívül hasznos
      képességgel rendelkezik a rendszerben
      felbukkanó problémák
      diagnosztizálására.  Elõre programozott
      szkriptek segítségével pedig ezen
      képességek további elõnyeit tudjuk
      kihasználni, ugyanis a &dtrace; programozható egy
      ún.  D nyelven, amelynek révén a
      különbözõ vizsgálatokat könnyen a
      saját igényeink szerint tudjuk
      alakítani.</para>

    <para>A fejezet elolvasása során
      megismerjük:</para>

    <itemizedlist>
      <listitem>
	<para>mi is az a &dtrace; és milyen lehetõségei
      vannak;</para>
      </listitem>

      <listitem>
	<para>a &solaris; és &os; operációs
	  rendszereken megtalálható &dtrace;
	  implementációk közti
	  eltéréseket;</para>
      </listitem>

      <listitem>
	<para>a &dtrace; &os; alatt hogyan engedélyezhetõ
      és használható.</para>
      </listitem>
    </itemizedlist>

    <para>A fejezet elolvasásához ajánlott:</para>

    <itemizedlist>
      <listitem>
	<para>a &unix; és &os; alapvetõ ismerete (<xref
	    linkend="basics"/>);</para>
      </listitem>

      <listitem>
	<para>a rendszermag konfigurációjának
	  és fordításának alapvetõ
	  ismerete (<xref linkend="kernelconfig"/>);</para>
      </listitem>

      <listitem>
	<para>az operációs rendszerek és azon
	  belül a &os; biztonsági fogalmainak minimális
	  ismerete (<xref linkend="security"/>);</para>
      </listitem>

      <listitem>
	<para>a &os; forrásainak megszerzésének
	  és azok lefordításának ismerete
	  (<xref linkend="updating-upgrading"/>).</para>
      </listitem>
    </itemizedlist>

   <warning>
      <para>Ez a funkció még folyamatos tesztelés
	alatt áll.  Bizonyos részei még
	egyáltalán nem, vagy csak korlátozottan
	érhetõek el.  A dokumentáció annak
	megfelelõen fog majd változni, hogy ezek az elemek
	fokozatosan elérik az éles
	felhasználáshoz szükséges
	szintet.</para>
    </warning>
  </sect1>

  <sect1 id="dtrace-implementation">
    <title>Eltérések az
      implementációban</title>

    <para>Noha a &os; alatt megtalálható &dtrace;
      implementáció nagyon hasonló az eredeti,
      &solaris; alatt futó változathoz, tartalmaz bizonyos
      különbségeket, amelyeket a
      továbblépés elõtt mindenképpen
      érdemes megemlítenünk.  Az egyik legfontosabb
      ilyen szembetûnõ különbség, hogy a &os;
      esetén a &dtrace; használatát külön
      engedélyezni kell.  A &dtrace; megfelelõ
      mûködéséhez tehát a rendszermag
      konfigurációs állományában meg
      kell adnunk bizonyos beállításokat és
      modulokat kell betöltenünk.  Ezekrõl hamarosan
      szó lesz.</para>

    <para>A rendszermag konfigurációs
      állományában a <literal>DDB_CTF</literal>
      opció segítségével tudjuk
      engedélyezni ún.  <acronym>CTF</acronym> adatok
      betöltését mind a rendszermag
      moduljaiból, mind pedig magából a
      rendszermagból egyaránt.  A <acronym>CTF</acronym> a
      &solaris; <quote>Compact Type Format</quote>
      elnevezésû formátumára utal, amellyel
      például a <acronym>DWARF</acronym>
      megoldásához hasonló módon
      tárolhatunk tömörített alakban
      különbözõ típusú
      nyomkövetési információkat.  Ilyen
      <acronym>CTF</acronym> adatok többek közt a
      <command>ctfconvert</command> és a
      <command>ctfmerge</command> használatával
      rendelhetõek hozzá bináris
      állományokhoz.  A <command>ctfconvert</command>
      segédprogram a fordítóprogram által az
      <acronym>ELF</acronym> állományokban szereplõ
      <acronym>DWARF</acronym> típusú szakaszokban
      tárolt információkat képes beolvasni,
      és a <command>ctfmerge</command> a
      tárgykódban található
      <acronym>CTF</acronym> típusú <acronym>ELF</acronym>
      szakaszokat tudja végrehajtható
      állományokká vagy osztott
      könyvtárakka összefûzni.  Röviden
      beszélni fogunk arról, hogyan lehet mindezeket a
      &os; alaprendszerébe és rendszermagjába is
      beépíteni.</para>

    <para>&os; és &solaris; esetén elõfordulhat, hogy
      más fajta providerek állnak
      rendelkezésünkre.  Ezek közül talán a
      legfontosabb a <literal>dtmalloc</literal>, amely a &os;
      rendszermagjában típus szerint teszi
      lehetõvé a <function>malloc()</function>
      függvény követését.</para>

    <para>&os; alatt kizárólag csak a
      <username>root</username> tudja használni a &dtrace;-t.  Ennek
      oka a két operációs rendszer
      biztonsági megoldásai közti
      különbségekben keresendõ, mivel a &solaris;
      esetén létezik néhány olyan
      alacsonyszintû ellenõrzés, amely a
      &os;-nél még nincs.  Ezért
      például a <devicename>/dev/dtrace/dtrace</devicename>
      eszköz szigorúan csak a <username>root</username>
      számára érhetõ el.</para>

    <para>Végezetül megemlítjük, hogy a &dtrace;
      felhasználására a &sun; <acronym>CDDL</acronym>
      licence vonatkozik.  A <literal>Common Development and
      Distribution License</literal> &os; a
      <filename>/usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE</filename>
      állományban található, vagy interneten
      keresztül a <ulink
	url="http://www.opensolaris.org/os/licensing"></ulink>
      címen.</para>

    <para>Ezen licenc értelmében a &dtrace;
      támogatással készített &os;
      rendszermagok továbbra is <acronym>BSD</acronym>
      licencûek maradnak, azonban a rendszerrel terjesztett
      binárisok futtatásakor vagy a modulok
      betöltésekor már a <acronym>CDDL</acronym>
      érvényesül.</para>
  </sect1>

  <sect1 id="dtrace-enable">
    <title>A &dtrace; támogatásának
      engedélyezése</title>

    <para>A &dtrace; által felkínált
      lehetõségeket a következõ sorok
      hozzáadásával tudjuk engedélyezni a
      rendszermag konfigurációs
      állományában:</para>

    <programlisting>options         KDTRACE_HOOKS
options         DDB_CTF</programlisting>

    <note>
      <para>AMD64 architektúrán ezeken kívül
	még az alábbi sor is kelleni fog:</para>

      <programlisting>options         KDTRACE_FRAME</programlisting>

      <para>Ezzel a beállítással az
	<acronym>FBT</acronym> (<quote>function boundary tracing</quote>)
	részére nyújtunk támogatást.
	A &dtrace; ugyan enélkül is képes lesz
	mûködni, de akkor csak korlátozott
	mértékben tudunk ilyen típusú
	vizsgálatokat végezni.</para>
      </note>

    <para>Az egész rendszert újra kell fordítanunk
      a <acronym>CTF</acronym> használatával.  Ennek
      elvégzéséhez a következõ
      parancsokat kell kiadnunk:</para>

    <screen>&prompt.root; <userinput>cd /usr/src</userinput>
&prompt.root; <userinput>make WITH_CTF=1 kernel</userinput></screen>

    <para>A fordítás befejezõdése után
      indítsuk újra a rendszerünket.</para>

    <para>A rendszer újraindulása és az új
      rendszermag betöltõdése után
      szükségünk lesz egy Korn-féle
      parancsértelmezõre is, mivel a &dtrace;
      eszköztárában rengeteg, a
      <command>ksh</command> programra épülõ
      eszközt fogunk találni.  Ezért tehát
      telepítsük a <filename
	role="package">shells/ksh93</filename> csomagot, de
      megjegyezzük, hogy ugyanezen eszközök
      számára a <filename
	role="package">shells/pdksh</filename> vagy <filename
	role="package">shells/mksh</filename> csomagok is
      megfelelnek.</para>

    <para>Végül töltsük le a &dtrace;
      eszköztárának legfrissebb
      változatát.  Az aktuális verzió a <ulink
	url="http://www.opensolaris.org/os/community/dtrace/dtracetoolkit/"></ulink>
      címen érhetõ el.  Képes
      önmagát telepíteni, de a benne
      található eszközök
      használatához nem kötelezõ ezt
      elvégezni.</para>
  </sect1>

  <sect1 id="dtrace-using">
    <title>A &dtrace; használata</title>

    <para>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:</para>

    <screen>&prompt.root; <userinput>kldload dtraceall</userinput></screen>

    <para>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:</para>

    <screen>&prompt.root; <userinput>dtrace -l | more</userinput></screen>

    <para>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 <command>more</command>
      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.</para>

    <para>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:</para>

    <screen>&prompt.root; <userinput>gunzip -c DTraceToolkit* | tar xvf -</userinput></screen>

    <para>A <command>cd</command> 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 <literal>755</literal> módra.</para>

    <para>Mindegyik szkriptben el kell végeznünk némi
      módosítást: a <filename>/usr/bin/ksh</filename>
      hivatkozásokat írjuk át mindenhol a
      <filename>/usr/local/bin/ksh</filename> névre, illetve a
      <filename>/usr/bin/sh</filename> hivatkozásokat
      <filename>/bin/sh</filename> névre, majd
      végezetül pedig a <filename>/usr/bin/perl</filename>
      hivatkozásokat a <filename>/usr/local/bin/perl</filename>
      névre.</para>

    <important>
      <para>Itt még egyszer kiemelnénk, hogy a &os;-ben
	jelenleg megtalálható &dtrace; támogatás
	<emphasis>még nem teljes</emphasis> és
	<emphasis>kísérleti jelleggel</emphasis> 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.</para>
    </important>

    <para>Jelenlegi ismereteink szerint a &os; egyelõre csak
      két szkriptet támogat teljes mértékben,
      ezek a <filename>hotkernel</filename> és a
      <filename>procsystime</filename>.  A szakasz további
      részében ezzel a kettõvel fogunk
      részletesebben foglalkozni.</para>

    <para>A <filename>hotkernel</filename> 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:</para>

    <screen>&prompt.root; <userinput>./hotkernel</userinput>
Sampling... Hit Ctrl-C to end.</screen>

    <para>A folyamat <keycombo
	action="simul"><keycap>Ctrl</keycap><keycap>C</keycap> </keycombo>
      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:</para>

    <screen>kernel`_thread_lock_flags                                   2   0.0%
0xc1097063                                                  2   0.0%
kernel`sched_userret                                        2   0.0%
kernel`kern_select                                          2   0.0%
kernel`generic_copyin                                       3   0.0%
kernel`_mtx_assert                                          3   0.0%
kernel`vm_fault                                             3   0.0%
kernel`sopoll_generic                                       3   0.0%
kernel`fixup_filename                                       4   0.0%
kernel`_isitmyx                                             4   0.0%
kernel`find_instance                                        4   0.0%
kernel`_mtx_unlock_flags                                    5   0.0%
kernel`syscall                                              5   0.0%
kernel`DELAY                                                5   0.0%
0xc108a253                                                  6   0.0%
kernel`witness_lock                                         7   0.0%
kernel`read_aux_data_no_wait                                7   0.0%
kernel`Xint0x80_syscall                                     7   0.0%
kernel`witness_checkorder                                   7   0.0%
kernel`sse2_pagezero                                        8   0.0%
kernel`strncmp                                              9   0.0%
kernel`spinlock_exit                                       10   0.0%
kernel`_mtx_lock_flags                                     11   0.0%
kernel`witness_unlock                                      15   0.0%
kernel`sched_idletd                                       137   0.3%
0xc10981a5                                              42139  99.3%</screen>

    <para>Ez a szkript modulok esetén is alkalmazható.
      Ezt a módját a <option>-m</option> kapcsoló
      megadásával aktiválhatjuk:</para>

    <screen>&prompt.root; <userinput>./hotkernel -m</userinput>
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%</screen>

    <para>A <filename>procsystime</filename> 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 <filename>/bin/csh</filename> egy újabb
      példányát.  A
      <filename>procsystime</filename> elindul, majd megvárja,
      amíg kiadunk néhány parancsot a
      <command>csh</command> frissen indított
      másolatában.  A teszt eredményei tehát
      a következõk lesznek:</para>

    <screen>&prompt.root; <userinput>./procsystime -n csh</userinput>
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         3988049784</screen>

    <para>Jól megfigyelhetõ, hogy (nanomásodpercekben
      mérve) a legtöbb idõt a
      <function>read()</function>, a legkevesebb idõt pedig a
      <function>getpid()</function> rendszerhívás vette
      igénybe.</para>
  </sect1>

  <sect1 id="dtrace-language">
    <title>A D nyelv</title>

    <para>A &dtrace; eszköztárában
      megtalálható számos szkript a &dtrace;
      saját programozási nyelvén
      íródott.  Ezt a nyelvet nevezik a &sun;
      implementációjában <quote>a D
      nyelvnek</quote>.  Ennek ismertetésére itt most
      külön nem térünk ki, azonban a <ulink
	url="http://wikis.sun.com/display/DTrace/Documentation"></ulink>
      címen igen részletesen olvashatunk
      róla.</para>
  </sect1>
</chapter>