GCC در حال حاضر شامل یک backend برای کامپایل به eBPF است

در مجموعه کامپایلر GCC گنجانده شده است به تصویب رسید کدی برای کامپایل کردن برنامه ها برای مفسر بایت کد ساخته شده در هسته لینوکس eGMP. به لطف استفاده از تدوین JIT ، کد هسته هسته در پرواز به دستورالعمل های دستگاه ترجمه شده و با عملکرد کد بومی اجرا می شود. پچ هایی با پشتیبانی از eBPF پذیرفته شده به شاخه ای که نسخه GCC 10 از آن توسعه یافته است.

علاوه بر یک پس زمینه برای تولید بایت ، GCC شامل یک درگاه LiBGCC برای EBPF و ابزارهایی برای تولید پرونده های ELF است که باعث می شود کد در دستگاه مجازی EBPF با استفاده از لودرهای ارائه شده با هسته امکان پذیر شود. وصله هایی برای پشتیبانی از eBPF در GCC توسط مهندسانی از Oracle تهیه شده است که قبلاً این کار را انجام داده بودند ارائه شده است پشتیبانی eBPF در GNU binutils. یک شبیه ساز و وصله برای GDB نیز در حال توسعه است که به شما امکان می دهد برنامه های eBPF را بدون بارگذاری در هسته اشکال زدایی کنید.

برنامه های eBPF را می توان در زیر مجموعه ای از زبان C تعریف کرد، کامپایل و در هسته بارگذاری کرد. قبل از اجرای ، مترجم EBPF کد BYTECODE را برای استفاده از دستورالعمل های مجاز بررسی می کند و قوانین خاصی را به کد تحمیل می کند (به عنوان مثال ، بدون حلقه).
در ابتدا از ابزارهای مبتنی بر LLVM برای کامپایل eBPF در لینوکس استفاده شد. پشتیبانی EBPF در GCC جالب است زیرا به شما امکان می دهد بدون نصب وابستگی های اضافی از یک ابزار ابزار برای ساخت برنامه های هسته لینوکس و EBPF استفاده کنید.

در قالب برنامه های EBPF ، می توانید دستیار عملیات شبکه ، ترافیک فیلتر ، مدیریت پهنای باند ، سیستم های مانیتور ، تماس های سیستم رهگیری ، کنترل کنترل ، شمارش فرکانس و زمان عملیات را ایجاد کرده و با استفاده از KPROBES/UPROBES/TRACEPOINT انجام دهید.

منبع: opennet.ru

اضافه کردن نظر