QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)
一、提升性能核心要素
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 虚拟机双系统方案)相关推荐
- 秋色园QBlog技术原理解析:性能优化篇:用户和文章计数器方案(十七)
2019独角兽企业重金招聘Python工程师标准>>> 上节概要: 上节 秋色园QBlog技术原理解析:性能优化篇:access的并发极限及分库分散并发方案(十六) 中, 介绍了 ...
- vilatile 深入理解java虚拟机_深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)...
本套课程从虚拟机的发展历史,虚拟机的内存结构,对象的分配与回收以及字节码,类加载等多个方面深入地对Java虚拟机进行了剖析.内容详实,语言通俗易懂.理论结合实践,让学习本套视频的朋友可以更快的理解虚拟 ...
- Win10 安装 Ubuntu 20.04 双系统完美避坑教程 (非虚拟机)
文章目录 前言 注意 安装 Win32 Disk Imager 下载 Ubuntu 20.04 镜像 制作 Ubuntu20.04 安装盘 系统磁盘分区 查看磁盘分区方式 安装 Ubuntu 20.0 ...
- Proxmox VE 6.0管理指南——10. Qemu / KVM虚拟机
10. Qemu / KVM虚拟机 Qemu(Quick Emulator的缩写)是一个模拟物理计算机的开源虚拟机管理程序.从运行Qemu的主机系统的角度来看,Qemu是一个用户程序,可以访问许多本地 ...
- QEMU/KVM虚拟机Win11黑屏问题解决
ArchLinux系统下,通过qemu/kvm虚拟机环境安装的win11(UEFI+GPT),8月份以来一直使用正常.最近看到一个错误想纠正(如下图),考虑到可能是权限问题,便将win11的qcow2 ...
- 服务器kvm虚拟机安装uos系统,qemu/kvm
安装uos-server-20-enterprise-1030-arm64 异常
[环境] 设备型号:神州 鲲泰R522 CPU:华为 鲲鹏920 系统:uos-server-20-enterprise-1030-arm64 [问题描述] 宿主机已安装uos-arm64,想通过系统 ...
- QEMU+KVM学习笔记
1 QEMU和KVM的关系: 现在所说的虚拟化,一般都是指在CPU硬件支持基础之上的虚拟化技术.KVM也同hyper-V.Xen一样依赖此项技术.没有CPU硬件虚拟化的支持,KVM是无法工作 ...
- KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机
一 .KVM 简介 KVM (名称来自英语: Kernel-basedVirtual Machine 的缩写,即基于内核的虚拟机) , 是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核 ...
- python虚拟机优化_KVM虚拟机管理及性能优化
KVM虚拟机管理及性能优化 本章接上一篇文章继续为大家讲解,如何使用KVM的操作命令,对虚拟机进行管理(虚拟机开启关闭.挂起恢复.删除虚拟机.通过备份配置文件重新恢复删除的虚拟机).KVM文件管理(磁 ...
最新文章
- mllib逻辑回归 spark_Spark架构详解——分布式流计算内存批处理迭代运算框架
- 添加商品php,php – 为首次购买者添加商品到购物车
- 网站SEO优化可通过哪些数据分析来解决问题?
- 重复数据删除:块级技术VS.字节级技术
- PWN-PRACTICE-BUUCTF-7
- python tornado websocket_基于Python Tornado框架的websocket服务
- 计算机中2的四次方为啥是4位,计算机基础试题2(4页)-原创力文档
- java 继承与多态的区别_【转】 【JavaSE】继承与多态的理解与区别
- B. A and B and Compilation Errors
- LICEcap 录制Gif动画
- firefox 模拟手机
- 问题解决:AttributeError: 'module' object has no attribute '_rebuild_tensor_v2'
- 清除centos上面kde软件的一个脚本,基本好用
- 记一次某制造业ERP系统 CPU打爆事故分析
- 网络安全博客与文章分享:
- 宝塔面板windows建站教程_宝塔面板建站步骤全过程详解(实战笔记汇总)
- python画结构图_【实战案例】五分钟!用python绘制系统架构图
- 第三周上机实践项目 项目4--委派任务
- Android中ButterKnife的使用
- 前端vue异形轮播图案例(带源码)