اولین نسخه از کتابخانه Aya ارائه شده است که به شما امکان می دهد کنترل کننده های eBPF را به زبان Rust ایجاد کنید که در داخل هسته لینوکس در یک ماشین مجازی ویژه با JIT اجرا می شوند. برخلاف دیگر ابزارهای توسعه eBPF، Aya از libbpf و کامپایلر bcc استفاده نمیکند، بلکه پیادهسازی خود را به زبان Rust ارائه میکند که از بسته libc crate برای دسترسی مستقیم به تماسهای سیستم هسته استفاده میکند. Building Aya به ابزار زبان C یا فایلهای هدر هسته نیاز ندارد. کد کتابخانه تحت مجوز MIT و Apache 2.0 توزیع شده است.
ویژگی های کلیدی:
- پشتیبانی از BTF (BPF Type Format)، که اطلاعات نوع را در شبه کد BPF برای بررسی نوع و نگاشت انواع ارائه شده توسط هسته فعلی فراهم می کند. استفاده از BTF این امکان را فراهم می کند که کنترل کننده های جهانی eBPF ایجاد شود که می توانند بدون کامپایل مجدد با نسخه های مختلف هسته لینوکس استفاده شوند.
- پشتیبانی از تماسهای «bpf-to-bpf»، متغیرهای سراسری و اولیهسازها، که به شما امکان میدهد برنامههایی را برای eBPF به روشی مشابه برنامههای معمولی طراحی کنید که از aya به عنوان زمان اجرا استفاده میکنند که با در نظر گرفتن کار در eBPF، توابع را دوباره تعریف میکند.
- پشتیبانی از انواع مختلف هسته، از جمله آرایههای معمولی، نقشههای هش، پشتهها، صفها، ردیابیهای پشته، و همچنین ساختارهای ردیابی سوکت و عملکرد.
- امکان ایجاد انواع برنامه های eBTF از جمله برنامه های فیلترینگ و مدیریت ترافیک، cgroup handlers و عملیات های مختلف سوکت، برنامه های XDP.
- پشتیبانی از پلتفرم ها برای پردازش درخواست ناهمزمان در حالت غیر مسدود کننده tokio و async-std.
- مونتاژ سریع، بدون اتصال به اسمبلی هسته و فایل های هدر هسته.
این پروژه هنوز آزمایشی در نظر گرفته می شود - API هنوز تثبیت نشده است و به توسعه خود ادامه می دهد. همچنین تمام فرصت های برنامه ریزی شده هنوز محقق نشده است. تا پایان سال، توسعه دهندگان انتظار دارند که عملکرد Aya را با libbpf برابر کنند و در ژانویه 2022 اولین نسخه پایدار را ایجاد کنند. همچنین برنامههایی برای ترکیب بخشهای Aya مورد نیاز برای نوشتن کد Rust برای هسته لینوکس با اجزای فضای کاربر مورد استفاده برای بارگذاری، پیوست و تعامل با برنامههای eBPF وجود دارد.
به یاد بیاوریم که eBPF یک مفسر بایت کد است که در هسته لینوکس تعبیه شده است، که به شما امکان می دهد کنترل کننده های عملیات شبکه ایجاد کنید، عملیات سیستم را نظارت کنید، تماس های سیستم را رهگیری کنید، دسترسی را کنترل کنید، رویدادها را پردازش کنید با حفظ زمان بندی، محاسبه فرکانس و زمان عملیات، انجام ردیابی با استفاده از kprobes/uprobes/tracepoints. به لطف استفاده از کامپایل JIT، بایت کد به سرعت به دستورالعمل های ماشین ترجمه می شود و با عملکرد کد بومی اجرا می شود. XDP ابزارهایی را برای اجرای برنامه های BPF در سطح درایور شبکه با قابلیت دسترسی مستقیم به بافر بسته DMA فراهم می کند که به شما امکان می دهد پردازنده هایی با کارایی بالا برای کار تحت بار سنگین شبکه ایجاد کنید.
منبع: opennet.ru