Архитектура набора команд BPF получила статус предложенного стандарта

Комитет IETF (Internet Engineering Task Force), занимающийся развитием протоколов и архитектуры интернета, завершил формирование RFC для архитектуры набора команд BPF и опубликовал связанную с ним спецификацию под идентификатором RFC 9669. RFC получил статус "Предложенного стандарта", после чего начнётся работа по приданию RFC статуса чернового стандарта (Draft Standard), фактически означающего полную стабилизацию и учёт всех высказанных замечаний.

Опубликованная спецификация описывает набор инструкций байткода BPF и низкоуровневую виртуальную машину, применяемую в подсистеме ядра Linux eBPF для выполнения внешних обработчиков, способных на лету менять поведение системы без необходимости изменения кода ядра. По сути eBPF реализует простейший виртуальный процессор со своим набором регистров, RISC-подобными инструкциями, стеком и счётчиком команд. Программы BPF обычно создаются на подмножестве языка Си, после чего компилируются в байткод, пригодный для выполнения в виртуальной машине. Виртуальная машина может выполнять 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 в свои устройства до формирования стандарта.