[Exchange and share] 编译了支持Gfxstream后端的qemu
Tofloor
poster avatar
mozixun
Moderator
2024-06-28 16:33
Author

谷歌为了解决虚拟机图形效率低下的问题而写了一套gfxstream协议,它可以让支持gfxstream-backand(比如Cuttlefish跑的AOSP)的虚拟机图形效率至少达到70%(而且这个数据是cuttlefish在WebRTC有很多损耗的情况下测试结果),目前我编译了带gfxstream支持的qemu 9.0.1和Gfxstream宿主后端的deb包,有坛友能否帮忙测试一下我编译的qemu能否运行gfxstream,效率又如何?谢谢!blush

需求:需要Wayland显示协议,deepin v23下建议安装weston/Sway试一下

这是使用Sommelier开启虚拟机Wayland应用教程:https://crosvm.dev/book/devices/wayland.html

Gfxstream宿主端deb(解压后安装):https://wwi.lanzoup.com/iOuS122yocpa

Qemu 9.0.1并加入gfxstream支持版本:qemu-gfxstream.tar.gz

Reply Favorite View the author
All Replies
135******40
deepin
2024-08-12 17:30
#1

楼主好,请问下,gfxstream性能达到硬件性能的70%是哪里得到的结论,我自己部署cuttlefish运行android14,测试gfxstream的性能还不如drm_virgl,是我哪里弄错了吗?

Reply View the author
mozixun
Moderator
2024-08-12 17:34
#2
135******40

楼主好,请问下,gfxstream性能达到硬件性能的70%是哪里得到的结论,我自己部署cuttlefish运行android14,测试gfxstream的性能还不如drm_virgl,是我哪里弄错了吗?

不是,我在CSDN上看到,以及我自己部署了A12镜像得出来这个结论

而且,cuttlefish由于Wayland会话是模拟出来而不是宿主系统直接运行的,必然导致性能大幅下滑

Reply View the author
135******40
deepin
2024-08-13 19:19
#3
mozixun

不是,我在CSDN上看到,以及我自己部署了A12镜像得出来这个结论

而且,cuttlefish由于Wayland会话是模拟出来而不是宿主系统直接运行的,必然导致性能大幅下滑

感谢楼主的回答,我自己用一台电脑部署的ubuntu系统,理论上wayland都是运行在ubuntu上的,android图形通信在cuttlefish中使用gfxstream,默认是通过asg的方式,即共享内存的方式,我是使用glmark在android端测试的跑分,只是理解不了,同样的cuttlefish环境,使用--gpu_mode=gfxstream性能竟然比--gpu_mode=drm_virgl要低的多

Reply View the author
mozixun
Moderator
2024-08-13 19:49
#4
135******40

感谢楼主的回答,我自己用一台电脑部署的ubuntu系统,理论上wayland都是运行在ubuntu上的,android图形通信在cuttlefish中使用gfxstream,默认是通过asg的方式,即共享内存的方式,我是使用glmark在android端测试的跑分,只是理解不了,同样的cuttlefish环境,使用--gpu_mode=gfxstream性能竟然比--gpu_mode=drm_virgl要低的多

不确定是不是用了Virtio-Venus,这玩意效率跟gfxstream差不多

而且cuttlefish涉及到开了个虚拟Wayland会话,这个跟宿主系统是不是wayland没有关系,你在后台看cuttlefish运行时的crosvm指令就知道了

Reply View the author
135******40
deepin
2024-08-14 11:22
#5
mozixun

不确定是不是用了Virtio-Venus,这玩意效率跟gfxstream差不多

而且cuttlefish涉及到开了个虚拟Wayland会话,这个跟宿主系统是不是wayland没有关系,你在后台看cuttlefish运行时的crosvm指令就知道了

感谢,我基本理解了,wayland-server是为webrtc服务的,这块性能影响未知,但对GPU而言应该不大,具体我再分析分析,有机会再讨论讨论

Reply View the author
wukong_android
deepin
2024-09-09 15:31
#6

为什么我安装完不行啊?已经困惑我好几天了

bash: launch_cvd: 未找到命令

wukong@wukong-PC:/mnt/asop/cuttlefish/android-cuttlefish$ sudo dpkg -i ./cuttlefish-base_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user
_*64.deb || sudo apt-get install -f
请输入密码:
验证成功
正在选中未选择的软件包 cuttlefish-base。
(正在读取数据库 ... 系统当前共安装有 341648 个文件和目录。)
准备解压 .../cuttlefish-base_1.0.0_amd64.deb ...
正在解压 cuttlefish-base (1.0.0) ...
正在设置 cuttlefish-base (1.0.0) ...
正在选中未选择的软件包 cuttlefish-user。
(正在读取数据库 ... 系统当前共安装有 341659 个文件和目录。)
准备解压 .../cuttlefish-user_1.0.0_amd64.deb ...
正在解压 cuttlefish-user (1.0.0) ...
正在设置 cuttlefish-user (1.0.0) ...
wukong@wukong-PC:/mnt/asop/cuttlefish/android-cuttlefish​ sudo usermod -aG kvm,cvdnetwork,render USER
wukong@wukong-PC:/mnt/asop/cuttlefish/android-cuttlefish$ launch_cvd
bash: launch_cvd: 未找到命令

Reply View the author
mozixun
Moderator
2024-09-09 17:00
#7
wukong_android

为什么我安装完不行啊?已经困惑我好几天了

bash: launch_cvd: 未找到命令

wukong@wukong-PC:/mnt/asop/cuttlefish/android-cuttlefish$ sudo dpkg -i ./cuttlefish-base_*64.deb || sudo apt-get install -f
sudo dpkg -i ./cuttlefish-user
_*64.deb || sudo apt-get install -f
请输入密码:
验证成功
正在选中未选择的软件包 cuttlefish-base。
(正在读取数据库 ... 系统当前共安装有 341648 个文件和目录。)
准备解压 .../cuttlefish-base_1.0.0_amd64.deb ...
正在解压 cuttlefish-base (1.0.0) ...
正在设置 cuttlefish-base (1.0.0) ...
正在选中未选择的软件包 cuttlefish-user。
(正在读取数据库 ... 系统当前共安装有 341659 个文件和目录。)
准备解压 .../cuttlefish-user_1.0.0_amd64.deb ...
正在解压 cuttlefish-user (1.0.0) ...
正在设置 cuttlefish-user (1.0.0) ...
wukong@wukong-PC:/mnt/asop/cuttlefish/android-cuttlefish​ sudo usermod -aG kvm,cvdnetwork,render USER
wukong@wukong-PC:/mnt/asop/cuttlefish/android-cuttlefish$ launch_cvd
bash: launch_cvd: 未找到命令

1.建议您先看一下官方文档:https://source.android.com/docs/devices/cuttlefish/get-started?hl=zh-cn

里面有从0开始的安装和启动教程

2.cuttlefish镜像的路径里不要出现带中文名字的,cuttlefish在中文路径中运行可能会出现莫名其妙的路径识别问题

Reply View the author
180******47
deepin
2025-07-10 11:00
#8

楼主您好,我想请教一下:qemu由于没有corsvm中类似的wayland 后端,因此无法通过webrtc显示cuttlefish页面,我想问一下现在qemu里有集成gfxstream吗,我导师最近让我在qemu里把gfxstream接进来,然后实现个wayland后端,在qemu中显示cuttlefish

Reply View the author
mozixun
Moderator
2025-07-10 18:43
#9
180******47

楼主您好,我想请教一下:qemu由于没有corsvm中类似的wayland 后端,因此无法通过webrtc显示cuttlefish页面,我想问一下现在qemu里有集成gfxstream吗,我导师最近让我在qemu里把gfxstream接进来,然后实现个wayland后端,在qemu中显示cuttlefish

但我这边看到QEMU是支持的来着(我只是看了文档,在Linux虚拟机上跑过,安卓上没有)

image.png

还有,我个人测试gfxstream非常不稳定,用稳定分支的gfxstream编译出来的QEMU调用这个会报错feature not enabled,挺离谱的,如果要用可以试一下把安卓Studio上的QEMU扒下来试试

Reply View the author
180******47
deepin
2025-07-12 10:40
#10
mozixun

但我这边看到QEMU是支持的来着(我只是看了文档,在Linux虚拟机上跑过,安卓上没有)

image.png

还有,我个人测试gfxstream非常不稳定,用稳定分支的gfxstream编译出来的QEMU调用这个会报错feature not enabled,挺离谱的,如果要用可以试一下把安卓Studio上的QEMU扒下来试试

那您知道为什么在x86机器上运行arm64的安卓镜像,不能通过webrtc显示到浏览器吗,arm机器上运行arm64镜像是可以的,跨架构下使用的是qemu,同架构是用了crosvm,我对这方面了解不是很多,最近很困扰

Reply View the author
mozixun
Moderator
2025-07-13 00:06
#11
180******47

那您知道为什么在x86机器上运行arm64的安卓镜像,不能通过webrtc显示到浏览器吗,arm机器上运行arm64镜像是可以的,跨架构下使用的是qemu,同架构是用了crosvm,我对这方面了解不是很多,最近很困扰

你确定你跨架构跑的时候能启用gfxstream?

Reply View the author