微吼云上線多路互動直播服務 加速多場景互動直播落地
948
2025-03-31
拒絕“卡卡卡”
——手機超級文件系統的革新之路
喜渝
如果在手機上打開一張圖片,要默念三秒才能顯現,很多消費者估計都炸毛了。不幸的是,幾乎每一部安卓手機用了一段時間,都難逃“越來越卡”的命運。高清的照片、視頻占用的空間越來越大,手機剩余的存儲空間也就越來越少。
這其中的原因當然很多,但文件系統的“先天不足”是最重要的因素之一。安卓默認的文件系統EXT4,最初設計是基于磁盤式的存儲結構,隨著手機用戶的頻繁使用,手機存儲空間的碎片越來越多,應用程序讀寫數據就越來越慢。這就好比是剛搬新家,東西少,要找一個東西花不了幾分鐘,可住得越久,買的東西越多,又不收拾,要在滿滿當當的房間里找到你要的東西,就需要花更多時間。
如何能讓手機如行云流水般流暢,如何在安卓文件系統領域做到最快、最強?這次,我們想做點不一樣的事。
簽字畫押的“軍令狀”
我們首先想到的是F2FS文件系統。相比EXT4,F2FS文件系統“聰明”多了,不僅會主動幫你收拾房間,而且扔垃圾也不那么簡單粗暴了,先分清楚是“干垃圾”、“濕垃圾”之類,過段時間再集中處理。如果能用F2FS替代原有文件系統,是否就能極大提升手機運行效率,解決“越用越慢”的問題呢?
但此時,我們手里只有一個F2FS文件系統的開源原型,是國外的一名工程師在技術社區用業余時間開發出來的。由于不確定性大,哪個安卓廠商也不敢隨便用。而最早使用F2FS的M廠商,只因一次嘗試,就讓上千臺手機變成“磚頭”被退貨,錯誤數據多達好幾個T。
面對著同樣的風險,我們要不要走一回鋼絲?
我們召集了相關領域的專家一起討論使用F2FS模型的可行性。經過查閱社區的文檔和技術達人的實驗數據,大家一致認為,首先需要解決三類的風險:一是性能,怎樣使碎片整理動作本身不被用戶察覺,不影響手機原有的使用體驗;二是可靠性,不能出現文件丟失或損壞,更不能出現手機發生頻繁重啟甚至開不了機的情況;最后是壽命,就是讓文件系統不要“用腦過度”而影響壽命。
針對這三個風險,我們準備了初步的解決方案方向,等待上會評審。
當我在評審會上匯報完,讓整個技術管理團隊舉手表決時,偌大的會議室里鴉雀無聲,沒有人舉手。真的沒有人敢舉手啊!說白了,是越懂越害怕。
“大家都說說想法吧,我們先討論,再表決!”CBG軟件部總裁王博的一番話打破了沉默。
“我們對現有的風險是不是已經有了全面的認識,是不是最懂的專家已經參與進來了?雖然聽到這個方案,我也熱血沸騰,但細節是不是要澄清一下?”
“F2FS的JKim和社區maintainer老俞都全程參與了設計和開發,已經是業內最強陣容了。”
“這個開源模型,連S廠商都沒敢用,確實風險大。不過如果我們做成了,對軟件領域,乃至整個行業來說,都是不可估量的貢獻啊!”
……
幾個小時過去了,大家在革命性的創新和技術風險的權衡中反復討論。最后一致認為,CBG軟件部需要這樣的突破:“產品到了這個階段,如果我們不做成一些別人不敢做的事情,消費者憑什么一直選擇我們?用戶體驗最佳也不應該僅僅是一道標語!”
為了保證最終的方案能得到充分驗證,且風險可控,TMT管理團隊最后達成共識:首次在手機項目中采用商用實驗項目的方式,即小規模商用以控制風險,并進行跟蹤管理。這批手機一旦送到維修中心,會第一時間送回分析。
會后王博讓我把相關的專家組織起來,再做一次風險評估,并在紙件上簽字,讓我們每個人都明白在這樣一個系統中自己的責任。
“簽字畫押”之后,我們就開干了!
各個部門也派出了精兵強將,投入到這一場大仗中。OS部自不必說,CBG的軟工、硬工、2012內核實驗室、海思的硬件工程部、海思存儲芯片團隊都積極投入資源全力配合。
接下來,就看我們的了!
三大難題,難于上青天
要用F2FS替換現有文件系統,就好比器官移植手術。每一根神經和血管的接駁都馬虎不得,只有都搞對了,才能重新恢復心跳、血壓和呼吸。獲得新“器官”的手機,也將具備更強勁的運動和思維能力。
項目組分工協作,按照一開始評估的風險,開始了對“三大難題”的攻克。
第一個難題是性能。碎片整理本身會帶來消耗,這種消耗甚至對前臺的用戶體驗產生影響。如何讓F2FS聰明而省力地工作,是我們首先要考慮的。項目組先是做修補的工作,針對F2FS的一些不合理的設計進行優化。
這些修補工作盡管必不可少,卻無法在性能上有大的突破。后來我們發現,當手機剩余空間越來越小的時候,寫入存儲的性能會下降,尤其是存儲空間碎片多的情況下會急劇下降,有可能下降到原來的1/10,甚至5%。用戶會察覺到,往手機里存一張照片、一段視頻要用的時間明顯增加了,忍不住吐槽“好卡”。
為了解決這個問題,我們和海思一起做了多通道并發設計,通過芯片和軟件相結合的技術,在保障了系統可靠性的前提下,將寫入存儲的性能提升了6倍。這個突破到現在,我們也是業界No.1。同時,我們跟芯片驗證的同事一起,將相關性能指標放到了華為采購標準里,以保證我們對性能的追求。
第二個難題是可靠性。一般情況下,手機如果出現系統可靠性問題,最壞的可能也就是無故重啟。但如果文件系統破損,手機開機時可能無法獲取到相應的系統配置項,會導致反復重啟,甚至開不了機,這可是重大的質量事故了!
最典型的一類導致文件破損的原因是DDR跳變。這就好比是一個突變基因,一旦碰撞到原始數據,就會“感染”導致這個文件破損,而如果恰好遇到系統性文件,就會開不了機了……真的就像定時炸彈一樣,難以預測。這種不確定性,使我們沒有辦法窮舉所有的可靠性問題。
怎么辦?我們干脆反其道而行之——研究所有的故障模型,基于故障模型打免疫針,在故障還沒有發生之前主動預防,阻斷異常。
第三個難題有關壽命。文件系統頻繁地整理,必然損耗閃存壽命。我們不貪心,不要求手機“長生不老”,只希望至少做到大家普遍能接受的三五年不壞。
影響壽命的原因有很多,核心原因之一是“過勞”——寫放大。簡單說就是,要在手機上“寫”1兆字節的數據,為了避免掉電等異常造成的文件破損,操作系統就必須“寫”進去5兆甚至是10兆的數據。我們想了很多給它減負的辦法,比如通過文件系統和數據庫的聯合優化,讓數據庫和文件系統在寫之前先通個氣,這樣它倆就不必再做重復的工作了,也就自然延長了壽命。
同時,為了準確地預估出手機的存儲芯片壽命,我們還做了一個壽命預測模型。最早做出來的模型受限于采集數據渠道的影響,不夠準確。有領導曾挑戰過我們:“這個XX系數怎么算出來的?怎么能說這個產品發貨后一年半就要出現問題呢?而且又沒給出解決方案!” 但是隨著更多的大數據介入后,壽命預測模型也具備了參考價值。在這個基礎上,我們還有額外的一招拯救措施,比如,如果在大數據上看到這批機器的壽命確實老化得比較快,就可以推動升級,避免繼續惡化。
經過這些努力,即便是在最差情況下,F2FS都可以保證存儲的壽命在可接受范圍內。
很快,我們在EMUI5.0正式首發文件系統。Mate8用戶升級EMUI5.0后,在運行速度方面,用戶的滿意度有了明顯改善。
和“疑難雜癥”斗智斗勇
盡管文件系統上線前,我們已經進行了大量的測試和分析,但真正上線后,卻還是經歷了一次次的“驚心動魄”。
P9上市一個月后,有商用實驗用戶反饋說自己手機里的照片都沒了,所有人都懷疑是不是F2FS文件系統出了問題。一時間,整個文件系統的好手都被重新召集到上海來攻關。大家反復查代碼并比照故障現場日志,鏖戰了3個晝夜,卻感覺不像是文件系統能夠導致的問題。
正當我們不斷嘗試卻一籌莫展的時候,問題在我們手里復現了!大家趕緊撲上來,重復之前的操作,找到了復現的規律。通過查看底層日志確定,原來是有應用主動發出了刪除的命令,錯誤地清理了用戶的照片。順藤摸瓜,我們最終抓到了這個“流氓”應用。
大家總算松了一口氣,雖說確實不是文件系統的問題,但這也給我們提了個醒:為了避免類似的事故再次發生,我們從底層入手,提供了強大的安全保護機制,限制了“流氓”應用對用戶的數據的破壞。這下把這個問題徹底解決了。
這樣的“疑難雜癥”還有很多。
Mate20上市前,我們投放了少量的機器做Beta,剛用沒幾天,“用戶”老卞就打來電話,反饋微信出現嚴重卡頓。我們通過日志發現,微信陷入這個文件系統的時候,等待時間特別長,正常應該是微秒級,現在卻惡化了1萬倍!
要定位問題就要獲取更多的故障機。在PDU測試同事小李的幫助下,我們將復制的Beta版本單獨推給用戶,一旦問題復現,就請用戶及時反饋。
第二天凌晨1點多,有個Beta用戶說問題復現了,并且同意我們即時上門取故障機。阿杜連夜驅車幾十公里趕往用戶所在地,拿到了這臺“寶貴”的故障機。但是折騰一晚上,還是沒找到原因,到了上午9點多,又出來一臺,大家就打了一個熱補丁,由此拿到了一個關鍵變量的數據,同時反復查了幾十份日志……終于分析出了原因,并成功復現。
原來,在谷歌更新版本之后,部分應用出現了兼容性問題,如果手機解密之前,應用去訪問了未解密的文件,這個問題就可能發生。針對這個情況,我們在底層增加了加密訪問失敗后的處理機制,有效避免了異常操作帶來的卡頓。
其實,還有很多這種極難定位的問題,都是多個部門第一時間緊密配合完成的。
還能更快嗎?DRB會議的“光速打臉”
對于安卓手機來說,F2FS只是解決了用戶數據區的問題,可是手機里有較大的空間留給了系統分區,這個“大房間”不打掃,整體性能還是沒法達到最佳,系統分區里的剩余空間用戶也沒辦法使用。
我們不能阻止系統文件的增大,但如果要它更靈活一點、小一點,最好的辦法還是壓縮。
這個想法在業界不算獨創,S廠商早在2012年就做了一個壓縮文件系統,但由于性能損失太大甚至沒有進入開源社區。G廠商在2016年推出的AB升級機制,由于需要占用雙倍的分區來保存系統文件,所以也在力推壓縮文件系統Squashfs。
Squashfs是不是我們的機會呢?
經過研究發現,這個系統確實存在比較大的原生性能問題,這大概也是沒能廣泛推廣的原因。但我們在用戶場景上進行了初步測試,認為其代價相比收益還是可以接受的。于是,我上了DRB(設計評審委員會),信心滿滿地告訴大家:“Squashfs可以用!可以帶來正向的收益!”但下了會沒多久,我就發現,在系統應用場景,特別是像Camera這樣的重性能應用場景,手機每進行100次拍照后,會有5/6次出現慢1~2秒延遲,這是用戶所不能接受的。
于是,我第二次上了DRB,灰溜溜地告訴大家:“Squashfs用不了。”說這話時,我心里想,這就是傳說中的“光速打臉”啊!丟人丟大了!
但我們還是不想放棄。下來找了港城大的薛春和史亮教授,幫助我們研究壓縮文件系統的先進理論,去論證壓縮到底怎么壓,解壓縮怎么解,怎樣避免對性能的影響等。
只讀文件壓縮文件系統,主要是低端機受益,低端機的空間更小,兩個G的節約對用戶來說感知就非常明顯了。但同時低端機對性能的要求也最苛刻,稍有減弱,就沒法用了。可是,這個問題G廠商在大空間的高端機上都沒解決,我們如何突破?
有一天晚上,組里的兄弟們聊天時,小翔突然說:“我們把內存和磁盤結構改造一下,這個問題是不是就可以搞定了?”這句話讓我們恍然大悟!
這就好比,我們要給一個房間的物品打包,如果按以前的思路,就是把所有東西裝進一個巨大的箱子里。要找任何一樣物品,都需要在箱子里“大海撈針”。但如果轉化一下思路,提供N個1L容量的箱子,把東西分別裝進這些箱子,那找起來就簡單得多了。
沿著這個思路,我們設計了新的壓縮方式,提交到LZ4開源社區里,maintainer看到很支持,很快就合到主線里面去了。真沒想到,困擾我們這么長時間的難題,就這么解決了。華為P30發布時,系統文件分區就采用了我們最新的文件系統。
彼此信任的默契
回顧文件系統的開發歷程,感謝每一個兄弟部門的協作。如果沒有大家的精誠合作、風險共擔,我們不可能打造出自己的超級文件系統。
前文提到的多通道并發設計的方案,其實是一個有風險的方案。我記得海思的阿彪曾跟我說:“喜渝,我很害怕,這東西到底敢不敢合進去。”我們就一起去看,到底有可能在哪些場景出現問題。的確文件系統本身無法面面俱到解決這個問題,但從操作系統層面,所有場景都可以系統地來彌補。還有少部分方案需要我們當前做底層的驅動架構調整,海思的兄弟們也從未退縮,一起想辦法解決。如果不是互信的團隊,如果大家都只站在自己的業務田里做利弊權衡,這種有很大風險的技術突破很難做成。
和中軟的合作更是如此。記得定位P9“丟文件”問題的時候,大家都一起住在公司熬夜定位,實在熬不住就在旁邊睡會兒。當時,睡在我旁邊椅子上的兄弟就是中軟文件系統的PL斌田和他組里的云蕾。大家經歷兩天兩夜,沒有找到根因,犯困又睡不著,云蕾就開始拿著手機躺著復現問題,突然聽他大叫一聲,把我們幾個嚇了一跳!原來他居然“躺著”把問題復現了!大家一股腦從躺椅上爬起來,圍著他一頓狂問,終于找到了復現規律。從此這位兄弟被我們稱作“金手指”,是他洗清了文件系統的“嫌疑”。
這些故事還有很多很多。我們一起克服了種種困難,解決了一個又一個難題, 我想,這些彼此信任的日子會在時光中閃耀。
展望未來,我們將致力于最佳的消費者體驗,做出更多牛逼的作品!
本文為《華為人》版權所有,未經允許不得轉載。如需轉載請聯系編輯部hwrb@huawei.com
存儲 安全
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。