diff --git a/hpt/README.md b/hpt/README.md index 3bd9deaad982698ed0312d552fcf4bc27fc6d4f3..06c9a12cd19389d638dd44d5223517e88a58aa4e 100644 --- a/hpt/README.md +++ b/hpt/README.md @@ -10,3 +10,4 @@ hpt目录用于存放海光性能分析工具hpt(hygon performance tuner)的发 |v2.0.0|支持监控进程对CPU、内存、存储IO等资源的消耗情况。
支持监控java进程的热点函数,绘制on-cpu火焰图。
支持监控网络设备的收发包流量信息。
支持监控进程线程在CPU上的调度情况,绘制off-cpu火焰图。| |v3.0.0|增加了hotspot接口,支持分析C/C++程序代码识别性能瓶颈,识别并展示占比高于0.5%的前20个热点函数及其调用栈信息。| |v4.0.0|增加了mem接口,支持分析程序访存相关的性能指标,包括进程发生本NUMA节点访存和跨NUMA节点访存的次数、进程发生伪共享的情况,帮助开发者深入了解程序在运行时的内存访问行为。| +|v4.1.0| 新增对内存交织场景的支持
新增对C86-4G 7490H和7480H平台的支持
对ssu功能进行了扩展,包括BIOS、处理器、网络、操作系统、存储、内存带宽、ipc等方面
新增了一键收集系统详细配置、一键采集常用PMU指标、一键采集常用软件的性能数据的脚本| \ No newline at end of file diff --git a/hpt/pkg/hpt-4.1.0/ChangeLog.md b/hpt/pkg/hpt-4.1.0/ChangeLog.md new file mode 100644 index 0000000000000000000000000000000000000000..09645915f7f34a5594d9f948a9eae44f34e4c691 --- /dev/null +++ b/hpt/pkg/hpt-4.1.0/ChangeLog.md @@ -0,0 +1,55 @@ +# ChangeLog +## hpt-4.1.0 (2025-3) +### Features +- 新增对 memory interleaving(内存交错)场景的支持。 +- 新增对C86-4G 7490H和7480H平台的支持。 +- 对 ssu 功能进行了拓展,具体如下: + - bios:cstate、pstate、iommu、sr-iov相关配置。 + - processor:DF频率、cpu scalling/idle governors。 + - 网络:包含了中断聚合设置、offload(网络卸载)功能配置、网卡队列数量。 + - operating sytem:支持检测是否包含 hygon patch(海光补丁),以及获取大页、虚拟内存参数、透明页、debug tracer(调试跟踪器)、KSM(内核同页合并)、硬件预取、Hz/nohz(系统时钟频率相关)、JDK 版本等配置信息。 + - storage:磁盘调度策略、磁盘类型、文件系统类型、挂载参数等。 + - config:sysctl(内核配置参数)、kernel config(内核 config)、lsmod(已加载模块)。 + - 系统拓扑结构展示:能够显示系统硬件拓扑结构,包括 CPU 核心分布、内存节点信息、NUMA 拓扑结构以及 I/O 设备(如 PCI 设备和网卡)等详细信息。 + - ptest:通过测试对内存带宽 / 延时、FLOP(每秒浮点运算次数)、IPC(每周期指令数)进行评估分析,为性能优化提供数据支持 +- 新增了3个一键收集脚本,其中get_all_configs.sh用于收集系统的详细配置信息,get_all_collect_data.sh用于收集常用的PMU指标,get_all_software_data.sh用于收集常用的软件性能数据 + +## hpt_v4.0.0 (2024-12) +### Features +- 增加了mem接口,支持分析程序访存相关的性能指标,包括进程发生本NUMA节点访存和跨NUMA节点访存的次数、进程发生伪共享的情况,帮助开发者深入了解程序在运行时的内存访问行为。 + +## hpt_v3.0.0 (2024-09) +### Features +- 增加了hotspot接口,支持分析C/C++程序代码识别性能瓶颈,识别并展示占比高于0.5%的前20个热点函数及其调用栈信息,通过火焰图展示函数的调用关系。 +### Enhancement +- 将hygon_pcm和hygon_sys整合为一个二进制,重命名为hpt(hygon performance tuner)。 + +## hygon_tuner_v2.0.0 (2024-06) + +### Features +- 增加了hygon_sys工具,hygon_sys提供了process、java、network、sched接口。 + - hygon_sys process 实现监控进程对CPU、内存、存储IO等资源的消耗情况。 + - hygon_sys java 实现了监控java进程的热点函数,绘制on-cpu火焰图。 + - hygon_sys network 实现了监控网络设备的收发包流量信息。 + - hygon_sys sched 实现了监控进程线程在CPU上的调度情况,绘制off-cpu火焰图。 + +### Enhancement +- 实现了hygon_pcm collect -I/-count场景的实时打印输出。 +- 取消了hygon_pcm collect -I/-d参数不能与-p/-cmd同时使用的限制,可以收集指定进程或指定程序在固定时间内,对CPU/L3 Cache/内存资源的消耗情况。 +- 支持以csv格式输出采集结果,方便用户对采集到的数据做处理。 +___ + +## hygon_tuner_v1.1.0 (2024-03) + +### Features +- 为hygon_pcm collect增加了topdown-details metric,可以收集非SMT场景里topdown level1-level5的数据。指标的详细描述参考《TOPDOWN_DETAILS_README》。 +- 为hygon_pcm工具适配海光四号748x系列服务器。 +___ + +## hygon_tuner_v1.0.0 (2024-01) + +### Features + +- 实现了hygon_pcm工具,hygon_pcm提供了system、collect两个接口。 + - hygon_pcm system 可以收集平台的系统信息,包括BIOS、OS、DRAM、网卡、IO设备等资源的信息。 + - hygon_pcm collect 可以收集进程/线程执行过程中的微架构相关性能指标,如ipc、cachemiss、branchmiss等情况。 diff --git a/hpt/pkg/hpt-4.1.0/README.md b/hpt/pkg/hpt-4.1.0/README.md new file mode 100644 index 0000000000000000000000000000000000000000..72353b6fd56fbd3fe77b8afefeae107674c93ed0 --- /dev/null +++ b/hpt/pkg/hpt-4.1.0/README.md @@ -0,0 +1,1896 @@ +# 简介 +hpt(Hygon Performance Tuner)是一款专为Hygon服务器设计的性能分析工具,现阶段仅支持在Linux系统上运行。这款工具集成了多种功能,以便全面而深入地分析服务器的性能状况。 +hpt主要包括以下功能: + +* [system](#system): 全面采集系统的详细配置信息,涵盖BIOS、操作系统、CPU、内存、网卡以及磁盘等关键组件。同时,测试并评估内存带宽与延迟、FLOP、IPC 等性能指标,为用户提供系统整体概览。 +* [collect](#collect):采集CPU、L3 Cache和DF等组件的性能指标数据,帮助用户掌握硬件的运行状态。 +* [process](#process):收集各个进程对CPU、内存、存储IO等资源的消耗情况,包括使用率、饱和度、错误次数等关键指标,帮助用户识别资源瓶颈。 +* [network](#network):专注于收集网络信息,包括网卡的整体收发包统计、单队列收发包统计以及硬中断/软中断统计等,为用户分析网络性能提供有力支持。 +* [java](#java):针对Java进程,能够收集其CPU、内存等资源的使用率,并获取进程的类加载、热点代码等详细信息,助力Java应用性能调优。 +* [sched](#sched):通过收集系统内进程/线程的调度时延、CPU切换链路以及冷火焰图等数据,帮助用户准确识别性能瓶颈,优化系统调度策略。 +* [hotspot](#hotspot):支持分析C/C++程序代码识别性能瓶颈,识别并展示占比高于0.5%的前20个热点函数及其调用栈信息,通过火焰图展示函数的调用关系。 +* [mem](#mem): 支持分析程序访存相关的性能指标,包括进程发生本DIE访存和跨DIE访存的次数、进程发生伪共享的情况,帮助开发者深入了解程序在运行时的内存访问行为。 + +通过整合这些功能,hpt为Hygon服务器用户提供了一个灵活的性能分析工具,助力用户更好地理解和优化服务器性能。 + +## 支持的平台 +海光1号,海光2号,C86-3G,C86-4G。 + +## 目录结构 +hpt工具包的目录及成员如下: +- hpt: 下发命令的接口。 +- bash_completion.sh: 配置命令行自动补全的脚本。 +- get_all_configs.sh:一键收集系统的详细配置信息的脚本。 +- get_all_collect_data.sh:一键收集常用的PMU指标脚本。 +- get_all_software_data.sh:一键收集常用的软件性能数据脚本。 +- configs目录: 自定义采集事件的输入配置文件示例。 + +`````` +hpt工具包 ++---hpt ++---bash_completion.sh ++---get_all_configs.sh ++---get_all_collect_data.sh ++---get_all_software_data.sh ++---configs +| +---customized.xml ++---docs + +---README + +---ChangeLog +`````` + +## 环境配置 + - 执行source bash_completion.sh,配置命令自动补全。 + - 执行hpt和一键收集脚本时,需要root权限。 + - 工具存放点目录路径不要有中文字符 + +# 功能介绍 +`````` +hpt [] [] [] + +$# source bash_completion.sh +$# sudo ./hpt -h + +usage: hpt [-h] [-v] + {system,collect,process,network,java,sched,hotspot,mem} ... + +positional arguments: + {system,collect,process,network,java,sched,hotspot,mem} + system Collects detailed system information, including BIOS, + memory, network, and other key components. Estimates system + performance metrics such as memory bandwidth/latency, FLOP, + and IPC. + collect collect performance data + process collects information about the resources such as CPU, + memory, and storage I/O resources used by processes + network collect performance data of network devices + java collect performance data for Java programs + sched scheduling analysis + hotspot hotspot analysis + mem memory analysis + +optional arguments: + -h, --help show this help message and exit + -v view the version information +`````` +## 常用指令示例 +### system +- 一键收集系统的配置信息,默认将输出信息存在sys_info目录下。 +`````` +$# sudo ./get_all_configs.sh +`````` +### collect + +- 一键收集某个进程运行过程中,系统的PMU指标,默认将输出信息存在collect_data目录下。 +`````` +$# sudo ./get_all_collect_data.sh -p $PID +`````` +- 收集系统的拓扑信息,查看服务器型号、cache size、各个node cpu列表和各个DIE cpu列表。 +*(注:node是逻辑层面的概念,表示NUMA架构中,一个包含CPU核心和内存的独立单元。DIE是物理芯片的一部分。)* +`````` +$# sudo ./hpt collect --topo-list +`````` +- 收集3s内,系统中所有CPU的 ipc,l1,l2,l3相关指标,并按照CPU DIE粒度展示 +`````` +$# sudo hpt collect -m ipc,l1,l2,l3 -d 3 -A die +`````` +- 收集系统中某个进程的ipc,l1,l2,l3相关指标,一直统计到进程结束 +`````` +$# sudo hpt collect -m ipc,l1,l2 -p $PID +`````` +- 收集某条命令执行过程中的ipc,l1,l2,l3,访存带宽相关指标,一直统计到命令执行结束 +`````` +$# sudo hpt collect -m ipc,l1,l2,l3,cm -cmd "$COMMAND" +`````` +- 收集系统中各个DIE的cpu访问内存的带宽,每秒采集一次,一共采集3次。将结果以csv的格式存在output文件中,用户可以用excel将csv文件打开,进一步做数据处理。 +`````` +$# sudo hpt collect -m cm -I 1 -count 3 -csv -o output +`````` +### process + - 收集某条命令执行过程,占用CPU资源、内存资源和系统调用执行情况,每隔1s收集一次,收集2次。 + `````` + $# sudo hpt process -cpu -mem -syscall -I 1 -count 2 -cmd "$COMMAND" + `````` + - 收集系统中某个进程执行过程,占用CPU资源、内存资源,IO资源和系统调用执行情况,每隔1s收集一次,收集2次。 + `````` + $# sudo hpt process -cpu -mem -io -syscall -I 1 -count 2 -p $PID + `````` +### sched +- 一键收集系统中某个进程的性能数据,默认存在software_data目录下 +`````` +$# sudo ./collect_software_data.sh +`````` +- 收集1s内系统中的调度时延信息,并以command维度展示 +`````` +$# sudo hpt sched -d 1 +`````` +- 收集1s内系统中某个进程的调度时延信息,并以线程维度展示 +`````` +$# sudo hpt sched -d 1 -p $PID -s 2 +`````` +- 收集1s内系统调度的冷火焰图 +`````` +$# sudo hpt sched -d 1 -flame +`````` +### hotspot +- 收集5s内CPU0-7,基于cycle、指令、访问cache、访问内存的热点函数信息。 +`````` +$# sudo hpt hotspot -e ·cycles,insn,mem-access,cache -d 5 -c 0-7 +`````` +- 收集某条命令执行过程中,用户态的热点函数信息。 +`````` +$# sudo hpt hotspot -cmd "$COMMAND" -u +`````` +- 收集1s内系统热点函数火焰图 +`````` +$# sudo hpt hotspot -d 1 -flame +`````` +### mem +- 收集5s内系统内进程的访存行为 +`````` +$# sudo ./hpt mem -d 5 +`````` +- 收集5s内系统内某个进程发生伪共享的访存行为 +`````` +$# sudo ./hpt mem -d 5 -c2c -p $PID +`````` +## 子功能介绍 +### system + + +#### 用户参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription
-a显示简介。
-v 收集更多详细信息,包括dmesg信息、系统日志、Kernel配置、中断信息、网络相关信息等,输出存储在当前路径下的config_logs_xxxx目录中,xxxx是日期,每项信息均以独立文件保存。 +
-b <0|1>收集bios信息。 +
· 指定为0表示关闭,指定为1表示开启,默认开启。 +
-l <0|1>收集第三方日志的详细信息,包括启动信息、中断信息和网络相关信息。 +
· 指定为0表示关闭,指定为1表示开启,默认关闭。 +
-m <0|1>收集内存信息。 +
· 指定为0表示关闭,指定为1表示开启,默认开启。 +
-n <0|1>收集网卡信息。 +
· 指定为0表示关闭,指定为1表示开启,默认开启。 +
-t <0|1>收集系统拓扑信息。 +
· 指定为0表示关闭,指定为1表示开启,默认开启。 +
-o指定输出文件名称,默认存储在当前路径下。 +
· 不指定的话,文件名称默认是system。
-os <0|1>收集操作系统信息。 +
· 指定为0表示关闭,指定为1表示开启,默认开启。 +
-p <0|1>收集处理器信息。 +
· 指定为0表示关闭,指定为1表示开启,默认开启。 +
-s <0|1>收集磁盘信息。 +
· 指定为0表示关闭,指定为1表示开启,默认开启。 +
-ptest统计CPU访存带宽/延迟、FLOPS、IPC 信息。该功能通过程序运行进行评估,耗时较长,默认关闭。 +
+ +#### system示例 +- 收集系统的配置信息,包括BIOS、CPU、内存、网卡、操作系统和磁盘信息。 +`````` +$# sudo ./hpt system +`````` +运行目录下默认生成system文件,system文件中会按照模块展示收集的信息。 + +- 收集访存带宽/延迟、FLOPS、IPC信息 + - 硬件预取关闭下的访存带宽 + - Read-only + - Read:Write = 1:1 + - Read:Write = 3:1 + - 硬件预取关闭下的访存延迟 + - idle latency:使用单core访问内存,适于衡量理想状态下的内存访问延迟,反映了L3缓存未命中后,直接访问主内存的基本延迟 + - loaded latency:在所有CPU核心上生成负载,同时进行内存访问,计算不同带宽负载下延迟的变化 + - 浮点运算性能FLOPS: + - 单core的FLOPS + - 所有core的FLOPS + - IPC (Instructions Per Cycle) + - 单core的IPC + - 所有逻辑core的IPC + - 所有物理core的IPC + +`````` +$# sudo ./hpt system -ptest + +Start to test memory bandwidth/latency, flop and ipc. It will takes a few minutes ... + + +===Memory Bandwidths=== +Bandwidths are in MB/sec (1 MB/sec = 1,000,000 Bytes/sec) + +Disable hardware prefetch +-------------------------------------------------- + +Using Read-only traffic type. +Numa node 0 1 2 3 + 0 35587.0 19858.4 20864.4 21296.2 + 1 19837.9 35916.9 20811.6 20918.0 + 2 20915.5 20928.5 34694.7 19843.2 + 3 21287.3 20920.7 19812.1 35863.3 + +Using Read:Write=1:1 traffic type. +Numa node 0 1 2 3 + 0 31644.6 25344.3 25297.9 25316.8 + 1 25332.8 31781.4 25293.4 25315.3 + 2 25297.0 25318.8 31633.1 25342.0 + 3 25311.0 25319.5 25332.0 31780.7 + +Using Read:Write=3:1 traffic type. +Numa node 0 1 2 3 + 0 33699.1 22938.7 23660.7 23944.1 + 1 22882.4 33796.2 23652.6 23946.3 + 2 23673.2 23722.7 33531.6 22898.0 + 3 23895.3 23943.2 22863.3 33783.6 + +===Memory Latency=== +Measuring idle latencies (in ns) +Numa node 0 1 2 3 + 0 80.2 140.8 139.5 137.5 + 1 140.6 79.5 139.3 136.4 + 2 139.9 140.0 80.2 140.6 + 3 135.9 135.8 140.3 79.4 + +Measuring loaded latencies +Using all the threads from each core if Hyper-threading is enabled +Using Read-only traffic type +Inject Latency Bandwidth +Delay (ns) MB/sec +========================== + 00000 142.81 140246.4 + 00002 155.51 138922.2 + 00008 131.52 137163.9 + 00015 132.04 139003.9 + 00050 107.49 94638.3 + 00100 105.63 78208.7 + 00200 98.31 56797.1 + 00300 97.41 44564.5 + 00400 96.46 37002.1 + 00500 98.49 31427.3 + 00700 96.09 24314.6 + 01000 95.30 18133.9 + 01300 94.33 14615.3 + 01700 94.19 11580.1 + 02500 86.11 8347.7 + 03500 96.07 6177.1 + 05000 85.87 4649.8 + 09000 94.66 2865.0 + 20000 90.25 1704.2 +-------------------------------------------------- +Enable hardware prefetch +Measuring flop ... + +===Flop Output For All Cores=== +Thread Pool Binding: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 +-------------------------------------------------------------- +| Instruction Set | Core Computation | Peak Performance | +| FMA | FMA(f32,f32,f32) | 636.48 GFLOPS | +| FMA | FMA(f64,f64,f64) | 317.54 GFLOPS | +| AVX | ADD(MUL(f32,f32),f32) | 628.8 GFLOPS | +| AVX | ADD(MUL(f64,f64),f64) | 316.57 GFLOPS | +| SSE | ADD(MUL(f32,f32),f32) | 626.12 GFLOPS | +| SSE2 | ADD(MUL(f64,f64),f64) | 310.02 GFLOPS | +-------------------------------------------------------------- + +===FLop Output For Single Cores=== +Thread Pool Binding: 0 +-------------------------------------------------------------- +| Instruction Set | Core Computation | Peak Performance | +| FMA | FMA(f32,f32,f32) | 23.463 GFLOPS | +| FMA | FMA(f64,f64,f64) | 11.772 GFLOPS | +| AVX | ADD(MUL(f32,f32),f32) | 23.298 GFLOPS | +| AVX | ADD(MUL(f64,f64),f64) | 11.681 GFLOPS | +| SSE | ADD(MUL(f32,f32),f32) | 23.425 GFLOPS | +| SSE2 | ADD(MUL(f64,f64),f64) | 11.662 GFLOPS | +-------------------------------------------------------------- +Measuring IPC ... + +===Insn Per Cycle For Single Core (0)=== +IPC: 2.33 +Measuring IPC ... + +===Insn Per Cycle For All Physical Cores (0-31)=== +IPC: 2.12 +Measuring IPC ... + +===Insn Per Cycle For All Logical Cores (0-63)=== +IPC: 0.88 +`````` + +### collect +#### 用户参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription
-m <metric,...> 指定待采集的metric,默认设置为'ipc'。 +
. 可以通过运行hpt collect --metric-list展示支持的所有metric。 +
. 每个metric在不同平台的支持情况,请参考附录A.1章 +
. 每个metric包含的指标具体含义,请参考附录A.2章 +
+
1. 软件指标: +
sw-event: PMU软件事件,包括缺页、上下文切换、CPU迁移等指标 +
+
2. CPU 指标: +
ipc: 包括CPU利用率, IPC等信息 +
fp: 包括浮点指令比例、执行的浮点指令数等指标 +
l1: L1D, L1I cache 相关指标 +
l2: L2D , L2I cache相关指标 +
tlb: TLB相关指标 +
topdown: Frontend_Bound/Bad_Speculation/Retired/Backend_Bound/Otherthread的占比信息(在SMT场景,同时收集多core的topdown数据,可能会出现负值) +
topdown-details: topdown level 1/2/3/4的细分指标信息.由于topdown-details使用的PMC事件较多,为了获得更准确的数据,建议将采集时间设置为10s以上。各个topdown-details指标具体含义,请参考附录A.3章 +
+
3. L3 metric: +
l3: L3 cache相关公式 +
+
4. DF metric: +
di: 跨die访问相关指标 +
do: 跨die访问相关指标 +
cm: cacheable访问内存的指标 +
iom: non-cacheable访问内存的指标 +
mem-bw: 访存带宽相关指标 +
cs0-lat/cs1-lat/cs2-lat/cs3-lat/ccm0-lat/ccm1-lat/ccm2-lat/ccm3-lat/iom0-lat/iom1-lat/iom2-lat/iom3-lat/: 访存延时,配合-die/-cdd/-iod使用 +

Note: +
· 受DF counter个数限制,每次采集只能收集一个DF metric。 +
--metric-list 展示hpt collect支持的所有metric类型
-c <core|ccx|die|skt=n> 指定统计某个core/ccx/die/socket的数据。 +

Note: +
. n从0开始计数。 +
· 默认统计所有核的数据。 +
· 统计L3事件时,不支持指定-c core。 +
· 统计DF事件时,默认会统计整个系统的所有die,因此忽略-c的输入信息。 +
· 指定-cmd或-p时,不支持指定-c参数。
-a统计所有核。默认统计所有核。 +

Note: +
· -a 和-c不可以同时使用。 +
· 指定-cmd或-p时,不支持指定-a参数。
-A <sys|skt|die|ccx|core>配合-a/-c使用,指定数据展示的粒度。按照core/ccx/die/socket/system进行展示。 +

Note: +
· 指定-cmd或-p时,不支持指定-A参数。
-i <config file>用户自定义待采集的core/L3/DF事件,输入格式参考config目录下的customized.xml。 +

Note: +
· 不能与 -m参数一起使用。
-I <interval>指定采样间隔,单位s,最小0.05s。默认采集5次后停止,可以通过-count参数设置采样次数。 +

Note: +
· 不能与 -d参数一起使用。建议在采集topdown-details功能时,将该参数设置到10000以上。 +
-count <N>和-I参数一起使用,用于指定打印的次数。
-d <duration>指定采样时间,单位s,默认15s。 +

Note: +
· 不能与 -I参数一起使用。 +
-o <file name>指定输出文件名称,默认存储在当前路径下。
-csv 设置以csv格式输出,如果用户没有指定-o <filename>,则默认存储在当前路径下的data.csv文件中。
-p <pid>指定进程pid。 +

Note: +
· 不能与L3和DF相关的metric一起使用。 +
· 不能与 -cmd参数一起使用。 +
. 不能与-a/-c/-A参数一起使用。
-die <die id>指定统计访问某个DIE节点内存时的时延。 +

Note: +
· 只能和cs0-lat/ccm0-lat等时延类metric一起使用。和其他metric一起使用时将被忽略。
-cmd <command line>统计指定命令运行时间内的性能数据。 +

Note: +
. 不能与-a/-c/-A参数一起使用。
+ +#### collect示例 +- 收集3s内,CPU DIE 0的ipc, l1,l2,l3 cache的访问情况,并按ccx的粒度展示。 +`````` +$# sudo ./hpt collect -m ipc,l1,l2,l3 -c die=0 -A ccx -d 3 + `````` + - 每隔1s收集全系统的访存流量,收集2次,并按CPU DIE的粒度展示。 +`````` +$# sudo ./hpt collect -m mem-bw -a -I 1 -count 2 -A die +`````` + - 收集5s内,各个DIE CCX0和CCX1的CPU 访问DIE 1内存的时延 +`````` +$# sudo ./hpt collect -m ccm0-lat -die 1 -d 5 +$# sudo ./hpt collect -m ccm1-lat -die 1 -d 5 +`````` + - 收集hygonstress运行过程中的ipc和topdown。 +`````` +$# sudo ./hpt collect -m ipc,topdown -cmd "hygonstress_0.1.8 -m 4 -t 2" +`````` + - 采集5s内整个系统的topdown-details指标,并将数据存到log文件中 +`````` +$# sudo ./hpt collect -m topdown-details -d 5 -o log +`````` + +### process + + +#### 用户参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription
-I <interval>指定采样间隔,默认每隔1s采集一次数据,可以使用-count指定输出次数。 +

Note: +
· 默认收集系统所有进程的资源使用情况。
-count <count>指定采样次数,默认采集5次。使用时必须配合-I使用。
-cpu 指定收集CPU利用率相关参数。如果不指定-cpu/-mem/-io/-switch,默认收集cpu资源信息。
-mem 指定收集内存相关参数。
-io 指定收集存储IO相关参数。
-switch 指定收集上下文切换相关参数。
-syscall 指定收集系统调用执行情况。 +

Note: +
· 只有指定pid或指定-cmd时可以使用。 +
· interval * count时间后,展示系统调用执行情况。 +
· 系统调用频繁的程序,使用-syscall会影响性能。
-p <pid1,pid2,pid3...> 指定收集系统调用执行情况。 +

Note: +
· 统计指定pid进程的CPU/内存/存储IO的资源使用情况。 +
· 若指定pid进程的运行时间小于interval,则无法收集到CPU/内存/存储IO的资源使用情况数据。 +
· 若指定pid进程的运行时间小于interval * count,则进程运行结束后,停止采样。
-cmd <command> 统计指定命令进程的CPU/内存/存储IO的资源使用情况。 +

Note: +
·要求cmd是一个单进程应用,否则hpt只能统计到父进程的资源使用情况和syscall执行情况。 +
· 若cmd的运行时间小于interval,则无法收集到CPU/内存/存储IO的资源使用情况数据。 +
· 若cmd的运行时间小于interval * count,则cmd运行结束后,停止采样。
-warmup <warmup_time>warmup_time时间后,再开始采集数据。单位s
-o <filename>指定输出文件名称,默认存储到当前路径下。
+ +#### 输出指标解释 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionParameterDescription
-cpuUID任务的user id。
PID任务的process id。
%usr任务在用户态执行时的CPU使用率(百分比)。
%system任务在内核态执行时的CPU使用率(百分比)。
%guest任务在虚拟机中执行时的CPU使用率(百分比)。
%wait任务在处于等待状态时的CPU使用率(百分比)。
%CPU任务的总CPU使用率(百分比)。
CPU任务所在的CPU id。
Command任务名称。
-memminflt/s每秒次缺页错误次数(minor page faults),这些缺页错误不需要从磁盘加载内存页。
majflt/s每秒主缺页错误次数(major page faults),这些缺页错误需要从磁盘加载内存页。
VSZVirtual Size, 任务的虚拟内存使用量,单位是kB。
RSSResident Set Size, 任务的长期内存使用量,单位是kB。
%MEM任务的内存使用率(百分比)。
-iokB_rd/s任务每秒从磁盘读取的数据量,单位是kB。
kB_wr/s任务每秒向磁盘写入的数据量,单位是kB。
kB_ccwr/s任务每秒取消向磁盘写入的数据量,单位是kB。
iodelayBlock I/O延迟,单位是时钟周期。
-switchcswch/s任务每秒进行自愿上下文切换的次数。
nvcswch/s任务每秒进行非自愿上下文切换的次数。
+ +#### process 示例 + + - 收集hygonstress程序执行过程中占用CPU资源、内存资源和系统调用执行情况,每隔1s收集一次,收集2次。 + `````` + $# sudo ./hpt process -cpu -mem -I 1 -syscall -count 2 -cmd "taskset -c 0 ./hygonstress_0.1 -m 4" + `````` + +### network +#### 用户参数 + + + + + + + + + + + + + + +
OptionDescription
-i <interface> 指定需要监控的网口名称。
-o <filename> 指定输出文件名称,默认存储到当前路径下。
+ +#### 输出指标解释 + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription
Receive/Transmit Total 网口收包总和。
Receive/Transmit Type 将报文按照多播/广播/单播的统计划分。
Receive/Transmit Packet/Bytes 具体队列的收发包统计。统计的时间窗口与具体的驱动和硬件实现相关,例如在driver加载/端口up后开始统计。
Hard Interrupt 自系统启动以来硬中断统计次数,例如281下的CPU24(7)代表CPU24上发生了7次和网络相关的硬中断,硬中断号为281。
Soft Interrupt 自系统启动依赖的软中断统计次数,例如NET_TX下的CPU0(6)代表CPU0下发生了6次NET_TX软中断。
+ +#### network示例 +- 收集执行interface的详细信息。 +`````` +$# ./hpt network -i enp51s0f1 +`````` +执行完对应命令后会进入窗口模式,在窗口模式下,使用上下键翻页,右键刷新数据,q键退出。 +可以使用-o filepath将输出导入指定文件,此时不会进入窗口模式,文件写入后程序自动返回。 +输出展示如下: +`````` +Receive Total: + rx_bytes=10216554 +Transmit Total: + tx_bytes=13607793 +Receive Type: + rx_broadcast=20609 + rx_multicast=24688 +Transmit Type: + tx_broadcast=20610 + tx_multicast=64437 +Receive Packet: + rx_queue_0_packets=6755188 + rx_queue_1_packets=1489045 +Receive Bytes: + rx_queue_0_bytes=1077614389 + rx_queue_1_bytes=408728463 +Transmit Packet: + tx_queue_0_packets=1333137 + tx_queue_1_packets=5517637 +Transmit Bytes: + tx_queue_0_bytes=446564691 + tx_queue_1_bytes=5327179951 +Hard Interrupt: + 280: + 281: + CPU24(7) CPU29(945450) CPU30(250756) + 282: + CPU24(250756) CPU25(7) CPU28(945450) + 283: + CPU26(7) CPU27(1196206) +Soft Interrupt: + NET_TX: + CPU0(6) CPU1(8) CPU2(2) CPU5(2) CPU7(2) + NET_RX: + CPU0(265377) CPU1(306373) CPU2(287008) CPU3(319431) CPU4(524558) + CPU5(554005) CPU6(499649) CPU7(561335) CPU8(580138) CPU9(644429) + CPU10(226196) CPU11(148069) CPU12(77042) CPU13(239676) CPU14(92738) +`````` + +### java +#### 用户参数 + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription
-d <JAVA_HOME>指定JAVA_HOME的路径。 +

Note: +
如果不指定JAVA_HOME的话,会默认使用系统的JAVA_HOME。 +
-p <PID>统计指定进程的信息。
-c <COMMAND>指定要采集功能的命令,多个命令用;分隔开。 +

以下列举常用的cmd: +
· dashboard - 当前系统的实时数据面板,包含GC信息。 +
· jvm - 查看当前JVM的信息。 +
· thread - 查看当前JVM的线程堆栈信息。 +
· memory - 查看JVM的内存信息。 +
· profiler start - 开始采集应用热点。 +
· profiler stop - 结束采集应用热点,默认生成CPU的火焰图,必须与profiler start搭配使用。 +

Note: +
如果使用profiler start/profiler stop: +
1. 要求系统参数perf_event_paranoid<=2,可以通过"sysctl kernel.perf_event_paranoid=2"修改。 +
2. 如果采集时间太短,可能会没有数据,可适当拉长采集时间。 +
-s <SELECT>通过类名或JAR文件名选择目标进程。
+ +#### java示例 +- 查看指定进程的堆栈使用情况和内存使用信息。 +如果没有指定java_home路径的话,默认使用系统的java。 +`````` +$# sudo ./hpt java -p 88805 -c "thread;memory" +Arthas script version: 3.7.1 +[INFO] JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64 +Arthas home: ~/hygon-tuner/hygon_tuner_tools/bin/third_party/arthas +Calculating attach execution time... +Attaching to 88805 using version ~/hygon-tuner/hygon_tuner_tools/bin/third_party/arthas... + +real 0m9.385s +user 0m2.495s +sys 0m0.238s +Attach success. + ,---. ,------. ,--------.,--. ,--. ,---. ,---. + / O \ | .--. ''--. .--'| '--' | / O \ ' .-' +| .-. || '--'.' | | | .--. || .-. |`. `-. +| | | || |\ \ | | | | | || | | |.-' | +`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' + +wiki https://arthas.aliyun.com/doc +tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html +version 3.7.1 +main_class +pid 88805 +time 2024-05-21 17:11:55 + +[arthas@88805]$ thread | plaintext +Threads Total: 17, NEW: 0, RUNNABLE: 9, BLOCKED: 0, WAITING: 3, TIMED_WAITING: 5 +, TERMINATED: 0 +ID NAME GROUP PRIORI STATE %CPU DELTA_ TIME INTER DAEMON +41 arthas-command-exec system 5 RUNNAB 0.74 0.001 0:0.01 false true +1 main main 5 TIMED_ 0.2 0.000 0:0.09 false false +2 Reference Handler system 10 RUNNAB 0.0 0.000 0:0.00 false true +3 Finalizer system 8 WAITIN 0.0 0.000 0:0.00 false true +4 Signal Dispatcher system 9 RUNNAB 0.0 0.000 0:0.00 false true +26 Notification Thread system 9 RUNNAB 0.0 0.000 0:0.00 false true +28 Attach Listener system 9 RUNNAB 0.0 0.000 0:0.06 false true +30 arthas-timer system 9 WAITIN 0.0 0.000 0:0.00 false true +33 arthas-NettyHttpTel system 5 RUNNAB 0.0 0.000 0:0.04 false true +34 arthas-NettyWebsock system 5 RUNNAB 0.0 0.000 0:0.00 false true +35 arthas-NettyWebsock system 5 RUNNAB 0.0 0.000 0:0.00 false true +36 arthas-shell-server system 9 TIMED_ 0.0 0.000 0:0.00 false true +37 arthas-session-mana system 9 TIMED_ 0.0 0.000 0:0.00 false true +38 arthas-UserStat system 9 WAITIN 0.0 0.000 0:0.00 false true +40 arthas-NettyHttpTel system 5 RUNNAB 0.0 0.000 0:0.16 false true +27 Common-Cleaner Innocuous 8 TIMED_ 0.0 0.000 0:0.00 false true +32 Keep-Alive-Timer Innocuous 8 TIMED_ 0.0 0.000 0:0.00 false true + +[arthas@88805]$ memory | plaintext +Memory used total max usage +heap 95M 2080M 30688M 0.31% +g1_eden_space 80M 112M -1 71.43% +g1_old_gen 15M 1968M 30688M 0.05% +g1_survivor_space 0K 0K -1 0.00% +nonheap 28M 31M -1 90.79% +codeheap_'non-nmethods' 2M 2M 8M 27.57% +metaspace 18M 19M -1 98.42% +codeheap_'profiled_nmethods' 4M 4M 115M 3.72% +compressed_class_space 2M 2M 1024M 0.22% +codeheap_'non-profiled_nmethods' 626K 2496K 118592K 0.53% +mapped 0K 0K - 0.00% +direct 4M 4M - 100.00% +mapped - 'non-volatile memory' 0K 0K - 0.00% +[arthas@88805]$ +$ +`````` +- 如果没有指定java pid,屏幕会给出选择指定哪个java进程,需要输入对应编号。 +如果没有指定要采集的功能,可以在进入交互后再输入命令。 +`````` +$# sudo ./hpt java +Arthas script version: 3.7.1 +[INFO] JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64 +Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER. +* [1]: 123060 -- process information unavailable + [2]: 25932 ./math-game.jar + [3]: 123053 -- process information unavailable +2 +Arthas home: ~/hygon-tuner/hygon_tuner_tools/bin/third_party/arthas +Calculating attach execution time... +Attaching to 25932 using version ~/hygon-tuner/hygon_tuner_tools/bin/third_party/arthas... + +real 0m1.546s +user 0m0.514s +sys 0m0.058s +Attach success. +telnet connecting to arthas server... current timestamp is 1716295750 +Trying 127.0.0.1... +Connected to 127.0.0.1. +Escape character is '^]'. + ,---. ,------. ,--------.,--. ,--. ,---. ,---. + / O \ | .--. ''--. .--'| '--' | / O \ ' .-' +| .-. || '--'.' | | | .--. || .-. |`. `-. +| | | || |\ \ | | | | | || | | |.-' | +`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' + +wiki https://arthas.aliyun.com/doc +tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html +version 3.7.1 +main_class +pid 25932 +time 2024-05-21 20:49:10 + +[arthas@25932]$ memory +Memory used total max usage +heap 79M 2080M 30688M 0.26% +g1_eden_space 64M 112M -1 57.14% +g1_old_gen 15M 1968M 30688M 0.05% +g1_survivor_space 0K 0K -1 0.00% +nonheap 26M 31M -1 84.61% +codeheap_'non-nmethods' 1M 4M 8M 14.46% +metaspace 18M 18M -1 99.07% +codeheap_'profiled_nmethods' 4M 4M 115M 3.67% +compressed_class_space 2M 2M 1024M 0.22% +codeheap_'non-profiled_nmethods' 629K 2496K 118592K 0.53% +mapped 0K 0K - 0.00% +direct 4M 4M - 100.00% +mapped - 'non-volatile memory' 0K 0K - 0.00% +[arthas@25932]$ stop +Resetting all enhanced classes ... +Affect(class count: 0 , method count: 0) cost in 29 ms, listenerId: 0 +Arthas Server is going to shutdown... +[arthas@25932]$ session (6b824c1c-4c54-4163-b2f0-cc5544359e24) is closed because server is going to shutdown. +Connection closed by foreign host. +`````` + +### sched + + +#### 使用约束 +- 要求内核版本高于4.7 +- 要求内核config:CONFIG_SCHEDSTATS=y + +#### 用户参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription
-latency 统计全系统所有进程或指定进程的调度时延数据。
-flame 绘制系统冷火焰图(off-cpu火焰图),输出svg文件,默认输出文件名是offcpu.svg。 +

Note: +
· -flame与-p不能同时使用。 +
· -flame与-cmd不能同时使用。
-d <duration>收集指定时间内,系统的调度信息,单位s,默认15s。
-s <show>指定latency数据展示的方式,默认-s 0,表示按command粒度展示数据,-s 1表示按pid粒度展示数据,-s 2表示按tid粒度展示数据。
-p <pid>hpt收集指定pid对应的进程的调度信息,可以指定多个进程,进程pid之间用逗号分开。 +

Note: +
· -p与-cmd不能同时使用。 +
· -p与-flame不能同时使用。 +
-warmup <warmup_time>warmup_time时间后,再开始采集数据,单位s。
-cmd <command> 统计指定命令运行时间内,全系统所有进程/线程的调度信息。 +

Note: +
· -cmd与-p不能同时使用。 +
· -cmd与-flame不能同时使用。 +
-o <filename>将收集到的进程latency解析结果或冷火焰图存储到当前路径下的filename文件中,冷火焰图的命名为<filename>.svg。
+ +#### 输出信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
pid/tid 展示对应的进程ID/线程ID。
command 展示对应的进程/线程名称。
on-cpu 展示对应的进程/线程在CPU上运行的总时长,单位ms。
wait 展示对应的进程/线程因为等待某些资源(例如锁、信号量、I/O操作),而没有被调度到CPU上的时间,单位ms。
blocked 展示对应的进程/线程处于阻塞状态的时长,单位ms。
sleep 展示对应的进程/线程处于休眠状态的时长,单位ms。
switch 展示对应的进程/线程发生调度的总次数。
delay 展示对应的进程/线程总调度时延,单位ms。
avg-delay 展示对应的进程/线程平均调度时延,单位ms。
cpu-migration 展示对应的进程/线程发生CPU切换的次数。
die-migration 展示对应的进程/线程在die间切换的次数。
+ +#### sched 示例 + +- 收集1s内系统中的调度时延信息 +`````` +$# sudo ./hpt sched -d 1 +`````` + + - 收集hygonstress执行过程中,系统中进程调度时延信息,并按线程展示。 +`````` +$# sudo ./hpt sched -cmd "taskset -c 0-4 hygonstress_0.1.8 -m 4 -t 1" -s 2 +`````` + - 收集1s内指定进程调度时延信息,并按pid展示。 +`````` +$# sudo ./hpt sched -d 1 -p 495017 -s 1 +`````` + - 绘制1s内,系统的off-cpu火焰图。 + `````` +$# sudo ./hpt sched -d 1 -flame +$# ls +bin hpt offcpu.svg set_env.sh +`````` + +### hotspot + + +#### 用户参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription
-u 本次采样只收集用户态进程的热点函数。 +

Note: +
· 默认收集内核态和用户态进程的热点函数。
-k 本次采样只收集内核态进程的热点函数。 +

Note: +
· 默认收集内核态和用户态进程的热点函数。
-f <frequency> 设置采样频率,默认每秒采集4000次。 +
-c <core> 设置采样的CPU list,支持同时采集多个CPU。默认采集整个系统的全部CPU。 +

Note: +
· -c与-cmd / -p / -t 参数不能同时使用。 +
-a 设置采集整个系统的热点函数,默认配置为-a。
-g 收集采样的调用栈。
-e <event name> 设置采样的事件。支持的event list如下: +
·cycles:基于cycles事件采样,收集程序中的热点函数 +
·cycles:p:基于IBS精准采样,收集程序中的热点函数 +
·insn:基于retired instruction事件采样 +
·insn:p:基于IBS精准采样,收集程序中retired instruction事件采样 +
·mem-access:分析远近端访存的热点函数 +
·cache: 基于icache/dcache access和icache/dcache miss的热点函数 +

Note: +
· 默认采集cycles事件。
-flame 绘制系统火焰图(on-cpu火焰图),输出svg文件,默认输出文件名是oncpu.svg。 +

Note: +
· -flame必须与-g同时使用。
-d <duration>收集指定时间内,系统的热点函数信息,单位s,默认15s。
-p <pid>收集指定pid对应的进程的热点函数信息,只能指定单个进程。 +

Note: +
· -p与-cmd / -t / -c参数不能同时使用。 +
-t <tid>收集指定tid对应的线程的热点函数信息,只能指定单个线程。 +

Note: +
· -t与-cmd / -p/ -c参数不能同时使用。 +
-warmup <warmup_time>warmup_time时间后,再开始采集数据,单位s。
-cmd <command> 统计指定命令运行时间内,全系统所有进程/线程的热点信息。 +

Note: +
· -cmd与-c / -p / -t参数不能同时使用。 +
-o <filename>将收集到的热点函数信息或火焰图存储到当前路径下的filename文件中,火焰图的命名为<filename>.svg。
+ +#### hotspot 示例 + - 收集1s内CPU2,CPU3,CPU4,CPU7的热点函数信息。 +`````` +$# sudo ./hpt hotspot -d 1 -c 2-4,7 +`````` + + - 收集运行hygonstress过程中的热点函数信息。 +`````` +$# sudo ./hpt hotspot -cmd "taskset -c 1 hygonstress_0.1.8 -m 4 -t 2" +`````` + + - 收集运行hygonstress过程中基于cache的热点函数信息 +`````` +$# sudo ./hpt hotspot -cmd "taskset -c 1 hygonstress_0.1.8 -m 4 -t 2" -e cache +`````` + +### mem + + +#### 用户参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionDescription
-l 展示系统的内存配置信息,包括系统上可用的NUMA节点数、各NUMA间的距离、各个NUMA节点的总内存大小、各个NUMA节点的可用内存大小。 +

Note: +
· 参数-l优先级最高,当与其他参数混用时,会忽略其他参数,仅展示系统的内存配置信息。 +
-p <pid>收集指定pid对应进程的访存信息,只能指定单个进程。 +

Note: +
· -p与-cmd不能同时使用。 +
-v 展示每个进程中,各DIE CPU的访存情况。
-vv 分析指定进程中访问内存行为的细节信息,如:各DIE CPU访问具体各DIE 内存的次数。

Note: +
· -vv必须与-p同时使用。 +
· -vv只能在开IBS的平台使用。 +
-c2c 分析指定进程中发生伪共享的细节信息。 +

Note: +
· -c2c必须与-p同时使用。 +
· -c2c只能在开IBS的平台使用。 +
-n <num>设置hpt mem最多展示num个进程的访存情况,默认值为20。
-d <duration>收集指定时间内进程的访存信息,单位s,默认15s。
-cmd <command> 统计指定命令运行时间内,全系统所有进程的访存信息。 +

Note: +
· -cmd与-p参数不能同时使用。 +
-o <filename>将收集到的访存信息存储到当前路径下的filename文件中。
+ +#### 输出指标解释 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionParameterDescription
-vRMA(K)进程发生跨DIE访存的次数,单位是K。
LMA(K)进程发生本DIE访存的次数,单位是K。
RMA/LMA进程发生跨DIE访存次数和本节点访存次数的比例。
-vvmemory access采样过程中收集到的进程发生访存的次数。
remote access采样过程中收集到的进程发生跨DIE访存的次数。
进程访存信息矩阵矩阵的行描述进程访问的地址所在的DIE,列描述进程运行所在的DIE。
-c2ccacheline addr发生伪共享访问的cacheline地址。
cacheline offset发生伪共享访问的地址在cacheline中的偏移。
load & store本次采样过程中,CPU 读写内存的次数。
load hitm本次采样过程中,CPU 访问处于Modified状态的cacheline的次数。
+ +#### mem 示例 + - 展示系统的内存配置信息。 +`````` +$# sudo ./hpt mem -l + +Node Memory(MB): + Node0 Node1 Node2 Node3 Node4 Node5 Node6 Node7 +----- ------- ------- ------- ------- ------- ------- ------- ------- +Total 64323 64507 64507 64507 64459 64507 64507 64501 +Free 63855 63813 60788 64016 63169 62718 63550 61786 + +Node Distance: + Node0 Node1 Node2 Node3 Node4 Node5 Node6 Node7 +----- ------- ------- ------- ------- ------- ------- ------- ------- +Node0 10 16 16 16 28 28 22 28 +Node1 16 10 16 16 28 28 28 22 +Node2 16 16 10 16 22 28 28 28 +Node3 16 16 16 10 28 22 28 28 +Node4 28 28 22 28 10 16 16 16 +Node5 28 28 28 22 16 10 16 16 +Node6 22 28 28 28 16 16 10 16 +Node7 28 22 28 28 16 16 16 10 +`````` +- 运行背景业务numactl -C 0-7 -m 1 ./bw_mem -P 8 1024m rd,同时收集15s内系统中各个进程的访存信息。 +`````` +$# sudo ./hpt mem + +Start data collection... +Data collection completed + PID COMMAND RMA(K) LMA(K) RMA/LMA +------ --------------- -------- -------- --------- +643640 bw_mem 7.528 0.045 167.289 +643646 bw_mem 7.528 0.042 179.238 +643644 bw_mem 7.528 0.048 156.833 +643642 bw_mem 7.528 0.044 171.091 +643643 bw_mem 7.528 0.044 171.091 +643645 bw_mem 7.528 0.042 179.238 +643647 bw_mem 7.528 0.045 167.289 +643641 bw_mem 7.528 0.047 160.170 + 0 swapper 0.006 0.005 0.000 + 15 rcu_sched 0.003 0.001 0.000 +559422 kworker/65:0-ev 0.002 0.000 0.000 + 2595 irqbalance 0.002 0.000 0.000 +640783 tokio-runtime-w 0.002 0.000 0.000 +643746 perf 0.002 0.002 0.000 + 801 kcompactd3 0.001 0.000 0.000 + 1553 usb-storage 0.001 0.000 0.000 +642669 kworker/u263:0- 0.001 0.000 0.000 +433066 kworker/81:1-mm 0.001 0.000 0.000 +640386 kworker/25:0-ev 0.001 0.000 0.000 +642813 kworker/u261:1- 0.001 0.000 0.000 +`````` + - 运行背景业务numactl -C 0-7 -m 1 ./bw_mem -P 8 1024m rd,同时收集15s内系统中各个进程的访存信息,包括进程中各个DIE CPU的访存情况。 +`````` +$# sudo ./hpt mem -v + +Start data collection... +Data collection completed +PID COMMAND DIE RMA(K) LMA(K) RMA/LMA +------ --------------- ------ -------- -------- --------- +643929 bw_mem 0 7.534 0.042 179.381 + 1 0.000 0.000 0.000 + 2 0.000 0.000 0.000 + 3 0.000 0.000 0.000 + 4 0.000 0.000 0.000 + 5 0.000 0.000 0.000 + 6 0.000 0.000 0.000 + 7 0.000 0.000 0.000 +643925 bw_mem 0 7.532 0.047 160.255 + 1 0.000 0.000 0.000 + 2 0.000 0.000 0.000 + 3 0.000 0.000 0.000 + 4 0.000 0.000 0.000 + 5 0.000 0.000 0.000 + 6 0.000 0.000 0.000 + 7 0.000 0.000 0.000 +643923 bw_mem 0 7.528 0.047 160.170 + 1 0.000 0.000 0.000 + 2 0.000 0.000 0.000 + 3 0.000 0.000 0.000 + 4 0.000 0.000 0.000 + 5 0.000 0.000 0.000 + 6 0.000 0.000 0.000 + 7 0.000 0.000 0.000 +643927 bw_mem 0 7.528 0.051 147.608 + 1 0.000 0.000 0.000 + 2 0.000 0.000 0.000 + 3 0.000 0.000 0.000 + 4 0.000 0.000 0.000 + 5 0.000 0.000 0.000 + 6 0.000 0.000 0.000 + 7 0.000 0.000 0.000 +`````` + - 展示2s内指定进程的发生伪共享的情况。 +`````` +$# sudo ./hpt mem -d 2 -c2c -p 114030 + +Start data collection... +Data collection completed + cacheline addr cacheline offset load & store load load hitm store function dso +---------------- ------------------ -------------- ------ ----------- ------- -------------------- ---------- + 0x601040 0x8 2487 0 0 2487 thread_function+0x2c test-c2c + 0x601040 0x8 1280 1280 2 0 thread_function+0x23 test-c2c + 0x601040 0xc 4776 4776 7 0 thread_function+0x34 test-c2c + 0x601040 0xc 2334 0 0 2334 thread_function+0x3d test-c2c +`````` + + +# 附录 +## A. metric相关介绍 +### A.1 metrics在各平台的兼容情况 +* 'Y'代表该metric可以在此平台上使用,'N'表示该metric不可以在此平台上使用。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PMU unitmetric海光1号海光2号C86-3GC86-4G
COREipcYYYY
fp
topdown
topdown-details
l1
l2
tlb
L3l3YYYY
DFdiYYY748x系列只能收集跨socket间带宽,无法收集socket内跨die带宽
do
cmYYYY
iom
cs0-latYYYY
cs1-lat
cs2-latNNNY
cs3-lat部分支持
除749x系列外的其他C86-4G平台均支持
ccm0-lat YYYY
ccm1-lat
ccm2-latNNNY
ccm3-lat
iom0-latYYYY
iom1-latNNNY
iom2-lat
iom3-lat
software-eventsw-event和OS版本相关,要求OS版本高于Linux 2.6
+ +### A.2 metrics指标含义介绍 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
metricstargetdescription
ipccpu-freq采集过程中cpu平均频率 
retired-insnretired指令数
IPCInstructions Per Cycle (IPC),指的是平均每个CPU cycle完成指令数
branch-miss-ratio分支预测错误的跳转指令在retired跳转指令中的占比
branch-mpkibranch miss per kilo instructions.平均每一千条指令中分支预测错误的跳转指令数
fpMMX-ratioretired MMX指令在retired指令中的占比
SSE-ratioretired SSE指令在retired指令中的占比
x87-ratioretired x87指令在retired指令中的占比
fp-ratioretired 浮点指令在retired指令中的占比
topdownfrontend-bound由于前端没有提供足够的指令数引起的pipeline stall的占比
bad-speculation由于分支预测错误引起的pipeline stall的占比
retiredretired upos占比
backend-bound后端引起的pipeline stall的占比
other-thread由于逻辑核资源竞争引起的pipeline stall的占比
topdown-details参考附录A.3 topdown-details指标含义介绍
l1l1-icache-accessL1 Icache access次数
l1-icache-miss-ratioL1 Icache miss率
l1-icache-mpkiL1 Icache miss per kilo instructions.平均每一千条指令中L1 Icache miss次数
l1-icache-bwL1 Icache 访问带宽
l1-dcache-accessL1 Dcache access次数
l1-dcache-miss-ratioL1 Dcache miss率
l1-dcache-mpkiL1 Dcache miss per kilo instructions.平均每一千条指令中L1 Dcache miss次数
l1-dcache-bwL1 Dcache 访问带宽
l2l2-icache-accessL2 Icache access次数
l2-icache-miss-ratioL2 Icache miss率
l2-icache-mpkiL2 Icache miss per kilo instructions.平均每一千条指令中L2 Icache miss次数
l2-icache-bwL2 Icache 访问带宽
l2-dcache-accessL2 Dcache access次数
l2-dcache-miss-ratioL2 Dcache miss率
l2-dcache-mpkiL2 Dcache miss per kilo instructions.平均每一千条指令中L2 Dcache miss次数
l2-dcache-bwL2 Dcache 访问带宽
l2-prefetchL2硬件预取引入的access次数
l2-prefetch-miss-ratioL2 硬件预取 miss率
l2-prefetch-mpkiL2 prefetch miss per kilo instructions.平均每一千条指令中L2 prefetch miss次数
tlbl1-itlb-miss-ratioL1 ITLB miss率
l2-itlb-miss-ratioL2 ITLB miss率
l1-dtlb-miss-ratioL1 DTLB miss率
l2-dtlb-miss-ratioL1 DTLB miss率
l3l3-cache-accessL3 cache access次数
l3-cache-missL3 cache miss次数
l3-cache-miss-ratioL3 cache miss率
didie in bandwidth每个Die的内存被跨Die访问的带宽,C86-4G平台上还会收集内存被跨socket访问的带宽
dodie out bandwidth每个Die的CPU或IO跨Die访问其他节点内存的带宽,C86-4G平台上还会收集跨socket访存的带宽
cmCS_RD每个内存通道收到的cacheable读请求数(rdblk请求)
CS_WR每个内存通道收到的cacheable写请求数(vicblockfull请求)
TOTAL_BW每个Die的内存被cacheable访问的总带宽
iomCS_Rd每个内存通道收到的non-cacheable读请求数
CS_Wr每个内存通道收到的non-cacheable写请求数
TOTAL_BW_MIN/TOTAL_BW_AX每个Die的内存被non-cacheable访问的最小/最大总带宽。由于每次non-cacheable读写的数据可能是32Byte,也可能是64Byte,因此计算出带宽可能的最大值/最小值用于估算带宽 +
mem-bwread-requests读每个Die的内存的请求数
write-requests + 写每个Die的内存的请求数
min-mem-access-bw + 每个Die的内存被访问的最小带宽。部分读请求每次读的数据可能是32Byte,也可能是64Byte,因此只给出访存带宽的最大最小值。(相当于cm统计的cacheable带宽和iom统计的non-cacheable带宽之和)
max-mem-access-bw + 每个Die的内存被访问的最大带宽。部分读请求每次读的数据可能是32Byte,也可能是64Byte,因此只给出访存带宽的最大最小值。(相当于cm统计的cacheable带宽和iom统计的non-cacheable带宽之和)
cs0-lat/cs1-lat/cs2-lat/cs3-latavg-cacheable-latency指定DIE上的CPU(-die参数指定) cacheable访问各个DIE内存的平均时延, 单位ns
avg-non-cacheable-latency指定DIE上的CPU(-die参数指定) non-cacheable访问各个DIE内存的平均时延, 单位ns
total-rdblk-latency/total-rdsized-latency指定DIE上的CPU(-die参数指定) cacheable或non-cacheable访问各个DIE内存的所有请求的总时延,单位cycle
total-rdblk-requests/total-rdsized-requests指定DIE上的CPU(-die参数指定) cacheable或non-cacheable访问各个DIE内存的总请求数
ccm0-lat/ccm1-lat/ ccm2-lat/ccm3-latavg-cacheable-latency各个DIE上的CPU cacheable访问指定DIE内存(-die参数指定)的平均时延, 单位ns
total-latency各个DIE上的CPU cacheable访问指定DIE内存(-die参数指定)的所有请求的总时延,单位cycle
total-requests各个DIE上的CPU cacheable访问指定DIE内存(-die参数指定)的总请求数
iom0-lat/iom1-lat/ iom2-lat/iom3-latavg-non-cacheable-latency各个DIE上的IO设备 non-cacheable访问指定DIE内存(-die参数指定)的平均时延, 单位ns
total-rdsized-latency各个DIE上的IO设备 non-cacheable访问指定DIE内存(-die参数指定)的所有请求的总时延,单位cycle
total-rdsized-requests各个DIE上的IO设备 non-cacheable访问指定DIE内存(-die参数指定)的总请求数
sw-eventalignment-faults统计内存不对齐访问发生的次数
page-faults统计缺页错误发生的次数
context-switches统计进程上下文切换发生的次数
cpu-migrations统计进程在CPU间迁移发生的次数
+ +### A.3 topdown-details指标含义介绍 +`````` +topdown-details +| ++---Retire Bound: Retire的uops数量占所有pipeline的占比。 +| +---Microcode: 由Microcode生成的uops数量的占比。(这里比较特殊,Microcode/Non-Microcode,FP/Non-FP是对retire bound第二级的两种不同看法,并不是划分) +| +---Non-Microcode: 正常的uops数量的占比。 +| | +---Conditional Branch: 条件跳转指令数量的占比。 +| | | +---Fused Branch: 被Fused的Branch占比,例如cmp jmp的合并。 +| | | +---Non-Fused Branch: 正常的条件Branch占比。 +| | +---UnConditional Branch: 非条件跳转指令数量的占比。 +| | | +---Far Control Transfer: call,jump,return,IRET,syscall,sysret,exception,interrupts指令的占比。 +| | | +---Near Return: RET指令的占比。 +| | | +---Other: 其他指令的占比。 +| | +---Multiply: 乘法指令数量的占比。 +| | +---Divide: 除法指令数量的占比。 +| | +---Other: 其他指令数量的占比。 +| +---FP: 进入浮点运算单元的uops数量的占比。 +| | +---x87 ops: 部分x87指令集的uops数量的占比。 +| | +---SSE ops(common ops): 常用SSE指令集的uops数量的占比。 +| | | +---SSE packed ops(common ops): 常用的SSE非标量uops数量的占比。 +| | | +---SSE scalar ops(common ops): 常用的SSE标量uops数量的占比。 +| | +---other: 其他指令集的数量的占比。 +| | +---x87 Instruction: x87指令数量的占比。 +| | +---MMX Instruction: MMX指令数量的占比。 +| | +---SSE/AVX Instruction: SSE/AVX指令数量的占比。 +| | | +---SSE/AVX 128b Instruction: 128bit SSE/AVX指令数量的占比。 +| | | +---SSE/AVX 256b Instruction: 256bit SSE/AVX指令数量的占比。 +| +---Non-FP: 未进入浮点运算单元的uops数量的占比。 ++---Frontend Bound: 代表CPU前端(dispatch之前)没有产生足够的bubble,这些bubble与填满pipeline的uops数量的比例。 +| +---Decoder: 代表Decoder没有收到足够多的指令而产生的bubble占比。 +| | +---Decoupling Queue(DQ): 由于BP模块的某些原因导致Decoupling Queue为空而bubble的占比。 +| | | +---Branch Predictor(BP): Branch Predictor产生的bubble占比,原因可能是预测错误次数太多,或者Redirect/Retire期间内部更新BP信息时产生的stall比例。 +| | | +---ITLB: 由于ITLB miss产生的bubble占比。 +| | +---ICache: 由于ICache的utag miss,cache miss,conclict等原因产生的bubble比例。其下的子项带有For Reference,表示仅仅做一个参考,并不按照topdown框架track uops +| | | +---L1 ICache Miss(For Reference): L1 ICache Miss的比率。 +| | | +---IC MAB Latency(For Reference): IC MAB数据返回需要等待的cycle数。 +| | | | +---Delay Fill Request(For Reference): Delay Fill Request的占比。 +| | | | +---L2 ICache Miss(For Reference): L2 ICache Miss的比率。 +| | | | +---MIB Fill Delay(For Reference): MIB数据返回需要等待的cycle数。 +| | | +---IC BP Miss(For Reference): MAB上因为BP miss被刷掉的请求的占比。 +| +---Ops Cache(OC): 由于OC的原因没有产生足够多的uops而产生的bubble占比。 +| | +---Fetch Stall: 由于OC Fetch Stall产生的bubble占比,例如flush token,oc的build和fetch的冲突等等。 +| | +---Cache Occupy: 指令对OC cache的利用率不足产生的bubble占比。 +| | | +---Microcode: OC Cache中Microcode的占用率。 +| | | +---Microcode: OC Cache中非Microcode的占用率。 +| +---OC/IC switch: 从IC到OC切换时,需要清空IC Pipeline而产生bubble占比。 ++---BadSpeculation: 由于分支预测错误产生的bubble占比。 +| +---Frontend Flush: 由前端redirect事件产生的badspeculation。 +| +---Backend Flush: 由后端redirect事件产生的badspeculation。 ++---Backend Bound: 代表CPU后端的原因导致dispatch上的uops没有被即使处理而产生的bubble占比。 +| +---Memory Bound: 表示由于load/store导致uops没有被及时处理而产生的bubble占比。 +| | +---Memory Bandwidth: 表示由于受带宽影产生的bubble占比,例如单位时间内load/store指令数量太多。 +| | +---Memory Latency: 表示由于受延迟影响产生的bubble占比,是指之前发射的load/store没有及时的返回结果,最终导致load/store port被填满。 +| | | +---L1 Latency: 表示load/store指令在L1 pipeline里产生的bubble占比。 +| | | +---L2 Latency: 表示load/store指令在L2 pipeline里产生的bubble占比。 +| | | +---L3 Latency: 表示load/store指令在L3 pipeline里产生的bubble占比。 +| +---Core Bound: 表示由于其他原因导致uops没有被及时处理产生的bubble占比,例如计算单元ALU,地址单元AGSQ等等。 +| | +---Core Statistic Bound: 表示由于受静态执行单元数量的限制而导致的堵塞产生的bubble占比,例如单位时间内使用ALU指令数量太多导致的堵塞。 +| | +---Core Dynamic Bound: 表示由于对应的执行单元数量已满而导致的堵塞产生的bubble占比,例如所有的ALU都已被使用。下面是各原因次数的占比: +| | | +---Arithmetic Logic Unit(ALU): 执行单元已满。 +| | | +---ALU Scheduling Queue: 执行单元的调度队列已满。 +| | | +---Address Generation Scheduling Queue: 数据地址生成单元的调度队列已满。 +| | | +---Retire: retire单元已满。 +| | | +---Physical Register Files: 寄存器已满。 +| | | +---Branch Queue: 保留分支信息的单元已满。 +| | | +---Float Point: FP对应的执行单元已满。 +`````` diff --git a/hpt/pkg/hpt-4.1.0/hpt-4.1.0-2025-0319.x86_64.tar.gz b/hpt/pkg/hpt-4.1.0/hpt-4.1.0-2025-0319.x86_64.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..0caacc7c9215277c2c21dc880d3009ec60c05590 Binary files /dev/null and b/hpt/pkg/hpt-4.1.0/hpt-4.1.0-2025-0319.x86_64.tar.gz differ