Установка привязки к сетевым прерываниям в Windows Server 2012 R2

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

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

1
задан 23 July 2015 в 20:43
1 ответ

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

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

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

Подсистема Масштабирование на стороне приема развивалась в более поздних версиях для отображения очередей сетевой обработки на доступные процессоры, как описано ] здесь для 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 должна заблокировать обработку RSS второму логическому процессору и никаким другим, предполагая, что RSS успешно активирован. Состояние RSS можно проверить из Windows через административную командную строку, например:

netsh int tcp show global

как описано здесь .

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

1
ответ дан 4 December 2019 в 00:03

Теги

Похожие вопросы