Серверные сети

Receive Flow Steering (RFS)

Определение

Receive Flow Steering (RFS) — механизм Linux, который направляет обработку входящего потока на CPU, где работает приложение, читающее этот поток. Он использует механизм RPS и таблицы соответствия потоков CPU.

Также ищут: RFS · Receive Flow Steering · привязка обработки потока к CPU

Зачем это знать

RPS распределяет обработку по CPU по хешу потока, но не учитывает, где запущено приложение. RFS добавляет эту связь и старается обрабатывать поток на CPU приложения, чтобы реже переносить данные между кэшами.

Связи из словаря

Карта понятия

Доказательная часть

Что подтверждено

  1. RFS дополняет RPS учётом приложения: его цель — направлять обработку входящего потока на CPU, где работает поток приложения, потребляющий эти данные. Для передачи пакета на выбранный CPU RFS использует тот же механизм очереди backlog и пробуждения CPU, что и RPS.

    Граница применимости: Linux networking scaling documentation; речь о RFS в сетевом стеке Linux, а не о распределении потоков в любой ОС.

  2. Глобальная таблица rps_sock_flow_table хранит желаемый CPU для потока — CPU, на котором пользовательский код сейчас обрабатывает этот поток; Linux обновляет это соответствие во время recvmsg, sendmsg и tcp_splice_read.

    Граница применимости: Linux RFS; таблица и точки обновления описаны в документации сетевого стека.

  3. Для каждой аппаратной очереди приёма RFS использует rps_dev_flow_table, где для потока хранятся текущий CPU обработки и счётчик, позволяющий учитывать ещё не обработанные пакеты.

    Граница применимости: Linux RFS; это внутренняя таблица конкретной очереди приёма.

  4. Если приложение переехало на другой CPU, RFS не обязан сразу переносить туда новые пакеты потока: смена CPU откладывается, пока на старом CPU остаются ранее поставленные в очередь пакеты, чтобы снизить риск нарушения порядка.

    Граница применимости: Linux RFS; документация также допускает смену, если текущий CPU не задан или offline.

  5. RFS остаётся выключенным, пока не настроены обе таблицы: общий размер rps_sock_flow_entries и rps_flow_cnt для конкретной очереди приёма.

    Граница применимости: Linux с CONFIG_RPS; оба параметра должны быть заданы для включения RFS на очереди.

Перед спецификацией

Что проверить

  1. Проверьте, что RPS доступен и для нужной очереди задан rps_cpus.
  2. Проверьте rps_sock_flow_entries и rps_flow_cnt: одного общего параметра недостаточно.
  3. Сопоставьте CPU приложения с CPU, на который RFS направляет обработку потока.
  4. После настройки сравните задержку, загрузку CPU и сетевую производительность под целевой нагрузкой.
Открытые основания

Первоисточники

  • Документация1
  • Официальная документация
    Scaling in the Linux Networking Stack Linux Kernel · Linux kernel documentation; страница проверена 19 сентября 2026 года · проверено

    RSS, RPS, RFS и XPS; для этой партии использованы разделы RSS/RPS и замечание об irqbalance.

Карта знаний

Связанные понятия

Из знания — в навык

Курсы по теме

Следующий шаг

Сформулируйте задачу и уточните требования к своей системе.

Подготовить подбор с Делектусом

Откроется черновик вопроса. Отправьте его, когда будете готовы.

Сообщить об ошибке

Опишите проблему — постараемся исправить как можно скорее.

Спасибо!

Получили ваше сообщение.
Подтвердите действие