vdi-cloud/docs/ubuntu-drag-render-20261105.md

61 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Ubuntu 框选与桌面渲染调优(2026-11-05)
本轮仅处理 Ubuntu VM102。保留系统原生光标、GNOME/Xorg、2560×1440、30Mbps、limited 色彩范围和现有受限独立光标通道。用户已明确允许正常关闭启动、对比测试及必要回退;现场共正常关闭启动三次,没有强制停止虚拟机。Windows、麒麟及其独占 GPU 配置未修改。
## 最终保留
- VM102 的 CPU 从 `x86-64-v2-AES` 改为 `host`,仍为4核/6144MB。Sunshine 实际日志确认 x264 使用 AVX/FMA3/BMI2/AVX2。
- 默认 std/bochs 虚拟显卡改为 `virtio-gl`。Xorg 从 `Refusing to try glamor on llvmpipe`、DRISWRAST,变为 `glamor X acceleration enabled on virgl (Mesa Intel(R) HD Graphics 4600 (HSW GT2))`,客体出现 renderD128。
- PVE 新增 GL/EGL/Mesa 运行依赖:0升级、10新增、0移除。宿主 i915 保持原驱动;未做核显 VFIO 直通。
- 最终请求30FPS、默认 `min_threads=2`(配置中不显式覆盖)、ultrafast/zerolatency。45FPS及4线程试验未继续降低回显延迟,已撤回。
- 盒子客户端二进制、两个 Linux 原生光标 profile、Ubuntu 主题及鼠标加速策略未改。客户端 SHA256 仍为 `5d4330f703d7f8e053bc3795ca42bdaf231c9e9dd8ebb00a612013adbcccee03`。
这是共享 GPU **桌面渲染**,不是硬件视频编码。Sunshine 仍为 X11/XCB 捕获+libx264 软件编码,不能以客体出现 renderD128 宣称已启用 Quick Sync。
## 测量和结果
原始数据见 [ubuntu-drag-20261105](evidence/ubuntu-drag-20261105/)。临时 GTK 全屏窗口在长按移动时绘制框选区域和唯一编号;盒子以60Hz注入300次运动,从实际解码视频读取编号。下表的延迟是合成运动到首次观察对应编号,**不含物理USB和面板扫描,也不是本地指针延迟**。
| 配置/证据 | 新编号视频更新/秒 | 回显 P50 / P95(ms) | 最长观察间隔(ms) |
| --- | ---: | ---: | ---: |
| 原CPU+原显卡,30FPS:baseline.json | 2.0 | 398.3 / 634.6 | 1833.4 |
| host+VirGL,30FPS:accelerated30.json | 11.8 | 215.7 / 249.1 | 179.3 |
| host+VirGL,45FPS:accelerated45.json | 13.2 | 208.2 / 258.4 | 140.9 |
| 仅host+原显卡,45FPS:hostcpu45.json | 2.8 | 433.3 / 545.6 | 668.2 |
| host+VirGL,45FPS、4线程:threads4-45.json | 11.6 | 211.2 / 259.3 | 199.6 |
| 最终host+VirGL,30FPS、默认线程:final.json | 12.4 | 224.4 / 308.3 | 176.9 |
最终这轮中位回显延迟较基线降低约44%,P95降低约51%。所有有效轮次均观察到最终编号300和按钮释放。样本较短、参数组合与运行时间不同,没有做随机重复或统计显著性检验;不能将改进百分比分解归因给某个单项,也不能直接预测真实应用中的每次框选。
“新编号视频更新”不等于 Moonlight 总帧率,视频可能含重复画面;GNOME/GDK会合并运动事件,未逐一绘制300次运动不等于丢失300次输入。有效会话全程统计中,VirGL/30FPS 收流约29.25FPS、主机处理平均52.4ms;45FPS请求约30.56FPS、62.7ms;45FPS/4线程约33.46FPS、65.5ms。不同会话工作负载和时长不同,这些数据仅用于判断升帧/线程没有达到预期,不是严格单项基准。
额外对照:去掉盒子持续截图采样,原配置5秒仍只产生16条客体motion记录;VirGL下直接在客体注入,串流时67条、退出串流后159条。说明截图探针不是唯一原因,捕获/渲染竞争仍存在。GTK事件到绘制回调通常不足数毫秒,但回调结束不代表合成、GPU提交和视频编码已结束,不能据此排除渲染瓶颈。
## 回归与现有限制
最终16次唯一编号点击全部回显,另外两次快速点击使序号从16增到18;源日志18次按下/18次释放,前16次最大坐标误差1.375px,见 input-verification.json。仅代表该稳定测试会话,不宣称任意高速操作绝不丢失。
最终画质测试实际解码尺寸2560×1440;12级灰阶解码为0、8、16、24、31、64、128、192、223、235、247、254,没有新增明显截断。文字/单像素条纹截图见 quality-final.png。仍为H.264 4:2:0,未宣称像素无损。
所有临时GTK测试服务已停止,留在正常Ubuntu桌面。最终状态见 final-guest-state.txt、final-box-state.txt、desktop-final.png。盒子桌面JSON与本轮备份结构完全一致,45FPS试验已撤回;共享客户端SHA核对未变。
另在真实GNOME桌面空白区域执行长按框选,确认橙色选择框显示、松开后消失,见 real-desktop-selection.png、desktop-after-drag.png。这是功能和最终画面检查,没有将其当作真实桌面的定量时延基准。
**尚未达到接近原生或定量等同Windows的目标。** 本轮没有对Windows执行相同仪器测试,也没有测真实GNOME桌面框选的光子延迟、物理鼠标或长期运行。当前改善集中于客体渲染;X11捕获、GPU读回和CPU编码仍限制动态响应。进一步目标是验证具有可用硬件编码能力的Linux GPU路径和更低开销的捕获方式,需单独设计与验证,不能仅提高请求FPS或改鼠标速度。
首次探针实际落在锁屏界面,黑色区域误满足“编号0”条件,未纳入有效数据;立即释放按钮并解锁。探针已加固定8bit签名及按下后的finally释放。CPU-only轮第一次因串流尚未显示测试窗口而被签名检查拒绝,待就绪后复测,拒绝轮未纳入表格。
## 备份和回退
PVE首次备份 `/root/vdi-ubuntu-render-20261105/102.conf.before`;客体首次备份 `/home/test2/vdi-terminal/backups/ubuntu-render-20261105/`;盒子首次备份 `/home/armbian/vdi-terminal/backups/ubuntu-render-20261105/desktops.json`。本地保存 vm-config-before.json、vm-config-final.txt、宿主安装日志和各轮原始记录。
回退需先保存工作、退出Ubuntu串流并正常关闭VM102,只将CPU恢复 `x86-64-v2-AES`、删除新增vga字段,再启动。不要整份覆盖VM配置,避免抹去后续磁盘/网络等修改。最终Sunshine配置与原配置一致,桌面JSON也已恢复;新增图形库无需为了回退显卡而卸载。若要卸载,应先检查是否有其他使用者,不能盲目自动清理宿主依赖。
技术依据:[QEMU VirtIO GPU](https://www.qemu.org/docs/master/system/devices/virtio/virtio-gpu.html)、[Sunshine捕获/编码与线程配置](https://docs.lizardbyte.dev/projects/sunshine/latest/md_docs_2configuration.html)、[现场固定提交X11捕获实现](https://github.com/LizardByte/Sunshine/blob/63d35f702ee9e362e43263742981836ec0710384/src/platform/linux/x11grab.cpp)。实际PVE源代码的virtio-gl依赖检查和QEMU启动参数也已现场核对。
## 后续:锁屏Sunshine通知清理
用户圈出的多组Sunshine卡片实际是 `Stream Started` / `Stream Paused` 通知。GNOME对无法关联桌面应用的通知按进程分组,历次串流服务重启使分组累积。当前检查的4条通知均为Sunshine,已通过GNOME通知面板清除,复核0条可见通知;未清理其他应用的数据。
Ubuntu配置新增 `system_tray = disabled`,正常退出/从桌面列表重连后,新Sunshine进程日志确认该配置,CLIENT CONNECTED、Sunshine和guard均正常。这同时关闭Sunshine托盘图标及其状态提示,保留串流服务,不改GNOME全局通知和锁屏策略。配置首次备份 `~/vdi-terminal/backups/sunshine-notifications-20261105/sunshine.conf`;要恢复只需删除新增system_tray行,下次正常重连生效。上文“最终Sunshine配置与原配置一致”指本附加操作之前的渲染调优验收时点。