До складу GCC прийнято бекенд для компіляції в eBPF

До складу набору компіляторів GCC ухвалено код для компіляції програм для вбудованого в ядро ​​Linux інтерпретатора байткоду eGMP. Завдяки застосуванню JIT-компіляції, в ядрі байткод на льоту транслюється в машинні інструкції та виконується з продуктивністю нативного коду. Патчі з підтримкою eBPF прийняті у гілку, з урахуванням якої розвивається випуск GCC 10.

Крім бекенда для генерації байткоду в GCC включений порт libgcc для eBPF і засоби для формування ELF-файлів, що дають можливість виконати код у віртуальній машині eBPF з використанням завантажувачів, що надаються ядром. Патчі для підтримки eBPF у GCC підготовлені інженерами з компанії Oracle, які до цього вже забезпечили Підтримка eBPF в GNU binutils. У розробці також є симулятор і патчі для GDB, які дозволять налагоджувати eBPF-програми без завантаження в ядро.

Програми для eBPF можуть визначатися на підмножині мови C, компілюватися та завантажуватись у ядро. Перед виконанням інтерпретатор eBPF перевіряє байткод щодо застосування дозволених інструкцій і накладає певні правила на код (наприклад, відсутність циклів).
Спочатку компіляції eBPF в Linux застосовувався інструментарій з урахуванням LLVM. Підтримка eBPF у GCC представляє інтерес тим, що дозволяє використовувати один інструментарій для збирання ядра Linux та eBPF-програм, без встановлення додаткових залежностей.

У формі програм eBPF можна створювати обробники мережевих операцій, фільтрувати трафік, керувати пропускною спроможністю, відстежувати роботу систем, перехоплювати системні виклики, контролювати доступ, підраховувати частоту та час виконання операцій, виконувати трасування за допомогою kprobes/uprobes/tracepoints.

Джерело: opennet.ru

Додати коментар або відгук