怎么給CPU打補(bǔ)丁
怎么給CPU打補(bǔ)丁
升級(jí)CPU, 你給CPU打補(bǔ)丁了么?怎么給CPU打補(bǔ)丁呢?今天就讓學(xué)習(xí)啦小編來教下大家吧,快來看看吧,希望能讓大家有所收獲!
在十多年前的Pentium時(shí)代, INTEL曾經(jīng)發(fā)布過有缺陷的CPU, 因?yàn)楦↑c(diǎn)運(yùn)算表邊界上有幾個(gè)數(shù)據(jù)錯(cuò)誤, 導(dǎo)致在某些應(yīng)用會(huì)出現(xiàn)錯(cuò)誤, 這個(gè)錯(cuò)誤概率很小, 出錯(cuò)幾率小于千萬分之一, 但在還是被捅出來了. INTEL為此召回CPU.
從Pentium Pro起, INTEL決定給CPU留出一個(gè)補(bǔ)丁接口, 當(dāng)CPU內(nèi)部有缺陷的時(shí)候, 通過加載微碼(Microcode), 可以修復(fù)CPU的部分缺陷.
INTEL說, 他們只測(cè)試過的CPU都是加載了微碼的, 如果沒有加載微碼, INTEL不保證會(huì)出現(xiàn)什么問題.
現(xiàn)在的CPU有一個(gè)CPUID, 通過執(zhí)行CPUID指令, 可以知道當(dāng)前CPU的版本和Stepping. 根據(jù)這個(gè)信息, 再給CPU打相應(yīng)的補(bǔ)丁.
下圖就是CPUID=06D2, Rev.A2
何時(shí)給CPU打補(bǔ)丁
在給CPU初始化的時(shí)候, 就需要把INTEL提供的微碼寫進(jìn)CPU去, 因此, 加載CPU微碼就是系統(tǒng)BIOS的任務(wù).
如果系統(tǒng)的CPU是可更換的, 那么其微碼也需要更換. 因此, 在BIOD里, 一般要包進(jìn)若干個(gè)ID的CPU微碼, 以便工廠安排不同的SKU出貨. 如果BIOS發(fā)布是在CPU發(fā)布之前, 那么BIOS里很可能就沒有包進(jìn)最新的微碼, 這個(gè)系統(tǒng)要使用新CPU的時(shí)候, CPU微碼是無法加載的.
另外, BIOS ROM容量有限, 一個(gè)微碼補(bǔ)丁最小有2K, 如果平臺(tái)兼容的CPU很多, 則微碼數(shù)量是十分巨大的, 臺(tái)式機(jī)某些主板可能兼容20多個(gè)CPU版本, 那么微碼的體積很大, BIOS里根本包不下這么多東西, 于是, 廠商不得不縮水, 去掉一些不常用的微碼. 這些不常用的微碼一般都是早期的CPU, 如DOTHAN早期的A STEPPING就很可能沒有對(duì)應(yīng)的微碼包進(jìn)你的本本中去.
不打補(bǔ)丁會(huì)有什么問題
INTEL說他們沒測(cè)過不打補(bǔ)丁的CPU, 也就不知道會(huì)出什么問題. 呵呵, 這顯然, 他們不想說太多技術(shù)細(xì)節(jié)而已. 以俺的經(jīng)驗(yàn), 如果不打補(bǔ)丁, 99.99%的時(shí)候, 用戶是感覺不到的, 除非問題特別突出. 只是俺遇到過幾個(gè)明顯的例子, 為此出了幾身汗. 有幾個(gè)案例:
1, 某Prescott CPU, 在臺(tái)式機(jī)上發(fā)熱量特別大, 超出Design Point, 后來發(fā)現(xiàn)沒加載微碼, 加上微碼就正常了;
2, 某Pentium D CPU, 進(jìn)WINDOWS XP會(huì)藍(lán)屏, 以安全模式進(jìn)去后, 安裝一個(gè)SP2補(bǔ)丁, 就正常了. 后來查出, 也是微碼沒加載;
3, 某Pentium M架構(gòu)CPU, 在使用CPU內(nèi)部TSC時(shí), 發(fā)現(xiàn)測(cè)出的CPU內(nèi)部頻率高出實(shí)現(xiàn)
的4倍, 如2GHz CPU測(cè)出卻有8GHz, 后查, 也是沒加載微碼造成的異常.
此類案例很多, 特別是Core架構(gòu)CPU, 不但微碼必須加載, 而且要求盡早加載, 否則, 連BIOS都跑不完, 系統(tǒng)就掛了. 但是INTEL但至今沒有任何官方對(duì)每個(gè)CPU微碼版本進(jìn)行描述的文件.
怎么檢查CPU微碼是否加載
加載微碼后, 在CPU的MSR(機(jī)器特定寄存器)里可以讀出版本號(hào). INTEL IA-32編程手冊(cè)上給出標(biāo)準(zhǔn)檢查方法: MOV ECX, 008bh XOR EAX, EAX XOR EDX, EDX
WRMSR 向MSR 8BH寫0, 清除MSR中的信息 MOV EAX, 0001
CPUID 讀CPUID, 讓CPU查看微碼版本, 并把微碼版本送到MSR 8B中 MOV ECX, 008bh
RDMSR 讀出當(dāng)前CPU微碼版本
執(zhí)行上面的代碼后, 如果EDX的值為0, 則說明你的CPU微碼是沒有沒加載的, 你的CPU運(yùn)行在有缺陷的狀態(tài). 如果不為0, 則顯示的是當(dāng)前微碼版本號(hào) 以上代碼可以在DOS環(huán)境下, 用DEBUG32調(diào)試界面執(zhí)行. 我很郁悶……
我有一個(gè)雜牌的本本, 上的是Dothan CPU, 某一天, 俺升級(jí)CPU, 卻發(fā)現(xiàn)發(fā)熱水平異常, 于是檢查微碼加載情況, 果然, BIOS里沒有這種CPU版本的微碼 換回原來的原廠CPU繼續(xù)一測(cè), 竟然也沒有加載微碼
后來換了Banias CPU才測(cè)到CPU微碼加載上了. 也就是說, 廠商在升級(jí)CPU的時(shí)候, 居然沒有升級(jí)BIOS, 這就是某些小品牌電腦廠商的水平, 郁悶 你的CPU升了么?
很多同學(xué)把低配的T4X本本換了CPU, 不知道這些同學(xué)用得怎么樣, 呵呵, 你檢查過你的CPU微碼么? BIOS有升級(jí)支持么?
升級(jí)/檢查微碼的方法, 在資料