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

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

2 Ответы

0 голосов
от
Вы могли бы достичь аналогичного результата, используя BPF с опциями сокетов SO_ATTACH_REUSEPORT_CBPF или SO_ATTACH_REUSEPORT_EBPF, чтобы назначить каждому клиенту определенный индекс сокета.     
0 голосов
от
Вы должны взглянуть и настроить RPS: получение пакета управления:   Первым шагом в определении целевого процессора для RPS является вычисление   хеширование потока по адресам или портам пакета (2-х или 4-х хэш   в зависимости от протокола). Это служит последовательным хешем   связанный поток пакета. Хеш предоставляется аппаратно   или будет вычислен в стеке.      ...      С каждой получаемой аппаратной очередью связан список процессоров, с которыми   RPS может ставить в очередь пакеты для обработки. Для каждого полученного пакета   индекс в списке вычисляется из хэша потока по модулю размера   из списка. Индексированный ЦП является целью для обработки пакета,   и пакет ставится в очередь в конец очереди невыполненных работ этого ЦП.      ...      RPS масштабирует обработку получения ядром через процессоры, не вводя   переназначения. Компромисс для отправки всех пакетов из одного потока   к тому же процессору дисбаланс нагрузки процессора, если потоки изменяются по скорости передачи пакетов. Другой вариант - Intel Ethernet Flow Director:   Intel Ethernet FD поддерживает расширенные фильтры, которые направляют полученные пакеты в разные очереди, и обеспечивает жесткий контроль над потоком в платформе. Он сопоставляет потоки и ядра ЦП, где приложение обработки выполняется для соответствия потоков, и поддерживает несколько параметров для гибкой классификации потоков и распределения нагрузки. При работе в режиме Targeting Application Routing (ATR) Intel Ethernet FD, по сути, представляет собой аппаратно-разгрузочную версию управления потоком приема, доступную в системах Linux *, а при работе в этом режиме управление пакетами приема и управление потоками отключено.     
...