我们正试图在内核启动时通过控制寄存器(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