Настройка соответствия для сетевых прерываний в 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 и соответствующими драйверами. Я бы посоветовал вам также воспользоваться этой возможностью, если система не работает так, как можно было бы ожидать, основываясь на конфигурации с четверной проверкой.