拿個最近最紅的問題來舉例好了,Intel的第13和14代桌上型CPU的穩定度問題(Vmin Shift Instability issue),目前的發現是CPU Microcode在幾種情況套用了不正確的Vmin導致這些用戶在進行遊戲時頻繁的當機。
Intel從2024的六月、八月分別出了兩版Microcode(0x125, 0x129)來改善這個情況,而且目前打算再釋出0x12B做進一步的修補。
看到這裡,不會覺得以往那些被要求換CPU的例子,有多少的比例其實是更新Microcode就能解決的呢?
特別是當換了CPU,當機的問題又再度發生時,廠商給你的答案再來想必是換主機板,或是換另一個CPU吧(多個CPU同時存在的情況)?
一個了解microcode很好的例子就是從vendor的BIOS release note,這也是一般使用者通常獲得microcode更新的其中一個途徑。
我們從Intel BIOS的release note可以快速的識別一些CPU與microcode的細節。
================================================================================
BIOS COMPONENTS/CONTENTS
================================================================================
Processors supported:
Xeon Scalable Family Processor
Microcode versions:
CPUID Version Status
0x50654 0x02007006 (SKX H0)
0x50656 0x04003604 (CLX B0)
0x50657 0x05003604 (CLX B1)
由上面的資料可以得知對一般使用者來說你可以從廠商那邊取得的microcode資訊有以下三點
BIOS下載頁面的下方有列出介紹:
0x50654 (1st Generation Intel(R) Xeon(R) Scalable H0,M0,U0)
0x50656 (2nd Generation Intel(R) Xeon(R) Scalable B0,L0,R0)
0x50657 (2nd Generation Intel(R) Xeon(R) Scalable B1,L1,R1)
你也可以在Intel的網站找到更完整的CPUID的對應。但是相同的CPUID在不同的CPU產品線會有共用的情況,需要自己判斷。
https://www.intel.com/content/www/us/en/support/articles/000022396/processors.html
從上述資料可以了解到,microcode的更新是以CPU的CPUID和stepping來做對應,並有各自的版本號碼。
因此比較版本號碼的新舊需要先了解自己的CPU目前是什麼CPUID,以及獲得目前的版本號碼,才能確定拿到的microcode是新還是舊,並且是否適用於自己的CPU。
一般來說windows update其實會默默的幫你更新CPU microcode,就是那些你平常收到的KB通知,有時裡頭就包含了windows覺得你需要更新的CPU microcode。
像之前幾個知名的Intel安全性更新(Spectre, L1TF),都是透過microcode來修補。Windows也有發佈對應的KB號碼以及他們修補的內容。
Intel在網站上有一份針對windows用戶如果想更新microcode的best practices,我覺得寫的非常詳盡。
有些比較敏感的機關以及風險較高的公司,往往在OS vendor還沒apply那些patch之前,就已經透過手動的方式取得microcode並套用在系統上了。
此外Intel也有for windows的CPUID識別工具(Intel® Processor Identification Utility)
https://www.intel.com/content/www/us/en/support/articles/000005495/processors.html
Linux的部分關於如何確認CPUID以及取得和更新microcode的步驟都有詳細的寫在以下的網站上
https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files
了解完CPU的microcode以及處理方式後,最重要的是管理者想怎麼管理這些microcode帶來的風險。
有的管理者偏好,沒出問題就都不要更新;有的管理者則偏好,一發現新的就立馬更新,越新越好。
這裡我自己的經驗則是依機器目前運作的狀況來判斷,從風險與穩定性兩個面向進行考慮。
已經運作一陣子的機器,除非是安全性更新並且這台機器的風險與重要性很高,才建議以犧牲它的穩定性為前提(因為有可能更新後變的不穩定)做更新。
剛準備上線的機器則務必是更新到最新版,就算遇到問題了起碼廠商也會比較願意處理,或是有機會在之後獲得解決方案。
而那些不穩定的機器或是已經有發現問題的機器,則是抱著死馬當活馬醫的心態,立馬更新了。
不只是CPU,在現今的市場上,HW不管是先天還是後天的問題,大家都會試著以可更新的方式來解決。
因此如果懷疑HW有問題的話,下次也可以先試試從FW或是driver下手。但是如今伺服器的各元件的FW之間溝通頻繁。考慮到相互間的影響,有時不見得最新的FW或是driver就是最好的。除非你已經確定發生的問題能在FW或是driver的release note中提到,再做更新會比較合適。