2、环境搭建:在Ubuntu和Windows上安装性能分析工具链
好,咱们直接进入正题。环境搭建这事儿,说简单也简单,说坑也多。我见过不少新手,工具装到一半就卡住了,最后发现是源没配好,或者路径没加对。所以这一章,我带你一步步把 perf、gprof、Valgrind 这三件套装好。Ubuntu 和 Windows 我都会讲,你按自己的系统来就行。
2.1 为什么是这三件套?
先简单说下为什么选它们。你想想看,做嵌入式 GUI 性能分析,你至少需要三类数据:
- CPU 热点:哪段代码最耗 CPU?—— perf 干这个。
- 函数调用次数与耗时:哪个函数被调了上万次?—— gprof 干这个。
- 内存泄漏与缓存问题:内存是不是偷偷涨了?—— Valgrind 干这个。
这三样东西配合起来,基本能覆盖 90% 的性能问题。我个人习惯是先用 perf 扫一遍,发现热点函数后,再用 gprof 深入看调用关系,最后用 Valgrind 检查内存。嗯,这个流程我用了好几年,挺顺手的。
2.2 Ubuntu 上的安装
Ubuntu 下安装这些工具,说白了就是几条 apt 命令。但有几个细节要注意,我踩过坑的地方会特别提醒你。
2.2.1 安装 perf
perf 是 Linux 内核自带的工具,但默认没装全。你需要装 linux-tools 包:
sudo apt update
sudo apt install linux-tools-common linux-tools-generic linux-tools-$(uname -r)
装完后,跑一下 perf --version 看看。如果提示 WARNING: perf not found for kernel ...,别慌。我曾经也被这个警告坑过,后来发现是内核头文件没对齐。解决办法是:
sudo apt install linux-headers-$(uname -r)
然后重新装一遍 linux-tools。嗯,这里要注意,每次升级内核后,最好重新执行一次上面的命令,否则 perf 可能罢工。
2.2.2 安装 gprof
gprof 是 GNU 工具链的一部分,通常已经随 gcc 装好了。你只需要确认一下:
gcc --version
gprof --version
如果没装 gcc,那就:
sudo apt install build-essential
build-essential 会一并把 gcc、g++、make、gprof 都装好。我个人建议你装这个包,因为后面编译嵌入式 GUI 程序时,make 和 gcc 都是必需品。
-pg 选项,否则它不会生成分析数据。这个很多人会忘,包括我刚开始用的时候也漏过。后面章节我会详细讲编译参数。
2.2.3 安装 Valgrind
Valgrind 的安装最简单:
sudo apt install valgrind
装完后验证:
valgrind --version
如果版本号出来了,就说明装好了。Valgrind 在 Ubuntu 上基本不会出问题,但有一个坑:它默认只支持 x86 和 ARM 架构。如果你用的是 RISC-V 或 MIPS 的交叉编译环境,Valgrind 可能跑不了。我在一个 RISC-V 板子上试过,折腾了半天,最后只能用 perf 替代。
2.3 Windows 上的安装
Windows 下装这些工具稍微麻烦点,因为它们是 Linux 原生工具。但别担心,有两种主流方案:WSL2 和 MSYS2。我个人更推荐 WSL2,因为它和 Ubuntu 环境几乎一样,后面你写脚本、做自动化分析都方便。
2.3.1 方案一:WSL2(推荐)
首先,确保你的 Windows 10/11 开启了 WSL2 功能。打开 PowerShell(管理员),运行:
wsl --install -d Ubuntu-22.04
装完后重启,进入 Ubuntu 终端。然后按照上面 2.2 节的步骤,在 WSL2 里安装 perf、gprof、Valgrind。说白了,WSL2 里的操作和原生 Ubuntu 一模一样。
permission denied。
2.3.2 方案二:MSYS2(备选)
如果你不想用 WSL2,或者需要原生 Windows 二进制文件,可以用 MSYS2。它提供了一个类 Linux 的终端环境。
安装步骤:
- 从官网下载 MSYS2 安装包,一路默认安装。
- 打开 MSYS2 UCRT64 终端,更新包管理器:
pacman -Syu
- 安装工具链:
pacman -S mingw-w64-ucrt-x86_64-gcc
pacman -S mingw-w64-ucrt-x86_64-gprof
pacman -S mingw-w64-ucrt-x86_64-valgrind
注意:MSYS2 里没有 perf,因为 perf 依赖 Linux 内核特性。如果你需要 CPU 热点分析,建议用 WSL2 方案,或者用 Windows 上的 Windows Performance Toolkit(WPT)替代。不过 WPT 和 perf 的输出格式不同,后面分析时得手动转换一下。
2.4 验证安装是否成功
装完别急着走,咱们做个快速验证。写一个简单的 C 程序,测试三个工具能不能正常工作。
创建一个文件 test_perf.c:
#include <stdio.h>
void busy_loop() {
for (volatile int i = 0; i < 100000000; i++);
}
int main() {
printf("Testing perf, gprof, Valgrind...\n");
busy_loop();
return 0;
}
然后依次测试:
# 测试 perf
gcc -o test_perf test_perf.c
perf stat ./test_perf
# 测试 gprof(注意加 -pg)
gcc -pg -o test_gprof test_perf.c
./test_gprof
gprof test_gprof gmon.out
# 测试 Valgrind
valgrind --tool=memcheck ./test_perf
如果每个命令都能正常输出结果,没有报错,那就说明环境搭好了。嗯,这里要注意,gprof 第一次跑完后,会在当前目录生成 gmon.out 文件,别手欠删了。
2.5 我的一点建议
环境搭建这一步,说白了就是「磨刀不误砍柴工」。我见过有人花三天装环境,结果发现是网络源的问题。所以我的建议是:
- Ubuntu 用户:直接用 apt,别自己编译源码,除非你有特殊需求。
- Windows 用户:优先 WSL2,别在 MSYS2 上浪费时间,除非你真的很熟悉它。
- 交叉编译环境:如果你是在 ARM 板子上做嵌入式 GUI 开发,记得在宿主机上装好交叉编译工具链,然后在目标板上装 perf 和 Valgrind。gprof 可以在宿主机上分析,但编译时得用交叉编译器加
-pg选项。
好了,环境搭好了,下一章咱们就开始真正用这些工具分析 GUI 性能了。到时候我会拿一个实际的嵌入式 GUI 程序做演示,你跟着跑一遍,很快就能上手。