Настройка соответствия для сетевых прерываний в Windows Server 2012 R2

У нас есть приложение, которое отправляет и получает большой сетевой трафик, но из-за прерываний мы получаем производительность ниже максимальной. При входных данных 20 Мбит / с и 20 Мбит / с (на линии 1 Гбит / с) сетевые прерывания используют 100% ядра 0, и операционная система зависает (проверяется с помощью анализатора производительности Windows). Использование функции RSS на сетевой карте (BroadCom) не улучшило ситуацию.

Я понимаю, что вы можете редактировать сходство определенных прерываний через реестр - моя цель состоит в том, чтобы использовать второе ядро ​​для сетевых прерываний, как в Linux, - но я не знаю, как найти правильный ключ для редактирования. Любой другой совет очень приветствуется.

1 ответ

Решение

Я дам частичный ответ с подсказками о том, как и где, я полагаю, вы можете найти конкретный ответ, специфичный для вашей системы.

Функция тесно связана с NDIS версия операционной системы.

Ранняя ссылка - это параметр ProcessorAffinityMask HKLM\SYSTEM\CurrentControlSet\Services\NDIS\Parameters ключ. Он устанавливает, какие процессоры должны быть доступны для обслуживания прерываний драйвера сетевого адаптера в Windows 2000.

Receive Side Scaling В более поздних версиях была разработана подсистема для сопоставления очередей сетевой обработки с доступными процессорами, описанными здесь для Windows 2008.

Вот документация для RSS в Windows 2012 R2 (NDIS 6.40, я верю), и подсказка дается в начале фразы:

Для эффективной обработки полученных данных служебная функция прерывания приема драйвера минипорта планирует отложенный вызов процедуры (DPC). Без RSS типичный DPC указывает все полученные данные в вызове DPC. Следовательно, вся обработка приема, связанная с прерыванием, выполняется в ЦПУ, где происходит прерывание приема.

В конце этой ссылки есть ссылка на справочный материал для всех 6.x NDIS версии. Я полагаю, что вы можете использовать эти ссылки для выработки ответа для вашей конкретной системы, а также для определения точных терминов, с которыми Google может столкнуться.

На основании информации, содержащейся в вопросе (которая не является слишком подробной), что я вижу в документах?

Первый процессор в наборе процессоров, доступный для RSS устанавливается с помощью HKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Services\NDIS\Parameters\RssBaseCpu параметр в Windows 2008, как описано здесь. Надеюсь, это справедливо и для Windows 2012 R2.

Точно так же максимальное количество процессоров, которые будут доступны для RSS устанавливается с помощью HKEY_LOCAL_MACHINE\\SYSTEM\CurrentControlSet\Services\Ndis\Parameters\MaxNumRssCpus как описано здесь.

Учитывая это, на Win2008 и, надеюсь, также в Win2012, настройка RssBaseCpu до 1 и MaxNumRssCpus 1 должен заблокировать RSS обработка до второго логического процессора и никаких других, предполагая RSS был успешно активирован. RSS статус можно проверить из Windows через командную строку администратора, например:

netsh int tcp show global

как задокументировано здесь.

Учитывая этот контекст, вполне возможно, что ваша проблема просто из-за плохо написанного драйвера устройства NIC. У меня было немало проблем с механизмами разгрузки сетевых адаптеров (общая категория которых относится к RSS), особенно с встроенными сетевыми картами Broadcom на серверах Dell и соответствующими драйверами. Я бы посоветовал вам также воспользоваться этой возможностью, если система не работает так, как можно было бы ожидать, основываясь на конфигурации с четверной проверкой.

Другие вопросы по тегам