Toleo la majaribio la zana ya utatuzi wa utatuzi wa DTrace imeanzishwa kwa ajili ya Linux 2.0.0-1.14, iliyotekelezwa kama mchakato wa nafasi ya mtumiaji kwa kutumia mfumo mdogo wa eBPF na mifumo ya kawaida ya ufuatiliaji inayotolewa na kiini LinuxKwa upande wa utendaji, utekelezaji wa DTrace unaotegemea eBPF uko karibu na utekelezaji wa kwanza wa DTrace kwa Linux, inatekelezwa kama moduli ya kernel. Msimbo wa mradi unasambazwa chini ya leseni ya GPLv2.
Zana hii inaweza kutumika na kerneli za kawaida Linux, inayounga mkono BPF. Hii inahitaji maktaba ya libctf, ambayo inatekeleza usaidizi wa umbizo la utatuzi wa CTF (Compact Type Format), ambalo limejumuishwa katika kifurushi cha binutils tangu kutolewa kwa 2.40, au maktaba ya libdtrace-ctf, iliyohamishwa kutoka Solaris. Viraka viwili vya kerneli ya 6.7 vinapatikana kwa hiari, kuwezesha uwezo wa hali ya juu wa kupata data ya ziada kuhusu moduli na kerneli.
Teknolojia ya DTrace ilitengenezwa ili kushughulikia ufuatiliaji unaobadilika wa programu za kernel na endpoint katika mfumo endeshi wa Solaris. DTrace huwawezesha watumiaji kufuatilia tabia ya mfumo kwa undani na kugundua matatizo kwa wakati halisi. Wakati wa utatuzi wa matatizo, DTrace haingilii uendeshaji wa programu zinazochambuliwa na haiathiri utendaji wao, ikiruhusu uchambuzi wa haraka wa mifumo inayoendesha. Nguvu za DTrace ni pamoja na lugha yake ya kiwango cha juu cha D, sawa na AWK, ambayo hurahisisha sana kuunda hati za ufuatiliaji kuliko zana za programu za kidhibiti zinazotolewa na eBPF katika C, Python, na Lua na maktaba za nje.
Vipengele muhimu:
- Watoa huduma wanaopatikana:
- cpc (Kihesabu Utendaji cha CPU) - kupata taarifa za utendaji.
- dtrace - Vidhibiti vya BEGIN, END, na ERROR vinavyoendeshwa kabla au baada ya ukaguzi mwingine, na wakati hitilafu zinapotokea.
- fbt (Ufuatiliaji wa Mpaka wa Kazi) — kufuatilia simu kwenye vitendakazi vya kernel.
- lockstat — kufuatilia hali ya kufuli.
- pid - Hufuatilia simu za utendaji kazi katika michakato inayoendeshwa katika nafasi ya mtumiaji.
- proc - Hufuatilia shughuli zinazohusiana na mchakato kama vile kuanzisha na kuzima (uma, kutekeleza, kutoka, kosa).
- wasifu - huhifadhi takwimu za utendaji katika vipindi maalum.
- sdt, rawtp — ufuatiliaji wa kernel tuli (SDT — Ufuatiliaji Uliofafanuliwa kwa Utulivu).
- usdt: Ufuatiliaji Uliofafanuliwa kwa Utulivu wa Nafasi ya Mtumiaji (USDT)
- ratiba — hufuatilia ugawaji wa rasilimali za CPU.
- sycall - Hufuatilia kuingia na kutoka kwa simu za mfumo.
- Ukusanyaji wa data iliyokusanywa: uwezo wa kutumia vitendakazi vya jumla (wastani, hesabu, llquantize, lquantize, upeo, chini, quantize, stddev, na jumla) na vitendo vya jumla (wazi, rekebisha, rekebisha, printa). Usaidizi wa kuhifadhi matokeo ya vitendakazi vya jumla katika safu za kawaida na za ushirika.
- Usaidizi wa ufuatiliaji wa kubahatisha, unaoruhusu ufuatiliaji wa muda mfupi wa data, kuamua ni data gani inapaswa kuwekwa kwenye bafa ya ufuatiliaji na ni ipi inapaswa kutupwa. Vitendaji vinavyopatikana: uvumi, ubashiri, tenda, na utupilie mbali.
- Usaidizi wa vigezo vya kimataifa na vya ndani, TLS (Uhifadhi wa Uzi-Ndani), safu shirikishi na mifuatano.
- Toa vigezo vilivyojengewa ndani: arg0 - arg9, args[], caller, curcpu, curthread, epid, errno, execname, gid, id, pid, ppid, probefunc, probemod, probename, probeprov, stackdepth, tid, timestamp, ucaller, uid, uregs[], usackdepth, walltimestamp.
- Vitendo vinavyoungwa mkono: exit, freopen, ftruncate, mod, printa, printf, raise, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack, na usym.
- Upatikanaji wa vitendakazi vilivyojengewa ndani: alloca, basename, bcopy, copyin, copyinstr, copyinto, copyout, copyoutstr, dirname, getmajor, getminor, htonl, htonll, htons, index, inet_ntoa, lltostr, mutex_owned, mutex_owner, mutex_type_adaptive, mutex_type_spin, ntohl, ntohll, ntohs, progenyof, rand, rindex, rw_iswriter, rw_read_held, rw_write_held, strchr, strjoin, strlen, strrchr, strstr, strtok, substr.
- Uwepo wa vihesabu data ambavyo havianguki kwenye vizuizi vya kufuatilia.
- Usaidizi wa kukusanya hati za ufuatiliaji wa lugha ya D katika programu za BPF.
- Kuandaa vitendaji vya BPF mapema kwa simu za maktaba.
- Chaguo la bpflog la kupata kumbukumbu ya uthibitishaji wa programu za BPF zilizopakiwa.
- Uundaji wa msimbo unaobadilika na utayarishaji wa msimbo kwa ajili ya kutumika tena katika programu za BPF.
Mabadiliko katika toleo jipya:
- Mtoa huduma wa pid, anayetumika kufuatilia michakato katika nafasi ya mtumiaji, amesasishwa ili kusaidia kufuatilia utekelezaji wa maagizo kwa kutumia msimbo uliosawazishwa.
- Imeongeza usaidizi wa kutumia vitendakazi vya stack() na ustack() ili kukusanya data iliyokusanywa.
- Uwezo wa kuondoa vipengele vya aina yoyote kutoka kwa safu shirikishi kwa kugawa 0 halisi.
- Imeongeza kitendo cha kuchapisha kwa kutoa data iliyopangwa yenye maelezo ya aina.
- Imeongeza vitendakazi vipya vilivyojengewa ndani cleanpath(), d_path() na link_ntop().
- Imeongeza kigezo cha "-xcpu", ambacho hukuruhusu kufunga ukaguzi kwenye CPU maalum.
- Imeongeza kigezo cha "-xlockmem" ili kupunguza ukubwa wa kumbukumbu.
- Uwezo wa kuhifadhi data ya ufuatiliaji wa michakato (USDT) kati ya uanzishaji upya wa dtprobed umetekelezwa.
- Usaidizi wa utaratibu wa BTF (Umbizo la Aina ya BPF), ambao hutoa taarifa za ukaguzi wa aina katika msimbo bandia wa BPF.
- Uwezekano wa kutumia hati ya usanidi kwa ajili ya ujenzi.
Chanzo: opennet.ru
