Receive Packet Steering (RPS)
Определение
Receive Packet Steering (RPS) — механизм Linux, который после аппаратного приёма направляет дальнейшую обработку пакета на выбранный CPU. Это программное дополнение к RSS.
Также ищут: Linux RPS · Receive Packet Steering · программное распределение обработки пакетов
Зачем это знать
RPS может распределить сетевую обработку по большему числу CPU, даже если аппаратных очередей мало. Но он добавляет межпроцессорные прерывания, поэтому включать его без проверки текущей схемы RSS не стоит.
Карта понятия
Что подтверждено
RPS работает программно и выбирает CPU для обработки сетевого протокола после нижней части обработчика приёма; RSS выбирает аппаратную очередь и CPU, обслуживающий её прерывание, раньше в тракте.
Граница применимости: Linux networking stack; сравнение относится к описанным механизмам RSS/RPS, а не ко всем способам steering.
Документация Linux отмечает, что RPS можно использовать с любой сетевой картой, потому что решение о CPU принимается программно.
Граница применимости: Linux с CONFIG_RPS; доступность конкретных настроек зависит от ядра и драйвера.
Для каждой аппаратной очереди приёма Linux предоставляет список CPU RPS через /sys/class/net/ИМЯ/queues/rx-N/rps_cpus.
Граница применимости: Linux с CONFIG_RPS; файл содержит bitmap CPU для конкретной очереди.
Если rps_cpus для очереди равен нулю, RPS отключён; это значение по умолчанию, и пакет продолжает обрабатываться на CPU, обслужившем прерывание.
Граница применимости: Linux networking scaling documentation; речь о RPS для конкретной очереди приёма.
Если RSS уже сопоставляет отдельную аппаратную очередь каждому CPU, документация Linux называет RPS вероятно избыточным; при меньшем числе аппаратных очередей RPS может быть полезен.
Граница применимости: Раздел Suggested Configuration; это рекомендация, а не гарантия производительности для любой нагрузки.
Что проверить
- Сначала проверьте аппаратные очереди и распределение RSS.
- Для каждой очереди прочитайте rps_cpus и зафиксируйте разрешённые CPU.
- Не включайте RPS только ради большего числа CPU: сравните задержку, загрузку CPU и сетевую производительность до и после.
- На NUMA-системе учитывайте, где обслуживается IRQ и где работает приложение.
Первоисточники
- Scaling in the Linux Networking Stack
RSS, RPS, RFS и XPS; для этой партии использованы разделы RSS/RPS и замечание об irqbalance.
Связанные понятия
Курсы по теме
Следующий шаг
Сформулируйте задачу и уточните требования к своей системе.
Подготовить подбор с ДелектусомОткроется черновик вопроса. Отправьте его, когда будете готовы.