Projekt bpftime arendab eBPF-i rakendust, mis töötab kasutajate ruumis

Esitletakse projekti bpftime, mis arendab runtime'i ja virtuaalmasinat eBPF-handlerite täitmiseks kasutaja ruumis. Bpftime võimaldab täies ulatuses kasutada kasutaja ruumis eBPF-programme jälgimiseks ja protsesside sekkumiseks, kasutades selliseid funktsioone nagu uprobe ja süsteemikallutatute programmiline intervjueerimine. Täheldatakse, et tänu liigsete konteksti vahetuste välistamisele võimaldab bpftime saavutada kümnekordset kulu vähenemist võrreldes Linuxi kernelis pakutava uprobe ja uretprobe funktsionaalsusega. Lisaks lihtsustab bpftime oluliselt tõrkeotsingut, seda saab potentsiaalselt kasutada mitte-Linuxi kerneliga süsteemides ning ei nõua kõrgeid õigusi, mis on vajalikud eBPF-rakenduse laadimiseks kernelisse. Projekti kood on kirjutatud C/C++ keeltes ja jagatakse MIT litsentsi alusel.

Süsteemikallutatute peremeeste jälgimise ja uprobe-kontrollide integreerimine on teostatud täidesaatva koodi (binary rewriting) ümberkirjutamise tehnika abil, kus süsteemikallutuste, sisenemispunktide ja kohalike funktsioonide kutsed asendatakse ülemineku suunamisega tõrkeotsingu käitlejatele väl执行元棋牌oodatud rakenduse masinkoodi muutmise kaudu, mis on oluliselt tõhusam kui uprobe tasemel kernelis järjestamine.

Toetatakse funktsioonide asendamise või muutmise, käitlejate (hook-ide) ja filtrite kinnitamise operatsioone, süsteemikallutuste parameetrite ümbersuunamist, blokeerimist või asendamist, sisenemise ja väljumise jälgimist ning käitleja asendamist mis tahes koodis asuvas offset'is. Bpftime saab kinnitada igasugusele töötavale protsessile süsteemis ilma vajaduseta neid ümber käivitada või uuesti ehitada. Bpftime'i asendamine protsessides võib toimuda aktiveeritud protsesside jaoks ptrace'i kaudu ning laaditavate jaoks LD_PRELOAD'i kaudu.

Bpftime'i koostisosana areneb runtime, mis võimaldab eBPF programme kinnitada süsteemikallutuste jälgimispunktidele ja uprobe'ile. virtuiaalmasin eBPF JIT, etten eraldatud eBPF programmide täitmiseks kasutaja protsessi tasandil (lisaks AOT kompileerimise toele); taustaprotsess tuuma suhtlemiseks ja tuuma uprobe alamsüsteemiga ühilduvuse korraldamiseks (bpftime toetab eBPF laadimise režiimi kasutaja ruumi tuumast, et tagada koostöö tuuma eBPF programmidega, mida kasutatakse näiteks kprobe töötlemiseks või võrgufiltrite rakendamiseks).

eBPF virtuaalne masin on välja töötatud plug-in teegina ja pakub API-d, mis sarnaneb ubpf-ile, võimaldades kasutada seda eBPF funktsionaalsuse integreerimiseks teistesse projektidesse. Mitme protsessi andmete kogumiseks toetatakse ühiselt kasutatavate eBPF Map'ide loomist, mis asuvad jagatud mälus. Koos bpftime'iga saab kasutada ka tuumas kirjutatud tüüpilisi eBPF töötlejaid ning kompilatsiooniks saab kasutada standardseid tööriistu, mis põhinevad clang'il ja libbpf'il.

bpftime'i kasutades saavad kasutaja ruumis töötada sellised jälgimissüsteemid nagu BCC, bpftrace ja Deepflow. Näiteks on näidatud BCC raamistiku sslsniff skripti kasutamist krüpteeritud nginx'i liikluse analüüsimiseks ja salvestamiseks. Testides vähenes nginx'i jõudlus sslsniffi töötlemisel tuumas 58%, samas kui töötleja viimisega kasutaja ruumi oli see 12,3%.

Protsesside jälgimise arhitektuur, mis kasutab originaalset eBPF'i tuumas:

Projekt bpftime arendab eBPF-i rakendust, mis töötab kasutajate ruumis

Kasutaja ruumis bpftime'i kasutamise jälgimise arhitektuur:

Projekt bpftime arendab eBPF-i rakendust, mis töötab kasutajate ruumis

Hübriidsüsteem, kus bpftime töötab koos eBPF'iga tuumas, näiteks võrgufilterite seadistamiseks või eraldi töötlejate kasutamiseks kasutaja ruumis:

Projekt bpftime arendab eBPF-i rakendust, mis töötab kasutajate ruumis

Tuleviku plaanide seas on märgitud: vigade asendamise (Fault Injection) võimalus; kuumade patchide (Hot Patching) rakendamine tööloogika muutmiseks või viga parandamiseks binaarses kogumises; Nginx'i mooduli loomine, mis võimaldab luua laiendusi eBPF programmide kaudu (näiteks dünaamilise marsruudi valiku, vahemälu rakendamise, turvapoliitikate rakendamise ja koormuse tasakaalustamise jaoks); FUSE alamsüsteemi võimaluste laiendamine (näiteks eBPF programmidena laienduste loomine failisüsteemi jaoks vahemälu või juurdepääsu juhtimise jaoks).

Allikas: opennet.ru

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster