X86上的Android:性能与兼容可否兼得?

分享

234编者按:自从CES2012上Intel发布了针对移动市场的Medfield平台以来,市面上出现过一些基于X86的Android手机。它们甚至能在部分测试中实现单核战双核,双核战四核,那X86手机实际应用情况又真的是这么理想吗?

本文作者为爱搞机特约作者、技术达人“炮神”@ioncannon

 

nEO_IMG_13

大部分Android应用都使用基于Dalvik Java代码开发。理论上,由于Dalvik代码在系统的虚拟机中执行,在x86的ATOM平台上不会有性能损失。但由于虚拟机执行效率的有限,对于一些高性能追求的应用,谷歌允许开发者使用原生的C语言代码。而原生代码是针对硬件平台编译,x86,ARM或是MIPS都有其相应的二进制文件。通常来说,针对ARM平台编译的二进制代码,x86的处理器是无法直接运行的。而主流的安卓产品均采用ARM处理器,尽管很早之前,Google的Android NDK就引入了x86编译的选项,但至今还是有相当一部分应用只针对ARM平台进行了编译,这就造成了x86安卓平台兼容性问题。

为了解决这一问题,Intel在推出Android手机系统的ATOM平台之初,就引入了“二进制转换”(Binary Translation)这一功能,来解决x86无法直接运行ARM库的问题。针对ARM编译的二进制代码会被ATOM处理器翻译成x86执行的代码,从而运行包含为ARM编译的原生代码的应用。

 

nEO_IMG_14

通过这一功能,x86 ATOM可以兼容市面上的绝大部分应用。最新的采用Atom Z2580处理器的联想K900已经宣传自己能兼容市场上的TOP 20000应用。

在解决了兼容性问题后,加上x86 Atom单核战双核、双核秒四核的彪悍性能(跑分),x86似乎已毫无黑点,横扫市场指日可待。但遗憾的是,x86所宣传的“兼容”与“性能”,由于目前的生态环境的限制,并不能兼得。

 

首先我们来简单的看一下目前x86在Android的生态环境情况:nEO_IMG_11

nEO_IMG_01

尽管TOP 20000的应用已经可以被兼容,但个人统计了豌豆荚市场中最热门的250个应用,其中31%的应用没有使用原生代码。剩下的69%含有原生代码的应用中,只有8%包含了x86库,剩下61%只有ARM原生库。也就是说,只有这8%的应用,x86可以发挥自己的最佳性能,而绝大部分,都需要进行二进制转换去进行兼容。

 

进一步,在对性能需求较高的游戏应用中,原生代码的使用更加广泛。nEO_IMG_12

nEO_IMG_02

通过统计当乐网中最热游戏TOP100,我们发现,只有6%的游戏不含原生库,胜于94%的游戏都含有原生代码。在这其中,只有5%的游戏含有x86原生库,剩余的将近90%的游戏,都需要Atom处理器通过二进制转换运行为ARM编译的代码。

 

nEO_IMG_03

当然,出于对高性能的需求,不少游戏都包含了armv7a的运行库。尽管如此,我手上的联想K800(Atom Z2460)手机也可以通过二进制转换进行执行。但是经过测试,包含Neon SIMD代码的原生库则无法执行。

说了这些,我们明白,相当一部分数量的应用都需要x86通过二进制转换去兼容ARM代码运行。那么,x86性能如此强悍,在兼容执行ARM代码时,表现又如何呢?这是长期以来为Intel和厂商所回避的一个问题。

 

本次测试对象:联想K800手机,算是首款在国内上市的x86手机。处理器为Atom Z2460 1.6GHz,单核双线程,PowerVR SGX540 400MHz GPU。nEO_IMG_IMG_20130509_184350

 

首先我们清楚安兔兔,这是x86最喜爱的跑分之一。nEO_IMG_att_x86

尽管Z2460只有单个核心,但其得分依旧超过了大部分低主频的双核ARM A9,相比高主频的双核A9/Krait毫不逊色。而采用双核四线程的Z2580更是能向着三万分冲击,直指目前最高端的4+4核处理器。

 

但是,使用ARMv7库后,Z2460的表现不容乐观,总分一下子缩水了三分之二,CPU得分更是跟单核A8差不多…nEO_IMG_att_arm

 

接下来的一系列测试也显示了同样的情况:当使用x86原生库时,我们可以发现ATOM的单线程性能异常强悍,特别是内存性能nEO_IMG_05

nEO_IMG_06

nEO_IMG_07

而一旦采用兼容模式,二进制转换运行ARM库,性能就大大下降,1.6GHz的Atom甚至只有1GHz Cortex-A7的水平都不到。

 

nEO_IMG_08

CoreMark也是同样的情况,性能损失相当可观

 

作为兼容的代价,性能损失只是一方面。另一方面则是功耗的增加。在本文的前半部分已经展示过,目前热门游戏很少有x86原生库,为了方便对比测试,我们选取了幽灵古堡(Epic Citadel)应用作为游戏的代表。

Epic Citadel是一个基于虚幻引擎的demo,画面相当精美,光影特效也不错nEO_IMG_Screenshot_2013-05-09-15-05-21

nEO_IMG_Screenshot_2013-05-09-15-05-38

 

本次测试我们使用Intel GPA System Analyzer来记录CPU的占用率和手机工作的电流nEO_IMG_QQ截图20130509135224

 

使用Epic Citadel自带的Benchmark场景进行测试,结果如下nEO_IMG_epic

使用x86原生库(上)获得了平均45.9FPS的成绩,而兼容ARM原生库成绩为31.2FPS,大概有30%的差距。

 

同时分析发现,整个过程中,通过二进制转换执行ARM库和原生运行x86库相比,CPU占用率和手机消耗电流上,均有一定的增加。

nEO_IMG_e01

nEO_IMG_e02

相比之下,兼容运行ARM库相比原生执行x86代码,成绩下降了30%,平均的CPU占用率从58.9%提高到了73.4%,而平均电流从621mA提高到了717mA,增加了约100mA,相对来说CPU的功耗增加了约400mW,还是相当可观的。

当然CPU占用率只是个侧面反映,由于测试时内核频率调节默认为Ondemand,尽管占用率差异不大,但二进制转换执行ARM代码时,CPU运行在高主频的时间更长,从而导致功耗的增加。

 

最后总结如下,可以看到二进制转换相比原生执行x86代码,损失的性能还是很可观的,在性能诉求的应用中,损失可高达50%以上。在一些游戏类应用中,也会带来约400mW的CPU功耗的增加。nEO_IMG_all

 

总的来说,x86的Android之路还很漫长,尽管通过Intel和厂商的努力解决了兼容和性能问题,但相对恶劣的生态环境使得性能和兼容不可兼得。但遗憾的是,Intel在今年表示 “手机业务不图销量 只玩高端”“尽管市场上销量最大的是千元手机,但目前还不是英特尔的方向,英特尔旨在做出现在世界上性能最高的手机” ,在一定程度上,相对较低的占有率还是难以引起开发者的注意和调动开发者的积极性,在生态环境的改善上还是令人担忧。

 

了解更多新酷炫设备,敬请关注@爱搞机

 

相关链接:

拒绝忽悠 移动GPU全解读(一)

拒绝忽悠 移动GPU全解读(二)

高品质影音感受 vivo Xplay上手体验

性能霸主 Galaxy S4“4+4核”正式版评测

“Super”在哪?小米2S性能对比测试

 

03-34-41-58



《转发到微信!
关注微信公众账号
爱搞机
爱搞机 爱搞机
玩智能手机就上爱搞机
机情华强北
机情华强北 机情华强北
华强北机情信息
雷锋网
雷锋网 雷锋网
移动互联网创业和创新
超好玩
超好玩 超好玩
推荐超好玩的移动游戏
超好玩的推荐移动游戏
左林右狸
左林右狸 左林右狸
雷锋网创始人林军、笨狸二人转
负责八卦和无厘头,绝不卖萌!
  1. 从文章描述来看,应该是31%+8%是可以发挥性能的,其余的是需要二进制转换的,而且话说有这么多应用需要native code么?

  2. 31%的Java应用都是解释执行,要么都算能发挥性能,要么都不算,也就是要么69%和8%比,要么100%和39%比,结果取了个最低值8%,这还不叫黑出翔么。这还是指按文章的数据统计来看。

    • 下面的测试全部是基于X86原生库和ARM原生库的效率对比,当然是用8%和61%的对比啊,这有什么问题?

      • “只有这8%的应用,x86可以发挥自己的最佳性能” 这句话的意思是100个程序中只有8个是原生运行,但是那31%和arm一样是解释执行,一模一样的情况,就不算了么

          • 我说了啊,要么 69%和8% 要么 100%和39%比, 单取个8%,不就是31%在arm那算是原生的,在x86那又不算原生了么? 最终给个 8% ,然后又说非原生的都蜂鸟级别,这不是黑出翔么?

    • 其实关键的一点不在于应用的占比,而在于你一个高端机如果8%的大型游戏性能不佳,这个高端机的形像就一下子下去了,至于小游戏,玩玩斗地主什么的千元机也可以胜任,如果只是快个0.1秒啥,用户根本感觉不到。

  3. 这些评测怎么各种黑intel啊?
    你拿arm来跑x86库试试?
    intel是有损失,arm是根本跑不了,不兼容!~
    当初不兼容的时候,你黑没关系.
    现在把兼容性完善了,又黑性能有损失.
    8%?我怎么觉得应该是39%?
    而且你取得top250.有多少是必用的?
    一个手机里面装250个软件的人可没多少.
    我相信对于必用的软件,绝对超过90%是含有x86库或者是不含原生库的.
    毕竟一个软件公司,肯定是以用户体验至上的.不能因为基于x86构架的用户群体小,就放弃这部分用户.
    有这样的公司,只能说他傻.

    • 问题是X86就是“屈就”在ARM横行的Android上啊。至于top250的问题,没有人让你装250个啊,这是一个概率问题,只能说平时用软件只有8%的可能可以发挥X86手机的实力。当然你常用的如果是刚好都用那8%里的应用,那又是另外一回事了,也不排除这个情况。至于你“相信”必用的软件绝对超过90%有X86或不含原生代码的,真的一点说服力都没有,至少没有这个测试中的有说服力。

      • 你一直强调8%,但事实是31%+8%.
        这个概率算是很大了.
        就像@sikele 说的,arm库的只需要x86编译一下就行了.
        作为一个软件公司,不能因为用户群体小就放弃这部分的用户.
        兼容问题需要硬件厂商督促软件厂商来做适配.
        而且我相信有点责任心的软件厂商一定会为x86做适配.
        不做适配的厂商,要么就是懒,要么收了arm钱 你懂的.

        • arm不会发钱…它只负责架构,会给钱的是高通这类厂商,寻求针对性优化。厂商不给x86做适配很正常。x86这弱爆的市场占有率….没必要多花一大笔钱做优化。占有率高,你就是神,厂商都绕着你走。

        • 对了..8%是发挥最佳性能..看清楚文章。也就是说31%是和arm一样被公平对待,61%是无视x86,8%是arm、x86区别对待。运行库又不一样。如果硬要说发挥性能..那么99%(大概吧)都可以发挥..只是发挥的怎样而已。剩下1%就是那种带neon代码的,完全不能运行的那些【高通表示无压力,谁不给俺做优化就是在找死】

    • 大多数应用支持下x86就是编译下的事情,他们太懒了。。。。

      • 移植不是那简单的,至少他的NDK代码如果有汇编级别的代码都要重写,此外还要考虑内存的字节对齐,浮点操作的差异,还有汇编级别的大小端,以及NERO移植到SSE。当然保证了程序的正确性,直接移植过来的代码性能也不一定好还要再调优一下。
        其实以android的碎片化程度,有这个精力,游戏厂商们也许也可以再适配很多个机型了,毕竟只要收入大于成本有利润的话,他们一定会干的。

    • 但是目前arm不需要跑x86库,全部软件都为arm设计,所以文章最后提及x86的Android之路还很漫长(就现在这x86占有率…路还远着)。等到软件厂商重视x86时,那就不一样了,目前是个渣没错。光有性能没操作体验谁会买单?这文章不是黑..我是觉得说的比较公平

  4. 安卓 IOS WP8 都是跑ARM的U。X86任重道远啊。据说英特尔为平板和换手机专门设计了新构架凌动CPU不知道兼容进步多少。