文档:补充鼠标优化执行记录
This commit is contained in:
parent
938ec97cce
commit
3b48430f05
18
MEMORY.md
18
MEMORY.md
@ -2,6 +2,24 @@
|
||||
|
||||
完整对话总结在:`D:\DAIMA\vdi-cloud\PROJECT_CONTEXT.md`
|
||||
|
||||
## 2026-11-03 午后鼠标进一步优化(最新)
|
||||
- 用户要求制定计划并执行;随后明确运维正在修复GPU Code43。Windows多次被外部qmshutdown/qmstart,
|
||||
本轮已停止Windows配置/串流测试,不能与运维并发改VM;没有发出VM/宿主/显卡重启指令。
|
||||
- 新增0003-vdi-input-priority.patch:帧前连续输入最多32条/2ms,保留焦点/窗口/退出等边界;
|
||||
VDI_INPUT_PRIORITY=1才启用;VDI_INPUT_TIMING=1才记录SDL派发年龄及主线程render调用统计。
|
||||
已在盒子编译,普通/ASAN测试通过。实际EGL使用独立PacerRender线程,主线程render样本0,未证明新调度收益。
|
||||
- 默认客户端已恢复本轮前哈希35de7b1a4ade583823b23b5f2e012307f6d0a3848c8eb97bd6d4de9660afa00f;
|
||||
候选另存moonlight.input-priority-20261103,哈希ef0707ed2053f15ad6f62a33a79ac360237b27f307777c79b379b105fabfe3a2。
|
||||
正常wrapper未改用候选,新调度未默认启用;没有添加本地/透明光标。
|
||||
- VDD30Hz已查明,临时2K60应用/读回成功;但旧WinForms基准源本身约32FPS,2K30/60初测不能证明性能提升。
|
||||
本地基准脚本已修正定时器量化,待运维结束再部署;VDD模式未持久化,原登录2K30脚本没改。
|
||||
- 新增set-vdi-display-mode.ps1、run-mouse-display-probe.py、bench-mouse-stream.sh和移动注入工具。
|
||||
现场测试串流已清理;Windows基准窗口随关机退出,VDIInputLatencyBench登记无自动触发器,
|
||||
运维结束后先用run-input-latency-bench.py stop清理,再Query VDD/必要时Restore,再做新版源配对测试。
|
||||
- 独立光标完成源码核实与交接设计,尚未实现;Sunshine全局toggle不足以可靠回退,需要双方协议/帧边界交接。
|
||||
计划/实际结果见docs/mouse-optimization-plan-20261103.md、docs/mouse-optimization-execution-20261103.md;
|
||||
后续设计见docs/independent-cursor-design-20261103.md。不能宣传本轮达到2K60或鼠标到屏幕1ms。
|
||||
|
||||
## 2026-11-03 显示器关开修复(优先于下文旧状态)
|
||||
- 关屏再开后画面变矮:盒子回退1920x1440@75(4:3),Moonlight 16:9视频上下黑边;
|
||||
MATE monitors.xml仍存旧4:3布局,原启动脚本只设置一次2K。
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
PASS: SDL event boundaries, bounded motion work, latest decoded frame ownership
|
||||
INFO: VDI input timing: SDL dispatch age only; prioritized=0
|
||||
INFO: VDI input dispatch age: samples=1 avg=0.00 p50=0.0 p95=0.0 max=0.0 ms (percentiles capped at 102.3ms)
|
||||
INFO: VDI main-thread render call: samples=1 avg=0.00 p50=0.0 p95=0.0 max=0.0 ms (percentiles capped at 102.3ms)
|
||||
PASS: input FIFO, focus/quit/reset/window barriers, disabled mode, device/window isolation, count/time bounds
|
||||
PASS: 1000 queued move/press/move/release cycles preserve positions
|
||||
@ -0,0 +1,6 @@
|
||||
PASS: SDL event boundaries, bounded motion work, latest decoded frame ownership
|
||||
INFO: VDI input timing: SDL dispatch age only; prioritized=0
|
||||
INFO: VDI input dispatch age: samples=1 avg=0.00 p50=0.0 p95=0.0 max=0.0 ms (percentiles capped at 102.3ms)
|
||||
INFO: VDI main-thread render call: samples=1 avg=0.00 p50=0.0 p95=0.0 max=0.0 ms (percentiles capped at 102.3ms)
|
||||
PASS: input FIFO, focus/quit/reset/window barriers, disabled mode, device/window isolation, count/time bounds
|
||||
PASS: 1000 queued move/press/move/release cycles preserve positions
|
||||
58
docs/mouse-optimization-execution-20261103.md
Normal file
58
docs/mouse-optimization-execution-20261103.md
Normal file
@ -0,0 +1,58 @@
|
||||
# 鼠标进一步优化执行记录(2026-11-03)
|
||||
|
||||
这是用户要求“制定计划并按照计划干”后的本轮记录,与此前已部署的两个输入补丁分开。
|
||||
|
||||
## 实际进度
|
||||
|
||||
用户确认运维正在处理 GPU Code43。测试中 Windows 多次外部关机/启动;本轮未发出任何 VM/设备/宿主重启指令。已暂停 Windows 配置修改和串流测试,继续完成盒子端开发与文档,尚未达到最终性能验收。
|
||||
|
||||
| 阶段 | 状态 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 基线 | 完成初检 | GTX965M Code43 / libx264;VDD活动设备DISPLAY2、2K30Hz,枚举支持2K60Hz;盒子输出正常2K60 |
|
||||
| 刷新率 | 部分完成,联调暂停 | 工具支持查询/枚举/临时应用/恢复;临时切换2K60并读回成功;完整动态对照待运维结束 |
|
||||
| 输入调度 | 开发、编译、自动化测试完成 | 第三补丁及可关闭的诊断可用;当前独立渲染线程没有主线程render调用,未证明收益,默认未启用 |
|
||||
| 独立光标 | 设计完成,尚未实现 | 必须改双方协议和捕获交接;不能把全局快捷键或叠加本地箭头当成独立光标功能 |
|
||||
| 现场收尾 | 盒子完成;Windows待运维结束 | 测试串流已退出,默认客户端还原原哈希;显示守护正常;Windows测试窗口随关机退出,任务登记待可安全联调时清理 |
|
||||
|
||||
## 新增实现
|
||||
|
||||
- `terminal/moonlight/patches/0003-vdi-input-priority.patch`:帧前有限输入调度(`VDI_INPUT_PRIORITY=1`才启用)和汇总诊断(`VDI_INPUT_TIMING=1`才启用)。只让紧邻的本窗口真实鼠标/键盘事件优先,最多32条或2ms,不跨焦点、窗口、退出、其他帧或设备事件。
|
||||
- `terminal/moonlight/tests/test_input_priority.cpp`、`tools/test-moonlight-latency.sh`:普通与AddressSanitizer测试覆盖新增边界;现有移动/按下/释放1000轮回归保持通过。ASAN现在也实际覆盖SDL/帧所有权测试,所有测试显式保留断言。
|
||||
- `tools/set-vdi-display-mode.ps1`、`tools/run-mouse-display-probe.py`:只选择活动VDD,拒绝多VDD歧义;模式预检、备份、临时应用、读回和恢复。通过已登录用户会话运行并清理本次探测任务,不写注册表持久模式。
|
||||
- `tools/bench-mouse-stream.sh`、`tools/inject-mouse-sweep.py`:独立标签日志,拒绝覆盖已有证据或现有用户串流;125Hz/20秒模拟移动和32次点击。仅可在Windows临时全屏测试窗口已运行时使用,不可对普通工作桌面盲目注入点击。
|
||||
- `tools/input-latency-bench.ps1`:修正源定时器量化问题,使用绝对单调时钟帧序号及测试进程1ms定时精度,退出时释放。修正版尚未在Windows部署运行。
|
||||
|
||||
## 初测与限制
|
||||
|
||||
| 项目 | 2K30、VDD30 | 2K60请求、VDD60 |
|
||||
| --- | --- | --- |
|
||||
| 接收/渲染 FPS | 29.01 / 28.39 | 31.08 / 30.56 |
|
||||
| 主机处理平均 | 39.9ms | 45.3ms |
|
||||
| 解码/排队/呈现平均 | 11.90 / 0.33 / 1.81ms | 10.19 / 0.16 / 1.73ms |
|
||||
| 网络延迟/抖动丢帧 | 4ms / 2.15% | 10ms / 1.68% |
|
||||
| 新输入优先调度 | 未启用 | 未启用(诊断候选二进制) |
|
||||
|
||||
**这两段不能作为“2K60达标”或性能提升结论。** 旧WinForms测试窗口的16ms定时器被系统时间粒度量化,实际画面源约32FPS,网络也有波动。已修正本地测试源,需要重新对照。中断的baseline30/paced30不计入数据。
|
||||
|
||||
诊断会话trial60-no-priority派发年龄2601个样本,平均0.97ms、P95=1ms、最大1006ms;主线程render调用样本0。P95说明该会话大多数输入事件排队较短,不能忽略最大值,也不能据此宣称物理鼠标到屏幕只有1ms。约1秒异常可能涉及启动遗留事件,需要下一次带启动阶段分类的诊断核实,尚不能认定原因。基线会话Windows窗口确认收到32条交替点击,全部落在预期左右区域。
|
||||
|
||||
源代码核实PacerRender独立线程负责当前EGL呈现,因而新的“呈现前处理输入”调度对这条路径没有已证明的作用,保持关闭。当前鼠标画面仍需服务端捕获/编码后返回;下一步重点仍是修复GPU、验证足够的捕获/编码帧率和独立光标交接。
|
||||
|
||||
## 构建与回退
|
||||
|
||||
盒子目录:`/home/armbian/vdi-build/rkmpp-experiment/build/moonlight/app/`。
|
||||
|
||||
- 正常默认`moonlight`已恢复本轮前版本,SHA256 `35de7b1a4ade583823b23b5f2e012307f6d0a3848c8eb97bd6d4de9660afa00f`。
|
||||
- 本轮候选`moonlight.input-priority-20261103`,SHA256 `ef0707ed2053f15ad6f62a33a79ac360237b27f307777c79b379b105fabfe3a2`;仅用显式`VDI_RKMPP_CLIENT`选择。正常wrapper未改用它。
|
||||
- `moonlight.before-priority-20261103`为正常版本的额外备份。
|
||||
- VDD60是临时模式,没有修改原登录设置2K30的脚本。VM关机后不以旧读回结果推断新启动状态;恢复联调首先Query,必要时Restore。备份位于`C:\ProgramData\VDI\mouse-optimization\display-before.json`。
|
||||
- Windows基准任务没有开机/周期触发器。恢复联调后先执行`python tools/run-input-latency-bench.py stop`清理遗留登记,再启动修正后的测试源。
|
||||
|
||||
证据在`docs/evidence/mouse-optimization-20261103/`。没有重启盒子,没有修改GPU直通/ROM、Sunshine配置、Windows全局鼠标主题或其他虚拟机。
|
||||
|
||||
## 运维结束后的顺序
|
||||
|
||||
1. 清理临时基准任务,查询VDD;记录nvidia-smi、NVIDIA D3D11及当前Sunshine实际编码器,不能只看编码器探测日志。
|
||||
2. 用修正源确认足够的源帧率,再做2K30/60配对和输入/拖窗验收。未通过则保持当前稳定参数。
|
||||
3. 显式选择候选客户端并开启诊断,核实约1秒最大派发年龄是否属于初始化事件;当前EGL路径不默认启用帧前输入优先。
|
||||
4. 按独立光标设计准备固定版本Sunshine构建,然后实现双方协议、帧边界交接、形状/显隐及故障回退,再进行单光标验收。此项尚未完成。
|
||||
@ -26,8 +26,14 @@
|
||||
|
||||
本轮不重启宿主、不刷 ROM、不动 VM101/102。Code 43 仍需按现有运维方案排查,修复后再验收实际 NVIDIA D3D11 和 NVENC;不能只设置 encoder=nvenc 就认定修复。
|
||||
|
||||
## 执行结果
|
||||
## 前序优化结果
|
||||
|
||||
代码修改、自动化测试和现场配对串流对照已完成,结果见
|
||||
`docs/input-rendering-optimization-20261103.md`。当前状态为:点击排序和客户端排队已改善,
|
||||
仍需用户对真实拖窗、右键、快速双击进行体验验收;严格的输入到显示延迟仍需高速摄像或外部触发测量。
|
||||
|
||||
## 本轮进一步优化进度
|
||||
|
||||
用户确认运维正在处理 GPU Code43,已暂停 Windows 配置修改和串流测试,避免同时操作。盒子端新增第三补丁已编译并通过普通/ASAN测试,但当前独立渲染线程没有主线程呈现调用,未证明新调度收益,因此默认客户端已恢复本轮前版本。60Hz对照尚未完成,独立光标只完成设计,尚未实现。
|
||||
|
||||
本轮逐项结果、初测数据限制、候选版本和恢复联调步骤见 `docs/mouse-optimization-execution-20261103.md`。独立光标协议和单光标交接要求见 `docs/independent-cursor-design-20261103.md`。
|
||||
|
||||
Loading…
Reference in New Issue
Block a user