Линус торвальдс и многие разработчики Ядро и разные дистрибутивы выразили свои симпатии к Rust и даже не раз поднимался вопрос о внедрении драйверов на этом языке программирования в ядро Linux.
И по этому поводу уже выпущены различные работы, из которых мы уже упоминали здесь в блоге и мы можем упомянуть, например, эксперимент exitoso из альтернативного набора утилит, coreutils, переписанных на Rust (Сюда входят такие утилиты, как sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln и ls).
Учитывая это, Линус Торвальдс не полностью выразил свою точку зрения в пользу этой инициативы и выразил отрицательные моменты (вы можете ознакомиться с подробностями По следующей ссылке.)
Несмотря на резкую критику со стороны Линуса, работы о реализации Rust в ядре не переставал двигаться дальше и недавно представлена первая версия библиотеки Aya, который позволяет вам создавать драйверы eBPF в Rust, которые запускаются внутри ядра Linux на специальной виртуальной машине JIT.
В отличие от других инструментов разработки EBPF, Ая не использует libbpf и компилятор BCC, Но предлагает собственную реализацию, написанную на Rust который использует пакет libc drawer для прямого доступа к системным вызовам ядра. Для сборки Aya не требуются инструменты на языке C или заголовки ядра.
Для тех, кто не знают о eBPF, они должны знать, что это интерпретатор байт-кода встроено в ядро Linux, которое позволяет создавать обработчики сетевых операций, отслеживать работу системы, перехватывать системные вызовы, управлять доступом, обрабатывать события с указанием времени, вычислять частоту и время операций и отслеживать с помощью kprobes / uprobes / точек трассировки.
Благодаря JIT-компиляции байт-код транслируется в машинные инструкции на лету. и он работает с производительностью собственного кода. XDP предоставляет средства для запуска программ BPF на уровне сетевого драйвера с прямым доступом к буферу пакетов DMA, что позволяет создавать высокопроизводительные драйверы для условий высокой сетевой нагрузки.
О Айе
Из упомянутых ключевых особенностей от Айи мы можем найти, что имеет поддержку BTF (Формат типа BPF), который предоставляет информацию о типе в псевдокоде BPF для проверки и сравнения типов, предоставляемых текущим ядром. Использование BTF позволяет создавать универсальные драйверы eBPF, которые можно использовать без необходимости перекомпилировать их с разными версиями ядра Linux.
Так же хорошо как поддержка вызовов bpf-to-bpf, глобальные переменные и инициализаторы, что позволяет разрабатывать программы для eBPF по аналогии с обычными программами, используя aya в качестве времени выполнения, отменяя функции с учетом работы в eBPF.
С другой стороны, он также имеет поддержка внутренних типов ядра, включая обычные массивы, хэш-карты, стеки, очереди, трассировки стека и структуры для сокетов и отслеживания производительности.
также имеет возможность создавать различные типы программ eBTF, включая программы для фильтрации и управления трафиком, cgroup и различные драйверы сокетов, программы XDP, а также поддержку платформ для неблокирующей обработки асинхронных запросов в токийском режиме и async-std.
Быстрая компиляция, без привязки к компиляции ядра или заголовкам ядра.
Важно отметить, что проект по-прежнему считается экспериментальным, так как API еще не стабилизирован и продолжает развиваться. Также еще не все задуманные функции реализованы.
К концу года разработчики надеются довести функциональность Aya до уровня libbpf. и в январе 2022 г. сформируем первую стабильную версию. Также планируется объединить части Aya, необходимые для написания кода Rust для ядра Linux, с компонентами пользовательского пространства, используемыми для загрузки, присоединения и взаимодействия с программами eBPF.
В конце концов если вам интересно узнать больше об этом вы можете проверьте подробности по следующей ссылке.
Будьте первым, чтобы комментировать