26.4. DTrace-г ашиглах

DTrace боломжийг ашиглахаас өмнө DTrace төхөөрөмж байх хэрэгтэй. Төхөөрөмжийг дуудахын тулд дараах тушаалыг ажиллуулна:

# kldload dtraceall

DTrace дэмжлэг одоо боломжтой болсон байх ёстой. Бүх шалгалтыг харахын тулд администратор дараах тушаалыг одоо ажиллуулж болно:

# dtrace -l | more

Дэлгэцийн буфферийг түргэн дүүргэх болохоор бүх гаралтыг more хэрэгсэл рүү дамжуулдаг. Энд хүрэхэд DTrace-ийг ажиллаж байна гэж үзнэ. Одоо уг хэрэгслийг шалгаж үзэх цаг боллоо.

Уг хэрэгсэл нь системийн мэдээллийг цуглуулахын тулд DTrace-тэй цуг ажиллуулж болох ашиглахад бэлэн скриптүүдийн цуглуулга юм. Нээлттэй файлууд, санах ой,CPU-ийн хэрэглээ болон өөр олон зүйлсийг шалгах скриптүүд байдаг. Скриптүүдийг дараах тушаалаар задалж болно:

# gunzip -c DTraceToolkit* | tar xvf -

cd ашиглан тэр сан руу өөрчилж жижиг үсгээр бичигдсэн нэртэй бүх файлууд дээр ажиллуулах зөвшөөрлүүдийг 755 руу өөрчлөх хэрэгтэй.

Эдгээр бүх скриптүүдийн агуулгад өөрчлөлт хийх хэрэгтэй болно. /usr/bin/ksh гэснийг /usr/local/bin/ksh болгох ёстой бөгөөд /usr/bin/sh-ийг /bin/sh болгон ашиглахаар, төгсгөлд нь /usr/bin/perl/usr/local/bin/perl болгон ашиглахаар болгож өөрчлөх хэрэгтэй.

Чухал: FreeBSD дээрх DTrace дэмжлэг нь бүрэн бус бөгөөд туршилтын гэдгийг уншигчид сануулах нь ухаалаг болох юм. Эдгээр скриптүүдийн олонхи нь ажиллахгүй бөгөөд тэдгээр нь хэтэрхий Solaris™-д тусгайлан зориулсан эсвэл одоо дэмжигдээгүй байгаа шалгалтуудыг ашигладаг.

Үүнийг бичиж байх үед DTrace хэрэгслийн зөвхөн хоёр скрипт FreeBSD дээр бүрэн дэмжигдсэн: эдгээр нь hotkernel болон procsystime скриптүүд юм. Эдгээр хоёрыг бид энэ бүлгийн дараагийн хэсгүүдэд авч үзэх болно.

hotkernel нь аль функц цөмийн ихэнх хугацааг ашиглаж байгааг илрүүлэхээр хийгдсэн. Хэвийнээр ажиллуулахад энэ нь дараахтай төстэй гаралтыг харуулах болно:

# cd /usr/share/dtrace/toolkit
# ./hotkernel
Sampling... Hit Ctrl-C to end.

Системийн администратор процессийг зогсоохын тулд Ctrl+C товчлуурын хослолыг ашиглах ёстой. Зогсоосны дараа скрипт нь цөмийн функцуудын жагсаалт болон хугацааны мэдээллийг харуулах бөгөөд гаралтыг хугацааны ихэссэн дарааллаар эрэмбэлж харуулна:

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%

Энэ скрипт нь цөмийн модулиудтай бас ажилладаг. Энэ боломжийг ашиглахын тулд скриптийг -m өгөгдөлтэй ажиллуулах хэрэгтэй:

# ./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%

procsystime скрипт нь өгөгдсөн PID эсвэл процессийн хувьд системийн дуудлагын цагийн хэрэглээг авч хэвлэн харуулдаг. Дараах жишээн дээр /bin/csh-ийн шинэ хуулбар ажиллуулсан. procsystime-ийг ажиллуулсан бөгөөд өөр нэг csh дээр цөөн хэдэн тушаалыг бичтэл энэ нь хүлээх горимд орсон. Энэ тестийн үр дүн энд байна:

# ./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         3988049784

Энд үзүүлснээр read() системийн дуудлага ихэнх цагийг, getpid() системийн дуудлага хамгийн бага хугацааг ашигласныг наносекундаар харуулж байна.

Энэ болон бусад баримтуудыг ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ хаягаас татаж авч болно.

FreeBSD-ийн талаар <questions@FreeBSD.org> хаягтай холбоо барихаасаа өмнө баримтыг уншина уу.
Энэ бичиг баримттай холбоотой асуулт байвал <doc@FreeBSD.org> хаягаар цахим захидал явуулна уу.
Энэ бичиг баримтын орчуулгатай холбоотой асуулт байвал <admin@mnbsd.org> хаягаар цахим захидал явуулна уу.