Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Привязка прерывания — это набор процессоров, которые могут обслуживать прерывание. Каждое устройство имеет политику связности. Операционная система использует политику аффинности для вычисления аффинности для прерываний этого устройства. Политику сходства можно указать в INF-файле или параметрах реестра устройства. Администраторы могут использовать реестр для задания политики привязки для прерывания.
Администраторы могут задать следующие записи в ключе реестра "Управление прерываниями\Affinity Policy":
DevicePolicy — это значение REG_DWORD, указывающее политику сходства. Возможные значения и их значение см. в IRQ_DEVICE_POLICY. Корпорация Майкрософт рекомендует использовать политику по умолчанию, если применимо.
AssignmentSetOverride может быть значением типа REG_BINARY, REG_DWORD или REG_QWORD, указывающим маску KAFFINITY. Для REG_BINARY размер должен быть меньше или равен размеру KAFFINITY для платформы, а порядок входных байтов не является конечным. Если значение DevicePolicy равно 0x04 (IrqPolicySpecifiedProcessors), то эта маска определяет набор процессоров для назначения прерываний устройства.
INF-файл драйвера может предоставить параметры по умолчанию для значений реестра. Ниже приведен пример того, как задать значение DevicePolicy на IrqPolicyOneCloseProcessor в INF-файле. Дополнительные сведения см. в директиве INF AddReg.
[install-section-name.HW]
AddReg=add-registry-section
[add-registry-section]
HKR, "Interrupt Management\Affinity Policy", DevicePolicy, 0x00010001, 2
Система делает параметры реестра доступными драйверу устройства при отправке IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP драйверу. Операционная система предоставляет структуру IO_RESOURCE_DESCRIPTOR для каждого прерывания с элементом Type, установленным в CmResourceTypeInterrupt. Для прерывания, инициируемого сообщением, устанавливается бит CM_RESOURCE_INTERRUPT_MESSAGE элемента Flags; в противном случае он очищен. Член u.Interrupt описывает параметры прерывания.
В следующей таблице приведена корреспонденция между параметрами реестра и членами u.Interrupt.
| Значение реестра | Член u.Interrupt |
|---|---|
| DevicePolicy | AffinityPolicy |
| AssignmentSetOverride | TargetedProcessors |
О KAFFINITY
Тип KAFFINITY — это маска сходства, представляющая набор логических процессоров в группе.
typedef ULONG_PTR KAFFINITY;
Тип KAFFINITY имеет 32 бита в 32-разрядной версии Windows и 64 бита в 64-разрядной версии Windows.
Если группа содержит n логических процессоров, процессоры нумеруются от 0 до n-1. Номер процессора i в группе представлен битом i в маске сходства, где i находится в диапазоне от 0 до n-1. Биты маски сходства, которые не соответствуют логическим процессорам, всегда равны нулю.
Например, если значение KAFFINITY идентифицирует активные процессоры в группе, то бит маски для процессора равен одному, если процессор активен, и равен нулю, если процессор не активен.
Число битов в маске сходства определяет максимальное количество логических процессоров в группе. Для 64-разрядной версии Windows максимальное число процессоров для каждой группы — 64. Для 32-разрядной версии Windows максимальное число процессоров для каждой группы — 32. Вызовите подпрограмму KeQueryMaximumProcessorCountEx , чтобы получить максимальное количество процессоров для каждой группы. Это число зависит от аппаратной конфигурации многопроцессорной системы, но никогда не может превышать фиксированные 64-процессорные и 32-процессорные ограничения, установленные 64-разрядными и 32-разрядными версиями Windows соответственно.
Структура GROUP_AFFINITY содержит маску сходства и номер группы. Номер группы определяет группу, к которой применяется маска сходства.
Подпрограммы ядра, использующие тип KAFFINITY, включают IoConnectInterrupt, KeQueryActiveProcessorCount и KeQueryActiveProcessors.