秋刀猫的日常

虚拟机与apple bitcode

2015-12-24 15:40

test

布特勒•兰普逊(Butler Lampson)1992年在他获得图灵奖时发表的演说中引用了大卫•韦勒(David Wheeler)的名言:”计算机科学中的任何问题都可以通过增加一个中间层来解决”

这个话说得很大,但至少对于计算机科学的性能问题,是完全不成立的,加一层只能变慢…

虚拟机技术的引入解决了软件一次编写到处运行的伟大梦想,但仅从Java VM (Dalvik/ART)看来虚拟机技术最大的缺点在于访问内存的次数的增加,虚拟机中的虚拟寄存器不能有效地复用处理器真实寄存器而造成性能损失。访存次数的增加也从另一方面增大了软件本身逻辑过程中的cache miss。

实体处理器运行的关键路径是取址->译码->执行,如果执行中需要从外存DDR中访问数据,则load到寄存中再计算。但对于虚拟机,关键路径则变成了,取址->软件译码(switch/goto)->读入虚拟寄存器到寄存器->计算->结果从寄存器写回虚拟寄存器。代码密度大为下降。

曾经就有设想,如果制造出一种类似字节码的中间代码,在安装到机器时进行编译,这样即可保证闭源的需求,同时自动适应各种硬件,也不需要虚拟机的存在了。

Apple的bitcode做到了,而且更牛逼的是把这一层放在了服务器上,在下载应用时根据客户端的硬件属性直接给编译出最适合当前硬件的二进制代码。这对于完全掌控AppStore的苹果来说做起来顺理成章,此后即便老版本的软件也能针对将来推出的最新处理器feature做出优化了!积累下来,以后做硬件架构改变的代价将会很小。也许以后Apple会出自己的处理器指令集吧,arm/x86终归是别人的…