遇見ART第二部:好,但還有機會更好 - Android

By Margaret
at 2013-11-22T02:14
at 2013-11-22T02:14
Table of Contents
Cody Toombs 在 Android Police 發表了一篇名為 Meet ART, Part 2: Benchmarks -
Performance Won't Blow You Away Today, But It Will Get Better 。他拿了六套
跑分軟體,看看這六套跑分軟體在 Nexus 5 上,Dalvik 與 ART 的數字差多少。我大致
翻譯了一下內容,希望對於大家有幫助。
開始前…目前 ART 只有三台 Nexus 能使用:Nexus 5,Nexus 7 2013 與 Nexus 4
。我推測其原因為:CPU。由於 ART 的原理是「在使用者安裝 app 時,將 app 重新
編譯成原生代碼。因此不再需要 Dalvik 虛擬機器運行」,藉此提昇效率。原生代碼
與 CPU 息息相關。目前 ART 尚屬於實驗中的開發階段,因此可能僅針對 Qualcomm
的 Snapdragon 進行處理。所以使用 Samsun Exynos 的 Nexus 10 2012 與 nVIDIA
Tegra 3 的 Nexus 7 2012 因此無緣。這是我的推測啦…將來應該都會加入支援才是
。
===========================================================================
網誌版:http://blog.duothinking.com/2013/11/android-art.html
本文內容與圖片皆來自於 Cody Toombs 發表於 Android Police 的 Meet ART,
Part 2: Benchmarks - Performance Won't Blow You Away Today, But It Will
Get Better 。本文為翻譯。
遇見 ART 第二部:跑分 - 現在的效能表現足以能讓你興奮,但是還有機會更好
作者:Cody Toombs
也許你已經聽說過 ART 以及 ART 如何增進 Android 的速度與效能,不過真實的
表現如何?新的 ART 不再負擔 Dalvik 的許多包袱,因此不再需要那麼多系統資
源。這聽起來很棒,可是 ART 離成熟還很遠,而且也還沒調整好。我針對 ART 做
了電力的測試,看看這個新的執行階段是否真的能夠應付熱切的期望。ART 確實達
成了某些承諾,但是我要先警告你,接下來你所看到的測試結果可能無法打動你。
實際比對
老實說吧,跑分軟體其實不準確也不可靠。即使在精準控制下環境條件都一樣,依
然可能出現差距相當大的結果。然而,在量化效能以及數值紀錄上,跑分軟體也是
唯一的選擇。此外,大部分的跑分軟體都是使用 NDK(Native Development Kit)
編譯而成,因此使用 ART 執行階段也不會再有其他助益。儘管有這些限制,結果
中依然出現了一些引人注目,出乎意料的部分,有助於我們對於這個新的執行階段
的效能可以有更進一步的認識。
如何測試
在完全沒變更過的 Nexus 5(連 root 都沒有)上,Dalvik 執行階段與 ART 執行
階段各跑至少四次。為了確定不會有其他應用程式影響,每次測試前都要先重開機
,並且靜置五分鐘。除了圖片中的六種跑分軟體外,我還用 Chrome 跑了兩套瀏覽
器跑分軟體 SunSpider 與 BrowserMark,不過分數看不出明顯的差別。好了,那
麼我們就來看看跑分結果吧。
Linpack for Android
取得良好測試結果的一個重點就是要確定跑分軟體測試的項目與期望值符合。許多
跑分軟體都是用 NDK 寫成的,只有少數選擇 SDK。我選擇的跑分軟體中第一個同
時也是最符合期望的就是 Linpack,一個在許多知名平台都提供跑分程序的知名跑
分軟體。Linpack 執行了一系列的浮點運算,然後據此產生一個分數。在閱讀完
Linpack 的說明後,我認為明顯的該選擇它:「跟處理器的浮點運算能力相較,
這個測試比較能反應 Android 的 Dalvik 虛擬機器的狀態」。感謝 ART,分數比
Dalvik 還要高了 10 到 14 個百分點,還不錯。
Dalvik vs. ART Benchmark Results : Linpack
Linpack for Android
Dalvik ART
Single Thread 135 149 10.93%
Multi-Thread 336 383 13.82%
Real Pi Benchmark
計算 π 的無限小數位數一直都是個流行的處理器壓力測試,而且是個適合我們的
測試。因為大多數的測試方式都是測整數計算,而且完全避免浮點運算。搭配著
Linpack 的結果一起看,可以涵蓋基礎的數學運算。Real Pi 在 計算「算術-幾
何平均數(AGM)」與「快速傅立葉變換(FFT)」公式部分是用 NDK 寫成,而「
梅欽類(Machin's)」公式則是用 Java 來處理。在原生代碼(NDK)部分,ART
比 Dalvik 快了 3.5。這或許是因為介面的優化,而不是數學計算能力上的差異。
比較重要的是 Java 這方面的測試快了 12%。(附註:數字越小,表示越好)。
Dalvik vs. ART Benchmark Results : Real Pi
Real Pi
Dalvik ART
AGM+FFT Formula (2,000,000 位數) 21.48 20.76 3.49%
Machin's Formula (10,000 位數) 51.39 46.01 11.69%
Quadrant Standard
前面的測試高度著重於數學計算的能力,該來針對系統其他能力作點測試了。
Linpack 與 Real Pi 的測試結果顯示 ART 在某些方面確實有改進,但是
Quadrant 的結果幾乎讓人嚇一大跳,可能好過頭了。ART 的 CPU 分數幾乎是
Dalvik 的兩倍,這表現遠優於我們所聽過最樂觀的估算。至於在 I/O,2D 與
3D 繪圖的測試方面,差距小到可以忽略。Dalvik 在記憶體測試分數高了 ART 有
9 個百分點。
Dalvik vs. ART Benchmark Results: Quadrant
Quadrant Standard
Dalvik ART
Quadrant Standard 8,435 11,980 42.03%
CPU 19,751 38,548 95.17%
Mem 13,371 12,269 -8.24%
I/O 6,556 6,612 0.85%
2D 301 301 0.00%
3D 2,196 2,172 -1.09%
3D Mark
我曾經懷疑是否要用完全使用 NDK 編譯而成的跑分軟體,因為理論上 ART 應該造
成不了什麼影響。然而,測試結果中很有趣的 Dalvik 執行階段多次領先。很難推
導 Dalvik 在這邊表現較好的原因,但我接受各種可能性。
Dalvik vs. ART Benchmark Results : 3D Mark
3D Mark
Dalvik ART
Ice Storm Score 17,623 17,274 -1.98%
Graphics Score 18.067 17.919 -0.82%
Physics Score 16.271 15,406 -5.32%
Graphics Test 1 (FPS) 93 93 0.00%
Graphics Test 2 (FPS) 68 67 -1.47%
Physics Test (FPS) 52 49 -5.77%
AnTuTu Benchmark
把「效能」更進一步地分成許多細項加以分析。安兔兔有助於揭露一種模式:ART
在浮點運算上有顯著成長這件事情越來越明顯,但是在整數運算上並沒有明顯的增
進。在「RAM Operation」的強勢表現指明了 ART 更妥善的運用了快取,而不是直
接對記憶體 I/O。這些高分的地方表示運行 Dalvik 的成本很可觀,需要消耗更多
資源。其他地方除了 Storage I/O 之外都沒有顯著到需要注意,這也許意味著一
些特定程序的最佳化。UX Dalvik 明顯的低分,但是不清楚安兔兔這個項目指的是
什麼,所以可能沒什麼關係。
Dalvik vs. ART Benchmark Results : AnTuTu Benchmark
AnTuTu Benchmark
Dalvik ART
AnTuTu Benchmark 23,899 23,655 -1.02%
UX Multitask 3,593 3,421 -4.79%
UX Dalvik 2,233 1,639 -26.60%
CPU Integer 3,050 2,887 -5.34%
CPU float-point 1,751 2,049 17.02%
RAM Operation 956 1,078 12.76%
RAM Speed 1,774 1,757 -0.96%
GPU 2D graphics 1,617 1,627 0.62%
GPU 3D graphics 6,941 7,026 1.22%
Storage I/O 1,355 1,521 12.25%
Database I/O 628 653 3.98%
CF-Bench
Chaifire 這隻同時使用了 SDK 與 NDK 編譯的跑分工具的測試結果帶來了許多猜
測。再一次,原生代碼的部分 Dalvik 再次擁有幅度雖小但是令人難以理解的領先
。我們能看到整數計算的部分也對 Dalvik 比較有利。再一次證明浮點運算有著大
幅度的強化,這次領先幅度有 23 到 33 個百分點。
Dalvik vs. ART Benchmark Results : CF-Bench
CF-Bench
Dalvik ART
Native MIPS 3,518 3,416 -2.90%
Java MIPS 759 707 -6.85%
Native MSFLOPS 1,205 786 -34.77%
Java MSFLOPS 537 665 23.84%
Native MDFLOPS 606 489 -19.31%
Java MDFLOPS 391 521 33.25%
Native MALLOCS 23,499 19,318 -17.79%
Native Memory Read 10,613 9,161 -13.68%
Java Memory Read 1,833 1,835 0.11%
Native Memory Write 4,004 3,798 -5.14%
Java Memory Write 2,095 2,044 -2.43%
Native Disk Read 646 471 -27.09%
Native Score 34,433 33,414 -2.96%
Java Score 8,708 8,925 2.49%
Overall Score 18,998 18,720 -1.46%
其他有趣的測驗
切換執行階段後的首次開機需時通常不會是標準測試項目,但是這個時間長度一定
會引起你注意,不要懷疑。我記錄的時間包含了 "Android 正在進行最佳化…" 一
直到出現解鎖畫面為止。這台機器上有 149 隻 app。
Dalvik vs. ART Benchmark Results : Boot Time
First Boot Clocked
Dalvik ART
App 最佳化 1 分鐘 21.4 秒 9 分鐘 54.5 秒
開機到出現解鎖畫面 1 分鐘 48.4 秒 12 分鐘 36.4 秒
其他表現
雖然數字在比較上很有用,但是光靠數字看不透全貌。跑分軟體通常只是在短時間
內將硬體催到極限,然後換一套測試又再次把硬體催到極限。可惜的是,這種測試
方法會忽略了那些不容易測量的細節處。我沒有好方法來測試改進過的記憶體管理
(尤其是在垃圾回收 garbage collection 這方面)或是更佳的多執行緒管理。雖
然我沒有辦法將這些特色量化,但是我可以證明。瀏覽器的經典測試:甩頁面。盡
可能的快速甩動頁面,並且看看畫面能保持多少頁面內容。繼在 Davis 的巨大的
HTC One 評論中對 Mobile 模式的 Chrome 一陣狂操的測試後,證明了 Nexus 5
上強化過的 SoC(註:HTC One 用的是 Qualcomm Snapdragon 600 1.7GHz,
Nexus 5 用的是 Qulacomm Snapdragon 800 2.3GHz)在 Dalvik 下一樣無法維持
頁面的完整性。但是在 ART 環境中,一個像素都沒有掉過。你自己看。
https://www.youtube.com/watch?v=JGyktLPvORU
為了公平起見,將 Chrome 切換成 Desktop 模式然後跑一樣的測試。不管是哪個
執行階段,畫面都很容易呈現大片的空白。但是可以發現 ART 的渲染比 Dalvik
還要快。可以期待 ART 的弱點被最佳化後,在 Desktop 模式可以實現完美的捲頁
。有一位名為 spogbiper 的使用者貼了他自己用兩台 Nexus 7 2013 比較的影片
也可以證明。跑 ART 的那台看起來反應比較快。
https://www.youtube.com/watch?v=9CfU_-bBJ50
結論
跑分的結果與影片描繪出 ART 今日的地位。ART 一定可以有所作為,但是現在看
來 ART 還不成熟,與 Dalvik 沒有明顯的差距。ART 的浮點運算與基本反應有明
顯的優勢,但是也就這樣而已。在整數運算,應用程式可執行性或是其他許多方面
,ART 只有微幅或甚至沒有任何優勢可言。事實上,目前看起來玩遊戲的使用者們
最好還是繼續使用 Dalvik。
為什麼跑分的成績沒有令我們震驚?如果讓我猜,應該是因為發展中的 ART 首要
是確保「能運作」以及「穩定」,之後才是最佳化。如果是這樣,那麼現在 ART
裏面應該還有一些原始碼是用來檢查錯誤以及記錄行為用的,以確保 ART 的運作
如同設計一般。這些甚至可能比我們使用 Dalvik 還更消耗系統資源。ART 輸給
Dalvik 的測試項目中,其分數都很接近。ART 的後續版本可以期待其效能的大幅
增長。
目前現實的問題是:現在值得切換到 ART 嗎?很明顯的 Google 並不建議一般使
用者這麼做,而我傾向於同意 Google。雖然 ART 目前看來很可靠,而且我感覺反
應也比較好-但有可能只是心理作用。但 ART 不穩定造成應用程式當機的情形卻
是存在的。你在使用的 app 中,只要有一個 app 你需要切回 Dalvik 才能運作,
這個不便的負面效益遠大於 ART 帶來的那一點點效能上的正面效益。我完成這系
列後,我在 KitKat 應該會繼續使用 Dalvik 執行階段吧。而且我相信對大多數人
而言 Dalvik 還是比較好的選擇。
--
Tags:
Android
All Comments

By Emma
at 2013-11-24T22:56
at 2013-11-24T22:56

By Edith
at 2013-11-27T01:15
at 2013-11-27T01:15

By Frederica
at 2013-11-29T09:10
at 2013-11-29T09:10

By Ingrid
at 2013-11-30T18:32
at 2013-11-30T18:32

By Madame
at 2013-12-02T10:04
at 2013-12-02T10:04
Related Posts
s3原廠設定疑問?

By Caroline
at 2013-11-22T00:23
at 2013-11-22T00:23
類似poweramp可以播wma的軟體?

By Aaliyah
at 2013-11-22T00:20
at 2013-11-22T00:20
手機與ipad同時登Line

By Agatha
at 2013-11-22T00:14
at 2013-11-22T00:14
推薦好用的行事曆app

By Hardy
at 2013-11-21T23:54
at 2013-11-21T23:54
手機與ipad同時登Line

By Frederica
at 2013-11-21T23:46
at 2013-11-21T23:46