Mradi wa bpftime unakuza utekelezaji wa nafasi ya mtumiaji wa eBPF

Mradi wa bpftime umewasilishwa, ambao hutengeneza muda wa kukimbia na mashine pepe ya kutekeleza vidhibiti vya eBPF katika nafasi ya mtumiaji. Bpftime huruhusu ufuatiliaji wa eBPF na programu za kuingilia kati kufanya kazi kikamilifu katika nafasi ya mtumiaji, kwa kutumia vipengele kama vile uprobe na uzuiaji wa simu wa mfumo wa kiprogramu. Inabainika kuwa kwa kuondoa swichi za muktadha zisizo za lazima, bpftime inaweza kufikia punguzo mara kumi la juu ikilinganishwa na kutumia utendakazi wa uprobe na uretprobe unaotolewa na kernel ya Linux. Kwa kuongeza, bpftime hurahisisha sana utatuzi, inaweza kutumika kwenye mifumo isiyo na kinu cha Linux, na haihitaji mapendeleo ya juu yanayohitajika kupakia programu ya eBPF kwenye kernel. Nambari ya mradi imeandikwa katika C/C++ na inasambazwa chini ya leseni ya MIT.

Kukatiza simu za mfumo na ujumuishaji wa ukaguzi wa uprobe hutekelezwa kwa kutumia mbinu ya kuandika tena nambari inayoweza kutekelezeka (kuandika tena kwa jozi), ambapo simu kwa simu za mfumo, sehemu za kuingilia na utendakazi wa ndani hubadilishwa na mpito kwa vidhibiti vya utatuzi kupitia urekebishaji wa nambari ya mashine ya. Utekelezaji wa programu, ambayo ni nzuri zaidi kuliko kupanga uingiliaji kwa kutumia uprobe katika kiwango cha kernel ya Linux.

Uendeshaji wa kubadilisha au kubadilisha vitendaji, kuambatisha vishikilizi (kulabu) na vichungi, kuelekeza kwingine, kuzuia au kubadilisha vigezo vya simu za mfumo, kuzuia sehemu za utendakazi za kuingia na kutoka, pamoja na kubadilisha kidhibiti kwa kukabiliana kiholela katika msimbo zinaungwa mkono. Bpftime inaweza kuambatishwa kwa mchakato wowote unaoendesha kwenye mfumo bila hitaji la kuwasha upya au kuujenga upya. Ubadilishaji wa bpftime katika michakato unaweza kufanywa kwa ajili ya kuendesha michakato kupitia ptrace, na kwa upakiaji kupitia LD_PRELOAD.

Muda wa utekelezaji unatengenezwa ndani ya muda wa utekelezaji wa bpftime ambao unaruhusu programu za eBPF kuunganishwa kwenye sehemu za kufuatilia simu za mfumo na uprobe; mashine pepe eBPF yenye JIT kwa ajili ya utekelezaji wa pekee wa programu za eBPF katika kiwango cha mchakato wa mtumiaji (mkusanyiko wa AOT unasaidiwa pia); mchakato wa usuli wa kuingiliana na kiini na kutoa utangamano na mfumo mdogo wa uprobe wa kiini (bpftime inasaidia upakiaji wa eBPF kwenye nafasi ya mtumiaji kutoka kiini ili kutoa ushirikiano na programu za eBPF kwenye kiini, kinachotumika, kwa mfano, kusindika kprobe au kuanzisha vichujio vya mtandao).

Mashine pepe ya eBPF imeundwa kama maktaba ya programu-jalizi na hutoa API sawa na ubpf, ambayo inaruhusu itumike kujumuisha utendakazi wa eBPF katika miradi mingine. Kwa ujumlishaji wa muhtasari wa data kutoka kwa michakato kadhaa, uundaji wa Ramani za pamoja za eBPF zilizo katika kumbukumbu iliyoshirikiwa unatumika. Pamoja na bpftime, vidhibiti vya kawaida vya eBPF vilivyoandikwa kwa ajili ya matumizi kwenye kernel vinaweza kutumika, na zana za kawaida za clang na libbpf zinaweza kutumika kwa kuunganisha.

Kwa bpftime, mifumo ya ufuatiliaji kama vile BCC, bpftrace na Deepflow inaweza kutekelezwa katika nafasi ya mtumiaji. Kwa mfano, tulionyesha matumizi ya hati ya sslsniff kutoka kwa mfumo wa BCC ili kuchanganua na kuhifadhi trafiki iliyosimbwa katika nginx. Katika majaribio yaliyofanywa, utendakazi wa nginx hupungua kwa 58% wakati wa kutekeleza sslsniff kwenye upande wa kernel, na kwa 12.3% wakati wa kuhamisha kidhibiti kwenye nafasi ya mtumiaji.

Mchakato wa kutafuta usanifu kwa kutumia eBPF ya asili kwenye kernel:

Mradi wa bpftime unakuza utekelezaji wa nafasi ya mtumiaji wa eBPF

Usanifu wa ufuatiliaji wa nafasi ya mtumiaji kwa kutumia bpftime:

Mradi wa bpftime unakuza utekelezaji wa nafasi ya mtumiaji wa eBPF

Hali ya mseto, ambayo bpftime hufanya kazi pamoja na eBPF kwenye kernel, kwa mfano, kusakinisha vichujio vya mtandao au kusogeza vidhibiti vya mtu binafsi kwenye nafasi ya mtumiaji:

Mradi wa bpftime unakuza utekelezaji wa nafasi ya mtumiaji wa eBPF

Mipango ya siku zijazo ni pamoja na: uwezo wa kubadilisha vighairi (Sindano ya Makosa); patching moto (Moto Patching) kubadili mantiki ya uendeshaji au kusahihisha makosa katika makusanyiko ya binary; kuunda moduli ya Nginx ambayo inakuwezesha kuunda upanuzi kwa kutumia programu za eBPF (kwa mfano, kwa uteuzi wa njia zinazobadilika, caching, kutumia sera za usalama na kusawazisha mzigo); kupanua uwezo wa mfumo mdogo wa FUSE (kwa mfano, kuunda upanuzi kwa FS kwa caching au udhibiti wa upatikanaji kwa njia ya programu za eBPF).

Chanzo: opennet.ru

Kuongeza maoni