У нас есть приложение, которое отправляет и получает большой сетевой трафик - но прерывания заставляют нас становиться ниже, чем макс. производительность. Во входе на 20 Мбит/с и выводе на 20 Мбит/с (на строке на 1 Гбит/с), сетевые прерывания используют 100% базового 0, и операционная система замерзает (посланный багажом Windows Performance Analyzer). Использование функции RSS на сетевой плате (Broadcom) не повысило качество ситуации.
Я понимаю, что можно отредактировать привязку определенных прерываний через реестр - моя цель быть для использования второго ядра для сетевых прерываний как, я сделал бы на Linux - но не знаю, как пойти о нахождении правильного ключа к редактированию. Любой другой совет очень приветствуется.
Я дам частичный ответ с подсказками о том, как и где, я думаю, вы можете найти конкретный ответ, относящийся к вашей системе.
Функция сильно привязана к версии операционной системы 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 и соответствующими драйверами. Я бы посоветовал вам также изучить эту возможность, если система не будет работать так, как можно было бы ожидать на основе конфигурации с четырехкратной проверкой.