tft每日頭條

 > 科技

 > 主闆升級bios後會不會跟以前一樣

主闆升級bios後會不會跟以前一樣

科技 更新时间:2024-08-07 16:22:22

主闆升級bios後會不會跟以前一樣(為什麼很多用了幾十年的主闆也沒聽說過BIOS的數據壞了的呢)1

現代的UEFI BIOS除了傳統BIOS的一些配置信息還在CMOS中,絕大部分需要存儲的内容都被保存在閃存芯片中,在那裡,還居住着BIOS的執行代碼、ME的代碼和存儲部分,以及一些其他固件們(GBe,PMC,TB PHY等等)。閃存,也就是Flash,這個詞彙經常出現在我們周圍,這不,長江存儲又刷屏了 。但是,這種閃存是固态硬盤要用到的NAND Flash,而不是BIOS存儲用到的NOR Flash。

BIOS之所以選用NOR,是看中了它的XIP,也就是eXecute in place特性。我粗陋的翻譯為原地執行代碼,而不需要加載Load到某塊内存中執行。這個特性十分重要,因為在上電啟動後,内存初始化還沒有進行,沒有内存可供使用,雖然我們可以将Cache偷過來做内存用一段時間(Cache As RAM,CAR),但總是沒有直接用起來方便。在CAR好了之前的代碼,都是在NOR Flash上直接執行的(XIP)。

BIOS芯片

盡管BIOS使用NOR Flash上已經有很長時間,但它和南橋芯片的接口在經曆了從FWH到SPI的轉變。十幾年前閃存接口是傳統的挂在LPC下面的FirmwareHub,那時的BIOS芯片長這樣(現在有些古老主闆上還可以找到它):

主闆升級bios後會不會跟以前一樣(為什麼很多用了幾十年的主闆也沒聽說過BIOS的數據壞了的呢)2

ST FWH 2MB Flash

FWH閃存芯片管腳多,主闆走線複雜,成本高,LPC總線速度慢,這些弊病讓主闆BIOS芯片在十幾年前慢慢地向SPI NOR Flash芯片轉移。現在的BIOS芯片幾乎都是SPI芯片,如果你仔細尋找,你幾乎可以在所有的台式機、筆記本、服務器、甚至是嵌入式系統中找到它的身影:

主闆升級bios後會不會跟以前一樣(為什麼很多用了幾十年的主闆也沒聽說過BIOS的數據壞了的呢)3

Winbound 25Q64BV

這是兩個Winbond 8MB的芯片 ,左邊是8個管腳的封裝,一般用作筆記本和嵌入式系統上;右邊是16 pin的封裝,一般用作台式機和服務器中。

BIOS閃存芯片經曆了一個逐漸變大的過程。從1MB到2MB,再到8MB,現在很多服務器已經用上了64MB的Flash。閃存内部要也不再僅僅是BIOS了,還有别的小夥伴雜居其中。如果你對閃存芯片内容好奇,可以用UEFITool 打開BIOS Image:

主闆升級bios後會不會跟以前一樣(為什麼很多用了幾十年的主闆也沒聽說過BIOS的數據壞了的呢)4

一個BIOS Image例子

可以看到,Flash開頭是描述符Descriptor區域。裡面的結構是Intel定義的,有其他各個區塊的大小、位置和權限等信息,以及SoftStrap等等内容。BIOS的代碼和存儲隻是其中一個區域,盡管在很多情況下是最大的區域。

BIOS區中的可變部分:Variable

BIOS區域中如何劃分就是BIOS程序員自己做主了。一般被劃分成很多區域(FV),一些是存儲代碼,一些是存儲數據。存儲數據是利用了NOR Flash的非易失(NVM)特性,簡單來說就是掉電内容不丢失,這樣用戶的一些選項(setup options)才能長期存儲。盡管用在固态硬盤的NAND Flash和BIOS芯片NOR Flash在存儲原理上有很大不同,但一點卻是相似的,那就是數據可以從1變成0,但不能從0變成1:

主闆升級bios後會不會跟以前一樣(為什麼很多用了幾十年的主闆也沒聽說過BIOS的數據壞了的呢)5

想要從0變1,要經曆一個擦除操作,這就是閃存所以被稱為Flash的原因。而閃存的壽命是由能夠擦除多少次來決定的,在NAND Flash是這樣,在NOR Flash上也沒有不同:

主闆升級bios後會不會跟以前一樣(為什麼很多用了幾十年的主闆也沒聽說過BIOS的數據壞了的呢)6

NOR Flash可擦除次數更少

在所有影響壽命的地方,我們一定要精打細算,BIOS 芯片也不能例外,誰也不想用着用着,主闆忽然損壞了吧。這就要求BIOS在存儲數據的時候,不能采取原地擦除的策略,而隻是标記一下無效,在後期一次性擦除,延長Flash壽命。在NAND Flash裡面這個過程叫做GC(Garbage Collection),而在BIOS NOR上我們叫做Reclaim:

主闆升級bios後會不會跟以前一樣(為什麼很多用了幾十年的主闆也沒聽說過BIOS的數據壞了的呢)7

從圖中,我們看到會有内容搬來搬去和整理的動作,比較兩者,就會發現,有效數據一個個拍好了,十分整潔,為下一次的數據加入做好了充分的準備。這個搬遷的過程,不可避免的會将數據搬到内存,再從内存中移到目标塊,同學們有沒有想過,在搬的過程中,如果出現斷電,是不是主闆就變磚了?這就是圖中有Spare Block的原因,它起到緩存,在搬得過程中,保證數據永遠是可用的。它加上其他一些安全特性,就組成了UEFI BIOS存儲的基線:高容錯(Fault Tolerant)非易失存儲系統 -- UEFI Variable。我們在BIOS界面上可見和不可見的改動,都存儲在variable中。

紅旗能打多久?

說了這麼多原理,現在我們可以回答很多人關心的一個問題:如果我經常修改BIOS設置,會不會把BIOS寫壞了?

我們已知條件有哪些呢?

1.UEFI BIOS在設計的時候,已經采用算法規避大量的擦除操作,将擦除操作歸并,以增加閃存芯片壽命。

2. 不是每次BIOS啟動,都有數據需要保存的,大多數情況下啟動過程中沒有寫閃存操作。

那麼如果你是個電腦愛好者,又十分勤奮,每天重新啟動10次電腦,每次都更改BIOS配置,多久電腦會損壞?我們現在就這種腦洞情況進行一個有趣的計算。

假設你的電腦中BIOS UEFI Variable空間是64KB(台式機一般情況,服務器會大些),有一半的内容被固定配置占據,也就是還剩下32KB給BIOS開機設置項:Setup Variable用。不巧的是,主闆的BIOS配置又很多,多達要用4KB來保存(極端情況)!這樣每次開機會産生4KB的無效數據塊,32 / 4 = 8次開機就要Reclaim一次,也就是要擦除一次。主闆BIOS閃存芯片是上例中的W25Q64BV。在芯片手冊中(參考資料2),它的擦除次數是:

主闆升級bios後會不會跟以前一樣(為什麼很多用了幾十年的主闆也沒聽說過BIOS的數據壞了的呢)8

用它的最小擦除次數10萬計算,能用多久呢?很簡單的算式:

100000 /(10 / 8)= 80000天 = 219年!

那如果你對BIOS設置有着瘋狂的愛好,每天重啟100次,而每次又都修改BIOS設置呢?理論上,也能用上近22年!

結論

UEFI BIOS已經做了很多優化,作為普通用戶,大家完全沒有必要擔心Flash寫壞。但也不是完全高枕無憂,BIOS業内人士還是要注意防止BIOS寫壞的情況發生。我曾經做過一個項目,後期要求做壓力測試,機器要在各種情況下(Shell,Windows,Linux)各要重啟4000次。我撥了一些闆子做這項壓力測試,這些闆子基本在不停的重啟中(自動測試驅動)。過了一段時間測試部門報告一個闆子壞了,燒不了BIOS了。我開始還不以為意,漸漸的,越來越多的壓力測試主闆都不能燒片了,這才引起我的注意,一計算才發現,好家夥,是程序的問題,險些引發大規模召回事件。原來為了快速啟動,内存初始化會保存内存training的參數,下次重啟就不需要再Training了,節省了很多時間。而這些參數很大,占據了48KB空間(Variable隻有64KB)。好死不死,盡管程序增加了邏輯,内容一樣,就不會重複存了,但程序員在參數裡面加入了時間戳,結果checksum每次不一樣,這樣每次重啟都要存,每存一次都要Reclaim。每次重啟需要10秒,一天可以重啟:

24 x 60 x 60 / 10 = 1.44萬次

而按照最小擦除次數10萬次計算,能用:

10/1.44= 7.14天!

怪不得慢慢地一個個都壞了呢!後來去掉了時間戳,才解決問題。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved