niri 滚动平铺合成器性能调优:3 个调试快捷键定位卡顿源头
【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri
niri 是一款滚动平铺(scrollable-tiling)Wayland 合成器,让单个工作区内的窗口可以无限滚动排列。当多窗口办公时感觉卡顿,通常是渲染负载、动画参数或 X11 兼容层出了问题。本文教你用 niri 自带的性能调试手段找出瓶颈,并针对性调整配置。
30 秒自检:先确认是否真有性能问题
用一条命令看 CPU 和内存
在终端执行下面命令,查看 niri 进程的真实占用:
# 按 CPU 占用排序查看 niri 进程 ps -eo pid,cmd,%cpu,%mem --sort=-%cpu | grep -w niri判断标准很简单:空闲挂机时 niri 的 CPU 持续高于 20%、或内存长期超过 300MB,才值得深入排查;偶发的尖峰往往来自应用本身,与合成器无关。
打开损伤区域显示看重绘频率
niri 默认配置里自带三个调试快捷键,其中最有用的是Mod+Shift+Ctrl+D——它会把屏幕上需要重绘的损伤区域染成红色(实现见损伤跟踪)。正常操作下红色只应出现在变化的小区域;如果你几乎不动鼠标,红色仍大面积持续覆盖全屏,说明存在频繁的全屏重绘,这是"渲染层"瓶颈的最直观信号。
三个维度定位瓶颈:渲染、内存、兼容层
渲染层:屏幕是否在反复整屏重画 📊
除了损伤显示,还有两个快捷键配合排查。Mod+Shift+Ctrl+T会给所有表面染上绿色,未被直接扫描输出(direct scanout)的区域保留绿色——大面积绿色意味着 GPU 组合参与过多。Mod+Shift+Ctrl+O则把标记为不透明的区域染蓝、其余染红,蓝色比例越高,合成时可跳过的混合计算越多。三个快捷键的完整说明在调试选项文档里,重绘状态机可以参考下面这张图:
内存层:窗口和工作区是否开太多
niri 会为每个窗口、工作区保留缓存资源。用内置的 IPC 命令行工具可以直接问合成器要当前状态:
# 查询当前工作区与窗口列表(JSON 输出) niri msg --json workspaces && niri msg --json windows如果输出里有几十个窗口分散在大量工作区,内存偏高的原因多半就是这里。IPC 的完整用法见IPC 文档。
兼容层:是不是 X11 旧应用拖累
niri 通过内置的 xwayland-satellite 集成运行 X11 应用,这类应用的输入与重绘路径比原生 Wayland 更"重"。如果你的卡顿集中在某个特定程序,先确认它是 X11 应用,排查方向见Xwayland 文档;混合显卡笔记本外接显示器卡顿则属于 GPU 选择问题,留给下一节。
对症下药:按瓶颈类型改配置
动画太多就整体关掉
niri 的窗口打开/关闭、工作区切换等都有默认动画。想立刻减负,可以一行关闭全部动画:
animations { off # 关闭全部窗口与工作区动画 }只想微调而不牺牲手感时,可以单独改某项的时长(如window-open { duration-ms 100 ... }),全部参数见动画配置文档。
平铺窗口太多就换标签显示
窗口数量直接决定合成参与面数。把多窗口列改成标签页显示,能显著减少同时参与渲染的表面:
layout { default-column-display "tabbed" # 同列窗口以标签页形式合并 gaps 8 # 缩小窗口间距 }更多布局参数(预设列宽、焦点居中策略等)见布局文档。
X11 应用多就换原生 Wayland 版本
能跑原生 Wayland 就别走兼容层。Electron、Qt 系应用大多可以通过启动参数直接跑 Wayland,具体说明在FAQ的"Application Issues"相关条目中,把这类应用逐个替换,兼容层压力会明显下降。
进阶调优:渲染设备与窗口规则
混合显卡笔记本外接显示器卡顿时,默认由集显渲染、再拷贝给独显显示,分辨率和刷新率越高越卡。可以强制 niri 用独显渲染(FAQ 中有专条说明):
debug { render-drm-device "/dev/dri/renderD129" # 强制用独显渲染 }如果怀疑是帧同步问题(画面撕裂、间歇性掉帧),可临时打开wait-for-frame-completion-before-queueing调试项做对照排查。另外,若你给半透明窗口开了背景模糊,blur { passes 3 }这类多通道模糊是实打实的 GPU 开销,低配机器上直接blur { off }就能收回这部分负载(选项见其他配置文档)。
对个别应用,用窗口规则做定点控制比全局改动更稳妥:
window-rule { match app-id="org.mozilla.firefox" open-on-workspace "2" # 浏览器固定到专用工作区 variable-refresh-rate true # 允许该窗口使用可变刷新率 }全部匹配项与可用属性见窗口规则文档。
验证优化是否生效
改完配置后重复自检流程即可量化效果:
- 再次执行
ps命令,对比空闲 CPU 是否回落(参考值:挂机时 5% 以内)、内存是否回到 200MB 量级; - 用
Mod+Shift+Ctrl+D观察损伤区域,全屏红色应明显减少、变为局部闪现; - 快速做几轮工作区切换和窗口开关,确认动画关闭后操作跟手、无掉帧感。
niri 仓库还附带一套渲染视觉测试工具niri-visual-tests,从源码构建后(cargo build --release -p niri-visual-tests)可以放慢动画逐帧检查窗口、渐变与平铺渲染行为,适合在改动动画或模糊参数后做回归确认,代码见niri-visual-tests 入口。
现在就能做的行动清单
- 用
ps命令建立基线数据,记下优化前的 CPU 与内存数值; - 按
Mod+Shift+Ctrl+D确认是否存在持续全屏损伤,有则优先排查渲染层; - 用
niri msg --json windows数窗口数量,过多时改用default-column-display "tabbed"; - 动画负担重就先
animations { off },再逐步找回需要的动画; - 混合显卡用户配置
render-drm-device,X11 应用逐个替换为原生 Wayland 版本; - 复测并对照参考值;若问题依旧,带着
niri msg输出和复现步骤到官方仓库提交 issue。
配置有疑问时,先从官方 FAQ里找答案,那里覆盖了混合显卡、X11 应用、窗口规则等大多数常见场景。
【免费下载链接】niriA scrollable-tiling Wayland compositor.项目地址: https://gitcode.com/GitHub_Trending/ni/niri
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考