Linaro 大幅改进了 AOSP 标准版 Android 4.0.4 的性能表现,在不同类型的基准测试中成绩提高了 20-30% 到 500%。进步最大的方面归因于对libc
库中字符串操作的优化,而且他们用了跟 Google 不一样的编译器和编译参数来生成 Androud 程序。Linaro 在香港举办他们的 Linaro Connect Q2.12 会议,会上演示了他们的Android 版本和标准版本的对比,演示在一台配备TI OMAP4430 芯片的Pandaboard 设备上进行。选择该特定设备是因为它刚好两个版本都支持,测试并不难在其他设备上重现。基准测试的结果是标准Android 跑到30 FPS 的3D 图形测试,Linaro Android 能跑到60 FPS。
InfoQ 对 Linaro 从事 Android 开发工作的工程师 Bernhard Rosenkränzer 进行了采访,请他说明他们对 Android 的改进工作。
InfoQ:我们说的是多大程度的性能改进?能给个数字吗?
BR:还是那句话,看你要做什么事情。如果是手写的汇编代码,根本不调用共享库的,显然不会有多少性能提升,反过来,当测试场景严重依赖于memchr()
和strlen()
的时候,让 Linaro 版比标准版 Android 快个五倍一点都不难。以显示的应用来说,估计速度提升 20%-30% 比较合理。
InfoQ:我看到有的测试标准版 Android 跑到 30 FPS 的,Linaro 能跑到 60 FPS。是什么测试有这种成绩?
BR: 那个是 0xbench 的 3D 部分,测试环境是 Pandaboard 配 720p 的屏幕。这个测试还不算成绩最好的,只不过它除了测试的成绩漂亮,画面也很漂亮。考虑到观众里面有不少非技术背景的,我们不能只拿出干巴巴的结果数据。
InfoQ:你们具体做了哪些改进?
BR:有好几个方面。按实际改动的代码量来算的话,Bionic(即 Android 的 libc)是改得最多的。我们把其中的多数核心字符串处理函数替换为针对 ARMv7 CPU 家族优化的版本, 尤其针对 Cortex A9 做了优化。
我们用 Linaro 的工具链(基于 gcc 4.7)重新生成了整个系统,编译参数也一样。(标准版 Android 的构建系统看上去并没有规划对不同设备设置不同编译参数,也就是说没有用上 -mcpu=、-mtune= 这些参数。)Android 默认加了 -fno-strict-aliasing 参数(对于优化结果是否正确由代码是否遵循 C/C++ 别名规则决定的情况,关闭优化)——我们选择去掉这个参数,同时修正 Android 代码树中所有违反 aliasing 规则的地方。(有几个子目录我们认为改起来太费劲,不值得,所以在不连累 OS 其他部分的前提下,单独针对几个目录保留了 -fno-strict-aliasing 参数。)
我们还更新了内核,同时微调了一些设置。其实内核还有一些优化的空间,例如我们的内核还保留了完整的调试支持、性能计数器等等。这些功能都是有性能代价的,如果不是像我们这样做开发平台的,显然应该关闭这些功能去追求运行速度。
还有一件事情需要特别声明:我们没有修改任何驱动。(有人怀疑 FPS 提升是因为我们在驱动里面关了 vsync。)我们的成绩并不依赖于特别的硬件平台,演示中用了 Pandaboard 只是因为它是仅有的同时支持 AOSP 标准版和 Linaro 版 Android 的现成平台,用不同硬件的话没法直接比较。Linaro Android 在其他板子上有同样优秀的表现,,比如 Origen、Snowball 和 iMX6。
InfoQ:这些改进会整合回标准版 Android 吗?
BR:我们打算进一步测试之后提交给 AOSP。至于会不会被接纳到下一版的 Android 并不由我们决定。有些 Android 修改版制作者(如 CyanogenMod)已经在着手整合我们的修改。
InfoQ:Linaro 的改进会不会只在成员企业的小圈子里使用?
BR:这件事也不由我们决定。我们把代码准备好了,用不用是他们的事。
InfoQ:Google 对这件事情有什么回应吗?
BR:有一位 Google 工程师在相关 Google Plus 帖子上给了个“+1”,除此之外,没有。
InfoQ:你跟 Google 其实有合作吗?
BR:有的,我们曾经提交过一些补丁让 Android 能在 gcc 4.6 和 gcc 4.7 上编译。有些被接纳了,有些被忽略掉,因为他们已经在内部的树上用别的方法修正了问题。
InfoQ:Linaro 有没有别的 Android 相关项目正在进行中?
BR:我们每个月都为成员企业的开发板发布 Android 版本(且每天发布快照版本),放在 https://android-build.linaro.org/ ,一般已经整合了我们所有的新改进。
除了一般性的性能优化,我们还会做平台整合(集成驱动之类),以及移植开发工具。例如 Linaro Android 包括 busybox、perf、lrzsz 和 gator(执行 ARM 的 DS-5 图形化调试 / 性能测量工具需要)。
编辑提示:Linaro 是 ARM、Freescale、IBM、Samsung、Ericsson 和 TI 共同组建的非营利组织,它的任务是巩固和优化 ARM 平台上的开源软件。
评论