En experimentell version av verktygen för dynamisk felsökning DTrace för Linux 2.0.0-1.14 har presenterats. Den Àr implementerad som en anvÀndarutrymmesprocess som anvÀnder eBPF-subsystemet och de inbyggda spÄrningsmekanismerna som tillhandahÄlls av Linux-kÀrnan. Funktionellt sett Àr implementeringen av DTrace baserat pÄ eBPF nÀra den första implementeringen av DTrace för Linux, som utfördes i form av en kÀrnmodul. Projektets kod distribueras under GPLv2-licensen.
Verktygen kan anvÀndas med standard Linux-kÀrnor som stöder BPF. För att fungera krÀvs biblioteket libctf som implementerar stöd för det debugformatet CTF (Compact Type Format), vilket ingÄr i paketet binutils frÄn version 2.40, eller biblioteket libdtrace-ctf, porterat frÄn Solaris. TvÄ patchar till kÀrna 6.7 erbjuds som valfritt för att aktivera utökade funktioner för att fÄ ytterligare data om moduler och kÀrnan.
DTrace-teknologin utvecklades för att lösa uppgifter för dynamisk spÄrning av kÀrnor och slutanvÀndarapplikationer i operativsystemet Solaris. DTrace ger anvÀndaren möjlighet att noggrant övervaka systemets beteende och diagnostisera problem i realtid. Under felsökningsprocessen pÄverkar inte DTrace de undersökta applikationerna och har ingen inverkan pÄ deras prestanda, vilket möjliggör analys av körande system i farten. Bland DTrace:s styrkor finns det hög-nivÄsprÄk D, som liknar AWK, vilket gör det betydligt enklare att skapa spÄrningsscenarier Àn med de verktyg för eBPF som anvÀnder sprÄk som C, Python och Lua med externa bibliotek.
Key features:
- TillgÀngliga leverantörer:
- cpc (CPU Performance Counter) â hĂ€mtar information om prestanda.
- dtrace â BEGIN, END och ERROR-handlers som körs före eller efter andra kontroller samt vid fel.
- fbt (Function Boundary Tracing) â spĂ„rning av anrop till kĂ€rnfunktioner.
- lockstat â spĂ„rning av lĂ„stillstĂ„nd.
- pid â spĂ„rning av anrop till funktioner i processer som körs i anvĂ€ndarutrymme.
- proc â spĂ„rning av aktivitet relaterad till processer, sĂ„som start och avslutning (fork, exec, exit, fault).
- profile â sparar prestandastatistik vid angivna tidsintervall.
- sdt, rawtp â statisk kĂ€rnspĂ„rning (SDT â Statically Defined Tracing).
- usdt: statisk applikationsspĂ„rning (USDT â Userspace Statically Defined Tracing)
- sched â övervakning av CPU-resursfördelning.
- sycall â övervakning av systemanrop och avbrott.
- Aggregating insamlade data: möjlighet att anvÀnda aggregatfunktioner (avg, count, llquantize, lquantize, max, min, quantize, stddev och sum) samt aggregatÄtgÀrder (clear, normalize, printa). Stöd för att spara resultaten av aggregatfunktioner i vanliga och associativa arrayer.
- Stöd för spekulativ spÄrning, som tillÄter ephemeral övervakning av data för att avgöra vilka som ska lagras i spÄrningsbufferten och vilka som ska kasseras. Funktioner tillgÀngliga: speculation, speculate, commit och discard.
- Stöd för globala och lokala variabler, TLS (Thread-Local Storage), associativa arrayer och strÀngar.
- TillhandahĂ„llande av inbyggda variabler: arg0 â arg9, args[], caller, curcpu, curthread, epid, errno, execname, gid, id, pid, ppid, probefunc, probemod, probename, probeprov, stackdepth, tid, timestamp, ucaller, uid, uregs[], ustackdepth, walltimestamp.
- Stöd för ÄtgÀrder: exit, freopen, ftruncate, mod, printa, printf, raise, setopt, stack, sym, system, trace, tracemem, uaddr, umod, ustack och usym.
- NĂ€rvaro av inbyggda funktioner: 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.
- NÀrvaro av datarÀknare som inte hamnar i spÄrningsbuffrar.
- Stöd för kompilering av spÄrningsskript i D-sprÄket till BPF-program.
- Förkompilering av BPF-funktioner för bibliotekanrop.
- Alternativet bpflog för att fÄ loggning av verifiering av inlÀsta BPF-program.
- Dynamisk kodgenerering och förkompilering av kod för ÄteranvÀndning i BPF-program.
FörÀndringar i den nya versionen:
- I PID-leverantören, som anvÀnds för att spÄra processer i anvÀndarutrymmet, har stöd för spÄrning av instruktionens utförande lagts till genom att deras förskjutning i koden.
- Stöd för att anvÀnda funktionerna stack() och ustack() för att aggregera insamlade data.
- Möjlighet att ta bort element av vilken typ som helst frÄn associativa arrayer genom att tilldela litteralen 0.
- Tillagd ÄtgÀrd print för att skriva strukturerade data med typannotationer.
- Nya inbyggda funktioner cleanpath(), d_path() och link_ntop() har lagts till.
- TillÀgg av parametern "-xcpu" som gör det möjligt att koppla kontroller till specifika CPU:er.
- TillÀgg av parametern "-xlockmem" för att begrÀnsa minnesstorleken.
- Möjlighet att spara processens spÄrningsdata (USDT) mellan omstarter av dtprobed.
- Stöd för BTF-mekanismen (BPF Type Format) som tillhandahÄller typinformation för typkontroller i BPF-pseudokod.
- Möjlighet att anvÀnda configure-skriptet för byggning.
KĂ€lla: opennet.ru
