Skip to content

Концепция

Alex Petrov edited this page Nov 6, 2024 · 6 revisions

Network Interface Card (NIC) – Сетевая карта.

Programmable Input Queue (PIQ) – Входная очередь для пакетов(в виде фреймов) получаемых из входной NIC шины.

Active Packet Selector (APS) – Селектор пакета. Вытаскивает пакет(фреймы пакета) из PIQ и сохраняет его во внутренний буфер (пакетный буфер). Содержимое буфера представляет из себя хардварный эквивалент xdp_md, указатель на которую передается в XDP программу в качестве аргумента. Sephirot читает данные пакетного буфера ASP используя шину данных.

Helper Functions Module (HF) – Модуль функций хэлперов (Хардварные реализации хелперов).

Memory Maps Module (MM) – Модуль для работы с мапами (Областями памяти ядра Линукса).

Sephirot – VLIW процессор с 4-мя параллельными лейнами для выполнения eBPF инструкций. Он представляет из себя конвеер из 4 ступеней: Instruction Fetch (IF), Instruction Decode (ID), Instruction Execute (IE) и commit.

Программа хранится в Instruction Memory (IM) из которой Sephirot по очереди вытаскивает инструкции, кроме этого, у процессора есть стек размером 512B и 11-ать 64b регистров хранимых внутри регистр файла.

Sephirot начинает выполнение программы после того как получит start сигнал от APS, который только что получил новый пакет из PIQ.

Когда Sephirot начинает работать выполняется IF стадия, в течении которой, происходит чтение VLIW инструкции, после чего 4 eBPF инструкции, из которых она состоит присваиваются 4-ем лейнам. На этой стадии, операнды инструкций вытаскиваются из регистр файла. Оставшиеся 3 стадии выполняются параллельно всеми 4-мя лейнами.

На стадии ID, достаются локации в памяти, при условии что, какие-то из eBPF инструкций являются load.

На стадии IE, активируются суб-юниты, используя предварительно вытащенные значения. Суб-юниты, такие как ALU (Arithmetic And Logic Unit), MAU (Memory Access Unit) и CU (Control Unit). ALU реализует все операции описанные eBPF ISA, за исключением того, что он способен производить операции на трех операндах. Задача MAU - абстрагировать доступ к различным областям памяти, таким как стек, пакетный буфер ASP и мапы. CU среализует логику для модификации программного счетчика (PC), то есть позволяет выполнять jump'ы и вызывать функции хелперы.

На стадии commit, результаты IE стадии сохраняются обратно в регистр файл или в одну из областей памяти.

Sephirot прекращает выполнение, как только он получает exit инструкцию. В этом случае, Sephirot сигнализирует ASP, с целью начать перенаправление пакетов.