Oracle Linux 2.0.0-1.14-д зориулсан DTrace-г нийтлэв

Linux 2.0.0-1.14-д зориулсан DTrace динамик дибаг хийх хэрэгслийн туршилтын хувилбарыг танилцуулж байна. Энэ нь eBPF дэд систем болон Линукс цөмөөс өгсөн стандарт мөрдөх механизмыг ашигладаг хэрэглэгчийн орон зайн процесс болгон хэрэгжсэн. Үйл ажиллагааны хувьд eBPF-д суурилсан DTrace хэрэгжилт нь цөмийн модулийн хэлбэрээр хэрэгжсэн Linux-д зориулсан анхны DTrace хэрэгжүүлэлттэй ойролцоо байна. Төслийн кодыг GPLv2 лицензийн дагуу түгээдэг.

Хэрэгслийн хэрэгслийг BPF-ийг дэмждэг хувьцааны Linux цөмд ашиглаж болно. Ажиллахын тулд танд 2.40 хувилбараас эхлэн binutils багцад багтсан CTF (Compact Type Format) дибаг хийх форматын дэмжлэгтэй libctf номын сан эсвэл Solaris-аас зөөвөрлөгдсөн libdtrace-ctf номын сан хэрэгтэй. Сонголтоор 6.7 цөмд хоёр нөхөөсийг санал болгож байгаа бөгөөд энэ нь модулиуд болон цөмийн талаар нэмэлт мэдээлэл авахын тулд дэвшилтэт функцуудыг ашиглах боломжийг олгодог.

DTrace технологийг Solaris үйлдлийн систем дэх цөм болон төгсгөлийн програмуудыг динамикаар хянах асуудлыг шийдвэрлэх зорилгоор боловсруулсан. DTrace нь хэрэглэгчдэд системийн үйл ажиллагааг нарийвчлан хянах, асуудлыг бодит цаг хугацаанд оношлох боломжийг олгодог. Дибаг хийх явцад DTrace нь судалж буй програмуудын үйл ажиллагаанд нөлөөлөхгүй бөгөөд тэдгээрийн гүйцэтгэлд ямар ч байдлаар нөлөөлөхгүй бөгөөд энэ нь ажиллаж байгаа системүүдийн шинжилгээг шууд зохион байгуулах боломжийг олгодог. DTrace-ийн давуу талуудын нэг нь AWK-тэй төстэй өндөр түвшний D хэл бөгөөд гадаад номын сантай C, Python, Lua хэл дээр eBPF боловсруулагч бичихэд санал болгож буй хэрэгслүүдийг ашиглахаас илүү мөрдөх скрипт үүсгэх нь илүү хялбар байдаг.

Гол давуу талууд:

  • Боломжтой үйлчилгээ үзүүлэгчид:
    • cpc (CPU Performacne Counter) - гүйцэтгэлийн мэдээллийг олж авах.
    • dtrace - BEGIN, END болон ERROR зохицуулагч нь бусад шалгалтын өмнө эсвэл дараа, мөн алдаа гарсан үед ажилладаг.
    • fbt (Function Boundary Tracing) - цөмийн функцүүдийн дуудлагыг хянах.
    • lockstat - түгжээний статусыг хянах.
    • pid - Хэрэглэгчийн орон зайд ажиллаж байгаа процессуудын функцын дуудлагыг хянадаг.
    • proc - эхлүүлэх, унтраах зэрэг процесстой холбоотой үйл ажиллагааг хянадаг (салаа, гүйцэтгэх, гарах, алдаа).
    • профайл - гүйцэтгэлийн статистикийг тогтоосон интервалаар хадгалах.
    • sdt, rawtp - статик цөмийн мөшгих (SDT - Statically Defined Tracing).
    • usdt: програмын статик мөшгих (USDT - Хэрэглэгчийн орон зайн статикаар тодорхойлогдсон мөрдөх)
    • хуваарь - CPU-ийн нөөцийн хуваарилалтыг хянадаг.
    • sycall - Системийн дуудлагын оролт, гаралтыг хянадаг.
  • Цуглуулсан өгөгдлийг нэгтгэх: нэгтгэх функцууд (дундаж, тоолох, квантжуулах, lquantize, max, min, quantize, stddev ба нийлбэр) болон нэгтгэх үйлдлүүдийг (тодорхойлох, хэвийн болгох, хэвийн болгох, хэвлэх) ашиглах чадвар. Тогтмол болон ассоциатив массивуудад нэгтгэсэн функцуудыг ашиглах үр дүнг хадгалахад дэмжлэг үзүүлэх.
  • Өгөгдлийг түр зуур хянах, тэдгээрийн алийг нь ул мөр буферт барьж, аль нь хаяхыг шийдэх боломжийг олгодог таамаглалын хайлтыг дэмждэг. Боломжтой функцууд нь таамаглах, таамаглах, үйлдэх, хаях явдал юм.
  • Глобал болон локал хувьсагч, TLS (Thread-Local Storage), ассоциатив массив болон мөрүүдийг дэмжих.
  • Суурилуулсан хувьсагчуудыг өгөх: arg0 - arg9, args[], дуудагч, curcpu, curthread, epid, errno, execname, gid, id, pid, ppid, probefunc, probemod, probename, probeprov, stackdepth, tid, timetamp, ucaller, uid, uregs[], ustackdepth, walltimestamp.
  • Дэмжигдсэн үйлдлүүд: exit, freopen, ftruncate, mod, printa, printf, өсгөх, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack болон usym.
  • Суурилуулсан функцүүдийн бэлэн байдал: alloca, basename, bcopy, copyin, copyinstr, copyinto, copyout, copyoutstr, dirname, getmajor, getminor, htonl, htonll, htons, index, inet_ntoa, lltostr, mutex_owned, mutex_owner, mutexptyhlpe,_mutexptyhlpe, , ntohll, ntohs, progenyof, rand, rindex, rw_iswriter, rw_read_held, rw_write_held, strchr, strjoin, strlen, strrchr, strstr, strtok, substr.
  • Мөр буферт ороогүй өгөгдлийн тоолуур байгаа эсэх.
  • D мөрийн скриптүүдийг BPF програмын маягт руу хөрвүүлэхэд дэмжлэг үзүүлэх.
  • Номын сангийн дуудлагад зориулсан BPF функцийг урьдчилан эмхэтгэх.
  • Ачаалагдсан BPF програмын баталгаажуулалтын бүртгэлийг авах bpflog сонголт.
  • BPF программд дахин ашиглахын тулд динамик код үүсгэх, кодын урьдчилсан эмхэтгэл.

Шинэ хувилбарт гарсан өөрчлөлтүүд:

  • Хэрэглэгчийн орон зай дахь процессуудыг хянахад ашигладаг pid үйлчилгээ үзүүлэгч нь зааварчилгааны гүйцэтгэлийг кодын зөрүүгээр хянах дэмжлэгийг нэмсэн.
  • Цуглуулсан өгөгдлийг нэгтгэхийн тулд stack() болон ustack() функцуудыг ашиглах дэмжлэг нэмэгдсэн.
  • Ассоциатив массиваас ямар ч төрлийн элементүүдийг 0-ийг өгөх замаар устгах чадвар.
  • Төрөл бүрийн тайлбар бүхий бүтэцлэгдсэн өгөгдлийг гаргах хэвлэх үйлдлийг нэмсэн.
  • cleanpath(), d_path() болон link_ntop() шинэ суулгасан функцуудыг нэмсэн.
  • "-xcpu" параметрийг нэмсэн бөгөөд энэ нь танд тодорхой CPU-тэй шалгалтыг холбох боломжийг олгодог.
  • Санах ойн хэмжээг хязгаарлах "-xlockmem" сонголтыг нэмсэн.
  • dtprobed дахин эхлүүлэх хооронд процессын ул мөрийн өгөгдлийг (USDT) хадгалах боломжийг олгосон.
  • BPF псевдокодын төрөл шалгах мэдээллийг өгдөг BTF (BPF Type Format) механизмын дэмжлэг.
  • Тохируулгын скриптийг бүтээхэд ашиглах чадвар.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх