2024年4月26日发(作者:)

cpu微命令(CPU Micro Code)

在十多年前的Pentium时代, INTEL曾经发布过有缺陷的CPU, 因为浮点运算表边界

上有几个数据错误, 导致在某些应用会出现错误, 这个错误概率很小, 出错几率小于千万

分之一, 但在还是被捅出来了. INTEL为此召回CPU.

从Pentium Pro起, INTEL决定给CPU留出一个补丁接口, 当CPU内部有缺陷的时

候, 通过加载微码(Microcode), 可以修复CPU的部分缺陷.

INTEL说, 他们只测试过的CPU都是加载了微码的, 如果没有加载微码, INTEL不保证

会出现什么问题.

现在的CPU有一个CPUID, 通过执行CPUID指令, 可以知道当前CPU的版本和

Stepping. 根据这个信息, 再给CPU打相应的补丁.

下图就是CPUID=06D2, Rev.A2

何时给CPU打补丁?

在给CPU初始化的时候, 就需要把INTEL提供的微码写进CPU去, 因此, 加载CPU

微码就是系统BIOS的任务.

如果系统的CPU是可更换的, 那么其微码也需要更换. 因此, 在BIOS里, 一般要包进

若干个ID的CPU微码, 以便工厂安排不同的SKU出货. 如果BIOS发布是在CPU发布之

前, 那么BIOS里很可能就没有包进最新的微码, 这个系统要使用新CPU的时候, CPU微码

是无法加载的.

另外, BIOS ROM容量有限, 一个微码补丁最小有2K, 如果平台兼容的CPU很多, 则

微码数量是十分巨大的, 台式机某些主板可能兼容20多个CPU版本, 那么微码的体积很

大, BIOS里根本包不下这么多东西, 于是, 厂商不得不缩水, 去掉一些不常用的微码. 这些

不常用的微码一般都是早期的CPU, 如DOTHAN早期的A STEPPING就很可能没有对应

的微码包进你的本本中去.

不打补丁会有什么问题?

INTEL说他们没测过不打补丁的CPU, 也就不知道会出什么问题. 呵呵, 这显然, 他们

不想说太多技术细节而已. 以俺的经验, 如果不打补丁, 99.99%的时候, 用户是感觉不到

的, 除非问题特别突出. 只是俺遇到过几个明显的例子, 为此出了几身汗. 有几个案例:

1, 某Prescott CPU, 在台式机上发热量特别大, 超出Design Point, 后来发现没加载

微码, 加上微码就正常了;

2, 某Pentium D CPU, 进WINDOWS XP会蓝屏, 以安全模式进去后, 安装一个SP2

补丁, 就正常了. 后来查出, 也是微码没加载;

3, 某Pentium M架构CPU, 在使用CPU内部TSC时, 发现测出的CPU内部频率高

出实现的4倍, 如2GHz CPU测出却有8GHz, 后查, 也是没加载微码造成的异常.

此类案例很多, 特别是Core架构CPU, 不但微码必须加载, 而且要求尽早加载, 否则,

连BIOS都跑不完, 系统就挂了. 但是INTEL但至今没有任何官方对每个CPU微码版本进

行描述的文件.