GCC endi eBPF uchun kompilyatsiya uchun backendni o'z ichiga oladi

GCC kompilyatorlar to'plamiga kiritilgan qabul qilingan Linux yadrosiga o'rnatilgan bayt-kod tarjimoni uchun dasturlarni kompilyatsiya qilish uchun kod eGMP. JIT kompilyatsiyasidan foydalanish tufayli yadro bayt-kodi tezda mashina ko'rsatmalariga tarjima qilinadi va mahalliy kodning ishlashi bilan bajariladi. eBPF qo'llab-quvvatlanadigan yamalar qabul qilingan GCC 10 relizi ishlab chiqilgan filialga.

Bayt-kod yaratish uchun backendga qo'shimcha ravishda, GCC eBPF uchun libgcc portini va yadro tomonidan taqdim etilgan yuklagichlar yordamida eBPF virtual mashinasida kodni bajarishga imkon beruvchi ELF fayllarini yaratish vositalarini o'z ichiga oladi. GCCda eBPF-ni qo'llab-quvvatlash uchun yamoqlar allaqachon ega bo'lgan Oracle muhandislari tomonidan tayyorlangan taqdim etilgan GNU binutils-da eBPF-ni qo'llab-quvvatlash. GDB uchun simulyator va yamoqlar ham ishlab chiqilmoqda, bu sizga eBPF dasturlarini yadroga yuklamasdan disk raskadrovka qilish imkonini beradi.

eBPF uchun dasturlar C tilining kichik to'plamida aniqlanishi, kompilyatsiya qilinishi va yadroga yuklanishi mumkin. Amalga oshirishdan oldin, eBPF tarjimoni ruxsat etilgan ko'rsatmalardan foydalanish uchun bayt kodini tekshiradi va kodga ma'lum qoidalarni qo'yadi (masalan, tsikllar yo'q).
Dastlab, Linuxda eBPF kompilyatsiya qilish uchun LLVM-ga asoslangan vositalar ishlatilgan. GCCda eBPF-ni qo'llab-quvvatlash qiziqarli, chunki u qo'shimcha bog'liqliklarni o'rnatmasdan, Linux yadrosi va eBPF dasturlarini yaratish uchun bitta asboblar to'plamidan foydalanishga imkon beradi.

eBPF dasturlari ko'rinishida siz tarmoq operatsiyalari ishlov beruvchilarini yaratishingiz, trafikni filtrlashingiz, tarmoqli kengligini boshqarishingiz, tizimlarni kuzatishingiz, tizim qo'ng'iroqlarini ushlab turishingiz, kirishni boshqarishingiz, operatsiyalarning chastotasi va vaqtini hisoblashingiz, kprobes/uprobes/tracepoints yordamida kuzatishni amalga oshirishingiz mumkin.

Manba: opennet.ru

a Izoh qo'shish