На системах, поддерживающих ACPI и содержащих APIC, Windows позволяет разработчикам драйверов и администраторам отчасти управлять родственностью процессоров (выбирая процессор или группу процессоров, получающих прерывание) и политикой родственности (выбирая способ, с помощью которого произойдет отбор процессоров, и определится, какой процессор в группе будет выбран).
Более того, он позволяет использовать примитивный механизм приоритетности прерываний на основе выбора IRQL. Политика родственности (affinity policy) определяется в соответствии с данными, показанными в таблице, и настраивается с помощью значения реестра под названием InterruptPolicyValueв подразделе InterruptManagement\AffinityPolicy раздела реестра, представляющего устройство.
Благодаря этому для настройки не требуется никакого кода — администратор, чтобы повлиять на поведение устройства, может добавить это значение к разделу этого устройства. Для всего этого Microsoft предоставляет средство под названием Interrupt Affinity policy Tool, которое может быть загружено с адреса http://www.microsoft.com/whdc/system/sysperf/intpolicy.mspx.
Содержание:
Политика родственности IRQ.
Политика | Значение |
---|---|
IrqPolicyMachineDefault | Устройству не требуется какая-то особая политика родственности. Windows использует политику, имеющуюся на машине по умолчанию, которая (на машинах с менее чем восемью логическими процессорами) заключается в выборе любого доступного на машине процессора |
IrqPolicyAllCloseProcessors | На NUMA-машине диспетчер устройств Plug and Play назначает прерывание всем процессорам, близким к устройству (на том же узле). На машинах, не имеющих NUMA-доступа, эта политика аналогична политике IrqPolicyAllProcessorsInMachine |
IrqPolicyOneCloseProcessor | На NUMA-машине диспетчер устройств Plug and Play назначает прерывание одному процессору, который ближе всех к устройству (на том же узле). На машинах, не имеющих NUMA-доступа, выбирается любой, доступный в системе процессор |
IrqPolicyAllProcessorsInMachine | Прерывание обрабатывается любым доступным на машине процессором |
IrqPolicySpecifiedProcessors | Прерывание обрабатывается только одним из процессоров, указанных в маске родственности в значении реестра AssignmentSetOverride |
IrqPolicySpreadMessagesAcrossAllProcessors | Различные прерывания, инициируемые сообщениями, распределяются по оптимальному набору подходящих процессоров, сообразуясь, по возможности, с топологией NUMA. Для этого требуется поддержка MSI-X на устройстве и на платформе |
Кроме установки этой политики родственности для установки приоритетности прерываний можно использовать еще одно значение реестра из тех, что показаны в следующей таблице.
Как уже ранее говорилось, важно отметить, что Windows не является операционной системой реального времени, и поэтому эти приоритеты IRQ — просто советы, дающиеся системе, которая управляет только IRQL, связанным с прерыванием, и не предоставляет никакой дополнительной приоритетности, кроме имеющегося в Windows механизма схемы приоритетов. Поскольку приоритетность IRQ также хранится в реестре, администраторы имеют право устанавливать эти значения для драйверов с требованием более низкого уровня латентности для тех драйверов, которые не пользуются возможностью хранения данных в реестре.
Приоритеты IRQ.
Приоритет | Значение |
---|---|
IrqPriorityUndefined | Устройству никакая особая приоритетность не требуется. Оно принимает приоритеты, установленные по умолчанию (IrqPriorityNormal) |
IrqPriorityLow | Для устройства вполне приемлемы большие задержки, и оно должно получить более низкий уровень IRQL, чем обычно |
IrqPriorityNormal | Устройство ожидает среднее время задержки. Оно получает IRQL-уровень, устанавливаемый по умолчанию и связанный с его вектором прерывания |
IrqPriorityHigh | Устройство требует как можно меньшего времени задержки. Оно получает повышенный уровень IRQL, превышающий обычно назначаемый уровень |