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

7.5 KiB
Raw Blame History

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。临时 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、Sunshine捕获/编码与线程配置、现场固定提交X11捕获实现。实际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配置与原配置一致”指本附加操作之前的渲染调优验收时点。