一、提升性能核心要素

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/
————————————————
版权声明:本文为CSDN博主「pppaass」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/pppaass/article/details/51416694

QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)相关推荐

  1. 秋色园QBlog技术原理解析:性能优化篇:用户和文章计数器方案(十七)

    2019独角兽企业重金招聘Python工程师标准>>> 上节概要: 上节 秋色园QBlog技术原理解析:性能优化篇:access的并发极限及分库分散并发方案(十六)  中, 介绍了 ...

  2. vilatile 深入理解java虚拟机_深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)...

    本套课程从虚拟机的发展历史,虚拟机的内存结构,对象的分配与回收以及字节码,类加载等多个方面深入地对Java虚拟机进行了剖析.内容详实,语言通俗易懂.理论结合实践,让学习本套视频的朋友可以更快的理解虚拟 ...

  3. Win10 安装 Ubuntu 20.04 双系统完美避坑教程 (非虚拟机)

    文章目录 前言 注意 安装 Win32 Disk Imager 下载 Ubuntu 20.04 镜像 制作 Ubuntu20.04 安装盘 系统磁盘分区 查看磁盘分区方式 安装 Ubuntu 20.0 ...

  4. Proxmox VE 6.0管理指南——10. Qemu / KVM虚拟机

    10. Qemu / KVM虚拟机 Qemu(Quick Emulator的缩写)是一个模拟物理计算机的开源虚拟机管理程序.从运行Qemu的主机系统的角度来看,Qemu是一个用户程序,可以访问许多本地 ...

  5. QEMU/KVM虚拟机Win11黑屏问题解决

    ArchLinux系统下,通过qemu/kvm虚拟机环境安装的win11(UEFI+GPT),8月份以来一直使用正常.最近看到一个错误想纠正(如下图),考虑到可能是权限问题,便将win11的qcow2 ...

  6. 服务器kvm虚拟机安装uos系统,qemu/kvm 安装uos-server-20-enterprise-1030-arm64 异常

    [环境] 设备型号:神州 鲲泰R522 CPU:华为 鲲鹏920 系统:uos-server-20-enterprise-1030-arm64 [问题描述] 宿主机已安装uos-arm64,想通过系统 ...

  7. QEMU+KVM学习笔记

    1 QEMU和KVM的关系:      现在所说的虚拟化,一般都是指在CPU硬件支持基础之上的虚拟化技术.KVM也同hyper-V.Xen一样依赖此项技术.没有CPU硬件虚拟化的支持,KVM是无法工作 ...

  8. KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机

    一 .KVM 简介 KVM (名称来自英语: Kernel-basedVirtual Machine 的缩写,即基于内核的虚拟机) , 是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核 ...

  9. python虚拟机优化_KVM虚拟机管理及性能优化

    KVM虚拟机管理及性能优化 本章接上一篇文章继续为大家讲解,如何使用KVM的操作命令,对虚拟机进行管理(虚拟机开启关闭.挂起恢复.删除虚拟机.通过备份配置文件重新恢复删除的虚拟机).KVM文件管理(磁 ...

最新文章

  1. mllib逻辑回归 spark_Spark架构详解——分布式流计算内存批处理迭代运算框架
  2. 添加商品php,php – 为首次购买者添加商品到购物车
  3. 网站SEO优化可通过哪些数据分析来解决问题?
  4. 重复数据删除:块级技术VS.字节级技术
  5. PWN-PRACTICE-BUUCTF-7
  6. python tornado websocket_基于Python Tornado框架的websocket服务
  7. 计算机中2的四次方为啥是4位,计算机基础试题2(4页)-原创力文档
  8. java 继承与多态的区别_【转】 【JavaSE】继承与多态的理解与区别
  9. B. A and B and Compilation Errors
  10. LICEcap 录制Gif动画
  11. firefox 模拟手机
  12. 问题解决:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'
  13. 清除centos上面kde软件的一个脚本,基本好用
  14. 记一次某制造业ERP系统 CPU打爆事故分析
  15. 网络安全博客与文章分享:
  16. 宝塔面板windows建站教程_宝塔面板建站步骤全过程详解(实战笔记汇总)
  17. python画结构图_【实战案例】五分钟!用python绘制系统架构图
  18. 第三周上机实践项目 项目4--委派任务
  19. Android中ButterKnife的使用
  20. 前端vue异形轮播图案例(带源码)

热门文章

  1. Spring IO Platform简介及示例
  2. LiveRTMP 之RTMP直播高效推送缓冲区
  3. MVC中Spring.net 对基类控制器无效 过滤器控制器无效
  4. golang错误处理(实验楼)
  5. python之初体验(一)
  6. 在VS2005下使用libjson -- wangj
  7. 吴恩达机器学习资源汇总帖
  8. 【算法】一个简单的支持向量机(SVM)原理
  9. [云炬学英语]每日一句2020.9.5
  10. 科大星云诗社动态20210313