Receive Flow Steering (RFS)
Определение
Receive Flow Steering (RFS) — механизм Linux, который направляет обработку входящего потока на CPU, где работает приложение, читающее этот поток. Он использует механизм RPS и таблицы соответствия потоков CPU.
Также ищут: RFS · Receive Flow Steering · привязка обработки потока к CPU
Зачем это знать
RPS распределяет обработку по CPU по хешу потока, но не учитывает, где запущено приложение. RFS добавляет эту связь и старается обрабатывать поток на CPU приложения, чтобы реже переносить данные между кэшами.
Карта понятия
Что подтверждено
RFS дополняет RPS учётом приложения: его цель — направлять обработку входящего потока на CPU, где работает поток приложения, потребляющий эти данные. Для передачи пакета на выбранный CPU RFS использует тот же механизм очереди backlog и пробуждения CPU, что и RPS.
Граница применимости: Linux networking scaling documentation; речь о RFS в сетевом стеке Linux, а не о распределении потоков в любой ОС.
Глобальная таблица rps_sock_flow_table хранит желаемый CPU для потока — CPU, на котором пользовательский код сейчас обрабатывает этот поток; Linux обновляет это соответствие во время recvmsg, sendmsg и tcp_splice_read.
Граница применимости: Linux RFS; таблица и точки обновления описаны в документации сетевого стека.
Для каждой аппаратной очереди приёма RFS использует rps_dev_flow_table, где для потока хранятся текущий CPU обработки и счётчик, позволяющий учитывать ещё не обработанные пакеты.
Граница применимости: Linux RFS; это внутренняя таблица конкретной очереди приёма.
Если приложение переехало на другой CPU, RFS не обязан сразу переносить туда новые пакеты потока: смена CPU откладывается, пока на старом CPU остаются ранее поставленные в очередь пакеты, чтобы снизить риск нарушения порядка.
Граница применимости: Linux RFS; документация также допускает смену, если текущий CPU не задан или offline.
RFS остаётся выключенным, пока не настроены обе таблицы: общий размер rps_sock_flow_entries и rps_flow_cnt для конкретной очереди приёма.
Граница применимости: Linux с CONFIG_RPS; оба параметра должны быть заданы для включения RFS на очереди.
Что проверить
- Проверьте, что RPS доступен и для нужной очереди задан rps_cpus.
- Проверьте rps_sock_flow_entries и rps_flow_cnt: одного общего параметра недостаточно.
- Сопоставьте CPU приложения с CPU, на который RFS направляет обработку потока.
- После настройки сравните задержку, загрузку CPU и сетевую производительность под целевой нагрузкой.
Первоисточники
- Scaling in the Linux Networking Stack
RSS, RPS, RFS и XPS; для этой партии использованы разделы RSS/RPS и замечание об irqbalance.
Связанные понятия
Курсы по теме
Следующий шаг
Сформулируйте задачу и уточните требования к своей системе.
Подготовить подбор с ДелектусомОткроется черновик вопроса. Отправьте его, когда будете готовы.