故障排除:终端延迟

主要观点:作者通过比较 Fedora 和 Windows 下的xterm启动速度,找出 Windows 下xterm启动慢的原因并解决。
关键信息:

  • 作者有两台配置相似的机器,在 Fedora 和 Windows 间切换,日常工作多在浏览器或终端中进行。
  • xterm在 Fedora 下约 300ms 可准备好,在 Windows 下约 1600ms 才能输入,慢 5 倍多。
  • 发现 Windows 终端的淡入动画导致约 200ms 延迟,通过调试工具cdb阻止该动画,启动速度提升至约 4 倍慢于 Fedora。
  • 经性能测试,发现文件系统性能不是主要原因,X 服务器在 Windows 下运行稍慢但不是单独导致问题的原因,FreeType 也不是问题所在,最终确定是工具栏功能导致XtRealizeWidget调用慢。
  • 通过hyperfine的参数扫描找到一些能节省约 200ms 的设置组合,但效果不明显。
  • 采用服务器模式(deferred mapping),通过LD_PRELOAD库和xargs管理缓存,可快速启动新终端,最终 Windows 下xterm启动时间降至约 366ms,仅比 Fedora 慢 60ms,可接受。
    重要细节:
  • 在 Windows 性能设置中测试其他原生程序如notepadcalc可瞬间出现。
  • 作者使用的服务器为X410,其添加的动画效果无法直接禁用。
  • xterm有很多功能,通过ltrace找出XtRealizeWidget调用慢是因为工具栏功能,在 Fedora 中该功能编译时被禁用。
  • hyperfine的参数扫描功能用于尝试不同设置组合以找到最优,找到如tekInhibit等设置可节省时间。
  • 使用xargsLD_PRELOAD库实现服务器模式,通过pkill --oldest --signal SIGUSR1 xtermserver快速启动新终端。
阅读 11
0 条评论