Projektet bpftime udvikler en eBPF-implementering, der kører i brugerrum.

Projektet bpftime er blevet præsenteret, som udvikler et runtime og en virtuel maskine til at udføre eBPF-handlere i brugerrummet. Bpftime gør det muligt at udføre komplette eBPF-programmer til tracing og indgreb i processers drift i brugerrummet, der bruger funktioner som uprobe og softwareopfangning af systemopkald. Det bemærkes, at ved at eliminere unødvendige kontekstskift, kan bpftime opnå en ti gange reduktion i omkostningerne sammenlignet med at bruge funktionaliteten uprobe og uretprobe, der tilbydes af Linux-kernen. Derudover forenkler bpftime betydeligt debugging, kan potentielt anvendes på systemer uden Linux-kern og kræver ikke de udvidede privilegier, der er nødvendige for at indlæse eBPF-applikationer i kernen. Projektets kode er skrevet i C/C++ og distribueres under MIT-licensen.

Indfangning af systemopkald og integration af uprobe-tjek er implementeret ved hjælp af teknikken til genindskrivning af eksekverbar kode (binary rewriting), hvor kald til systemopkald, indgangspunkt og lokale funktioner udskiftes med overgange til debugging-handlere ved at modificere maskinkoden i den kørende applikation, hvilket er betydeligt mere effektivt end at organisere indfangning ved hjælp af uprobe på Linux-kernens niveau.

Operationer til at erstatte eller ændre funktioner, tilknytte handlere (hooks) og filtre, omdirigere, blokere eller ændre parametre for systemopkald, fange ind- og udgangspunkt fra funktioner samt indsætte håndtere på vilkårlige forskydninger i koden understøttes. Bpftime kan knyttes til enhver kørende proces i systemet uden at kræve genstart eller ombygning af dem. Bpftime kan indsættes i kørende processer via ptrace og for indlæste processer via LD_PRELOAD.

Som en del af bpftime udvikles et runtime, der muliggør vedhæftning af eBPF-programmer til tracing-punkter for systemopkald og uprobe; virtual machine eBPF med JIT til isoleret udførelse af eBPF-programmer på brugerniveau (yderligere understøtter AOT-kompilering); en baggrundsproces til interaktion med kernen og organisering af kompatibilitet med kernelens uprobe-subsystem (bpftime understøtter indlæsning af eBPF i brugerrum fra kernen for at sikre samarbejde med eBPF-programmer i kernen, der f.eks. bruges til at håndtere kprobe eller opsætte netværksfiltre).

eBPF-virtuelle maskine er implementeret som et plug-in bibliotek og tilbyder et API, der ligner ubpf, hvilket muliggør integrering af eBPF-funktionalitet i andre projekter. For samlet aggregat af data fra flere processer understøttes oprettelse af fælles eBPF-kort, der placeres i delt hukommelse. Sammen med bpftime kan typiske eBPF-behandlere, der er skrevet til brug i kernen, anvendes, og til kompilering kan standardværktøjer baseret på clang og libbpf bruges.

Med bpftime i brugerrum kan systemer til sporing som BCC, bpftrace og Deepflow køre. For eksempel er det demonstreret, hvordan scriptet sslsniff fra BCC-rammeværket bruges til at analysere og gemme krypteret trafik i nginx. I udførte tests faldt nginx' ydeevne med 58% ved at køre sslsniff i kernen, mens flytning af behandleren til brugerrum resulterede i et fald på 12,3%.

Arkitektur til sporing af processer med brug af original eBPF i kernen:

Projektet bpftime udvikler en eBPF-implementering, der kører i brugerrum.

Arkitektur til sporing i brugerrum med brug af bpftime:

Projektet bpftime udvikler en eBPF-implementering, der kører i brugerrum.

Hybridtilstand, hvor bpftime arbejder sammen med eBPF i kernen, f.eks. til opsætning af netværksfiltre eller flytning af enkelte behandlere til brugerrum:

Projektet bpftime udvikler en eBPF-implementering, der kører i brugerrum.

Fremtidige planer inkluderer: mulighed for indsættelse af undtagelser (Fault Injection); hot patching for at ændre logikken eller rette fejl i binære builds; oprettelse af et modul til Nginx, der muliggør udvidelser ved hjælp af eBPF-programmer (f.eks. til dynamisk rutevalg, caching, anvendelse af sikkerhedspolitikker og belastningsfordeling); udvidelse af mulighed for FUSE-subsystemet (f.eks. oprettelse af eBPF-programmer som udvidelser til FS til caching eller adgangsstyring).

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster