Я хотел бы программно отключить предварительную выборку аппаратного обеспечения.
От Оптимизация производительности приложений на микроархитектуре Intel® Core ™ с использованием аппаратно-реализованных префетов и Как выбрать предварительную выборку оборудования и программного обеспечения на 32-битной архитектуре Intel®, Мне нужно обновить MSR, чтобы отключить предварительную выборку аппаратного обеспечения.
Вот соответствующий фрагмент:
"Параметры предварительной выборки DPL Prefetch и L2 Streaming Prefetch также могут быть изменены программно путем написания утилиты драйвера устройства для изменения бит в
IA32_MISC_ENABLE
register -MSR 0x1A0
. Такая утилита предлагает возможность включить или отключить предварительную выборку механизмов без необходимости простоя сервера.
В приведенной ниже таблице показаны биты в IA32_MISC_ENABLE MSR
, которые необходимо изменить, чтобы управлять потоковой предварительной выборкой DPL
и L2:
Prefetcher Type MSR (0x1A0) Bit Value
DPL (Hardware Prefetch) Bit 9 0 = Enable 1 = Disable
L2 Streamer (Adjacent Cache Line Prefetch) Bit 19 0 = Enable 1 = Disable"
Я попытался использовать http://etallen.com/msr.html, но это не сработало.
Я также попытался использовать wrmsr
в asm/msr.h
напрямую, но это segfaults.
Я попытался сделать это в модуле ядра... и убил машину.
BTW - я использую ядро 2.6.18-92.el5, и он имеет MSR
, связанный в ядре:
$ grep -i msr /boot/config-$(uname -r)
CONFIG_X86_MSR=y
...