在Intel i7 Sandy Bridge上禁用内存缓存

时间:2013-07-02 22:36:12

标签: assembly multicore cpu-cache

我们正试图在内核启动时通过控制寄存器(CD)中的Intel Developer manual设置CR0的第11章来禁用内存缓存。

我们对我们的代码存在疑问,这样的代码在执行时会降低性能。我们正在使用Debian Linux 64位。此代码是否禁用所有核心上的缓存,或仅禁用一个?

/*This code (Gas syntax) was inserted into file main.c on the Linux kernel booting*/

asm("push %rax");                 ; save eax

asm("cli");//                     ; disable interrupts while we do this

asm("movq %cr0, %rax");//         ; read CR0

asm("or  $0x40000000, %rax");//   ; set CD but not NW bit of CR0
asm("movq %rax, %cr0");//         ; cache is now disabled
asm("wbinvd"); //flush

asm("or $0x20000000, %rax");//    ; now set the NW bit
asm("movq %rax, %cr0");     //    ; turn off the cache entirely
asm("pop %rax");//                ; restore eax

0 个答案:

没有答案