当桌面客户端停止使用视频时, 无限制设备侧 DMA- BUF 增长
□ 环境
- OS: Windows 11 x64, 建造 26200.9168
- 粗口版本:4.1
- 安装方法:正式的Windows发布存档
- 还复制了:粗略 3.3.4和3.3.1
- 连接:USB ADB
- 设备制造商:Shimeta
- 设备型号:3576E -索克:RK3576号石芯
- Android版本:14 / API 34
- 制作指纹:`ShimetaOS/3576E/rk3576:14/UQ1A.240205.004.B1/eng.hwt.20260107.104755:用户调试/放行-钥匙'
- 内尔:Linux 6.1.75,无锡64
□ 说明
当台式计算机自旋程序停止消耗视频数据,但仍能活下来,并保持ADB/socket连接开通时,设备侧 “自旋服务器”会累积DMA-BUF物体而无明显的上行绑定.
随着屏幕内容的不断改变,DMA-BUF的使用量会增长约120-170 MB/s,直到桌面进程恢复读取或设备侧服务器退出.
浏览器中简单的CSS动画足以再现这个问题. 不需要视频回放,视频呼叫,或硬件视频解码器.
正常的scrcpy操作是稳定的. 正常退出或杀死桌面进程通常会关闭连接并释放出缓冲. 问题的条件是一个被停滞但仍连接的桌面客户端.
如果允许继续,这可以使设备内存耗尽并冻结整个Android系统. 在受控测试中,DMA-BUF超过3个GiB后,我停止了复制.
□ 复制步骤
- 在Android设备上显示持续变化的内容. 一个包含CSS动画的网页就足够了.
- 通常开始扭曲:
控制台 曲线 - s < serial >
3. 核实屏幕镜像是否有效。
4. 暂停桌面扭曲过程而不终止或关闭其手柄。
在Windows上,我用`NtSuspendProcess ' 复制了这个版本。 从进程探索器中止进程应当等同。
5. 保持亚行的连接并监测设备侧DMA-BUF的使用:
控制台
adb - s <serial> sell dmabuf dump 单词
adb - s <serial > 外壳猫/sys/内核/debug/dma buf/bufinfo
- 在设备耗尽内存之前恢复桌面扭曲进程。
在30秒的试验中,静态屏幕没有引起显著增长。 持续地改变屏幕内容快速地填充了运输缓冲器,并使得这个问题在数秒内可以再出.
□ 成绩为粗略 4.1
页:1 11:51:37 DMA-BUF=246,240克B 11:51:39 DMA-BUF=246,240克B 11:51:42 DMA-BUF=246,240克B 11:51:44 DMA-BUF=382,920 kB 11:51:45 DMA-BUF=529 800克B 11:51:46 DMA-BUF=686 880克B 11:51:47 DMA-BUF=841,920 kB
最后一个样本:
页:1
主机:23525
进程共计
dmabuf 合计: 841920克B
内核: 225772 kB
用户空间( rs): 616148 kB
PID 23525被确认为:
页:1 app process / com.genymobile.scrpy. (原始内容存档于2018-09-29). 服务器 4.1
DMA-BUF的快照包含:
页:1
2 088 960字节的303个对象
出口者:系统
名称: 系统
这些物体占了大约633 MB.
与硬件有关的 . . . . . . .
内容来源: Genymobile/scrcpy