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 虚拟机双系统方案)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php对角线数组代码,php数组内容查找
- 下一篇: Cgroup 研究报告