雜說快閃記憶體番外:手機為什麼越用越卡和快閃記憶體寫放大
也許你和我有一樣的感受,手機剛買時運行還比較流暢,可是過了一段時間卻越用卻卡。這是不是手機廠商的陰謀,逼迫我們升級手機呢?其實這除了和我們安裝的應用軟體越來越多,而國產app經常不請自來在後台偷偷運行有關外,另外和手機的存儲介質——快閃記憶體關係很大。
寫放大(Write Amplification)
我們前文介紹FTL
老狼:雜談快閃記憶體三:FTL時,介紹了快閃記憶體的存儲特性。我們知道了快閃記憶體寫入是以page為單位,而擦除是以block為單位,在寫之前必須擦除。我們也知道了為了延長快閃記憶體的生命周期和壽命均衡(Wear Levelling),FTL用LBA/PBA表來映射邏輯和物理操作單位,而一般的消費級SSD和eMMC有7%的空閑塊——OP(Over Provisioning)。我們今天來看看寫放大和它對flash性能的影響。
理解寫放大,我們假設要寫入一個4KB的數據,可是一個塊里已經沒有乾淨空間了,但是有失效的數據可以擦除,所以主控就把所有的數據搬到緩存或者OP空間,然後擦除塊,再加上這個4KB新數據寫回去,這個操作就造成了寫入放大,即本來是寫4K的數據,卻造成了整個塊(512KB)的寫入操作,也就是128倍放大。當然我們前文提到LBA/PBA並不是簡單的block,而垃圾收集和Trim對寫放大都有所減緩。但隨著快閃記憶體空閑空間越來越少,主控的騰挪空間也越來越少。IBM Zurich Research Laboratory做的研究證明寫放大和空閑凈塊關係極大,如下圖:
可以看出,在空閑塊少後,寫放大可以達到3到4倍。
我們新買的SSD和手機,空空如也的數據塊讓寫性能達到最大,而隨著程序和數據越來越多,寫入性能也逐漸下降。那究竟空閑塊少到多少才會性能下降,降到什麼程度呢?
數據
根據Anandtech做的實驗數據,我們la如下圖:
橫軸是時間,縱軸是寫入IOPS。隨著時間寫入越來越多的隨機4KB數據,開始100000的IOPS在某時刻劇烈下降,最後隨著空閑乾淨塊慢慢減少,穩定到了10000IOPS,效能下降到原來的10%!
當然最終用戶使用情況沒有這麼惡劣,但數據說明寫放大對效能的影響巨大。這也是為什麼高端企業級SSD的op空間巨大的原因,Intel的SSD DC3700的op空間達到32%,這讓它有了巨大的騰挪空間,它的曲線異常平滑:
這對伺服器市場非常重要。
結論
數據表明,我們對手機存儲空間或SSD使用大於75%後,寫入性能就會因為寫放大而大大下降。現在你是不是要考慮買個更大容量的手機了?
註:隨著擦除次數增多,壞塊出現會惡化寫放大,本文不做討論。
其他快閃記憶體相關文章:
老狼:雜說快閃記憶體一:關公戰秦瓊之 UFS VS NVMe老狼:雜談快閃記憶體二:NOR和NAND Flash老狼:雜談快閃記憶體三:FTL老狼:雜說快閃記憶體四:快閃記憶體硬碟介面大比拼老狼:雜說快閃記憶體番外:SSD硬碟如何進行日常維護和Trim老狼:雜說快閃記憶體番外:傲騰Optane與NAND快閃記憶體老狼:雜說快閃記憶體番外:我們的數據存在固態硬碟上安全嗎?歡迎大家關注本專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。同時歡迎大家給本專欄和公眾號投稿!
推薦閱讀:
※golang, node.js 與 python 文件處理性能測試
※世界五大類刀劍性能評比,武士刀進不了前三?
※JIT 為什麼能大幅度提升性能?