Le comité IETF (Internet Engineering Task Force), chargé du développement des protocoles et de l'architecture d'Internet, a terminé la rédaction du RFC sur l'architecture de l'ensemble d'instructions BPF et a publié la spécification associée sous l'identifiant RFC 9669. Le RFC a obtenu le statut de « norme proposée », après quoi le travail pour obtenir le statut de norme de brouillon (Draft Standard) commencera, ce qui signifie en pratique une stabilisation complète et la prise en compte de tous les commentaires formulés.
La spécification publiée décrit un ensemble d'instructions de bytecode BPF et une machine virtuelle de bas niveau utilisée dans la sous-système du noyau Linux eBPF pour exécuter des gestionnaires externes capables de modifier à la volée le comportement du système sans avoir à modifier le code du noyau. En effet, eBPF mise en œuvre un processeur virtuel simple avec son propre ensemble de registres, des instructions de type RISC, une pile et un compteur d'instructions. Les programmes BPF sont généralement créés sur un sous-ensemble du langage C, puis compilés en bytecode, adapté à l'exécution dans une machine virtuelle. La machine virtuelle peut exécuter des programmes BPF à la fois en utilisant l'interprétation et en appliquant la compilation JIT pour traduire le bytecode à la volée en instructions machine.
Il est prévu que la normalisation de l'architecture de l'ensemble d'instructions BPF devienne un stimulant pour la création de réalisations tiers, compatibles avec la machine virtuelle eBPF et capables d'exécuter des programmes BPF écrits pour le noyau Linux. Certains fabricants d'adaptateurs réseau travaillent à la création de machines virtuelles moyens pour l'accélération matérielle de l'exécution des gestionnaires BPF pour les paquets réseau. L'idée est d'élargir les capacités de la sous-système XDP (eXpress Data Path) pour exécuter des programmes BPF non seulement au niveau du pilote réseau, mais aussi du côté de la carte réseau.
Par exemple, la société Netronome a ajouté le support de BPF dans l'adaptateur Netronome Agilio CX SmartNIC et a fourni une collection d'exemples de programmes BPF universels, qui peuvent être exécutés non seulement via le CPU dans le noyau avec n'importe quel pilote compatible XDP, mais aussi du côté de la carte réseau, ce qui permet de prendre des décisions sur le rejet, la modification ou la redirection des paquets sans utiliser les ressources du CPU. Une technologie distincte, XRP (eXpress Resubmission Path), est également en développement, permettant d'utiliser BPF pour transférer certaines opérations avec des disques NVMe, telles que le travail avec des index et l'agrégation de données, au niveau du pilote NVMe ou à un dispositif externe.
Il est noté que l'adoption plus large de telles capacités a été entravée par des risques liés à la compatibilité et à la nécessité de suivre l'état de eBPF dans le noyau. En raison de ces risques, certains fabricants ont reporté l'intégration des moyens d'accélération matérielle BPF dans leurs dispositifs jusqu'à ce qu'un standard soit établi.
Source : opennet.ru
