Получить пакеты UDP от одного и того же клиента, доставленные на тот же процесс сервера, при использовании SO_REUSEPORT? - PullRequest
0 голосов
/ 04 июля 2019

Я пишу многопроцессорный UDP-сервер, который использует SO_REUSEPORT, чтобы позволить нескольким рабочим процессам прослушивать один и тот же порт.

Есть ли способ сообщить ядру, что я хочу последовательную доставку пакетовк процессам, основанным на адресе источника пакетов?

(Сервер должен содержать небольшое состояние для каждого адреса источника. Было бы проще иметь локальное для процессов состояние, а не для состояниябыть разделенным между процессами.)

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Вы можете достичь аналогичного результата, используя BPF с SO_ATTACH_REUSEPORT_CBPF или SO_ATTACH_REUSEPORT_EBPF опциями сокетов , чтобы назначить каждому клиенту определенный индекс сокета.

1 голос
/ 09 июля 2019

Вы должны взглянуть и настроить RPS: управление пакетами приема :

Первый шаг в определении целевого CPU для RPS - это вычисление хэша потока по пакету.адреса или порты (2-х или 4-х хэш в зависимости от протокола).Это служит согласованным хешем связанного потока пакета.Хеш предоставляется аппаратно или вычисляется в стеке.

...

Каждая очередь аппаратного приема имеет связанный список процессоров, к которым RPS может ставить пакеты в очередь для обработки.Для каждого принятого пакета индекс в списке вычисляется из хэша потока по модулю размера списка.Индексированный ЦП является целью для обработки пакета, и пакет ставится в очередь в конец очереди невыполненных работ этого ЦП.

...

RPS масштабирует обработку получения ядра между ЦП без введения переупорядочения,Компромиссом при отправке всех пакетов из одного и того же потока на один и тот же ЦП является дисбаланс загрузки ЦП, если потоки различаются по скорости передачи пакетов.

Другой вариант - Intel Ethernet Flow Director :

Intel Ethernet FD поддерживает расширенные фильтры, которые направляют полученные пакеты в разные очереди и обеспечивают жесткий контроль потока в платформе.Он сопоставляет потоки и ядра ЦП, где приложение обработки выполняется для соответствия потоков, и поддерживает несколько параметров для гибкой классификации потоков и распределения нагрузки.При работе в режиме Targeting Application Routing (ATR) Intel Ethernet FD, по сути, представляет собой аппаратно-разгрузочную версию управления потоком приема, доступную в системах Linux *, а при работе в этом режиме управление пакетами приема и управление потоками отключено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...