Network Configuration
Offloading features allows the network card to handle certain functions of the packet handling process reducing the overall cpu consumption, ideally allowing more cpu time for other tasks and your games.
- Adaptive Inter-Frame Spacing
- Disabled
- Disabled
- Disabling this can cause dropped frames in some situations, reducing throughput if a link partner cannot sustain the data transfer rate. In particular, video streaming may become untenable.
- If enabled, only link partners supporting flow control frames will benefit.
- See Technical Reference: Tuning Throughput Performance for Intel® Ethernet Adapters.
- My personal recommendation is to set this to Medium or leave it on Adaptive (default)
- Try medium for a week or more then consider changing it if you believe something to be wrong from a network perspective.
- A Medium interrupt moderataion value provided an acceptable DPC/ISR latency during both fully loaded 1Gbps TCP network simulation and also UDP communications during real world scenarios and during iperf tests which matched the traffic characteristics of the simulated games, Counter-Strike CS:GO and CS 1.6.
- Many will recommend turning interrupt moderation off (including this one originally) however the increased interrupt rate can impact the users experience (perceived input response) during higher load where there is a combined use of realtime audio, gpu workloads, application and OS dependant cpu usage, usb device input and network throughput. If the intended performance measurement was not primarily reliant on user input response and strictly network/cpu based workload then having interrupt moderataion off would likely be ideal for lowest possible latency.
- RX & TX Enabled
- Disabled
- Disabled
- Disabled
- Enabled
- N Queues, Use 2 or more queues when available.
- Both Enabled
- Increase if you have extra memory to spare, recommended 1024 or higher.
- A lower value will results in dropped packets and decreased performance however a higher value could result in increased buffering during certain workloads, as per Microsoft’s Performance Tuning Network Adapters guide.
- Monitor your dropped packet rates during gameplay and adjust if necessary, a slightly higher value from the default should not result in increased buffering unless the traffic conditions reduce the rate at which data can be transmitted, often due to high load or congestion.
- Increase if you have extra memory to spare, recommended 1024 or higher.
- A lower value will results in dropped packets and decreased performance however a higher value could result in increased buffering during certain workloads, as per Microsoft’s Performance Tuning Network Adapters guide
- Monitor your dropped packet rates during gameplay and adjust if necessary, a slightly higher value from the default should not result in increased buffering unless the traffic conditions reduce the rate at which data can be transmitted, often due to high load or congestion.
- Enabled
- Enabled
- Enabled
- Enabled
- Disable all power saving options in drivers and for the adapter, more options are available in the latest Intel drivers sets.
For more information on these settings see the Intel’s and Microsoft’s Network Subsystem Performance Tuning support guides which includes performance tuning network adapters and low latency packet processing in the Network section of the Technical References page.
Realtek Network Adapter Settings
Realtek adapters and their drivers have shown to have worst DPC/ISR latency even after optimizations as noted in the Intel section above, however the Intel recommended settings above still apply to Realtek adapters. Will update this section and related settings if further research and evidence is accumulated to show otherwise.
Оптимизация многопоточной обработки сетевого трафика

Технология RDMA аппаратно подкреплена способностью адаптера работать в многопоточном режиме. Это означает, что определенное количество программных тредов (threads – потоков или, по другой терминологии, очередей – queues), генерируемых коммуникационным контроллером, подключенным к PCIe-шине, должны быть обработаны соответствующим количеством процессорных ядер. Давайте детальнее остановимся на том механизме, который устанавливает соответствие между потоками сетевого трафика и ядрами процессора. Но прежде отметим, что на платформах с двумя или более процессорными гнездами, а также на платформах поддерживающих технологию Cluster-on-Die (а это CPU, как минимум, с 10 ядрами) необходимым условием обслуживания многопоточности для bus master устройств является наличие специальной поддержки со стороны ACPI.
Напомним, что Receive Side Scaling – это механизм Microsoft Server 2012/R2, позволяющий эффективно разделить обработку входного сетевого трафика между несколькими ядрами мультипроцессорной системы и установить соответствие между соединениями и процессорами, обслуживающими данные соединения. При этом фигурируют следующие (иногда взаимно противоречивые) критерии:
- Обслуживание трафика RNIC должны выполнять процессоры NUMA-узла, ближайшего к PCIe-подключению данного NIC;
- Нагрузку в системе желательно равномерно распределить между всеми процессорами всех NUMA-узлов;
- Обслуживание одного соединения (TCP connection) желательно возложить на один процессор (или минимальное количество процессоров), так как в кэш-памяти этого процессора будет находиться контекст, связанный с обслуживанием данного потока. Переключение на другой процессор приведет к необходимости повторного кэширования контекста данного потока и сделает бесполезными ранее кэшированные данные.
По умолчанию, технология Receive Side Scaling не обязательно будет активизирована в свойствах сетевого контроллера. Убедиться в этом можно заглянув в закладку «Advanced»:

Альтернативный путь – использование команд PowerShell Enable-NetAdapterRss -Name «имя_адаптера» с последующей проверкой статуса Get-NetAdapterrss -Name «имя_адаптера«.

Давайте разбираться параметрами: как ими управлять и что какой означает? Начнем с NumberOfReceiveQueues (в свойствах адаптера ему соответствует пункт меню Maximum number of RSS queues):

Этот параметр определяет, какое количество потоков мы можем поручить RNIC-адаптеру. Здесь важным является только предельное значение: в нашем примере Mellanox ConnectX-3 аппаратно ограничен восемью соединениями. При необходимости и в зависимости от имеющихся процессорных ресурсов эту цифру можно уменьшить до 1-2 потоков. Не менее важно знать, что максимальное значение доступно пользователю. Практика показывает, что неактуальные драйверы порой некорректно формируют Maximum number of RSS queues. Были случаи, когда этот параметр для ConnectX-3 искусственно ограничивался 4 очередями.
Параметр RSS Base processor number
В консольном варианте этот параметр представлен строкой BaseProcessor: [Group:Number] и означает минимальный (стартовый) номер обслуживающего процессора, назначенный RNIC-адаптеру при инициализации (как правило, выбирается по критерию NUMA-оптимальности).

Здесь Group – понятие, введенное компанией Microsoft для систем, содержащих более 64 логических процессоров. Это связано с тем, что модель Win64 API базируется на 64-битных параметрах. Для перечисления большего, чем 64 числа ядер, когда каждому процессору соответствует один бит, требуется деление на группы, по 64 процессора в каждой. Последняя из групп может быть до конца не заполненной.
Исходя из сказанного, на скромно оснащенных платформах все процессоры уместятся в нулевую группу, а нумерация ядер начнется с BSP-процессора и продолжится на AP1, AP2 etc.
Параметр RSS Maximum processor number
В консольном варианте MaxProcessor: [Group:Number] – максимальный (последний) номер процессора, назначенный RNIC-адаптеру при инициализации. Все аналогично предыдущему параметру, но с одним существенным уточнением, важным для дальнейшего понимания.

На MPS-платформе, где используется Receive Side Scaling, в расчет принимаются только физические процессорные ядра! Технология Hyper-Threading не влияет на многопоточное обслуживание TCP-соединений. Поэтому при включенной HT-технологии нумероваться будут только четные ядра. По хорошему, ее стоило бы просто отключить в UEFI Setup.
Параметр Maximum number of RSS processors
Данный параметр, представленный в консоли PowerShell как MaxProcessors, определяет количество процессоров, которое операционная система может выделить для обслуживания данного адаптера NIC. Номера этих процессоров должны входить в диапазон, ограниченный параметрами BaseProcessor и MaxProcessor.

Реагируя на изменения сетевой нагрузки, программное обеспечение, оптимизирует использование процессоров bus-master адаптером, действуя в рамках ограничений, задаваемых указанными параметрами. При этом программное обеспечение может:
- Переключать нагрузку и добавлять процессоры из того же NUMA узла, если установленный профиль задает оптимизацию по критерию минимальной NUMA-дистанции (профили Closest, ClosestStatic);
- Переключать нагрузку и добавлять процессоры из других NUMA узлов, если данный профиль задает оптимизацию по критерию балансировки нагрузки между NUMA-узлами (профили NUMA, NUMAStatic);
- Использовать минимальное количество процессоров, если данный профиль задает минимизацию количества процессоров (профиль Conservative).
Параметр RSS Load balancing profile
Параметр RSS Load balancing profile в консоли сокращен до прозаичного и понятного Profile и позволяет задействовать один из перечисленных выше сценариев.

ClosestProcessor
Выбирает для обслуживания заданного RNIC-адаптера, процессоры, ближайшие к этому адаптеру с точки зрения NUMA-топологии.
ClosestProcessorStatic
Нагрузка разделена между процессорами по фиксированной схеме, принятой при старте. Критерии, как и в предыдущем сценарии, но динамическое изменение балансировки не используется.
NUMAScaling
Распределяет потоки трафика по критерию оптимальной балансировки нагрузки по NUMA-узлам. Возможно, при этом приносится в жертву требование минимизации топологической дистанции между PCIe-линком, используемым RNIC и целевым блоком памяти в пользу более равномерного распределения нагрузки между узлами. Интересно, что в презентациях от Microsoft этот сценарий иногда называется NUMA Dynamic.
NUMAScalingStatic
Как и предыдущий сценарий использует NUMA-технологию, но без динамического изменения балансировки нагрузки. Требование минимизации топологической дистанции между PCIe-линком и целевым блоком памяти выполняется в той степени, как это исходно определено таблицей соответствия между потоками трафика и логическими процессорами, используемыми для их обработки. В ряде источников профиль NUMA Static принимается за сценарий по умолчанию.
ConservativeScaling
Минимизация количества используемых процессоров. Поскольку количество обработанных запросов останется тем же, утверждение об уменьшении количества прерываний можно трактовать по-разному, например:
Максимальное число очередей RSS — что это?
Максимальное число очередей RSS — настройка, позволяющая выставить обрабатываемое количеств потоков RNIC-адаптера.Данная настройка определяет, сколько потоков можно использовать RNIC-адаптеру. Какое именно количество — можно узнать в характеристиках адаптера. Если выставит больше, чем нужно — может быть снижение сетевой производительности. Также были случаи некорректно работы опции при использовании неактуальных драйверов.

RNIC (RDMA Network Interface Controller) — сетевой адаптер с аппаратным ускорением технологии прямого доступа к памяти RDMA. Это удаленный доступ к оперативной памяти, который имеет сетевая карта. Данные технологии используются в серверных конфигурациях, на обычных домашних компьютерах эти настройки нет смысла использовать. Да и вряд ли они будут на обычных сетевых картах типа Realtek.
Maximum number of rss queues что это

Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами разобрали, как производится чистая установка Windows 12 с последующей настройкой. Идем далее и сегодня я хочу с вами разобрать одну интересную опцию, которая присутствует на современных сетевых картах, призванную сильно повысить производительность скачивания данных. Речь пойдет про Receive Side Scaling (RSS) или как его еще называют в российской локализации «Состояние масштабирования на стороне приема». Уверен, будет интересно, я покажу когда вас может сильно выручать данный функционал.
Что такое Receive Side Scaling (RSS)
Receive-Side Scaling (RSS) State, или состояние масштабирования на стороне приема, является функцией сетевых адаптеров и операционных систем, которая позволяет распределить обработку входящих сетевых пакетов по нескольким ядрам процессора. Это позволяет повысить производительность сетевой обработки и улучшить масштабируемость системы.
RSS State применяется в высоконагруженных сетевых средах, где требуется обработка большого количества входящих сетевых пакетов. В таких сценариях одно ядро процессора может стать узким местом и ограничивать пропускную способность сети. RSS State позволяет распределить нагрузку на несколько ядер процессора, что позволяет более эффективно использовать ресурсы и повысить производительность. Это может привести к улучшению задержки, более низким значениям процентов использования процессора и более высокой скорости передачи данных. По сути пакеты дробятся на потоки и за каждый поток отвечает свой ЦП.
Однако следует отметить, что эффективность RSS State может зависеть от конкретной сетевой архитектуры и настроек системы. В некоторых случаях, когда сетевые пакеты приходят в неупорядоченном порядке или требуют обработки на одном ядре процессора (например, для обеспечения целостности данных), RSS State может не давать значительного прироста производительности.
Примеры использования RSS
Представим себе обычное, рабочее окружение, где есть лес Active Directory и виртуальная инфраструктура. На части виртуальных машин было замечено:
-
- Высокая загрузка CPU
- Низкая производительность сети и/или большое время отклика на пинг
- Могут наблюдаться тайм-ауты и сбои подключения.
- Количество виртуальных и физических сетевых карт на этот вопрос не влияет
- Эта проблема возникает с различными типами виртуальных сетевых адаптеров (E1000, VMXNET2 и VMXNET3)
Как проверить и включить RSS через графический интерфейс
Самый понятный для большинства метод определения текущего состояния Receive Side Scaling на вашем сетевом интерфейсе, это использование оснастки «Диспетчера устройств«. Его можно запустить кликнув правой кнопкой мыши по кнопке «Пуск«.

Или же можно нажать сочетание клавиш WIN + R и запустить окно «Выполнить». В нем ввести:
В итоге у вас откроется окно со списком всех ваших устройств. Вам необходимо найти пункт «Сетевые адаптеры«. В списке выберите необходимый сетевой интерфейс и откройте его свойства. Перейдите на вкладку «Дополнительно«. В поле свойство найдите строку Receive Side Scaling. Выбрав ее вы увидите текущее значений. В моем случае видно, что она активирована.
Если у вас стоит «Disable» и вы хотите ее активировать, то выставите значение «Enable«. Обратите внимание, что если вы используете в данный момент подключение по удаленному рабочему столу, то оно может отвалиться на секунд 5. В некоторых случаях, чтобы применилось чтобы изменения вступили в силу, может потребоваться перезагрузка.

Как проверить и включить RSS через командную строку
Сразу оговорюсь, что это настройка глобальная для операционной системы Windows и если она активна, это не означает, что на уровне отдельной сетевой карты RSS не отключен, я приведу такой пример, когда буду описывать PowerShell.
Для того, чтобы проверить текущие, глобальные настройки вам необходимо открыть cmd от имени администратора. Далее введите:

Тоже самое можно посмотреть и для списка удаленных серверов. Для этого достаточно иметь список имен и воспользоваться PowerShell. Вот пример скрипта:
# Путь к файлу со списком серверов
$serverListPath = «C:\Temp\servers.txt»# Чтение списка серверов из файла и помещение их в переменную
$servers = Get-Content $serverListPath# Цикл для выполнения команды на каждом сервере
foreach ($server in $servers) <
# Выполнение команды netsh на сервере и сохранение вывода в переменную
$output = Invoke-Command -ComputerName $server -ScriptBlock <
netsh int tcp show global
># Парсинг вывода команды для получения строки с Receive-Side Scaling State
$receiveSideScalingState = $output | Where-Object# Вывод результата в виде имя сервера, имя сетевого интерфейса и строки с Receive-Side Scaling State
$receiveSideScalingState | ForEach-Object <
#$interfaceName = ($_ -split «:\s+»)[0]
$state = ($_ -split «:\s+»)[1]
Write-Host «Сервер: $server, Receive-Side Scaling State: $state»
>
>
Теперь, чтобы включить глобально Receive Side Scaling (RSS), вам нужно выполнить вот такую команду:
Как видите все прекрасно работает и состояние масштабирования на стороне приема поменяло статус.

Как проверить и включить Receive Side Scaling с помощью PowerShell
Для того, чтобы получить статус RSS по всем сетевым интерфейсам, вы должны открыть PowerShell от имени администратора и ввести вот такую команду:
📌За место «*» вы можете указать точное имя сетевого интерфейса, тогда информация будет только по нему.
Как видно в моем примере, состояние масштабирования на стороне приема имеет значение «False«. Значит оно выключено.

Если вы хотите массово проверить большой список серверов на состояние Receive Side Scaling, то подготовьте список в отдельном текстовом файле, где каждая строка это отдельное имя. После этого выполните данный скрипт.
# Указываем путь к файлу, содержащему список серверов
$serverListFile# Читаем список серверов из файла и помещаем их в переменную
$servers = Get-Content $serverListFile# Проходимся по каждому серверу в списке
foreach ($server in $servers) <
# Получаем состояние работы RSS на сервере
$rssStatus = Get-NetAdapterRss -CimSession $server# Проходимся по каждому сетевому интерфейсу на сервере
foreach ($interface in $rssStatus) <
# Выводим результат в виде имени сервера, имени сетевого интерфейса и состояния работы RSS
Write-Host «Сервер: $server, Интерфейс: $($interface.Name), Состояние RSS: $($interface.Enabled)»
>
>На выходе получаем вот такую таблицу.

Для включения RSS есть командлет Enable-NetAdapterRss. Чтобы активировать данный функционал, выполните.
В данном примере RSS будет активирован на всех сетевых картах, если хотите выполнить на определенной сетевой карте, то команда будет такой:

Вот еще дополнительные команды, которые могут пригодится.
- ✅Показать все свойства RSS для указанного сетевого адаптера
- ✅Вывести все сетевые адаптеры с поддержкой RSS и его включенным состоянием
- Чтобы выключить Receive Side Scaling вам необходимо воспользоваться командлетом Disable-NetAdapterRss. В данном примере я отключу RSS на всех сетевых интерфейсах.
RSS-очереди
RSS-очереди (RSS queues) — это механизм, используемый для организации и обработки потоков данных в асинхронной системе. Они представляют собой специальные структуры данных, которые позволяют эффективно управлять и распределять задачи между различными компонентами системы.
Основная идея RSS-очередей заключается в том, что они служат промежуточным хранилищем для задач, ожидающих выполнения. Когда задача поступает в систему, она помещается в очередь, где ожидает своей очереди на обработку. Затем компоненты системы могут извлекать задачи из очереди и выполнять их в соответствии с определенными правилами и логикой.
По умолчанию количество NumberOfReceiveQueues равно, количеству ваших сокетов.

Поменять «Maximum Number of RSS Queues» можно через диспетчер устройств.

Или же через PowerShell. Чтобы изменить количество очередей RSS на адаптере сетевой карты, используйте команду Set-NetAdapterRss с параметром -NumberOfReceiveQueues
Чтобы указать диапазон CPU, который сетевой адаптер может использовать для RSS, используйте команду Set-NetAdapterRss с параметрами -BaseProcessorNumber и -MaxProcessorNumber, чтобы указать нижний и верхний пределы диапазона CPU. Изменение диапазона эффективно изменяет количество ядер CPU, используемых сетевой картой для RSS.
В случаях, когда использование всех доступных CPU нежелательно, пользователь может ограничить количество одновременно используемых ЦП. По сути, этот параметр изменяет количество одновременно используемых очередей RSS, оставляя некоторые очереди неиспользуемыми.