MIUI V6 引入的Linux系統內核內存優化技術分別是什麼?

  • - Smart CGroup 內存智能分組技術
  • - ZRAM 調度優化技術
  • - Bitmap Cache 緩存優化技術
  • - TrimHeaps 內存回收技術
  • 還請簡單的解釋下


開發狗怒答。玩的linux,對android和MIUI不太了解,不過Android基於linux內核,一些特性應該差得不遠,盡量用口水話說。

1.Smart CGroup ,好熟悉,如果不出意外,應該是基於CGroup對Android作了適應性優化後的版本。CGroup原本是linux內核的一種資源管理機制,你也可以說它是個資源管理工具。主要用於限制、記錄、控制進程所使用的資源數,以及保證進程組之間的相互隔離。看現在相關介紹,MIUI應該是著重對Memory控制器進行了修改,以更好地控制限制APP的內存使用。我個人覺得修改內核是個很冒險的嘗試,優化不當反而容易OOM。

2.zRAM,又是個玩linux必須熟悉的東西,也是linux內核里一個內存相關的模塊。它的作用,通俗不科學地來說,就是在內存中划出一部分當做虛擬盤,作為linux的交換分區,把一些任務壓縮放裡面去,提高內存使用率,好吧這裡理應扯到zSWAP,不知道android現在有沒有劃交換分區,我印象中kitkat AOSP之前一直沒有劃交換分區,所以這裡談Android還是不提它了,zRAM更適合本身沒有交換分區的嵌入式系統。說到具體對手機使用的影響,zRAM可以在執行多任務時候釋放更多的可用內存,另外嚴格而言zRAM還會耗費更多的系統性能和續航,畢竟實時的壓縮、解壓縮需要耗費CPU,不過如今手機處理器應該都普遍性能過剩,內存才是瓶頸。值得注意的是,osx10.9(不知道有沒記錯。。)推出的內存壓縮技術也是借鑒於zRAM。

(寫完這段朋友才告訴我:kitkat有zRAM,請允許我哭一會....上面的東西不改了,那MIUI需要修改的東西應該也不算多,甚至可能只是寫上4.4的新特性高大上一下,具體是如何還需要測試。。。)

3.看名字貌似是一套管理圖片流的緩存機制,具體實現不清楚,不過目的也能猜出一二,就是優化內存佔用,優化圖片流的載入速度,從而提升app流暢度。

4.內存回收機制,這個不清楚了,android用的內存回收機制和linux的不是一套。不過可以隨便猜測一下,可能通過演算法控制系統gc的頻率,過渡頻繁的gc可能導致卡頓感,不合理的gc又可能導致OOM,應該也是為了優化應用內存使用的技術。

(然後朋友又說了,這個也是kitkat的新特性,請原諒我在這方面的無知。。。)

正當我納悶怎麼都是跟內存有關的技術時,才重新看了下題主的問題。。。媽蛋。。。


實際上這裡更多特性cm10.1於3.1內核都有了,ksm,zRam,bitmap cache delete.

回答下某人問題

你以為內核刷刷很容易?前提是有。本人使用MB855,photon 4g,是MB860,A4G的鄰居機器。MOTO被GOOGLE收購那會本來出4.0的,結果沒了,勉強用2.6.39內核上了ICS+,bug不少。

譬如:CHROME閃退,google maps閃退,不兼容硬解,不兼容4.1的MediaCodec OMX.XX.h264通用解碼特性

後來是三星I9103去搞了3.1的內核,去年3月XDA A4G發起了項目去移植內核[KERNEL] [3.1.10] Olympus (Atrix 4G) Kernel …,當前我的3.1內核就是那次項目的成果。至於米1那真的是謝天謝地用的是高通的方案,8260有開發實力的廠商多的是,所以就出現了到目前升級KK沒有太多障礙的結果。至於Google的問題,google要求升級對應的android版本要升級到相應的內核以支持一些新特性,但是不是所有硬體廠商都能放出新內核,譬如GALAXY NEXUS就沒4.4,就是因為Ti不再支持omap4460。就是這樣的作風,即便你廠商費儘力氣用舊內核適配了4.4,Google不會讓你通過兼容性測試,直接後果廠商不能安裝Gapps。所以對於Google而言,只要是通過它的測試的ROM,都會具有他所稱的特性,至於第三方的rom他不能保證。同樣的道理,miuiv6不能保證所有他兼容的設備具有以上特性。

就miui團隊而言,沒這個水平給linux擦屁股,不要和我說什麼 miui 易用性好 適合國人之類 云云,我不愛聽。抄襲就是抄襲,垃圾就是垃圾,充滿鄉土氣息的rom基本上就是那幫混跡rom論壇的人討論的。

就miui這個水平,把art調教好了就謝天謝地了。


這幾個裡面最常見的應該是ZRAM

ZRAM 屬於Linux Kernel的功能,簡單的說就是放在內存上的壓縮swap

這個嘛壓縮率有限,可能會加重CPU負擔,對於2G 3G 內存的手機來說效果不是那麼明顯,1G的手機要划出專門的區域來存貯壓縮的內容似乎也沒啥太大價值

TrimHeaps應該不是Kernel即優化,應該是Dalvik層的。屬於kitkat中的優化,鏈接https://android.googlesource.com/platform/dalvik/+/kitkat-release/vm/alloc/HeapSource.cpp

Bitmap Cache 應該不是Kernel層的東西, 不是太清楚小米說的是不是kitkat 中的點陣圖重用技術

As of KITKAT, any mutable bitmap can be reused by BitmapFactory to decode any other bitmaps as long as the resulting byte count of the decoded bitmap is less than or equal to the allocated byte count of the reused bitmap. This can be because the intrinsic size is smaller, or its size post scaling (for density / sample size) is smaller.

鏈接 http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

Smart CGroup這個名詞一定是小米發明的。Linux只有CGroup,android中前後台處於兩個不同的CGroup,我覺得xiaomi說的應該是這個改動rootdir/init.rc,Android 4.4中的new feature

更多的可以參考Thread Scheduling in Android


android上早就有了,只不過是小米再拿出來寫到ppt上。


發布會完後一直在關注網路動態,希望看到一些問題反饋,以便改進。今天看到題主的問題,果然有關注的,不過似乎陷入口水戰。手機答,見諒。

1,都有,但不局限於這些,僅這些達不到好的優化效果

2,cgroup,zram是kernel的東西,和安卓版本無關,很早就有,可以去查kernel代碼。即使如此,仍然有些問題需要解決。

3,bitmap, trim heap也與安卓版本關係不大


MIUI 6 是打算適配到 Android 4.2,4.3 的,不然無法官方支持米2,紅米等機型。

這些特性都是 Android 4.4 或者最新 Android 開發版中的特性。MIUI 小組做的事情應該是把它們剝出來,獨立於 Android 系統版本。

不要以為 MIUI 會直接拿 Linux 動刀,那沒有必要。這些特性都是 Android 官方引入的特性,不是 MIUI 團隊做的,當然即使 Android 團隊也並沒有原創這些特性,這些本來就是 Linux 有的東西,Android 只是做一個取捨,需要打開哪些特性而已。

MIUI 做的事情應該是讓這些特性更好的適配到 4.4 以下的 Android 版本。當然,這其實也是一件偉大的事情。


推薦閱讀:

TAG:小米科技 | Linux | 米柚MIUI | Android |