“DPL Prefetch和L2 Streaming Prefetch设置也可以通过编写设备驱动程序实用程序来进行编程更改,以更改
IA32_MISC_ENABLE
寄存器 - MSR 0x1A0
中的位。这样的实用程序提供了启用或禁用预取机制的功能,而无需任何服务器停机时间。”下表显示了必须更改的
IA32_MISC_ENABLE MSR
中的位,以控制DPL
和L2 Streaming Prefetch: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,但没有成功。 我也尝试直接在
asm/msr.h
中使用wrmsr
,但那会导致段错误。
我试图在内核模块中实现这一点...结果导致机器崩溃。顺便说一句 - 我正在使用内核版本2.6.18-92.el5,其中已经将
MSR
链接到了内核中。$ grep -i msr /boot/config-$(uname -r)
CONFIG_X86_MSR=y
...
mov $1,%eax ; // 终止进程 mov $0,%ebx ; // 返回状态 int $0x80 ; // 系统调用
.data .align 8, 0xff lo: .word 0 hi: .word 0 msr_pf: .word 0x1A0将所有内容保存到文件rdmsr.s中:然后执行以下命令: as rdmsr.s -o rdmsr.o ld rdmsr.o -o rdmsr如果可以在ring 0中运行它,那么它会很好地工作。 - Chris