Назад | Перейти на главную страницу

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

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

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

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

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

Ранняя ссылка - это ПроцессорAffinityMask параметр 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

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

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