---
title: 微架构分析
description: "基于ARM PMU（Performance Monitor Unit）事件，获得指令在CPU流水线上的运行情况，帮助用户快速定位当前应用在CPU上的性能瓶颈。用户可以有针对性地修改自己的程序，以充分利用当前的硬件资源。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevkithistory/devkit_24_rc2/cliuserguide/KunpengDevKitCli_0033.html
sourcePath: /source/zh/kunpengdevkithistory/devkit_24_rc2/cliuserguide/KunpengDevKitCli_0033.html
indexId: 938d5fa82dfdceb5128b69f17b8d8c32b97e69d8de2ee8a360f63c974b7ce78e85
---
# 微架构分析

#### 命令功能

基于ARM PMU（Performance Monitor Unit）事件，获得指令在CPU流水线上的运行情况，帮助用户快速定位当前应用在CPU上的性能瓶颈。用户可以有针对性地修改自己的程序，以充分利用当前的硬件资源。


#### 命令格式

```
devkit tuner topdown [-h | --help][-d <DURATION> | --duration=DURATION][-p <PID> | --pid=PID][-r <RANGE> |
--collection-range=RANGE][-c <CPU> | --cpu=CPU][-L <METRIC> | --profile-level=METRIC][-D <DELAY> | --delay=
DELAY][-i <INTERVAL> | --interval=INTERVAL] COMMAND [appDir][appArgs]
```


devkit tuner topdown可采集指定应用，在命令后添加指定应用路径和应用参数即可；当参数-c/--cpu或参数-p/--pid存在时，优先采集参数指定项。


#### 参数说明


**表1 参数说明**

| 参数 | 参数选项 | 说明 |
| --- | --- | --- |
| \-h/\-\-help | \- | 获取帮助信息。 |
| \-c/\-\-cpu | \- | 指定采集的CPU核数，如“0”、“0,1,2”、“0\-2”。 |
| \-d/\-\-duration | \- | 设置采集时长，单位为秒，默认为一直采集，可使用Ctrl+\取消任务或Ctrl+C停止采集并进入分析。 |
| \-D/\-\-delay | \- | 设置延迟采集时长，默认为0秒，最大值不可超过设置的采集时长。 |
| \-i/\-\-interval | \- | 设置采集间隔，默认为1秒；若已设置采集时长 ，需小于等于采集时长。 |
| \-l/\-\-log\-level | 0/1/2/3 | 配置日志等级。默认值为1(info)。 0(debug) 1(info) 2(warning) 3(error) |
| \-L/\-\-profile\-level | 1/2/3/4/5/6 | 设置分析指标，默认为1。 1代表level 1，默认采集Back\-End Bound，Bad Speculation，Front\-End Bound，Retiring。 2代表Back\-End Bound\->Core Bound：Back\-End是处理器处理机制的后置部分，它负责微指令的乱序分发和执行，并返回最终结果。Core Bound是Back\-End Bound的子类，该指标能够反映出由于处理器执行单元资源不足导致性能瓶颈的比例情况。 3代表Back\-End Bound\->Memory Bound：Back\-End是处理器处理机制的后置部分，它负责微指令的乱序分发和执行，并返回最终结果。Memory Bound是Back\-End Bound的子类，该指标能够反映出由于等待数据读/写导致的流水线阻塞。 4代表Back\-End Bound\->Resource Bound：（只适用于鲲鹏920处理器）Back\-End是处理器处理机制的后置部分，它负责微指令的乱序分发和执行，并返回最终结果。Resource Bound是Back\-End Bound的子类，该指标能够反映出由于缺乏资源把微指令分发给乱序执行调度器，从而导致的流水线阻塞情况。 5代表Bad Speculation：该指标能够反映出由于错误的指令预测操作导致的流水线资源浪费情况。 6代表Front\-End Bound：该指标代表了处理器处理机制的前置部分，在该部分，指令获取单元负责指令的获取并转化为微指令提供给后置部分的流水线执行。该指标能够反映出处理器前置部分没有被充分利用的比例情况。 |
| \-o/\-\-output | \- | 设置报告数据生成文件名，默认为当前所在目录生成topdown\-xxxx\-xxxx.tar，若存在同名文件，则生成“文件名\-\-xxxx\-xxxx.tar”。 |
| \-r/\-\-collection\-range | user/kernel/all | 设置采集进程的等级，当\-p/\-\-pid设置为ALL时，可以收集内核模式进程或用户模式进程。默认采集全部模式。 user：用户模式 kernel：内核模式 all：全部模式 |
| \-p/\-\-pid | PID/PID1，PID2/ALL | 指定采集的进程PID，多个进程PID可用“,”分隔，默认采集全部进程（ALL）。若同时使用\-p和\-c参数则优先采集指定PID的进程。 |
| \-\-package | \- | 设置是否将数据导入数据库，并在指定输出路径中生成压缩包。 |


#### 使用示例

- 针对CPU采集

```
devkit tuner topdown -c 0-127  -d 3 -o /home/topdown_cpu -L 2 --package
```


  该命令参数-c 0-127采集0到127的CPU核，采集时长为3秒，参数-o /home/topdown_cpu和--package生成以topdown_cpu命名的报告数据压缩包至指定路径，参数-L 2为采集Back-End Bound->Core Bound指令数据。

  返回信息如下：

```
Topdown metrics of 'CPU(s) 0-127':
Instructions                                 564372224
Cycles                                       814631616
IPC                                          0.69
Backend Bound                                30.16%
|-- Core Bound                               |-- 20.40%
|-- Divider Stall                            |-- 0.00%
|-- FSU Stall                                |-- 0.00%
|-- Exe Ports Stall                          |-- 20.40%
Bad Speculation                              12.29%
Frontend Bound                               40.23%
Retiring                                     17.32%
3421 milliseconds time elapsed
info: The report /home/topdown.tar is generated successfully.
info: To view summary report. you can run: devkit report -i /home/topdown.tar
info: To view detail report. you can import the report to the WebUI or IDE to view details.
```


- 针对进程ID采集

```
devkit tuner topdown -p 1891015 -d 3 -o /home/topdown_pid --package
```


  该命令参数-p 1891015采集PID为1891015的进程，采集时长为3秒，参数-o /home/topdown_pid和--package生成以topdown_pid命名的报告数据压缩包至指定路径，未指定参数-L则采集Back-End Bound，Bad Speculation，Front-End Bound，Retiring指令数据。

  返回信息如下：

```
Topdown metrics of process id '1891015':
Instructions                                 30194684
Cycles                                       65768472
IPC                                          0.46
Backend Bound                                29.20%
Bad Speculation                              7.12%
Frontend Bound                               52.20%
Retiring                                     11.48%
3362 milliseconds time elapsed
info: The report /home/topdown-pid.tar is generated successfully.
info: To view summary report. you can run: devkit report -i /home/topdown_pid.tar
info: To view detail report. you can import the report to the WebUI or IDE to view details.
```


- 针对应用采集

```
devkit tuner topdown -d 10 -o /home/topdown_app -L 2 --package /opt/testdemo/falsesharinglong
```


  该命令采集时长为10秒，参数-o /home/topdown_app和--package生成以topdown_app命名的报告数据压缩包至指定路径，参数-L 2为采集Back-End Bound->Core Bound指令数据。

  返回信息如下：

```
Topdown metrics of '/opt/testdemo/falsesharinglong':
Instructions                                 59373846528
Cycles                                       52865875968
IPC                                          1.12
Backend Bound                                67.58%
|-- Core Bound                               |-- 63.31%
|-- Divider Stall                            |-- 0.00%
|-- FSU Stall                                |-- 0.00%
|-- Exe Ports Stall                          |-- 63.31%
Bad Speculation                              3.56%
Frontend Bound                               0.78%
Retiring                                     28.08%
11153 milliseconds time elapsed
info: The report /home/topdown_app.tar is generated successfully.
info: To view summary report. you can run: devkit report -i /home/topdown_app.tar
info: To view detail report. you can import the report to the WebUI or IDE to view details.
```


以上界面回显为微架构分析任务的总览信息，时序信息可通过--package参数打包生成TAR包，导入Web界面查看图形化信息；导入详情请参见任务管理(https://www.hikunpeng.com/document/detail/zh/kunpengdevkithistory/devkit_24_rc2/usermanual/devkit-hypertuner-055.html)中的任务导入部分内容。
