В 1992 г. Пакетный фильтр Беркли (Berkeley Packet Filter, BPF) был представлен в кругах Unix как новый улучшенный фильтр сетевых пакетов. Затем, в 2014 году, он был изменен и внесен в ядро Linux как расширенный BPF (eBPF). После этого разработчики начали использовать его для запуска кода в пользовательском пространстве внутри виртуальной машины (ВМ) на ядре Linux. И тогда это было грандиозным событием. Как сказал эксперт Netflix по производительности компьютеров Брендан Грегг (Brendan Gregg) вместе с eBPF: “наконец-то в Linux пришли супер-возможности. ”
Какие супер-возможности? eBPF дает вам возможность запускать программы в ядре Linux без изменения исходного кода ядра или добавления дополнительных модулей. По сути, он действует как облегченная виртуальная машина внутри пространства ядра Linux. Там программы, которые могут работать с eBPF, работают намного быстрее, используя при этом функции ядра, недоступные для других программ Linux более высокого уровня.
Конечно, запускать приложения, близкие к ядру, даже с использованием eBPF, непросто. Компания Solo.io , занимающаяся разработкой сетевых приложений, представила свой новый проект с открытым исходным кодом – BumbleBee. BumbleBee упрощает создание, упаковку и распространение инструментов eBPF, автоматически генерируя шаблонный код пользовательского пространства при разработке инструментов eBPF.
Считаете, что это немного похоже на Docker, вы правы. Так было задумано. Код BumbleBee также позволяет вам подключать его программы к другим образам рабочих процессов в рамках Open Container Initiative (OCI) для публикации и распространения. Означает ли это, что вы могли бы включить программы eBPF в рабочий процесс непрерывной интеграции/непрерывного развертывания (CI/CD)? Да.
Обычно eBPF используется как безопасный способ улучшить ядро за счет технологий наблюдения, работы в сети и безопасности. Эти программы запускаются в ответ на такие события, как приход сетевых пакетов. Обычно программы eBPF пишутся на языке высокого уровня, таком как C, а затем происходит JIT-компиляция в сборку x86 для максимальной производительности и безопасности.
Архитектура eBPF предполагает, что программы eBPF будут загружаться как байт-код, а ядро имеет структуры данных и форматы, специфичные для каждой версии ядра. Кроме того, упаковка и распространение этих двоичных программ утомительнj, отнимает много времени и подвержено ошибкам. Цель BumbleBee – упростить разработку, упаковку и совместное использование инструментов eBPF, а также ускорить внедрение eBPF.
«В Solo.io мы рассматриваем eBPF как критически важную технологию, которая улучшит работу приложений в сети. В течение последнего года мы работали над использованием технологии eBPF с Gloo Mesh, наш Istio.io предлагает для предприятия сервисную сеть, – сказал Идит Левин (Idit Levine), основатель и генеральный директор Solo.io. – При разработке расширений eBPF мы столкнулись со многими техническими проблемами, особенно в вопросах оптимизации, и это привело нас к разработке BumbleBee. Поскольку мы искренне верим в преимущества eBPF, мы рады поделиться BumbleBee с сообществом, чтобы ускорить внедрение eBPF ».
BumbleBee включает интерфейс командной строки (command-line interface, CLI), который автоматически генерирует код пользовательского пространства для программ eBPF, автоматически отображая карты в виде журналов, показателей и гистограмм. Разработчику остается только позаботиться о написании кода eBPF.
Solo.io построил BumbleBee, используя libbpf – новый набор инструментов для создания программ BPG. С его помощью, например, вы можете создать датчик eBPF с отсутствием код в пользовательском пространстве. BumbleBee автоматически обнаруживает и отображает карты в вашей программе, которые позволяют программам пространства пользователя и ядра обмениваться данными. Это достигается за счет использования специальных соглашений и ключевых слов BPF.
Если вы работаете с eBPF, BumbleBee вас заинтересует. Даже на этом раннем этапе он может помочь вам писать программы eBPF быстрее и безопаснее.