Конфигурация RSS

Для получения сведений о конфигурации RSS-драйвер может отправить OID-запрос OID_GEN_RECEIVE_SCALE_CAPABILITIES драйверу мини-порта. Кроме того, NDIS предоставляет сведения о конфигурации RSS для более ющихся драйверов протокола в структуре NDIS_BIND_PARAMETERS во время инициализации.

Драйвер overlying выбирает функцию хэширования, тип и таблицу косвенного обращения. Чтобы задать эти параметры конфигурации, драйвер отправляет драйверу мини-порта запрос на набор OID OID_GEN_RECEIVE_SCALE_PARAMETERS . Драйверы overlying также могут запрашивать этот OID для получения текущих параметров RSS. Информационный буфер для OID_GEN_RECEIVE_SCALE_PARAMETERS OID содержит указатель на структуру NDIS_RECEIVE_SCALE_PARAMETERS .

Драйвер overlying может отключить RSS на сетевом адаптере. В этом случае драйвер устанавливает флаг NDIS_RSS_PARAM_FLAG_DISABLE_RSS в элементе Flags структуры NDIS_RECEIVE_SCALE_PARAMETERS. Если этот флаг установлен, драйвер мини-порта должен игнорировать все остальные флаги и параметры и отключить RSS на сетевом адаптере.

NDIS обрабатывает OID_GEN_RECEIVE_SCALE_PARAMETERS перед передачей в драйвер мини-порта и при необходимости обновляет стандартизованные RSS-ключевое слово адаптера мини-порта. Дополнительные сведения о *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 в первый раз после инициализации адаптера минипорта.

Драйвер overlying может использовать OID OID_GEN_RECEIVE_HASH для включения и настройки хэш-вычислений для полученных кадров без включения RSS. Драйверы overlying также могут запрашивать этот OID для получения текущих параметров хэша получения.

Информационный буфер для объекта OID OID_GEN_RECEIVE_HASH содержит указатель на структуру NDIS_RECEIVE_HASH_PARAMETERS . Для запроса набора OID указывает хэш-параметры, которые должен использовать адаптер минипорта. Для запроса OID возвращает хэш-параметры, которые использует адаптер минипорта. Этот OID является необязательным для драйверов, поддерживающих RSS.

Примечание Если включено вычисление хэша получения, NDIS отключает вычисление хэша получения перед включением RSS. Если RSS включен, NDIS отключает RSS перед включением вычисления хэша получения.

Все адаптеры минипорта, поддерживаемые драйвером мини-порта, должны предоставлять одинаковые параметры конфигурации хэша для всех последующих привязок протокола. Этот OID также включает секретный ключ, который драйвер мини-порта или сетевой адаптер должен использовать для хэш-вычислений. Ключ имеет длину 320 бит (40 байт) и может содержать любые данные, выбранные драйвером, например случайный поток байтов.

Чтобы сбалансировать нагрузку обработки, драйвер overlying может задать параметры RSS и изменить таблицу косвенного обращения. Как правило, все параметры не изменяются, за исключением таблицы косвенного обращения. Однако после инициализации RSS-драйвер может изменить другие параметры инициализации RSS. При необходимости драйвер мини-порта может сбросить оборудование сетевой карты, чтобы изменить хэш-функцию, хэш-секретный ключ, тип хэша, базовый номер ЦП или число битов, используемых для индексирования таблицы косвенного обращения.

Примечание Драйвер overlying может задать эти параметры в любое время. Это может привести к неупорядочению получения указаний. Драйверы минипорта, поддерживающие TCP, не требуются для очистки очередей получения в этом экземпляре.

На следующем рисунке представлен пример содержимого для двух экземпляров таблицы косвенного обращения.

Схема, иллюстрирующая содержимое двух экземпляров таблицы косвенного обращения RSS с конфигурацией четырех процессоров и 64 записями.

На предыдущем рисунке предполагается конфигурация процессора с четырьмя процессорами, а число наименее значимых битов, используемых из хэш-значения, равно 6 битам. Таким образом, таблица косвенного обращения содержит 64 записи.

На рисунке в таблице A перечислены значения в таблице косвенного обращения сразу после инициализации. Позже, по мере того как обычная нагрузка на трафик меняется, нагрузка на процессор растет несбалансирована. Драйвер overlying обнаруживает несбалансированное условие и пытается сбалансировать нагрузку, определяя новую таблицу косвенного обращения. В таблице B перечислены новые значения таблицы косвенного обращения. В таблице B часть нагрузки ЦП 2 перемещается на ЦП 1 и 3.

Примечание При изменении таблицы косвенного обращения в течение короткого времени (пока обрабатываются текущие очереди дескриптора получения) пакеты могут обрабатываться на неправильном ЦП. Это нормальное временное состояние.

Размер таблицы косвенного обращения обычно в два-восемь раз превышает количество процессоров в системе.

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

В некоторых случаях количество доступных очередей получения оборудования может быть меньше числа ЦП в системе. Драйвер мини-порта должен изучить таблицу косвенного обращения, чтобы определить номера ЦП для связи с аппаратными очередями. Если общее число различных номеров ЦП, отображаемых в таблице косвенного обращения, превышает количество аппаратных очередей, поддерживаемых сетевым адаптером, драйвер мини-порта должен выбрать подмножество номеров ЦП из таблицы косвенного обращения. Подмножество равно количеству аппаратных очередей. Драйвер мини-порта получил параметр IndirectionTableSize из OID_GEN_RECEIVE_SCALE_PARAMETERS. Драйвер мини-порта указал значение NumberOfReceiveQueues в ответ на OID_GEN_RECEIVE_SCALE_CAPABILITIES.