6.2 KiB
GPU修复后刷新率与鼠标画面优化验收(2026-11-03)
结论
Windows虚拟屏已调整为2560×1440、60Hz,登录脚本已备份并更新;客户端默认已设为45FPS,并通过正常选择桌面入口重连。当前盒子的Xorg/EGL路径在请求60FPS时实际只能渲染约46FPS,因此不宣称稳定2K60。45FPS短测实际44.22FPS,持续测试43.14FPS;相对30FPS基线29.83FPS提高约45%~48%,排队约1.3~1.6ms。
GPU复核
本轮实际查询NVIDIA错误码0,驱动582.78,vBIOS 84.04.2b.00.13。动态串流期间Sunshine实际创建h264_nvenc,NVIDIA有1个编码会话,检查时编码引擎约24%。运维报告的重启测试作为其提供的验收记录,本轮未自行重启VM、宿主或GPU,也未修改直通和ROM配置。
同一修正测试源对照
修正后的Windows测试窗口实测约59FPS,避免了原WinForms定时器将源限制到约32FPS的问题。所有测试保持2560×1440、H.264、30Mbps、RKMPP硬解;默认客户端为已有两个输入补丁的版本,第三补丁调度未启用。除同步实验外,均关闭VSync与帧步调。
| 档位 | 接收/渲染FPS | 主机处理平均 | 解码平均 | 帧队列平均 | 客户端队列丢弃指标 |
|---|---|---|---|---|---|
| VDD30 / 客户端30 | 29.95 / 29.83 | 7.5ms | 6.81ms | 0.60ms | 0.41% |
| VDD60 / 客户端60、最新帧队列 | 58.82 / 46.11 | 7.5ms | 7.37ms | 7.54ms | 21.61% |
| VDD60 / 客户端60、原队列 | 58.81 / 46.10 | 7.6ms | 7.13ms | 36.13ms | 10.28% |
| VDD60 / 客户端60、精确尺寸nearest实验 | 58.20 / 42.01 | 7.5ms | 6.94ms | 7.66ms | 27.77% |
| VDD60 / 客户端60、VSync开/帧步调关 | 57.88 / 24.39 | 7.5ms | 7.26ms | 8.12ms | 57.80% |
| VDD60 / 客户端45、最新帧队列 | 44.84 / 44.22 | 7.6ms | 8.54ms | 1.30ms | 1.38% |
| VDD60 / 客户端45、持续测试 | 43.98 / 43.14 | 7.6ms | 7.32ms | 1.55ms | 1.91% |
上表“客户端队列丢弃指标”来自上游标成Frames dropped due to network jitter的统计,但实际字段是pacerDroppedFrames,本项目最新帧队列也计入其中。不能把它全部归因于网络,原队列溢出统计也并不完整;应结合接收/解码/渲染FPS及帧队列时间评估。上述会话真正的网络丢帧字段均为0%,网络延迟约2~7ms;这些是现场顺序测试,不是严格实验室基准。
60FPS会话采样盒子图形核心约89%~95%负载、800MHz;DDR频率已在786MHz最高公布档位,MATE合成器关闭。测试温度约62~65℃,没有通过提高频率/电压或更改CPU/GPU调速器来制造结果。原队列没有提高帧率却增加排队,nearest采样和VSync实验均未显示收益,未部署。
nearest实验保留在terminal/moonlight/experiments/0004-vdi-egl-exact-size-sampling.patch供复查,已从盒子正常源码撤回,不进入默认构建流程。正常二进制SHA256仍为35de7b1a4ade583823b23b5f2e012307f6d0a3848c8eb97bd6d4de9660afa00f。
配置和回退
- Windows实际活动VDD编号已变为DISPLAY3,工具动态查找,未写死设备号。旧DISPLAY2备份不能直接作为新设备的恢复依据,因此探测器增加
--backup-tag区分验收批次。 tools/set-2k-display.ps1默认60Hz,支持-RefreshRate 30回退;已更新原VDISet2KDisplay登录任务使用的脚本,未修改任务动作或用户。- Windows部署前原脚本和任务XML备份:
C:\ProgramData\VDI\backups\display-refresh-20261103-142920。部署工具按本次新生成的结果日志和任务退出码确认成功,随后独立Query确认60Hz。本轮没有重启验证登录触发。 tools/run-mouse-display-probe.py Apply --hz 30 --backup-tag nvenc-20261103可临时恢复30Hz;要保持30Hz应恢复原登录脚本,或将登录任务脚本参数设为-RefreshRate 30。tools/set-terminal-fps.py --fps 45 --apply只更改盒子Windows桌面票据FPS,自动备份和原子写入,不更改其他桌面;回退用--fps 30 --apply。
部署工具前两次因Windows任务调度器LastRunTime与墙上时钟不同步而误判成功任务为失败,已自动恢复旧脚本;随后改为新结果日志证明执行新鲜度,部署成功。受配置切换影响的nvenc45-sustained不纳入持续测试结论,重新执行nvenc45-sustained-final。
持续测试和现场收尾
nvenc45-sustained-final在视频就绪后注入20秒鼠标移动和32次点击,再持续120秒,正常退出。接收43.98/渲染43.14FPS,主机平均7.6ms、解码7.32ms、排队1.55ms、呈现1.55ms,实际网络丢帧0%。这是约两分半钟的动态会话结果,不是长期稳定性保证。
三组Windows点击记录共256次左右交替点击,脚本校验全部符合预期,包含被排除的持续性能试验中的32次;点击正确性可核验,但其帧率数据不纳入持续性能结论。修正测试源在保存的状态中约59.4~59.8FPS,足够进行本轮对照。
已执行set-terminal-fps.py --fps 45 --apply,原30帧票据备份于盒子~/vdi-terminal/backups/fps-20261103-143333-297521/desktops.json。只改变Windows卡片FPS,其余桌面、分辨率和编码配置保持原值。
已停止并删除VDIInputLatencyBench临时任务;最终Windows查询确认benchmark_task_present=False。通过正常kiosk页面点击Windows连接,实际新进程PID31694带--resolution 2560x1440 --fps 45,RKMPP/DRM PRIME/EGL路径正常。再次查询错误码0、NVENC会话1、编码占用18%,Sunshine本次实际创建h264_nvenc。显示守护active,正常客户端二进制未换成实验版本。
证据目录:docs/evidence/2k60-20261103/,包含逐会话日志、点击记录、最终GPU/编码查询和页面截图。实际拖窗与鼠标的主观体验仍需用户现场确认;本轮自动点击和统计不能代替物理输入到屏幕测量。
后续边界
独立光标尚未实现,仍保留单个Windows远程白色光标。下一阶段要进一步达到稳定2K60,需要验证更低开销的显示路径及正式Weston/Wayland架构,或评估终端硬件;当前不能通过提高FPS参数或安装所谓流畅插件绕过呈现瓶颈。独立光标双方协议与单光标交接设计见docs/independent-cursor-design-20261103.md。本轮未测量物理输入到屏幕的P50/P95,不能称零延迟。