Comitetul IETF (Internet Engineering Task Force), care se ocupă cu dezvoltarea protocoalelor și arhitecturii internetului, a finalizat formularea RFC pentru arhitectura setului de instrucțiuni BPF și a publicat specificația asociată cu identificatorul RFC 9669. RFC a obținut statutul de „Standard propus”, după care va începe lucrul pentru a-i conferi RFC statutul de Standard în probă (Draft Standard), ceea ce înseamnă, de facto, stabilizarea completă și luarea în considerare a tuturor observațiilor exprimate.
Specificatia publicată descrie un set de instrucțiuni de bytecode BPF și o mașină virtuală de nivel inferior, utilizată în subsistemul kernel-ului Linux eBPF pentru a executa handleri externi, capabili să schimbe comportamentul sistemului în timp real fără a fi necesară modificarea codului kernel-ului. Practic, eBPF implementează un procesor virtual simplu cu propriul set de registre, instrucțiuni de tip RISC, un stiv și un contor de instrucțiuni. Programele BPF sunt de obicei scrise într-un subset al limbajului C, după care sunt compilate în bytecode, utilizabil pentru execuție în mașina virtuală. Mașina virtuală poate executa programele BPF atât prin interpretare, cât și utilizând JIT-compilarea pentru a traduce bytecode-ul în timp real în instrucțiuni de mașină.
Se preconizează că standardizarea arhitecturii setului de instrucțiuni BPF va stimula crearea de implementări externe, compatibile cu mașina virtuală eBPF și capabile să execute programele BPF scrise pentru kernel-ul Linux. La dezvoltarea unor astfel de mașini virtuale lucrări colaborează unii producători de adaptoare de rețea, care dezvoltă instrumente pentru accelerarea hardware a executării handlerilor BPF pentru pachetele de rețea. Ideea este de a extinde capabilitățile subsistemului XDP (eXpress Data Path) pentru a executa programe BPF nu doar la nivel de driver de rețea, ci și în partea cărții de rețea.
De exemplu, compania Netronome a adăugat suport pentru BPF în adaptorul Netronome Agilio CX SmartNIC și a oferit o colecție de exemple de programe universale BPF care pot fi executate nu doar cu ajutorul CPU-ului în nucleul cu orice driver compatibil XDP, ci și pe partea plăcii de rețea, ceea ce permite luarea deciziilor privind eliminarea, modificarea sau redirecționarea pachetelor fără a consuma resurse CPU. Se dezvoltă, de asemenea, tehnologia XRP (eXpress Resubmission Path), care permite utilizarea BPF pentru a delega unele operațiuni cu dispozitive NVMe, cum ar fi lucrul cu indecși și agregarea datelor, în nivelul driverului NVMe sau pe un dispozitiv extern.
Se observă că o adopție mai extinsă a acestor capacități a fost împiedicată până acum de riscurile legate de compatibilitate și de necesitatea de a urmări starea eBPF în nucleu. Din cauza acestor riscuri, unii producători au amânat integrarea mecanismelor de accelerare hardware BPF în dispozitivele lor până la formularea unui standard.
Sursa: opennet.ro
