Поделиться через


Масштабирование на стороне получения NetAdapterCx (RSS)

Масштабирование на стороне получения (RSS) — это технология сетевого драйвера, которая позволяет эффективно распределять обработку сетевых процессоров по нескольким ЦП в многопроцессорных системах. RSS повышает производительность системы и повышает масштабируемость сети, используя все доступные процессоры в системе и динамически перебалансируя рабочие нагрузки ЦП.

В этом разделе рассматриваются драйверы клиентов RSS для NetAdapterCx и предполагается знание концепций и терминологии RSS. Дополнительные сведения о RSS в целом, включая схемы, иллюстрирующие RSS в различных аппаратных сценариях, см. в статье "Масштабирование на стороне получения".

Обзор RSS в NetAdapterCx

RSS в NetAdapterCx фокусируется на простоте настройки, простоте включения и отключения, а также абстракции сложности процессоров и прерываний. Драйвер клиента для сетевого адаптера с поддержкой RSS должен соответствовать трем критериям для поддержки RSS в NetAdapterCx:

  1. Драйвер должен задать возможности RSS при запуске сетевого адаптера, но перед вызовом NetAdapterStart. Это включает реализацию четырех обратных вызовов RSS и регистрацию их в структуре возможностей RSS.
  2. Очереди пути данных драйвера должны быть созданы и готовы к приему запросов.
  3. Драйвер должен находиться в состоянии питания D0 .

Проектирование RSS в NetAdapterCx гарантирует, что система не будет вызывать обратные вызовы RSS клиента и включать RSS до самого конца последовательности питания. Клиентам не нужно управлять запросами на перемещение непрямых таблиц или обрабатывать другие события RSS до тех пор, пока они не будут готовы.

Позже, когда драйвер выгрузит, NetAdapterCx не будет вызывать обратные вызовы RSS после того, как очереди datapath были уничтожены во время последовательности выключения питания. Так как очереди datapath удаляются в качестве первого шага во время отключения питания, это означает, что клиентам не нужно обрабатывать возможные события RSS на любом другом этапе во время отключения питания.

Настройка возможностей RSS

Чтобы приступить к работе с RSS в NetAdapterCx, выполните следующие действия:

  1. При запуске сетевого адаптера сообщите системе о возможностях и ограничениях RSS оборудования с помощью структуры NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES .
  2. Инициализация структуры возможностей путем вызова NET_ADAPTER_RECEIVE_SCALING_CAPABILITIES_INIT.
  3. При инициализации структуры возможностей RSS задайте для участников обратного вызова RSS структуры регистрацию реализаций для этих обратных вызовов:
    1. EvtNetAdapterReceiveScalingEnable
    2. EvtNetAdapterReceiveScalingDisable
    3. EvtNetAdapterReceiveScalingSetHashSecretKey
    4. EvtNetAdapterReceiveScalingSetIndirectionEntries
  4. Задайте структуру возможностей RSS в SynchronizeSetIndirectionEntries соответствующим образом.
  5. Передайте инициализированные структуры возможностей RSS в метод NetAdapterSetReceiveScalingCapabilities .

Включение и отключение RSS

После настройки возможностей RSS система продолжит работу с последовательностью питания для драйвера. NetAdapterCx начинает вызывать обратные вызовы RSS драйвера после завершения последнего шага создания очередей datapath. На этом этапе RSS можно включить и отключить по мере необходимости системой.

Внимание

При включении или отключении RSS не следует очищать или сбрасывать таблицу косвенного обращения. Платформа установит исходное состояние таблицы косвенного обращения.

Включение RSS

NetAdapterCx включает RSS путем вызова обратного вызова evtNetAdapterReceiveScalingEnable . В контексте этого обратного вызова обычно включается биты управления в оборудовании.

Пример кода включения RSS см. в разделе EvtNetAdapterReceiveScalingEnable.

Отключение RSS

NetAdapterCx отключает RSS путем вызова обратного вызова драйвера EvtNetAdapterReceiveScalingDisable . Здесь обычно отключается бит управления в оборудовании, которое вы ранее установили в EvtNetAdapterReceiveScalingEnable.

Пример кода отключения RSS см. в разделе EvtNetAdapterReceiveScalingDisable.

Настройка хэш-ключа секрета

После включения RSS netAdapterCx вызывает обратный вызов EvtNetAdapterReceiveScalingSetHashSecretKey , чтобы предоставить драйверу хэш-секретный ключ сетевого адаптера, который должен использовать при проверке хэш-вычислений. Этот обратный вызов можно вызывать в любое время, когда RSS работает, если хэш-ключ секрета изменяется.

Пример кода задания хэш-секретного ключа см. в разделе EvtNetAdapterReceiveScalingSetHashSecretKey.

Перемещение записей таблицы косвенного обращения

Хотя RSS работает в системе, драйверы протокола верхнего уровня отслеживают рабочую нагрузку процессора и поддерживают таблицу косвенного обращения, которая сопоставляет очереди с процессорами. Когда драйвер протокола должен перебалансировать рабочую нагрузку процессора в RSS, сначала вычисляет новое сопоставление для каждой записи таблицы косвенного обращения с новым процессором. Затем протокол передает эти сведения в NetAdapterCx, который обрабатывает сложность сопоставления очередей получения и аппаратных векторов прерываний на правильный процессор от имени драйвера клиента сетевого адаптера. NetAdapterCx сохраняет новую таблицу косвенного обращения с записями, сопоставленными с идентификаторами очереди, в структуре NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES и передает его драйверу при вызове функции обратного вызова EvtNetAdapterReceiveScalingSetIndirectionEntries.

В этом обратном вызове вы перемещаете каждую запись в непрямой таблице сетевого адаптера в указанную очередь получения. Каждая NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRY структура в массиве NET_ADAPTER_RECEIVE_SCALING_INDIRECTION_ENTRIES содержит хэш-индекс для этой записи в таблице, новую очередь получения, в которую необходимо назначить запись, и поле состояния, указывающее, успешно ли выполнено или нет этого отдельного перемещения.

Метод назначения записей индекса аппаратным очередям получения зависит от структуры сетевого адаптера и количества очередей получения. Дополнительные сведения и пример кода см. в разделе EvtNetAdapterReceiveScalingSetIndirectionEntries.

Разнородная поддержка ЦП

Внимание

Разнородная поддержка ЦП — это предварительная функция, которая может быть существенно изменена до выпуска коммерческой версии. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Разнородные системы ЦП используют несколько типов ядер с разными скоростями и функциональностью часов. По сравнению с однородными многопроцессорными системами, где каждое ядро идентично друг другу, разнородные системы ЦП могут лучше адаптироваться к динамическим вычислительным нагрузкам и использовать меньше энергии.

Начиная с версии WDK предварительной версии 25197, NetAdapterCx предлагает разнородную поддержку системы ЦП, эффективно используя различные типы ядер. Во время работы RSS система решает, какой процессор следует использовать в зависимости от рабочей нагрузки трафика, полученной драйвером клиента. При получении меньшего трафика, чем меньше, тем более эффективные ядра питания могут обрабатывать трафик. При наличии большего трафика требуется больше производительности ядер для непрерывного опроса полученных пакетов.

Чтобы включить разнородную поддержку системы, системный администратор должен задать ключевое слово *RSSProfile, стандартизированное INF- значение NdisRssProfileBalanced. Это профиль по умолчанию для разнородных систем. Чтобы система решила использовать лучшие ядра, невозможно задать расширенные ключевые слова RSS.

Другие профили RSS также поддерживаются для разнородных систем. Если вы хотите управлять расширенными параметрами, такими как номер базового процессора RSS и максимальный номер процессора RSS в системе, следует использовать другой профиль RSS.

Вы также можете использовать NdisRssProfileBalanced в однородной системе ЦП. В этом случае система решает, какие процессоры следует использовать для RSS.