终端 GPU 监控怎么做:用 btop 一屏看清 CPU、显存与显卡利用率
【免费下载链接】btopA monitor of resources项目地址: https://gitcode.com/GitHub_Trending/bt/btop
游戏掉帧、渲染卡住时,判断瓶颈在 CPU、显卡还是显存,往往要来回切换几个命令行工具。btop 是一个终端资源监控工具,把处理器、内存、磁盘、网络、进程与 GPU 状态放进同一块屏幕里。它面向需要盯系统状态的开发者与运维人员,覆盖 Linux(含 macOS、FreeBSD、NetBSD、OpenBSD);使用 GPU 监控的前提是已安装对应厂商驱动,且从源码编译时启用 GPU 支持。
定位:btop 在终端监控里补了什么
传统做法是分头查:top看 CPU 和进程、nvidia-smi看 NVIDIA 卡、rocm-smi看 AMD 卡,Intel 核显则几乎没有现成的终端工具。btop 的差异在于:CPU/内存/网络/磁盘/进程与三厂商 GPU 数据在同一界面内联动显示,GPU 采集按厂商分别实现,渲染层统一输出。
| 工具 | 进程管理 | 整机资源视图 | GPU 监控范围 | 依赖 |
|---|---|---|---|---|
| top / htop | 有 | CPU、内存 | 无 | 无 |
| nvidia-smi | 无 | 无 | 仅 NVIDIA | NVIDIA 驱动 |
| rocm-smi | 无 | 无 | 仅 AMD | ROCm 环境 |
| btop | 有 | CPU、内存、磁盘、网络 | NVIDIA、AMD、Intel(Linux)/ Apple GPU(macOS) | 对应厂商库 |
装好 btop:依赖与安装命令
编译要求(来自 CMakeLists.txt 与 README.md):
- C++23 编译器:GCC 14+ 或 Clang 19+;CMake 路线需 CMake 3.25、Ninja
- GNU
coreutils与sed(现代发行版通常已带) - 终端支持 24-bit truecolor 与宽字符(braille 图形字符);UTF-8 locale
- 注意:GPU 监控依赖运行时动态加载厂商库,静态链接编译的产物不带 GPU 功能
从源码构建(x86_64 Linux 下GPU_SUPPORT默认为 true,会自动检测并启用):
sudo apt install coreutils sed git build-essential lowdown git clone https://gitcode.com/GitHub_Trending/bt/btop cd btop make # 或 cmake -B build -G Ninja && cmake --build build sudo make install sudo make setcap # 可选;Intel GPU 与 CPU 瓦数监控需要CMake 路线的常用开关:-DBTOP_GPU=ON/OFF(默认 ON)、-DBTOP_RSMI_STATIC=ON(静态链接 ROCm SMI,要求源码位于lib/rocm_smi_lib)、-DBTOP_STATIC=ON(静态链接,会失去 GPU 监控)。
GPU 监控按厂商的额外依赖:
- NVIDIA:官方驱动(闭源与开源内核模块均已验证),随驱动安装的
nvidia-ml动态库 - AMD:
rocm_smi_lib;发行版未打包时可RSMI_STATIC=true静态链接(测试版本 5.6.x) - Intel:可读 sysfs(
/sys/class/drm下的 PMU 计数器),普通用户无权限时执行sudo make setcap,或改用sudo运行
macOS 用户可直接brew install btop,GPU 支持仅 Apple Silicon 机型。
功能逐块拆解:从进程列表到 GPU 面板
主界面与面板布局
启动后界面由若干盒子组成:CPU 曲线、内存/交换/磁盘、网络、进程列表,顶部显示时钟与电池。盒子显示与否、位置与图形符号都可调整,shown_boxes配置项支持cpu mem net proc gpu0~gpu5。界面支持鼠标点击与滚轮,进程列表可用 UP/DOWN 快速选中、查看单进程详情、发送任意信号。
GPU 面板:三厂商统一采集、统一渲染
采集逻辑全部在 src/linux/btop_collect.cpp 中,按厂商分模块:
- NVIDIA:动态加载
libnvidia-ml,调用nvmlDeviceGetUtilizationRates、nvmlDeviceGetMemoryInfo、nvmlDeviceGetPowerUsage等接口 - AMD:通过 ROCm SMI 接口获取忙闲百分比、功耗、频率与显存占用,另有仅读 amdgpu DRM sysfs 节点的轻量路径
- Intel:内置 src/linux/intel_gpu_top/ 模块,直接读 PMU 硬件计数器;数据结构
struct engines中每个engine带busy/wait/sema计数器,此外还有 RC6 节能状态、RAPL 功耗、IMC 内存带宽计数
各厂商数据汇入 src/btop_shared.hpp 中统一的gpu_info结构,再由 src/btop_draw.cpp 渲染,字段节选:
struct gpu_info { unsigned int gpu_clock_speed; // 核心频率 MHz long long pwr_usage; // 功耗 mW long long temp; // 温度 long long mem_total, mem_used; // 显存总量/已用 long long pcie_tx, pcie_rx; // PCIe 吞吐 long long encoder_utilization, decoder_utilization; // 编解码器占用 gpu_info_supported supported_functions; // 当前厂商支持的指标集 };操作方式:主界面按5、6、7分别切换第 1、2、3 块 GPU 的显示,0全部隐藏;CPU 选项菜单里也可以把 GPU 统计合并显示到 CPU 盒子内(信息更精简)。supported_functions会如实标注某指标是否可用,例如 v1.4.0 起 Intel 卡仅提供利用率、功耗与频率。
进程与资源面板
进程列表支持按 pid/程序名/用户/内存/CPU 等排序、树状视图(可自动折叠多进程应用)、过滤(启动参数-f <filter>可预设过滤词)、暂停列表并跟随选中进程。内存盒子可拆出磁盘 IO 模式(io_mode),网络曲线支持自动缩放(net_auto)。
真实场景:两个"观察—判断"闭环
场景一:游戏高负载时掉帧,瓶颈在哪
- 操作:另开终端运行
btop,按5显示 GPU 面板,进入游戏 - 观察:GPU 曲线是否贴近 100%;显存(vram)曲线离上限还差多少
- 判断:
- GPU 满负荷但帧率低 → 算力瓶颈,显卡规格不足
- 显存接近上限而 GPU 利用率起伏 → 显存压力,降低材质/分辨率档
- GPU 未满但 CPU 曲线打满 → CPU 瓶颈,查进程列表里 CPU 占用最高的条目
场景二:长时间渲染盯显存趋势
渲染任务(Blender 等)常在显存耗尽时失败。运行期间观察 GPU 面板显存曲线的走势:平稳则安全;缓慢爬升则提前干预(降采样精度或分块渲染)。选中渲染进程查看详情可确认其内存归属,proc_mem_bytes = true(默认)下直接显示字节数。
个性化:配置、预设与主题
配置文件位于~/.config/btop/btop.conf(首次运行自动生成,也可--default-config打印默认内容),全部选项在 UI 中按 F2 修改。与 GPU 监控相关的常用项:
shown_boxes = "cpu mem net proc gpu0" # 开机即显示第一块 GPU 面板 update_ms = 2000 # 刷新间隔,建议不低于 2000 graph_symbol = "braille" # braille / block / tty 三种图形符号 temp_scale = "celsius" # 温度单位 presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default" # 布局预设命令行参数可以覆盖初始状态:-u <ms>刷新率、-p <0-9>指定预设、-f <filter>进程过滤、-l256 色模式、-t强制 TTY 16 色模式。日志级别由log_level控制,日志写入~/.local/state/btop.log。
主题与 bpytop/bashtop 共用.theme格式,内置主题在 themes/ 目录(30+ 款),make install会装到系统主题目录;个人主题放~/.config/btop/themes,也可用--themes-dir指定自定义目录:
cp themes/dracula.theme ~/.config/btop/themes/ # 放入后在 F2 菜单中选中排错手册
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| NVIDIA 卡无数据 | 驱动或 nvidia-ml 库缺失;或二进制为静态编译 | 安装官方驱动;确认ldconfig -p \| grep nvidia-ml有结果;从源码动态链接编译(GPU_SUPPORT 默认开启) |
| AMD 卡无数据 | 缺少 rocm_smi_lib | 安装发行版包;或将 ROCm SMI 源码放入lib/rocm_smi_lib后make RSMI_STATIC=true |
| Intel 核显读不到计数器 | 无 sysfs 读取权限 | sudo make setcap(推荐)或sudo make setuid,或临时sudo运行 |
| 二进制带 GPU 支持但无 GPU 面板 | 静态链接产物;或尚未用数字键调出面板 | 改为动态链接编译;主界面按5/6/7显示对应 GPU 盒 |
| 曲线字符缺失或错位 | 字体缺 braille 字符(U+2800–U+28FF) | 更换含 Braille Patterns 的字体;或graph_symbol = "block"、TTY 模式 |
| 界面色彩降级、图形粗糙 | 终端不支持 truecolor | 换用 24-bit 终端,或接受-l/-t降级模式 |
小结
btop 的价值在于把原本分散在多个命令里的系统状态合并成一块可持续观察的屏幕,GPU 监控按厂商实现采集、统一渲染,对新手只需记住:动态链接编译、装好厂商驱动、按5显示 GPU 面板。源码仓库:git clone https://gitcode.com/GitHub_Trending/bt/btop,更多选项见 manpage.md 与 CHANGELOG.md。如果这篇文章帮你对清了自己的显卡状态,欢迎点赞、收藏,或关注仓库获取版本更新。
【免费下载链接】btopA monitor of resources项目地址: https://gitcode.com/GitHub_Trending/bt/btop
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考