Microcode
微代码(Microcode)是Intel的P6和NetBurst两个家族CPU(也就是 Pentium Pro以及更新的IA 32 CPU,Pentium X以及它们的 Xeon/Celeron变体)的一种更新特性。通过从Intel的站点下载微代 码,加载到处理器核中,对一些BUG进行勘误。微代码是包含处理器的 微指令(Microinstructions)的数据块,具体细节将在正翻译中的 《P6 Family Processor Microcode Update Feature Review》文档中 给出。
Linux下的Microcode操作
Linux内核提供了支持微代码更新的驱动程序,设备文件是 /dev/cpu/microcode,如果你的机器是SMP的,那可能「cpu」就该替 换成「cpu0」之类。这一驱动程序位于 arch/i386/kernel/microcode.c, make menuconfig时通过 CONFIG_MICROCODE选择静态编译、模块或者是不选。
查看当前内核是否编译了microcode支持:
[root@dev3-140 lab]# grep MICROCODE /lib/modules/$(uname -r)/build/.config CONFIG_MICROCODE=m
上面信息显示,本机的 microcode 编译为 modules(m)形式,需要 加载这个模块才能在 /dev/ 下发现 microcode 设备
[root@dev3-140 lab]# modprobe microcode [root@dev3-140 lab]# ls -l /dev/cpu/microcode crw------- 1 root root 10, 184 12-12 13:56 /dev/cpu/microcode
下载最新的 microcode 然后编译安装。我的系统(GTES11.2)已经有了。
[root@dev3-140 lab]# rpm -qa|grep microcode microcode_ctl-1.17-1.47
启动服务就可以。
[root@dev3-140 lab]# /etc/init.d/microcode_ctl start 应用Intel Microcode更新: [确定] [root@dev3-140 lab]# modprobe microcode [root@dev3-140 lab]# microcode_ctl -u microcode_ctl: writing microcode (length: 392192) microcode_ctl: microcode successfuly written to /dev/cpu/microcode [root@dev3-140 lab]# dmesg | tail iscsi_trgt: Registered io type nullio iSCSI Enterprise Target Software - version 0.4.17 iscsi_trgt: Registered io type fileio iscsi_trgt: Registered io type blockio iscsi_trgt: Registered io type nullio loop: loaded (max 8 devices) hfs: unable to find HFS+ superblock IA-32 Microcode Update Driver: v1.14a <tigran@veritas.com> IA-32 Microcode Update Driver: v1.14a <tigran@veritas.com> IA-32 Microcode Update Driver: v1.14a <tigran@veritas.com>
一般 microcode 包含下面文件,其中 microcode.dat 是微指令的数据文件。
[root@dev3-140 lab]# rpm -ql microcode_ctl /etc/firmware/microcode.dat /etc/init.d/microcode_ctl /sbin/microcode_ctl /usr/share/man/man8/microcode_ctl.8.gz [root@dev3-140 lab]# file /etc/firmware/microcode.dat /etc/firmware/microcode.dat: ASCII English text, with CRLF, LF line terminators
