Fast Routing
Fast Routing основан на имеющейся в ядре Линукс подсистеме XDP и не использует eBPF. Больше информации о XDP можно получить тут.
На стадии, когда образ кадра/пакета перенесен из сетевого адаптера в кольцевой буфер драйвера (т.е. до выделения структуры sk_buff и копирования туда образа кадра), проводится анализ заголовков и ищется подходящий выходной адаптер. При отсутствии маршрута или его неприменимости, обработка образа продолжается в стандартном стеке (XDP_PASS), в ином случае образ отбрасывается (XDP_DROP), или (после модификации заголовков) пересылается прямо в буфер выходного адаптера для его немедленной отправки (XDP_REDIRECT).
Такой подход часто позволяет получить выигрыш в производительности. Но, наряду с таким достоинством, у его использования есть и существенные ограничения:
- Перенапрвляемый кадр минует стандартный сетевой стек. Соответственно, к нему не могут быть применены некоторые процедуры - приоритизация, ограничение пропускной способности, учет состояния соединения, расширенная фильтрация, балансировка исходящей нагрузки и т.п.
- Фильтрация входящего трафика возможна только без учета состояния - на основе правил маршрутизации (black hole) или компоненты Fast iACL.
- Пересылаемый кадр/пакет немедленно отправляется с исходяшего адаптера, что может привести к нарушению порядка доставки пакетов.
- Туннелирование исходящего трафика недоступно.
Fast Routing является некоторым функциональным аналогом Cisco Express Forwarding (CEF).
Внутри Fast Routing реализованы:
- unicast-маршрутизация IPv4 и IPv6
- граничный MPLS-маршрутизатор
- снятие VLAN-тегов
Ведутся работы над реализацией:
- multicast-мвршрутизации
- терминации GRE-и IPIP-туннелей
Прирост производительности в тестах зависит от типа трафика и сценария использования и составляет от 50 до 100% в PPS.
