3. Jetson资源监控基础
在 Jetson 平台上做性能诊断,第一步不是改参数,而是把“系统现在到底在干什么”看清楚。Jetson 与普通 x86 服务器最大的不同在于:CPU、GPU、内存、功耗、温度、频率被同一颗 SoC 和同一套电源管理策略耦合在一起,任何一个模块的瓶颈都可能通过另一个模块的指标表现出来。因此,本节围绕三类最常用的监控工具展开:命令行原生的 tegrastats、交互式的 jtop,以及来自桌面 GPU 生态的 nvidia-smi,并说明它们各自能回答什么问题、关键指标如何解读。
三类工具的定位与差异
这三者并不是互相替代的关系,而是覆盖不同层次:
- tegrastats:NVIDIA 随 L4T 提供的轻量命令行工具,直接读取 SoC 内部的各种传感器与统计寄存器,输出粒度细、开销低,适合长时间记录和脚本化采集,是排查“瞬时抖动”和“功耗墙”的首选。
- jtop:基于 Python 的交互式 TUI(终端界面),底层同样调用 tegrastats 等数据源,但把 CPU/GPU/内存/功耗/温度/风扇/进程整合成可视化面板,适合交互式观察和快速定位占用大户。
- nvidia-smi:在 Jetson 上功能被大幅裁剪,主要能报告 GPU 型号、驱动版本、部分利用率与显存信息,缺少桌面端的功耗、时钟、进程级显存明细等能力。它更适合做“GPU 是否存在、驱动是否正常”的快速确认,而不是深度诊断。
一个实用的判断原则是:要连续数据用 tegrastats,要交互观察用 jtop,要确认 GPU 基础状态用 nvidia-smi。三者结合,才能既看到趋势又看到细节。
tegrastats 的输出结构与关键字段
直接运行 tegrastats 会以约 1 秒为周期打印一行状态。常用参数包括 --interval 指定毫秒级采样间隔、--logfile 将输出写入文件、--average 输出平均值。例如以 500ms 采样并记录:
sudo tegrastats --interval 500 --logfile /tmp/tegrastats.log
典型输出片段(示例,非实测):
RAM 3820/7854MB (lfb 512x4MB) SWAP 0/3927MB CPU [12%@1900,8%@1900,5%@1900,3%@1900] EMC_FREQ 3%@1600 GR3D_FREQ 0%@114 PLL@30C CPU@42C PMIC@100C GPU@38C AO@38C thermal@40C VDD_IN 4200mW/4200mW VDD_CPU_GPU_CV 900mW/900mW VDD_SOC 1100mW/1100mW
逐段解读:
- RAM:已用/总内存,括号内
lfb是留给 GPU 的大块连续内存(large free block)情况。若 lfb 数量骤减,说明内存碎片化加剧,可能影响 GPU 分配。 - SWAP:交换分区使用量。Jetson 上 swap 一旦被大量使用,往往意味着内存不足,性能会明显下降。
- CPU:每个核心的占用率与当前频率,格式为
占用%@频率。注意频率是否被压到较低档位,这通常与功耗或温度限制有关。 - EMC_FREQ:外部内存控制器频率,反映内存带宽档位。GPU 密集型任务若 EMC 频率偏低,带宽可能成为瓶颈。
- GR3D_FREQ:GPU 频率与占用。若占用高但频率低,说明 GPU 被降频;若占用低,则可能是 CPU 或数据供给拖累。
- 温度组:PLL、CPU、GPU、AO、thermal 等各测温点。持续接近 80–90°C 会触发降频。
- VDD_IN / VDD_CPU_GPU_CV / VDD_SOC:整机输入功率与各域功率,斜杠后为平均值。这是判断是否撞到功耗墙的核心依据。
jtop 的交互式观察
安装后运行 sudo jtop 即可进入界面。它把信息分为多个页面:CPU、GPU、内存、功耗、温度、风扇、进程等。相比 tegrastats 的“一行流”,jtop 的优势在于:
- 用柱状图和曲线展示各核心占用与频率的实时变化,趋势一目了然;
- 进程页按 CPU/GPU/内存排序,能快速找到占用大户;
- 功耗与温度集中展示,便于判断是否触发降频;
- 可切换不同电源模式(nvpmodel)并观察指标变化。
实操中常见的用法是:先用 jtop 定位到某个进程占用异常,再用 tegrastats 记录该进程运行期间的完整时间序列,两者互补。
nvidia-smi 在 Jetson 上的边界
在 Jetson 上执行 nvidia-smi,通常只能看到 GPU 型号、驱动版本、部分利用率和显存总量,且不同 JetPack 版本输出差异较大。它不能像桌面端那样列出每个进程的显存占用,也不提供功耗和时钟的细粒度信息。因此,把它当作“GPU 是否被系统正确识别”的快速检查即可,深度诊断仍应回到 tegrastats 与 jtop。
关键指标之间的因果链
监控的价值不在于记住每个字段,而在于理解它们之间的因果链。下图把 Jetson 上最常见的“性能受限”路径整理为一条信号链:从负载进入,到频率、功耗、温度、内存的相互制约,最终表现为吞吐下降。
从指标到判断:一个排查示例
假设在 Jetson Orin 上运行一个视觉推理程序,发现帧率低于预期。按以下顺序观察:
- 用
jtop查看进程页,确认推理进程的 CPU 与 GPU 占用。若 GPU 占用长期低于 50%,说明 GPU 没有被喂饱,瓶颈可能在前处理或数据拷贝。 - 用
tegrastats --interval 500 --logfile记录 30 秒,检查GR3D_FREQ的频率档位。若占用高但频率停在低档,继续看VDD_IN是否接近模块上限,以及thermal是否超过 80°C。 - 若
VDD_IN已接近上限,说明撞到功耗墙,可考虑切换更高效的电源模式或降低并发负载;若温度过高,则需检查散热与风扇策略。 - 若功耗与温度都正常,但
EMC_FREQ偏低且lfb数量减少,则怀疑内存带宽或碎片化问题,可检查是否存在频繁的大块内存分配与释放。
这个顺序体现了一个基本原则:先看占用是否匹配,再看频率是否被限制,最后看功耗、温度与内存是否构成约束。把 tegrastats 的连续数据与 jtop 的交互视图结合,就能把“感觉慢”转化为可定位、可验证的具体指标。