Комитетът IETF (Internet Engineering Task Force), който отговаря за развитието на интернет протоколите и архитектурата, завърши формулирането на RFC за архитектурата на командния набор BPF и публикува свързаната спецификация с идентификатор RFC 9669. RFC получи статус "Предложен стандарт", след което ще започне работа по придаването на статуса на RFC черновен стандарт (Draft Standard), което фактически означава пълна стабилизация и отчитане на всички направени забележки.
Публикуваната спецификация описва набора от инструкции за байткод BPF и нискониво виртуална машина, използвана в подсистемата на ядрото Linux eBPF за изпълнение на външни обработчици, способни на моментално изменение на поведението на системата без необходимост от изменения в кода на ядрото. По същество eBPF реализира опростен виртуален процесор със свой набор от регистри, инструкции в стил RISC, стек и брояч на команди. BPF програмите обикновено се създават на подмножество на езика C, след което се компилират в байткод, пригоден за изпълнение в виртуална машина. Виртуалната машина може да изпълнява BPF програми както с интерпретация, така и чрез JIT компилация за транслация на байткода в машинни инструкции в реално време.
Предполага се, че стандартизацията на архитектурата на командния набор BPF ще бъде стимул за създаването на трета страна реализации, съвместими с виртуалната машина eBPF и способни да изпълняват BPF програми, написани за ядрото на Linux. Върху създаването на подобни виртуални машини работят някои производители на мрежови адаптери, които развиват средства за хардуерно ускоряване на изпълнението на BPF обработчиците на мрежови пакети. Идеята е да се разширят възможностите на подсистемата XDP (eXpress Data Path) за изпълнение на BPF програми не само на ниво мрежов драйвер, но и от страна на мрежовата карта.
Например, компания Netronome добави поддръжка на BPF в адаптера Netronome Agilio CX SmartNIC и предостави колекция от примери на универсални BPF програми, които могат да се изпълняват не само с CPU в ядрото с всеки XDP-совместим драйвер, но и на страната на мрежовата карта, което позволява вземането на решения за отхвърляне, променяне или пренасочване на пакети без да се харчат ресурси на CPU. Отделно се развива технологията XRP (eXpress Resubmission Path), която позволява да се използва BPF за изнасяне на някои операции с NVMe хранилища, като работа с индекси и агрегация на данни, на ниво NVMe драйвер или на външно устройство.
Отбелязва се, че по-широкото внедряване на подобни възможности все още е затруднено от рисковете, свързани с нарушаване на съвместимостта и необходимостта от проследяване на състоянието на eBPF в ядрото. Поради тези рискове някои производители отложиха включването на средства за хардуерно ускорение на BPF в своите устройства до формирането на стандарт.
Източник: opennet.ru
