AliOS Things KV组件的写平衡特性
摘要: KV組件的寫平衡(磨損平衡)特性就是通過異地更新、垃圾回收等策略來平衡flash介質各個存儲區塊的磨損程度,以避免某些“特定”存儲區塊因過度使用而形成壞區,從而延長flash的使用壽命。
前言
KV組件是AliOS Things中一個以Key-Value方式進行持久化存儲的輕量級組件,主要為基于nor flash的小型MCU設備(Micro Control Unit)提供通用的Key-Value持久化存儲接口。KV組件支持寫平衡(磨損平衡)、掉電保護特性,且具有相當低的footprint。這里主要介紹KV組件在設計寫平衡特性時的一些考量。
What – KV組件的寫平衡特性是什么
對于flash介質而言,它是有一定的擦寫次數限制的。如果針對介質上一個固定地址進行重復的擦除、寫入,將會導致該區域的使用壽命降低,甚至出現介質損壞的情況。KV組件的寫平衡(磨損平衡)特性就是通過異地更新、垃圾回收等策略來平衡flash介質各個存儲區塊的磨損程度,以避免某些“特定”存儲區塊因過度使用而形成壞區,從而延長flash的使用壽命。
Why – KV組件為何需要寫平衡特性
KV組件的設計初衷是為了給基于nor flash的小型MCU設備提供一個可以存儲配置信息的模塊。對于單個配置信息而言,一般所需存儲的字節數大多在十幾個字節~幾百個字節量級,而一般nor flash的最小擦除單位(sector)都在4K字節以上,且根據flash介質需先擦再寫的特點,如果沒有寫平衡特性,每次新寫入或更新配置信息都會帶來一次flash介質擦除操作,這將大大影響flash介質的使用壽命(一般nor flash的擦除次數限制大約10萬次左右)。
下表是flash介質在有無寫平衡特性下重復寫入使用壽命的理論計算對比:
(限制條件:flash擦除sector大小為4k, 擦除次數限制為10W次,每日寫入次數5000次)
根據上表的對比,KV組件的寫平衡特性在幾百個字節量級的寫入情況下起碼可以延長flash 8倍以上的使用壽命。
How – KV組件寫平衡特性的實現考量
由于小型物聯網嵌入式設備的硬件資源較為匱乏,對code size以及RAM的占用size比較敏感。所以基于資源消耗的考量,寫平衡特性在KV組件中的實現遵循make it simple原則,主要依賴以下兩個策略來實現:
Key-Value鍵值對采用順序寫入、異地更新的方式,即不再在原存儲位置擦除重寫,而是在其余空閑位置寫入新鍵值并將原鍵值標記無效等待回收。這樣既可以減少flash的擦除操作次數,又可以提高flash的空間利用率,也避免了對“特定”存儲區塊過度使用的問題。
示意圖如下:
當flash存儲區塊的剩余可用空間達到閾值時,會觸發垃圾回收機制。垃圾回收機制采用基礎的SGC算法進行資源回收釋放,即當系統觸發垃圾回收時,從當前寫入塊的下一個存儲塊開始依次檢查存儲塊的管理狀態,若存儲塊的管理狀態為Dirty狀態,則將該存儲塊中的有效數據依次挪向垃圾回收預留的空閑存儲塊,當數據遷移完成后,會擦除Dirty存儲塊并標記可用空閑狀態。
示意圖如下:
小結
KV組件的寫平衡特性,在兼顧footprint需求的同時,也能有效的提升flash的使用壽命。不過也是由于footprint的要求,寫平衡特性在算法的實現相對較為簡單,在資源更豐富的場景下,可以采用更復雜高效一些的平衡算法。
總結
以上是生活随笔為你收集整理的AliOS Things KV组件的写平衡特性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 低代码发展专访系列之八:低代码平台能够打
- 下一篇: 低代码发展专访系列之六:低代码平台能解决