Комитет 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
