#6992·scrcpy

当桌面客户端停止使用视频时, 无限制设备侧 DMA- BUF 增长

作者: Orienser创建于 2026年8月17日更新于 2026年9月8日

□ 环境

  • 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后,我停止了复制.

□ 复制步骤

  1. 在Android设备上显示持续变化的内容. 一个包含CSS动画的网页就足够了.
  2. 通常开始扭曲:

控制台 曲线 - s < serial >


3. 核实屏幕镜像是否有效。
4. 暂停桌面扭曲过程而不终止或关闭其手柄。

在Windows上,我用`NtSuspendProcess ' 复制了这个版本。 从进程探索器中止进程应当等同。

5. 保持亚行的连接并监测设备侧DMA-BUF的使用:

控制台
adb - s <serial> sell dmabuf dump 单词
adb - s <serial > 外壳猫/sys/内核/debug/dma buf/bufinfo
  1. 在设备耗尽内存之前恢复桌面扭曲进程。

在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