鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

访存统计分析

访存单元是CPU中逻辑控制最复杂的单元,该单元负责处理Load和Store等访存指令执行过程中的各类问题,确保其能够高速完成。访存统计分析提供访存数据统计能力,便于用户查看可能出现性能问题的流程。

命令功能

基于CPU访问缓存和内存的PMU事件,分析存储的访问次数、命中率、带宽等相关情况。

命令格式

1
devkit tuner memory [-h] [-d <sec>] [-l {0, 1, 2, 3}] [-i <sec>] [-m {1, 2, 3, 4}] [-P {100, 1000}] [-c {n,m | n-m}]

参数说明

表1 参数说明

参数

参数选项

说明

-h/--help

-

可选参数,获取帮助信息。

-d/--duration

-

可选参数,设置采集时长,单位为秒,最小值为1秒,默认一直采集,可使用Ctrl+\取消任务或Ctrl+C停止采集并进入分析。

-l/--log-level

0/1/2/3

可选参数,设置日志级别,默认为1。
  • 0:日志级别为DEBUG。
  • 1:日志级别为INFO。
  • 2:日志级别为WARNING。
  • 3:日志级别为ERROR。

-i/--interval

-

可选参数,设置任务的采集间隔(以秒为单位)。最小值为1秒,最大值不能超过采集时长,默认为采集时长。如果不指定间隔,不生成子报告。每个子报告中收集数据的时间取决于间隔参数。

-m/--metric

1/2/3/4

可选参数,设置采样类型,默认为1。

  • 1(ALL):全部
  • 2(Cache):缓存访问
  • 3(DDR):DDR访问
  • 4(HBM):HBM信息
    说明:

    采集选项4(HBM)显示HBM带宽信息,支持openEuler 22.03 SP3及以上版本,且需硬件支持该功能。

-P/--period

100/1000

可选参数,设置实际数据采集的间隔。默认为1000毫秒,可选100毫秒和1000毫秒;若采集时长选择1秒,采集间隔的默认值将自动调整为100毫秒。

-c/--cpu

-

可选参数,指定采集的CPU核数,如“0”、“0,1,2”、“0-2”。默认采集所有CPU核。

使用示例

1
devkit tuner memory -d 2 -m 1

命令参数-d为采集时长2秒,参数-m 1为采集所有缓存、DDR访问数据和HBM带宽信息(环境支持采集HBM信息才呈现,不支持则不呈现)。

返回信息如下:

Memory Summary Report-ALL                               Time:2025/12/09 09:57:23
================================================================================

System Information
───────────────────────────────────────────────────────────────
Linux Kernel Version        4.19.25-203.el7.bclinux.aarch64
Cpu Type                    Kunpeng 920
NUMA NODE(cpus)             0(0-31)      1(32-63)     2(64-95)     3(96-127)

Percentage of core Cache miss
───────────────────────────────────────────────────────────────
L1D         3.47%
L1I         0.01%
L2D        58.88%
L2I        35.26%


DDR Bandwidth (system wide)
───────────────────────────────────────────────────────────────
ddrc_write        658.03MB/s
ddrc_read         16900.26MB/s


Memory metrics of the Cache
───────────────────────────────────────────────────────────────
1. L1/L2/TLB Access Bandwidth and Hit Rate
Value Format: X|Y = Bandwidth | Hit Rate
───────────────────────────────────────────────────────────────
  CPU                   L1D                    L1I                   L2D                  L2I       L2D_TLB       L2I_TLB
───────────────────────────────────────────────────────────────
  all    81581.38MB/s|96.53%    201888.73MB/s|99.99%    35588.65MB/s|41.12%    72.89MB/s|64.74%    N/A|57.10%    N/A|94.37%
───────────────────────────────────────────────────────────────


2. L3 Read Bandwidth and Hit Rate
───────────────────────────────────────────────────────────────
  NODE    CCL     Read Hit Bandwidth    Read Bandwidth    Read Hit Rate
───────────────────────────────────────────────────────────────
  0               369.95MB/s      21079.22MB/s            1.76%
  1                10.93MB/s        181.49MB/s            6.02%
  2                23.75MB/s        296.73MB/s            8.00%
  3                 4.17MB/s        110.28MB/s            3.78%
──────────────────────────────────────────────────────────────────


Memory metrics of the DDRC
──────────────────────────────────────────────────────────────────
1. DDRC_ACCESS_BANDWIDTH
Value Format: X|Y = DDR read | DDR write
DDRC Read Bandwidth Bottleneck: 12500MB/s (for reference only)
Exceeding the bottleneck will significantly increase latency.
Please refer to README_ZH.md(Chapter 6.7) for specific bottleneck testing configurations.
DDRC exceeding bottleneck: [Node 0, DDRC_2, DDR READ]
──────────────────────────────────────────────────────────────────
  NODE                   DDRC_0                   DDRC_1                   DDRC_2                   DDRC_3                    Total
──────────────────────────────────────────────────────────────────
  0       0.00MB/s|0.00MB/s    0.00MB/s|0.00MB/s    16779.55MB/s|616.21MB/s     0.00MB/s|0.00MB/s    16779.55MB/s|616.21MB/s
  1       0.00MB/s|0.00MB/s    0.00MB/s|0.00MB/s        0.00MB/s|  0.00MB/s     7.55MB/s|5.24MB/s        7.55MB/s|  5.24MB/s
  2       0.00MB/s|0.00MB/s    0.00MB/s|0.00MB/s       85.35MB/s| 27.01MB/s     0.00MB/s|0.00MB/s       85.35MB/s| 27.01MB/s
  3       0.00MB/s|0.00MB/s    0.00MB/s|0.00MB/s        0.00MB/s|  0.00MB/s    27.80MB/s|9.56MB/s       27.80MB/s|  9.56MB/s
──────────────────────────────────────────────────────────────────

输出报告说明:

报告由六个部分组成,自上而下分别为系统信息、L1/L2缓存平均未命中率信息、总DDR带宽信息、L1/L2缓存带宽和命中率信息、L3缓存读带宽和命中率信息和DDRC带宽信息。

  1. 系统信息

    逐行显示当前系统的Linux内核版本、CPU类型、NUMA节点和CPU核的分布信息。

  2. L1/L2缓存平均未命中率信息

    逐行显示当前系统CPU核的平均L1D、L1I、L2D、L2I缓存未命中率,即未命中次数占总访问次数的比例。

  3. 总DDR带宽信息

    逐行显示当前系统的DDRC读写带宽信息。

  4. L1/L2缓存带宽和命中率信息

    如果用户通过-c指定了采集的CPU核,会显示每个CPU核的L1/L2缓存带宽和命中率信息。如果用户未指定-c则默认采集所有CPU核的平均L1/L2缓存带宽和命中率信息。

  5. L3缓存读带宽和命中率信息

    逐行显示各NUMA节点L3缓存的读命中带宽、读带宽、命中率信息。

  6. DDRC带宽信息

    显示所有DDR控制器(DDRC)的读写带宽,通常每个NUMA节点会有4个DDRC。

    • 访存分析在鲲鹏920服务器测试得到了一组DDR读带宽瓶颈点,用于提示用户当前DDRC读带宽是否达到瓶颈,当DDRC读带宽达到瓶颈时,CPU和DDRC间的时延显著上升。各服务器的DDRC配置基于标准配置测试,其中920服务器的DDRC速率为2933MT/s(仅供参考)。
    • 结果中DDRC Bandwidth Bottleneck为带宽瓶颈值(仅供参考),若DDRC_ACCESS_BANDWIDTH表格中有数据超过瓶颈值,将新增一行数据DDRC exceeding bottleneck,以Node_n+DDRC_n+读写类型的方式指明数据位置。
    • 当启动BIOS设置中的“one numa per socket”时,一个NUMA节点具有8个DDRC通道,结果报告中带宽显示的DDRC带宽实际对应了两个DDRC带宽,分别属于两个合并后的CPU Die(1个CPU socket下具有2个CPU Die)。