De Internet Engineering Task Force (IETF), die verantwoordelijk is voor de ontwikkeling van internetprotocollen en -architectuur, heeft de RFC voor de BPF-instructiesetarchitectuur afgerond en de bijbehorende specificatie gepubliceerd onder de identificatie RFC 9669. De RFC heeft de status gekregen van een "Voorgestelde Standaard", waarna het werk zal beginnen om de RFC de status van een ontwerpstandaard te geven, wat feitelijk betekent volledige stabilisatie en rekening houdend met alle gemaakte opmerkingen.
De gepubliceerde specificatie beschrijft een set BPF-bytecode-instructies en een virtuele machine op laag niveau die in het Linux-kernelsubsysteem eBPF wordt gebruikt om externe handlers uit te voeren die het systeemgedrag dynamisch kunnen wijzigen zonder dat de kernelcode hoeft te worden aangepast. In essentie implementeert eBPF een eenvoudige virtuele processor met een eigen registerset, RISC-achtige instructies, stack en programmateller. BPF-programma's worden doorgaans geschreven in een subset van de C-taal en vervolgens gecompileerd naar bytecode die geschikt is voor uitvoering in Linux. virtuele machineDe virtuele machine kan BPF-programma's uitvoeren met behulp van interpretatie of just-in-time (JIT) compilatie om bytecode direct om te zetten in machine-instructies.
Naar verwachting zal de standaardisatie van de BPF-instructiesetarchitectuur de ontwikkeling van implementaties van derden stimuleren die compatibel zijn met de eBPF-virtuele machine en die BPF-programma's kunnen uitvoeren die voor de Linux-kernel zijn geschreven. Er wordt momenteel gewerkt aan de ontwikkeling van dergelijke implementaties. virtuele machines Sommige fabrikanten van netwerkadapters ontwikkelen hardwareversnellingstools voor BPF-netwerkpakketverwerkers. Het idee is om de mogelijkheden van het XDP-subsysteem (eXpress Data Path) uit te breiden, zodat BPF-programma's niet alleen op het niveau van de netwerkdriver, maar ook op de netwerkadapter zelf kunnen worden uitgevoerd.
Netronome heeft bijvoorbeeld BPF-ondersteuning toegevoegd aan de Netronome Agilio CX SmartNIC-adapter en een verzameling voorbeelden geleverd van universele BPF-programma's die niet alleen kunnen worden uitgevoerd met behulp van de CPU in de kernel met een XDP-compatibel stuurprogramma, maar ook op de netwerkkaart. kant, waarmee u beslissingen kunt nemen over het laten vallen, wijzigen of omleiden van pakketten zonder CPU-bronnen te verspillen. Daarnaast wordt er XRP-technologie (eXpress Resubmission Path) ontwikkeld, die het mogelijk maakt om met BPF bepaalde handelingen met NVMe-schijven, zoals het werken met indexen en data-aggregatie, naar het NVMe-stuurprogrammaniveau of naar een extern apparaat te verplaatsen.
Opgemerkt wordt dat een bredere acceptatie van dergelijke mogelijkheden tot nu toe wordt belemmerd door risico's die verband houden met compatibiliteitsproblemen en de noodzaak om de status van eBPF in de kernel te monitoren. Vanwege deze risico's hebben sommige fabrikanten de integratie van BPF-hardwareversnelling in hun apparaten uitgesteld totdat er een standaard is vastgesteld.
Bron: opennet.ru
