當前位置: 華文世界 > 手機

揭秘小米手機被瘋狂吐槽的儲存擴容技術

2023-12-07手機

前段時間,在小米14的釋出會上,雷布斯公布了名為「Xiaomi Ultra Space儲存擴容」的技術,號稱可以在512G的手機中再搞出來16G,256G的手機中再搞出8G。對於普通使用者來說,能多得一些儲存空間,無異是個很好的福利,不過也有網友說這是以損害儲存使用壽命為代價的,那麽真相到底如何呢?這篇文章我就從技術角度來給大家詳細分析下。

認識快閃記憶體

首先讓我們來了解一些手機儲存的基本知識。

手機儲存使用的是快閃記憶體技術,其本質和U槽、固態硬碟都是一樣的。

在快閃記憶體中讀寫的基本單位是頁(Page),比頁更大的概念是塊(Block),一個塊會包含很多頁。

雖然讀寫的基本單位都是頁,但是寫實際操作的很可能是塊,這是為什麽呢?

這要從刪除談起,在快閃記憶體中刪除數據時不會立即刪除頁上的數據,而只是給頁打上一個空閑的標簽。這是因為誰也不知道這個頁什麽時候會再寫入數據,這樣處理起來比較簡單快速。

再看寫操作,如果寫入分配的頁是因為刪除而空閑的,數據並不能立即寫入,根據快閃記憶體的特性,此時需要先把頁上之前儲存的數據擦除,然後才能寫入;但是快閃記憶體中擦除操作的基本單位是塊,此時就需要先把整個塊中的有效數據讀出來,然後再擦除塊,最後再向塊中寫入修改後的整塊數據;這整個操作稱為「讀-改-寫」。當然如果寫入分配的頁是空白的,並不需要先進行擦除,此時直接寫入就可以了。

預留空間

小米這次摳出來的儲存空間來源於一個稱為「預留空間」的區域,它的英文全稱是Over Provisio,簡稱 OP。

那麽「預留空間」是什麽呢?我將透過5個方面來介紹它的用途,讓大家近距離認識下。

提高寫入速度

在上面介紹快閃記憶體的基本知識時,我們談到快閃記憶體的寫操作存在一種「讀-改-寫」的情況,因為額外的讀和擦除操作,這種方法的耗時相比單純的寫入會增加不少,快閃記憶體使用的時間越長,空白的空間越少,這種操作越容易出現,快閃記憶體的讀寫效能下降的越快。

為了提升寫入的效能,我們可以先將新數據寫入到預留空間,此時上層系統就可以認為已經寫入完成,然後我們在後台將預留空間中的新數據和原數據塊中需要保留的數據合並到一個新的數據塊中,這樣就避免了頻繁的讀-修改-寫操作,從而可以大大提高寫入速度。

垃圾回收和整理

在上面介紹快閃記憶體的基本知識時,我們還談到刪除數據並不是立即清除空間,而是給數據頁打一個標簽,這樣做的效率比較高。這樣做就像我們標記了垃圾,但是並沒有把它們運走,時間久了,這些垃圾會占用很多的空間。這些垃圾空間就像一個個的小碎片,所以有時也把這個問題稱為碎片化問題。

雖然我們可以透過「讀-改-寫」操作來重新利用這些碎片空間,包括透過異步的「讀-改-寫」操作來提升上層套用的寫入效率,但無疑還是存在寫入的難度,實際寫入之前還是要先進行擦除。

為了解決上述問題,聰明的設計師們又想到了新辦方法:讓記憶體在後台自動檢測、自動整理儲存中的數據碎片,而不是等到寫入數據時再進行整理。

考慮到快閃記憶體的讀擦寫特性,當需要移除數據塊中部份碎片或者將不同數據碎片合並時,就得把需要保留的數據先放到一個臨時空間中,以免數據出現遺失,待儲存中的數據塊準備好之後再重新寫入,預留空間就可以用作這個臨時空間。

磨損均衡

快閃記憶體中每個塊的寫入次數都是有限制的,超過這個限制,塊就可能會變得不可靠,不能再被使用。這就是我們通常所說的快閃記憶體的磨損。

為了盡可能延長快閃記憶體的使用壽命,我們需要盡量均勻地使用所有的快閃記憶體塊,確保每個塊的使用頻率大致相同。這就是磨損均衡的主要目標。

假設我們發現塊A的使用頻率過高,我們需要將它的數據移動到沒怎麽用過的塊B去,以達到磨損均衡的目的。首先,我們需要讀取塊A中的數據,然後將這些數據暫時儲存到預留空間。然後,我們擦除塊A,將它標記為空閑。最後,我們從預留空間中取出數據,寫入到塊B。實際上,磨損均衡的策略比這更復雜,不僅僅是看使用頻率,還需要考慮其他因素,比如塊的壽命,數據的重要性等。

可以看到,預留空間在這個過程中起到了臨時儲存數據的作用。

不過你可能會問,為什麽不直接將塊A的數據復制到塊B,而需要一個臨時空間?

這是因為在實際操作中直接復制塊A的數據到塊B會帶來一些問題和限制。

假如直接進行這種數據復制,那麽在數據從塊A復制到塊B的過程中,塊A和塊B中都會存在一份相同的數據,如果有其他行程在這個過程中存取了這份數據,可能會產生數據一致性的問題。此外,如果移動過程中發生意外中斷,如電源故障,可能會導致數據在塊B中只復制了一部份,而塊A中的數據還未被擦除,這樣就可能導致數據遺失或者數據不一致的問題。

而如果我們使用預留空間,也就是引入一個第三方,就可以緩解這些問題。我們先將數據從塊A復制到預留空間,然後擦除塊A,最後再將預留空間中的數據寫入到塊B。在這個過程中,我們可以借助預留空間來實作一些原子性的機制,來保證數據不會遺失和數據的一致性。

錯誤校正

預留空間還可以用來儲存錯誤校正碼(ECC)。如果在讀取數據時發現有錯誤,可以用錯誤校正碼來修復這些錯誤,提高數據的可靠性。

很多同學可能也不了解這個錯誤校正碼的來龍去脈,這裏多說幾句。

我們知道電腦中的數據最終都是二進制的0和1,0和1使用硬件比較好表達,比如我們使用高電壓表示1,低電壓表示0。但是硬件有時候會出錯,本來寫進去的是1,讀出來的卻是0。為了解決這個問題,設計師們就搞出來個錯誤校正碼,這個校正碼是使用某些演算法基於要儲存的數據算出來的,儲存數據的時候把它一起保存起來。讀取數據的時候再使用相同的演算法進行計算,如果兩個校正碼對不上,就說明儲存的數據出現錯誤了。然後ECC演算法可以透過計算知道是哪一位出現了錯誤,改正它就可以恢復正確的數據了。

註意ECC能夠修正的二進制位數有限,因為可以修復的位數越多,額外需要的儲存空間也越大,具體能修復幾位要考慮出現壞塊的概率以及數據的重要性。

壞塊管理

當快閃記憶體單元變為壞塊時,預留空間可以提供新的快閃記憶體單元來替代壞塊,此時讀取對應數據時不再存取壞塊,而是透過對映表轉到預留空間中讀取,從而保證數據的儲存和讀取不受影響,提高了固態硬碟的可靠性和耐用性。

綜上所述,預留空間在提升固態硬碟效能,延長其使用壽命,提高數據的可靠性等方面發揮著重要的作用。

小米的最佳化

根據公開資料,小米將預留空間的占比從6.9%壓縮到了約3%。

那麽小米是怎麽做到的呢?以下是官方說法:

小米在主機端也基於檔管理深度介入了 UFS 的資源管理,透過軟件實作「數據非必要不寫入(UFS)」,透過軟件 + 固件實作「寫入數據非必要不遷移」,減少寫入量的同時也實作了更好的 wear-leveling 和 WAF

還有一張圖:

最佳化解讀

這裏用了一些術語,文字也比較抽象,我這裏解讀下:

UFS(Universal Flash Storage)即通用快閃記憶體儲存,可以理解為就是手機中的儲存模組。

「數據非必要不寫入(UFS)」也就是先把數據寫入到緩沖區,然後等收到足夠的數據之後(比如1頁),再寫入快閃記憶體單元,這樣就可以減少快閃記憶體單元的擦寫次數,自然就能延長快閃記憶體單元的使用壽命,推遲壞塊的產生。這個緩沖區類似於電腦的記憶體,如果突然掉電可能會遺失一部份數據,但是對於手機來說,突然掉電這個情況發生的機率極低,所以小米在這裏多緩存點數據對數據遺失的影響很小,不過還是需要註意緩沖空間有限,這個值也不能太大,具體多少小米應該經過大量測試之後做了評估。

「寫入數據非必要不遷移」 沒有細說怎麽做的,大概率說的是最佳化磨損均衡、垃圾回收和整理策略,沒事別瞎整理,整理的時候盡量少擦寫,目的還是延長快閃記憶體單元的使用壽命。

「增加壞塊預留」 小米可以根據使用者的使用情況調整壞塊預留區的大小,比如使用者是個重度手機使用狂,他用1年相當於別人用4年,小米系統就會增加壞塊預留區,以應對擦寫次數增加帶來的壞塊機率增加。註意這個調整是在雲端實作的,如果手機不聯網,這個功能還用不上。

wear-leveling:就是上面提到的磨損均衡,小米最佳化了均衡演算法,減少擦寫。

WAF:寫放大,Write Amplification Factor,縮寫WAF。寫放大就是上面提到的「讀-改-寫」操作引起的,因為擦除必須擦掉整個塊的數據,所以上層系統只需要寫一個頁的情況下,底層儲存可能要重寫一個塊,從頁到塊放大了寫操作的數據量。因為快閃記憶體的壽命取決於擦除次數,所以寫放大會影響到快閃記憶體的使用壽命。

概括來說就是,小米從儲存的預留空間中摳出來一部份作為使用者儲存,不過預留空間的減小,意味著壞塊管理、錯誤糾正等可以使用的空間變小,這些空間變小會減少儲存的使用壽命,所以小米又透過各種演算法延緩了手機儲存的磨損速度,如此則對大家的使用沒有什麽影響,而使用者又能多得一些儲存空間。

小米的測試結果

對於大家擔心小米手機儲存的壽命問題,小米手機系統軟件部總監張國全表示:「按照目前重度使用者的模型來評估,在每天寫入40GB數據的條件下, 256GB的擴容芯片依然可以保證超過10年, 512GB可以超過20年,請大家放心。」

同時一般固態硬碟往往都擁有5年的質保,而很多消費者往往會5年之內更換手機。因此按著這個壽命數據來看,普通消費者並不用太擔心「擴容芯片」的壽命問題。所以如果你的手機用不了10年,可以不用擔心這個問題。

當然更多的測試細節,小米並沒有透漏,比如讀寫檔的大小等。不過按照小米的說法,儲存的供應商也做了測試,沒有什麽問題。這個暫時只能相信小米是個負責任的企業,做好了完備的測試。

最後小米搞了這個技術,申請了專利,但是又把標準和技術方案貢獻給了UFS協會,同時還要求儲存芯片廠商設定了半年的保護期,也就是說技術可以分享給大家,但是請大家體諒下原創的辛苦,所以半年後其它手機廠商才能用上。

大家猜一下半年後其它手機廠商會跟進嗎?