XDP
Разработанные нами компоненты Fast Routing и Fast iACL основаны на имеющейся в ядре Линукс подсистеме XDP.
Данная подсистема позволяет на стадии, когда образ кадра/пакета только перенесен из сетевого адаптера в кольцевой буфер драйвера (т.е. до выделения структуры sk_buff и копирования туда образа кадра) провести анализ этого образа и принять решение о продолжении его обработки стандартным сетевым стеком (XDP_PASS), прекращения любой дальнейшей обработки и отбрасывания образа кадра (XDP_DROP), или пересылки образа кадра прямо в буфер другого сетевого адаптера для его немедленной отправки (XDP_REDIRECT).
Такие решения имеются, но нормальным для них является использование XDP вместе с другой ядерной подсистемой - eBPF.
В своем решении мы отказались от eBPF и используем в компонентах относительно небольшой код, написанный на C и собранный как часть ядра.
Такой подход позволил получить выигрыш в производительности без увеличения потребления памяти и процессорного времени.
Больше информации о XDP по следущюей ссылке.
