Опубликованная спецификация описывает набор инструкций байткода 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 в свои устройства до формирования стандарта.
Источник: http://www.opennet.ru/opennews/art.shtml?num=62187