Miss事件分析
CPU访问数据时将逐级查找缓存,目标数据不在缓存中即为cache miss(cache miss较多时性能将大幅降低);命令提供对业务进行LLC Miss,TLB Miss,Remote Access,Long Latency Load等Miss类事件分析,便于用户针对性修改程序,提高程序处理性能。
命令功能
利用SPE(Statistical Profiling Extension)能力对业务进行LLC Miss,TLB Miss,Remote Access,Long Latency Load等Miss类事件分析,可以有针对性地修改自己的程序,降低Miss事件发生的几率,提高程序处理性能。
命令格式
1 | devkit tuner miss [-h] [-c {n | n,m | n-m}] [-d <sec>] [-P n] [-D <sec>] [-l {0, 1, 2, 3}] [-m {1, 2, 3, 4}] [-L n] [-i <sec>] [-r {user, kernel, all}] [-o] [-s] [-p {PID1 | PID1,PID2 | ALL}] [--package] [--long-name] [--dwarf] [workload workload...] |

工具可采集指定应用,命令中[workload workload...]替换为应用路径加应用参数。
参数说明
参数 |
参数选项 |
说明 |
---|---|---|
-h/--help |
- |
获取帮助信息。 |
-c/--cpu |
- |
指定采集的CPU核数,如“0”、“0,1,2”、“0-2”。 |
-d/--duration |
- |
设置采集时长,单位为秒,最小值为1秒,默认一直采集,可使用Ctrl+\取消任务或Ctrl+C停止采集并进入分析。 |
-P/--period |
- |
设置指令数采样间隔,默认8092个,取值范围1024至4,294,967,295个。 |
-D/--delay |
- |
设置延迟采样时长,默认为0秒,需小于采集时长。 |
-i/--interval |
- |
设置任务的采集间隔(以秒为单位)。最小值为1秒,最大值不能超过采集时长,默认为采集时长。如果不指定间隔,不生成子报告。每个子报告中收集数据的时间取决于间隔参数。 |
-l/--log-level |
0/1/2/3 |
设置日志级别,默认为1。
|
-m/--metric |
1/2/3/4 |
选择采集数据的等级。默认为1(LLC Miss)。
|
-L/--latency |
- |
设置最小延迟(时钟周期),在采集Long Latency Load数据时可以设置,默认为0。 |
-r/--collection-range |
user/kernel/all |
设置采集模式,默认为all。
|
-o/--output |
- |
设置报告数据压缩包名称和输出路径,仅输入名称时默认生成在当前所在目录;需和--package配合使用。 |
-s/--src-dir |
- |
指定C/C++源码工作目录,用于查找并关联源码,可将任务导入Web端查看。 |
-p/--pid |
PID/PID1,PID2/ALL |
指定采集的进程PID,多个进程PID可用“,”分隔。默认采集全部进程(ALL)。若同时使用-p和-c参数则优先采集指定PID的进程。 |
--package |
- |
设置是否生成报告数据压缩包,不指定压缩包名称和路径时默认在当前所在目录生成miss-时间戳.tar。 |
--long-name |
- |
设置是否显示详细函数和模块信息。不使用此参数默认简洁显示模块或功能信息。 |
-t/--top |
- |
设置报告中显示数据数量,默认为10个,最小值为1个。 |
--dwarf |
- |
设置是否展示关联源码文件。 |
使用示例
- 对系统采集:
1
devkit tuner miss -c 0-127 -d 5 -o /home/miss_report -m 1 --package
命令参数-c 0-127采集0到127的CPU核,采集时长为5秒,参数-o /home/miss_report和--package生成以miss_report命名的报告数据压缩包至指定路径,参数-m 1表示采集LLC Miss事件信息。
返回信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
Miss Summary Report-all Time:2024/05/22 17:56:33 ================================================================================ ────────────────────────────────────────────────────────────────── Function Module LLC Miss ────────────────────────────────────────────────────────────────── UNKNOWN /home/devkit/lib/libpython3.9.so.1.0 14,196,736 (11.53%) _PyEval_EvalFrameDefault /home/devkit/lib/libpython3.9.so.1.0 11,321,344 (9.20%) UNKNOWN /usr/bin/devkit/tuner/lib/libsym.so 4,702,208 (3.82%) _perf_ioctl [kernel] 4,587,520 (3.73%) UNKNOWN /usr/lib64/libc-2.28.so 4,046,848 (3.29%) std::pair<std::_Rb_tree_***const, elf::sym> const&) /usr/bin/devkit/tuner/lib/libsym.so 3,694,592 (3.00%) UNKNOWN /home/devkit/libsqlite3/libsqlite3.so.0.8.6 3,588,096 (2.91%) seq_put_hex_ll [kernel] 3,080,192 (2.50%) _nohz_idle_balance [kernel] 1,941,504 (1.58%) __audit_syscall_exit [kernel] 1,933,312 (1.57%) ────────────────────────────────────────────────────────────────── 5509 milliseconds time elapsed The report /home/miss_report.tar is generated successfully. To view summary report. you can run: devkit report -i /home/miss_report.tar To view detail report. you can import the report to the WebUI or IDE to view details.
- 对应用采集:
1
devkit tuner miss -d 5 --package /opt/testdemo/cache_miss
对应用/opt/testdemo/cache_miss采集,参数-d 5表示采集5秒,参数--package生成报告数据压缩包至工具目录中,默认以miss+时间戳方式命名。
返回信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Miss Summary Report-all Time:2024/06/11 11:16:15 ================================================================================ ────────────────────────────────────────────────────────────────── Function Module LLC Miss ────────────────────────────────────────────────────────────────── main /opt/testdemo/cache_miss 74,964,992 (60.74%) copy_page [kernel] 33,554,432 (27.19%) change_protection_range [kernel] 6,815,744 (5.52%) UNKNOWN [kernel] 3,784,704 (3.07%) handle_percpu_devid_irq [kernel] 2,490,368 (2.02%) propagate_protected_usage [kernel] 917,504 (0.74%) page_counter_charge [kernel] 720,896 (0.58%) queued_spin_lock_slowpath [kernel] 32,768 (0.03%) account_system_index_time [kernel] 24,576 (0.02%) trigger_load_balance [kernel] 24,576 (0.02%) ────────────────────────────────────────────────────────────────── 6222 milliseconds time elapsed If *** is displayed in Function or Module, use --long-name to show full name. The report /usr/bin/devkit/miss-20240611-111608.tar is generated successfully. To view summary report. you can run: devkit report -i /usr/bin/devkit/miss-20240611-111608.tar To view detail report. you can import the report to the WebUI or IDE to view details.
- 对PID采集:
1
devkit tuner miss -d 5 --package -p 414192
参数-p 414192表示对进程号为414192的进程采集。
返回信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
Miss Summary Report-all Time:2024/06/11 11:18:28 ================================================================================ ────────────────────────────────────────────────────────────────── Function Module LLC Miss ────────────────────────────────────────────────────────────────── UNKNOWN /usr/lib64/libpthread-2.28.so 32,505,856 (99.42%) queued_spin_lock_slowpath [kernel] 57,344 (0.18%) available_idle_cpu [kernel] 16,384 (0.05%) cpu_load_update_active [kernel] 16,384 (0.05%) futex_wait [kernel] 16,384 (0.05%) get_futex_value_locked [kernel] 16,384 (0.05%) trigger_load_balance [kernel] 16,384 (0.05%) __list_del_entry_valid [kernel] 8,192 (0.03%) fun2 /opt/testdemo/pthread_mutex_long 8,192 (0.03%) futex_wake [kernel] 8,192 (0.03%) ────────────────────────────────────────────────────────────────── 5976 milliseconds time elapsed If *** is displayed in Function or Module, use --long-name to show full name. The report /usr/bin/devkit/miss-20240611-111822.tar is generated successfully. To view summary report. you can run: devkit report -i /usr/bin/devkit/miss-20240611-111822.tar To view detail report. you can import the report to the WebUI or IDE to view details.
- 查看已生成报告:
1
devkit report -i /usr/bin/devkit/miss-20240611-111822.tar
返回信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
────────────────────────────────────────────────────────────────── Function Module LLC Miss ────────────────────────────────────────────────────────────────── UNKNOWN /usr/lib64/libpthread-2.28.so 32,505,856 (99.42%) queued_spin_lock_slowpath [kernel] 57,344 (0.18%) available_idle_cpu [kernel] 16,384 (0.05%) cpu_load_update_active [kernel] 16,384 (0.05%) futex_wait [kernel] 16,384 (0.05%) get_futex_value_locked [kernel] 16,384 (0.05%) trigger_load_balance [kernel] 16,384 (0.05%) __list_del_entry_valid [kernel] 8,192 (0.03%) fun2 /opt/testdemo/pthread_mutex_long 8,192 (0.03%) futex_wake [kernel] 8,192 (0.03%) ────────────────────────────────────────────────────────────────── 5976 milliseconds time elapsed