Конфигурация RSS
Для получения сведений о конфигурации RSS драйвер может отправить OID-запрос OID_GEN_RECEIVE_SCALE_CAPABILITIES мини-драйверу. NDIS также предоставляет сведения о конфигурации RSS для переопределения драйверов протоколов в структуре NDIS_BIND_PARAMETERS во время инициализации.
Переопределяющий драйвер выбирает хэш-функцию, тип и непрямую таблицу. Чтобы задать эти параметры конфигурации, драйвер отправляет запрос набора OID OID_GEN_RECEIVE_SCALE_PARAMETERS на минипорт-драйвер. Более избыточные драйверы также могут запрашивать этот OID, чтобы получить текущие параметры RSS. Буфер сведений для OID_GEN_RECEIVE_SCALE_PARAMETERS OID содержит указатель на структуру NDIS_RECEIVE_SCALE_PARAMETERS .
Переопределяющий драйвер может отключить RSS на сетевом адаптере. В этом случае драйвер задает флаг NDIS_RSS_PARAM_FLAG_DISABLE_RSS в элементе Flags структуры NDIS_RECEIVE_SCALE_PARAMETERS. Если этот флаг установлен, минипорт-драйвер должен игнорировать все остальные флаги и параметры и отключить RSS на сетевом адаптере.
NDIS обрабатывает OID_GEN_RECEIVE_SCALE_PARAMETERS перед передачей его в драйвер минипорта и обновляет стандартизированное ключевое слово адаптера минипорта при необходимости. Дополнительные сведения о ключевом слове *RSS см. в разделе "Стандартные INF-ключевые слова" для RSS.
После получения запроса OID_GEN_RECEIVE_SCALE_PARAMETERS задания с набором флагов NDIS_RSS_PARAM_FLAG_DISABLE_RSS драйвер минипорта должен задать состояние RSS сетевой карты начальному состоянию сетевой карты после инициализации. Таким образом, если драйвер минипорта получает последующий запрос OID_GEN_RECEIVE_SCALE_PARAMETERS задать с флагом NDIS_RSS_PARAM_FLAG_DISABLE_RSS очистки, все параметры должны иметь одинаковые значения, которые были заданы после того, как драйвер минипорта получил запрос OID_GEN_RECEIVE_SCALE_PARAMETERS задать в первый раз после инициализации адаптера минипорта.
Слишком избыточный драйвер может использовать OID_GEN_RECEIVE_HASH OID для включения и настройки хэш-вычислений на полученных кадрах без включения RSS. Более избыточные драйверы также могут запрашивать этот OID, чтобы получить текущие параметры хэша получения.
Буфер сведений для OID_GEN_RECEIVE_HASH OID содержит указатель на структуру NDIS_RECEIVE_HASH_PARAMETERS . Для запроса набора идентификатор OID указывает хэш-параметры, которые должен использовать мини-адаптер. Для запроса OID возвращает хэш-параметры, используемые мини-адаптером. Этот OID является необязательным для драйверов, поддерживающих RSS.
Примечание. Если включено вычисление хэша получения, NDIS отключает вычисление хэша, прежде чем включить RSS. Если RSS включен, NDIS отключает RSS перед включением вычисления хэша получения.
Все адаптеры минипорта, поддерживаемые драйвером минипорта, должны предоставлять одинаковые параметры конфигурации хэша для всех последующих привязок протокола. Этот OID также включает секретный ключ, который должен использовать драйвер мини-порта или сетевой адаптер для вычислений хэша. Ключ имеет длину 320 битов (40 байт) и может содержать любые данные, которые выбирает слишком большой драйвер, например случайный поток байтов.
Для перебалансирования загрузки обработки драйвер может задать параметры RSS и изменить таблицу косвенного обращения. Как правило, все параметры не изменяются, за исключением таблицы косвенного обращения. Однако после инициализации RSS драйвер чрезмерного размера может изменить другие параметры инициализации RSS. При необходимости минипорт-драйвер может сбросить оборудование сетевого адаптера, чтобы изменить хэш-функцию, хэш-ключ секрета, хэш-тип, базовый номер ЦП или количество битов, используемых для индексирования таблицы косвенного обращения.
Обратите внимание , что драйвер чрезмерной настройки может задавать эти параметры в любое время. Это может привести к неупорядочению получения показаний. Минипорт-драйверы, поддерживающие TCP, не требуются для очистки очередей получения в этом экземпляре.
На следующем рисунке приведен пример содержимого для двух экземпляров таблицы косвенного обращения.
На предыдущем рисунке предполагается четыре конфигурации процессора, а количество наименее значимых битов, используемых из хэш-значения, равно 6 битам. Поэтому таблица косвенного обращения содержит 64 записей.
На рисунке таблица A перечисляет значения в таблице косвенного обращения сразу после инициализации. Позже, по мере изменения обычной нагрузки трафика, нагрузка процессора увеличивается небалансирована. Драйвер чрезмерного уровня обнаруживает небалансированное условие и пытается перебалансировать нагрузку, определив новую таблицу косвенного обращения. В таблице B перечислены новые значения таблицы косвенного обращения. В таблице B некоторые нагрузки из ЦП 2 перемещаются на ЦП 1 и 3.
Обратите внимание , что при изменении таблицы косвенного обращения в течение короткого времени (в то время как обрабатываются текущие очереди дескриптора получения), пакеты могут обрабатываться на неправильном ЦП. Это нормальное временное состояние.
Размер таблицы косвенного обращения обычно составляет два–восемь раз, чем число процессоров в системе.
Когда мини-драйвер распределяет пакеты на ЦП, если слишком много ЦП, усилия, потраченные на распределение нагрузки, могут стать запретительными. В этом случае переопределенные драйверы должны выбрать подмножество ЦП, на котором происходит обработка сетевых данных.
В некоторых случаях количество доступных очередей получения оборудования может быть меньше числа ЦП в системе. Минипорт-драйвер должен изучить таблицу косвенного обращения, чтобы определить номера ЦП для связывания с аппаратными очередями. Если общее число различных чисел ЦП, отображаемых в таблице косвенного обращения, превышает количество аппаратных очередей, поддерживаемых сетевым адаптером, драйвер минипорта должен выбрать подмножество чисел ЦП из таблицы косвенного обращения. Подмножество равно числу очередей оборудования. Минипорт-драйвер получил параметр IndirectionTableSize из OID_GEN_RECEIVE_SCALE_PARAMETERS. Минипорт-драйвер указал значение NumberOfReceiveQueues в ответ на OID_GEN_RECEIVE_SCALE_CAPABILITIES.