droidBooster 為什麼能夠十倍加速 Android 設備的性能?

介紹裡面提到 droidBooster 主要通過把 Dalvik 代碼轉換成特別針對 ARM 處理器優化的二進位文件,才達到提升設備性能的效果。如果是這麼簡單(我不確定有多難啦)的話,為什麼 Google 自己不可以做到,而需要收購這個軟體的開發商 FlexyCore 呢?所以 droidBooster 為什麼能夠十倍加速 Android 設備的性能,他們大概是怎麼做到的?

FlexyCore』s droidBooster is an Android accelerator that makes ten times faster the performance of an Android device. Its principle relies on improving the performance of an Android handset at build-time by generating highly optimized ARM binary from Dalvik code. droidBooster can be applied to any ARM based platform, any Smartphone range (high/low/mid) and is compatible with any Android system. Note that it can also be used to improve consumer devices.

via droidBooster by FlexyCore - ARM Connected Community


瀉藥

ARM的頁面上4個連接都是404,FlexyCore的主頁也是不知所云。沒有paper沒有代碼說個傑寶。

generating highly optimized ARM binary from Dalvik code 這句話說的很含糊,聽起來像是說從dalvik指令直接生成ARM的ISA。

ARM的指令集優化是很不好做的,同樣是ARMv7,Cortex A7和A8就差別很大,一個是integer弱float point強,一個則相反。另外SoC/chip vendor那麼多,quadcore和single core的優化也是不一樣的,這種差異必須在app層面就要考慮。比如說,A8 single core的跑openssl benchmark比A7 dual core強,但是考慮到A7擅長的float point,A7 dual core在跑視頻硬解碼時就比A8強很多。如果要把這些優化塞到編譯器里將會不可控制,因為ARM的市場分化太多。

如果真能把這件事做好,那麼其意義不僅僅是ARM平台,x86平台也一樣可以從中受益。因為x86在多核下的能力還遠遠沒有發揮出來-就絕大部分x86應用而言。

退一步說,如果FlexyCore的技術是基於dalvik的優化,那麼就是關於虛擬機的優化了,而這個問題我沒有能力給出任何意見。


謝邀。


不過慚愧,這個主題要從技術層面回答實在是略大。剛才上網搜索了一下,droidBooster的資料能找到的實在不多,我從我的理解來回答一下問題吧。


第一點:droidBooster的加速是如何做到的


不帶jit的dalvik虛擬機的執行較慢,基本上每一個指令都要經過翻譯器才能做實際的動作。

後來dalvik後端接了jit,對於熱點代碼區域會生成機器碼,熱點區域在開始幾次熱身以後,後期執行就直接會以機器碼執行,會比較快。


我只看過一點點dalvik的code,少許看了一點jit。以我看的這部分來說,推測會有兩點機會可以做到性能的大幅提升:

1.目前dalvik jit的翻譯單元是"dalvik指令",一條dalvik指令會對應多條arm彙編。那麼我們有理由推斷,目前的jit對機器碼做的優化很少,優化的範圍限定在了對單條dalvik指令的翻譯內,而沒有做跨指令的優化,更高階的優化更不用說了。因為jit是運行時作用的,jit編譯器本身就會佔用大量的cpu時間和耗費電量,所以目前的dalvik jit較簡陋也是合理的。

看簡介droidBooster是在buildtime起作用,那麼關鍵在於,如果droidBooster有辦法將dalvik指令在buildtime準確翻譯成中間碼或者機器碼,那麼就可以借用已有的gnu toolchain來對整片的代碼做優化。

當然說起來比較容易,實際做起來應該有很多難解決甚至無法解決的問題。

我雖然沒有用過droidBooster,但是我猜測,以droidBooster宣稱的10倍加速,會有很多程序跑起來會非常不穩定。


激進的優化和執行的穩定性一直都是一個矛盾。

2.針對處理器而不是指令集的優化。

android目前完全沒有針對特定處理器的優化,對指令集有dalvik指令內的優化。

有什麼區別呢?

指令集就是我們所說的armv7,armv8等等,處理器就是實際的ca7,ca9,ca15等等。

同樣1.2g的arm,ca9跑的就是比ca7快,因為內部硬體構架不一樣(流水線等有區別,更詳細的就不知道了)。

有的處理器(例如ca7)可以根據硬體的特點,做出arm指令層面的優化,比如根據流水線的特性來安排調整生成的機器碼的訪存指令的順序。


說了好多,但是好像什麼都沒說,因為這個主題實在牽扯太多。


手機回帖,歡迎討論。


萬分感謝。


對於droidBooster,我不熟悉,但是我知道ARM確實有機制優化JAVA代碼執行速度的。

ARM有項技術,叫做Jazelle - ARM

Jazelle是ARM上的虛擬機,ARM處理器可以進入特定狀態,直接執行JAVA碼。由於Jazella是軟硬體結合的(常用指令硬體直接執行),在時間和空間上均具有很高的執行效率。

儘管dalvik沒有號稱是JAVA,但是其本質上還是個JAVA虛擬機,善用Jazelle,將會對其執行效率有很大的影響,10倍是完全可能做到的(硬體執行比軟體模擬效率高很多很正常)

我猜測droidBooster用了Jazelle。

話說回來,為什麼Google的dalvik沒有用Jazelle優化呢(或者說沒有宣稱用呢)?我覺得原因在以下幾個方面:

1、Google不想被綁死在ARM這條船上,這個從後來其它公司也推出了基於Intel架構的Android設備可以看出。

2、不同版本間的ARM有一定不同,到了多核時代,問題可能更複雜。

3、Google認為沒必要或者不是很急需!JAVA的東西,大部分並不是計算密集的東西,少量計算密集,對效率有更大影響的東西,Google也提供了機制,允許應用程序開發商調用二進位庫(用C編譯的二進位代碼),達到更高效率。

那麼設備生產者(例如三星,華為)為什麼不用Jazelle優化,在Google基礎上優化針對自己機器的Dalvik庫,達到更好的運行效果呢?

1、工作量太大,而且可能有版權問題(可能要把自己的成果源碼公布)

2、諸如上面第三條,實際應用程序執行效果可能不明顯(但是跑分軟體效果應該好)

3、Android升級太快,生產商跟不上。如果用了自己優化的系統,就必須要延遲很多時間才能推出新的軟體升級,這樣反而拖累了公司形象。

也就是說,設備生產者自行優化,花費很大,效果不明顯,還不如倚靠Google,搞硬體軍備競賽。

在針對給定硬體平台的設備上(軟硬體升級不頻繁),諸如一些面向專業市場產品,Jazelle就很有優勢了。

話說回來,如果是蘋果也走這條路,蘋果一定會好好用Jazelle這個特性的。

Google收購FlexyCore,可能期望其能夠提升低主頻機器的執行效能,尤其移動設備,電力消耗很重要。


ART?


推薦閱讀:

HTML5 移動開發未來可否取代 iOS 和安卓?
酷安的大V有什麼用?
如何實現iOS和安卓跨平台的開發?
既然 Android 免費,那 Google 是靠什麼賺錢的?
Windows平板電腦能否作為大屏手機使用?

TAG:Android | DalvikAndroid |