一、提升性能核心要素
1、将OPENGL 接口进行穿透调用,下面对opengl穿透做个小结
2、在arm开发板上打开kvm特性,这个qcom&mtk都是实现了的,只需要打开开关即可
二、ANDROID OPENGL 业务实现细节解释
1、 OPENGL命令队列是确定了,可是命令的参数,有的是系统给的,有的是上一个命令计算的结果,例如纹理操作,首先调用API创建一个纹理,得到纹理标记,然后后面再使用API操作该纹理时,就是使用这个纹理标记的。因此如果遇到这个创建纹理的API,则要把以前积累的API队列传到host端,依次执行,最后得到这个API的结果,然后回传,这个过程是循环执行,直到遇到最终API后,把剩余的API队列传到HOST端,这一帧才算完。
2、 OPENGL命令队列有时候根据一个API的结果会有变化的,APP的四个绘制过程只是把系统给的参数计算完,如果遇到需要API计算参数的,同样会先把积压的API计算完,然后根据结果选择分支路径。所以ANDROID系统的那四个过程并不是完全独立的,它们之间有一些重叠。最好的APP,就要把这种重叠降低到最少。APP想要运行效率高,就是要非常利索的一次生成命令队列,减少打断。
三、opengl 远程调用技术小结。
A:业务层面
1、 本来是一帧的命令队列一次性传递,但由于有打断,所以实际情况是一帧的命令队列分批传递。
2、 一些特殊的API耗时比较严重;一些接口并不需要回传参数;一些接口是远程调用特有的,例如合成过程都综合在一个远程“接口”中,后端一遇到这种标记就知道要合成了。
3、 一些特殊的API会由于业务约束被分解为数个API进行远程调用,这个情况会在opengl 1.0中非常常见,后续的版本则会少一些。
4、 API1.0 = 271 API2.0=208 EGLAPI=43 远程调用API=25 总共547个接口,只熟悉其中核心的43+25+50?+50?来个接口,生僻或者看名字就知道干啥的就没有细细研究。
B:技术层面
1、 每个API中通过包装API标记、参数,得到字节序列,写入PIPE驱动。
2、 由于VM内存页分配不是连续的,PIPE驱动会把远程数据地址分几次传递给QEMU。
3、 QEMU得到地址后,经过地址转换,获得远程数据,也是分批写入socket的。
4、 OPENGL THREAD也会分几次接收到远程数据,解析得到API标记和参数。
5、 依次根据API标记调用API。
6、 得到结果后由OPENGL THREAD写入socket。
7、 QEMU从socket得到结果,经过地址转换,将数值写入相关内存区域。
8、 VM读PIPE驱动得到结果后,一次远程调用结束。(其中VM读PIPE驱动和OPENGL THREAD 执行是并行运行的)
C:性能层面
1、 普通应用一帧的耗时在10-30毫秒,特殊应用一帧的耗时就非常差了。
2、 一次远程调用的耗时在3571.9微秒,去掉OPENGL API执行时间耗时在2367.8微秒。
D:优化层面
1、 业务方面:检查每个API是否有无效操作,去掉无效操作,应该能大幅提升性能。
2、 技术方面:去掉socket技术,去掉一个进程,将OPENGL THREAD合进QEMU,应该能较小的提升性能。
*我的github有源码,2016年初完成的,贡献给社区,性能比Android真机差一点,15MS左右的延迟
很多朋友私信问性能怎么样
1、操作桌面、一般的app都是比较流畅的
2、操作复杂的游戏APP比较卡,会出现丢帧现象
3、使用gfxinfo工具检测性能,会看见15~20MS的延迟每一帧
很多朋友私信问有没有完成过程
1、需要实体机的代码,调通kvm特性
2、下载google android源码,最好是android 5.0 ,因为我只在那上面试过,这份代码是vm android,内核使用goldfish版本
3、将qemu交叉编译到实体机上,尝试跑通android 虚拟机,这个过程有很多BUG要解,耐心点,最好使用我提供的qemu版本,我在那上面解过BUG,且我的qemu是从标准qemu分支拉出来的,最重要的我这个qemu能穿透opengl接口,有GPU虚拟化方案和input虚拟化办法,并没有使用android模拟器的qemu,你们可以试一试android的qemu
4、将我提供的OpenglRender编出来,运行在实体机中,它通过socket与qemu通信,执行一系列的opengl操作,并将虚拟机显示在一张surface中,最终虚拟机界面会出现在实体机中
5、对android比较熟悉的人,会很快实现的,当时我实现这个的时候对android一窍不通,一步一步的摸索
6、android虚拟机双系统论文地址http://systems.cs.columbia.edu/projects/kvm-arm/
各种设备虚拟化理论http://www.virtualopensystems.com/