当前位置: 首页 > news >正文

Linux中perf的使用

`perf` 是 Linux 系统中的一个强大的性能分析工具,广泛用于内核和用户态程序的性能分析。它可以帮助开发者和系统管理员深入了解程序的 CPU 使用情况、函数调用频率、缓存命中率、硬件事件等,进而优化程序的性能。

下面我将详细介绍如何在 Linux 系统中使用 `perf`,从安装到基本的使用方法。

### 1. **安装 `perf` 工具**
在大多数 Linux 发行版中,`perf` 是内核的一部分,但你需要通过软件包管理器安装它。安装命令因发行版不同而异:

- **Debian/Ubuntu**:
  ```bash
  sudo apt update
  sudo apt install linux-tools-common linux-tools-$(uname -r)
  ```
- **Fedora/RHEL/CentOS**:
  ```bash
  sudo dnf install perf
  ```
- **Arch Linux**:
  ```bash
  sudo pacman -S perf
  ```

确认 `perf` 是否安装成功,可以运行以下命令:
```bash
perf --version
```

### 2. **基本的 `perf` 使用方法**
`perf` 提供了许多子命令,以下是一些常见的用法。

#### 2.1. **分析 CPU 使用情况(`perf stat`)**
`perf stat` 是用来统计一个命令的执行过程中,硬件和软件事件发生的次数。例如,可以用它来查看程序执行期间的 CPU 周期、指令、缓存访问等硬件计数。

示例:统计 `ls` 命令的性能数据
```bash
perf stat ls
```

输出将包括程序执行期间的事件统计信息,例如:
- CPU cycles
- Instructions
- Cache misses
- Branch misses

#### 2.2. **查看程序的热点函数(`perf record` 和 `perf report`)**
`perf record` 用于记录程序的性能数据,特别是 CPU 性能数据(如函数的执行频率)。`perf report` 用于分析这些数据,查看程序的热点函数。

步骤:
1. **记录数据**:
   ```bash
   perf record <your_command>
   ```
   例如:
   ```bash
   perf record ./my_program
   ```
   这将记录 `my_program` 的执行数据,并生成一个 `perf.data` 文件。

2. **分析报告**:
   ```bash
   perf report
   ```
   这将打开一个 TUI(文本用户界面),显示执行数据的分析报告,其中包括各个函数的执行频率(如 CPU 周期占比),帮助你识别程序的热点函数(耗时多的函数)。

#### 2.3. **分析系统上的所有进程(`perf top`)**
`perf top` 类似于 `top`,但它分析的是系统上所有进程的实时性能数据,显示当前占用 CPU 最多的函数或事件。它可以帮助你了解哪些程序或函数正在消耗最多的系统资源。

运行以下命令:
```bash
perf top
```
该命令将打开一个实时监控界面,显示当前系统中 CPU 使用最多的函数(带符号表解析)。

#### 2.4. **跟踪系统调用(`perf trace`)**
`perf trace` 是一个类似于 `strace` 的工具,它可以跟踪进程的系统调用并统计其频率和开销。

例如,跟踪 `ls` 命令的系统调用:
```bash
perf trace ls
```
输出将显示 `ls` 过程中发生的所有系统调用及其耗时。

#### 2.5. **分析内核事件(`perf sched`)**
`perf sched` 可以用来分析内核中的调度事件。它可以帮助你了解进程的调度行为,分析系统中是否存在调度延迟等问题。

使用以下命令记录调度事件:
```bash
perf sched record
```
然后查看调度情况:
```bash
perf sched latency
```
或者绘制调度图:
```bash
perf sched trace
```

### 3. **常见场景下的 `perf` 使用**
#### 3.1. **程序性能瓶颈分析**
在你发现一个程序的执行时间比预期长时,可以使用 `perf record` 和 `perf report` 来分析程序的性能瓶颈:
```bash
perf record ./my_program
perf report
```
通过分析函数的 CPU 使用情况,找出最耗时的部分,进而进行优化。

#### 3.2. **CPU 资源争用分析**
当系统负载较高时,可以使用 `perf top` 查看哪些进程或者函数占用了最多的 CPU 资源:
```bash
perf top
```
这有助于定位系统性能瓶颈,分析高 CPU 占用的原因。

#### 3.3. **缓存性能分析**
如果你怀疑程序中存在缓存命中率低的问题,可以通过 `perf stat` 来分析缓存的性能。你可以查看缓存未命中(cache misses)的次数,以确定程序中的缓存利用情况:
```bash
perf stat ./my_program
```
在输出中查看 `cache-references` 和 `cache-misses` 两项。

#### 3.4. **多线程调度问题**
如果程序存在多线程调度问题,可以通过 `perf sched` 来分析调度延迟:
```bash
perf sched record
perf sched latency
```
通过分析调度延迟,找出导致系统调度不均衡的原因。

### 4. **高级用法**
#### 4.1. **采样指定硬件事件**
你可以让 `perf` 专门采样某些硬件事件(例如缓存未命中、分支预测失败等),从而针对性地分析程序的性能问题。

例如,记录程序的缓存未命中情况:
```bash
perf record -e cache-misses ./my_program
```

#### 4.2. **对指定 PID 进行性能分析**
如果你想对正在运行的某个进程进行性能分析,可以使用 `-p` 选项指定进程 ID:
```bash
perf record -p <PID>
```
这对分析后台运行的进程非常有用。

### 5. **总结**
- `perf` 是 Linux 内核中强大的性能分析工具,能够对 CPU 事件、系统调用、线程调度、硬件计数器等多种系统层面进行全面的性能分析。
- 常用命令包括:
  - `perf stat`:获取硬件事件统计。
  - `perf record`:记录程序执行过程中的性能数据。
  - `perf report`:生成性能分析报告。
  - `perf top`:实时查看系统性能。
  - `perf trace`:跟踪系统调用。
  - `perf sched`:分析调度行为。

掌握这些基本用法,可以帮助你快速分析和优化系统和程序的性能。


http://www.mrgr.cn/news/47300.html

相关文章:

  • 给DevOps加点料:融入安全性的DevSecOps
  • 【Ubuntu与Linux操作系统:五、文件与目录管理】
  • Redisson和可重入锁初认
  • [SMARTFORMS] 导出SMARTFORMS表单数据
  • 自定义日期转换配置
  • 算法(二)——一维差分、等差数列差分
  • redistemplate实现点赞相关功能
  • os模块简介
  • Chromium 中前端HTMLDialogElement <Dialog> c++代码实现
  • 锐明技术Mangrove系统 任意用户创建漏洞复现
  • 如何做好项目管理中的需求管理?
  • 使用 Go 语言与 Elasticsearch 实现高效搜索服务
  • Vue检测获取最新资源 解决浏览器缓存问题
  • 【多版本并发控制(MVCC)】
  • 【conda】安装使用 常用命令
  • AI时代下的程序员自我提升之道:如何保持核心竞争力
  • 【解决】虚拟机VMTool安装程序无法继续,Microsoft Runtime DLL安装程序未能完成安装
  • 变阻器的未来发展趋势和前景如何?是否有替代品出现?
  • 通信界的5G-A/F5G-A新技术,你知道多少?
  • Linux内核源码阅读——CFS调度
  • Windows工具新电脑设置重置后设置
  • 探索一机两用号召是否和源代码保密冲突
  • [SQL] 安装
  • 科普向 -- 什么是RPC
  • 怎么让电脑定时提醒我做事
  • 太速科技-607-基于FMC的12收和12发的光纤子卡