Как включить Receive Side Scaling (RSS) на сетевом интерфейсе

Receive Side Scaling

Добрый день! Уважаемые читатели и гости 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)

Начиная с Windows 8.1 и выше, а также Windows Server 2012 R2 и выше, технология состояния масштабирования на стороне приема включена по умолчанию

Как проверить и включить RSS через графический интерфейс

Самый понятный для большинства метод определения текущего состояния Receive Side Scaling на вашем сетевом интерфейсе, это использование оснастки "Диспетчера устройств". Его можно запустить кликнув правой кнопкой мыши по кнопке "Пуск".

Запуск диспетчера устройств

Или же можно нажать сочетание клавиш WIN + R и запустить окно "Выполнить". В нем ввести:

В итоге у вас откроется окно со списком всех ваших устройств. Вам необходимо найти пункт "Сетевые адаптеры". В списке выберите необходимый сетевой интерфейс и откройте его свойства. Перейдите на вкладку "Дополнительно". В поле свойство найдите строку Receive Side Scaling. Выбрав ее вы увидите текущее значений. В моем случае видно, что она активирована.

Если у вас стоит "Disable" и вы хотите ее активировать, то выставите значение "Enable". Обратите внимание, что если вы используете в данный момент подключение по удаленному рабочему столу, то оно может отвалиться на секунд 5. В некоторых случаях, чтобы применилось чтобы изменения вступили в силу, может потребоваться перезагрузка.

Включение RSS через диспетчер устройств

Как проверить и включить RSS через командную строку

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

Для того, чтобы проверить текущие, глобальные настройки вам необходимо открыть cmd от имени администратора. Далее введите:

netsh int tcp show global

Как посмотреть Глобальные параметры TCP через 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 { $_ -like "*Receive-Side Scaling State*" }

# Вывод результата в виде имя сервера, имя сетевого интерфейса и строки с 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 (RSS), вам нужно выполнить вот такую команду:

netsh int tcp set global rss=enabled

Для выключения:

netsh int tcp set global rss=disabled

Как видите все прекрасно работает и состояние масштабирования на стороне приема поменяло статус.

Активация RSS в Windows через cmd

Как проверить и включить Receive Side Scaling с помощью PowerShell

Для того, чтобы получить статус RSS по всем сетевым интерфейсам, вы должны открыть PowerShell от имени администратора и ввести вот такую команду:

Get-NetAdapterRss -Name "*"

📌За место "*" вы можете указать точное имя сетевого интерфейса, тогда информация будет только по нему.

Как видно в моем примере, состояние масштабирования на стороне приема имеет значение "False". Значит оно выключено.

ПРоверка RSS через PowerShell

Если вы хотите массово проверить большой список серверов на состояние Receive Side Scaling, то подготовьте список в отдельном текстовом файле, где каждая строка это отдельное имя. После этого выполните данный скрипт.

# Указываем путь к файлу, содержащему список серверов
$serverListFile = "C:\Temp\servers.txt"

# Читаем список серверов из файла и помещаем их в переменную
$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 через PowerShell

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

Enable-NetAdapterRss -Name "*"

В данном примере RSS будет активирован на всех сетевых картах, если хотите выполнить на определенной сетевой карте, то команда будет такой:

Enable-NetAdapterRss -Name "Имя сетевого адаптера"

Активация RSS на сетевой карте через PowerShell

Вот еще дополнительные команды, которые могут пригодится.

  • ✅Показать все свойства RSS для указанного сетевого адаптера

Get-NetAdapterRss -Name "Имя конкретного интерфейса" | Format-List -Property "*"

  • ✅Вывести все сетевые адаптеры с поддержкой RSS и его включенным состоянием

Get-NetAdapterRss -Name "*" | Where-Object -FilterScript { $_.Enabled }

  • Чтобы выключить Receive Side Scaling вам необходимо воспользоваться командлетом Disable-NetAdapterRss. В данном примере я отключу RSS на всех сетевых интерфейсах.

Disable-NetAdapterRss -Name "*"

RSS-очереди

RSS-очереди (RSS queues) - это механизм, используемый для организации и обработки потоков данных в асинхронной системе. Они представляют собой специальные структуры данных, которые позволяют эффективно управлять и распределять задачи между различными компонентами системы.

Основная идея RSS-очередей заключается в том, что они служат промежуточным хранилищем для задач, ожидающих выполнения. Когда задача поступает в систему, она помещается в очередь, где ожидает своей очереди на обработку. Затем компоненты системы могут извлекать задачи из очереди и выполнять их в соответствии с определенными правилами и логикой.

По умолчанию количество NumberOfReceiveQueues равно, количеству ваших сокетов.

NumberOfReceiveQueues

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

Maximum Number of RSS Queues

Или же через PowerShell. Чтобы изменить количество очередей RSS на адаптере сетевой карты, используйте команду Set-NetAdapterRss с параметром -NumberOfReceiveQueues

Set-NetAdapterRss -Name * -NumberOfReceiveQueues 4

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

Set-NetAdapterRss -Name * -BaseProcessorNumber 4 -MaxProcessorNumber 6

В случаях, когда использование всех доступных CPU нежелательно, пользователь может ограничить количество одновременно используемых ЦП. По сути, этот параметр изменяет количество одновременно используемых очередей RSS, оставляя некоторые очереди неиспользуемыми.

Set-NetAdapterRss -Name * -MaxProcessors 2

Дополнительные ссылки

  • https://kb.vmware.com/s/article/2008925
  • http://forum.oszone.net/post-925527-22.html
  • https://learn.microsoft.com/en-us/powershell/module/netadapter/get-netadapterrss
  • https://learn.microsoft.com/en-us/powershell/module/netadapter/enable-netadapterrss
  • https://www.broadcom.com/support/knowledgebase/
Оцените статью
Настройка серверов windows и linux
Добавить комментарий