Rockchip平台DDR带宽统计工具使用介绍
工具介绍
rk-msch-probe-for-user是官方提供的用于统计和监控系统DDR的负载和带宽使用情况的工具,可以实时显示当前DDR的负载和带宽信息。
支持芯片平台
通过rk-msch-probe-for-user-64bit -h命令可以看到当前工具支持的芯片,具体如下:
rk3588_t_evb7:/ # ./data/rk-msch-probe-for-user-64bit -h
Usage: <-c chip_name> {{[-r cs -b bank] [-m master | -i id] [-l log_level]} or [-p top_load -g gap_time_us]} [-t test_loop] [-d msecs] [-f freq] [-h]
-c chip_name:
'rk312x' include rk3126,rk3128 and px3se
'rk322x' include rk3128h,rk3228a,rk3228b and rk3229
'rk3368' include rk3368 and px5
'rk322xh' include rk3228h and rk3328
'rk3326' include px30 and rk3326
'rv1126' include rv1109 and rv1126
'rk3399'
'rk1808'
'rk3288'
'rk3308' include rk3308 and rk3308S
'rv1108'
'rk356x' include rk3566 and rk3568
'rk3588'
'rv1106' and 'rv1103'
'rk3528'
工具获取
rk-msch-probe-for-user工具在Android的SDK里面可以获取,具体路径如下:
RKDocs/common/DDR/DDR_bandwidth_statistics_tool/
├── rk-msch-probe-for-user-32bit
├── rk-msch-probe-for-user-64bit
└── Rockchip_Introduction_DDR_Bandwidth_Tool_CN.pdf
其中:后缀32bit和64bit是指适用于32bit和64bit的系统。
目前仅Android13版本的SDK带有该工具,其他SDK可以通过RK的redmine途径获取
工具使用条件
- DDR需要在定频的模式下才能使用
可以通过如下命令切换定频模式,建议定在最高频点进行测试
1|rk3588_t_evb7:/ # echo userspace > sys/class/devfreq/dmc/governor
获取系统支持的频点信息
rk3588_t_evb7:/ # cat sys/class/devfreq/dmc/available_frequencies
528000000 1068000000 1560000000 2112000000
然后将DDR定频,如DDR定频到780MHz:
rk3588_t_evb7:/ # echo 2112000000 > sys/class/devfreq/dmc/userspace/set_freq
- 系统需要有/dev/mem节点,即IO命令需要能使用。
如果没有找到 /dev/mem,使用时会有如下报错:
rk3588_t_evb7:/ # ./data/rk-msch-probe-for-user-64bit -c rk3588
open /dev/mem error: No such file or directory
解决方法: 在kernel的config中打开CONFIG_DEVMEM 宏然后重新编译kernel烧写即可。 注意:在kernel的config默认是有打开CONFIG_DEVMEM ,但是在Android10及以上版本会在android-xx.config中去掉这个配置,把对应的注释去掉即可。
@sys2_206:~/a2_Android13_29_sdk/mkcombinedroot$ git diff
diff --git a/configs/android-13.config b/configs/android-13.config
index 592931e..1a42959 100644
--- a/configs/android-13.config
+++ b/configs/android-13.config
@@ -2,7 +2,6 @@
# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set
# CONFIG_ANDROID_PARANOID_NETWORK is not set
# CONFIG_BPFILTER is not set
-# CONFIG_DEVMEM is not set
# CONFIG_FHANDLE is not set
# CONFIG_FW_CACHE is not set
# CONFIG_IP6_NF_NAT is not set
工具使用参数介绍
DDR带宽测试工具(rk_msch_probe_vx.xx)支持如下参数传入。
-
-c:芯片名称,确认当前平台支持后,按照此平台名称输入即可,如 rk3588。
-
-d:监视间隔时间,单位ms,可选。若不传参,则默认1000ms。
-
-f: 当前 DDR 的频率,单位MHz,可选。每个监视时间段,工具都会尝试获取DDR频率。若获取失败,则需要传入当前DDR的频率。
注意:需要先把DDR定频,否则DDR频率可能发生变化,测出结果不准确。
-
-h: 帮助。
工具打印信息介绍
执行rk_msch_probe_vx.xx
,将监视并打印DDR带宽及利用率。
一般平台打印如下:
V1.06_20200629
ddr freq: 928Mhz
CH0:
ddr monitor statistics:
ddr load = 3251.23MB/s(43.76%) [RD:1859.93MB/s(25.03%), WR:1391.30MB/s(18.72%), ACT(access : active): 3.34, srex:0.54%, pdex:1.27%, clkstp:0.00%, lp:1.81%]
RK3588打印改动较大,如下:
2kijec4hi======================================================================================================
ddr freq: 2112Mhz cpu vicap gpu vop isp others total
master bw(MB/s) 1035.41 0.00 881.12 494.90 0.00 72.22 2483.65
bw prorated(%) 41.69 0.00 35.48 19.93 0.00 2.91 100.00
utilization(%) 3.06 0.00 2.61 1.46 0.00 0.21 7.35
theoretical bw 33792.00
----------------------------------------------ALL-------------------------CH0-------------------------CH1-------------------------CH2-------------------------CH3--------
recorded LOAD: max 23465.35MB/s(69.44%), min 3.89MB/s(0.01%), avg 5885.02MB/s(17.42%)
LOAD: 2483.65MB/s(7.35%), 694.07MB/s(8.22%), 550.30MB/s(6.51%), 688.31MB/s(8.15%), 550.97MB/s(6.52%)
RD: 1620.78MB/s(4.80%), 451.92MB/s(5.35%), 361.63MB/s(4.28%), 446.05MB/s(5.28%), 361.18MB/s(4.28%)
WR: 862.87MB/s(2.55%), 242.15MB/s(2.87%), 188.67MB/s(2.23%), 242.26MB/s(2.87%), 189.79MB/s(2.25%)
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
统计的结果说明:
打印 | 解释 |
---|---|
ALL | 所有channel总的带宽统计信息 |
CHx | DDR channel x的带宽统计信息 |
load/LOAD | 对于所有DDR bank,此channel的带宽及负载 |
RD | 对于所有DDR bank,DDR read 数据的带宽及占比 |
WR | 对于所有DDR bank,DDR write 数据的带宽及占比 |
PRE | 对于所有DDR bank,命令precharge占总命令数量的百分比。precharge与active成对出现,实际没有硬件统计,而是直接取用active命令统计结果 |
ACT(access : active) | 对于所有DDR bank,平均每个DDR active命令后有几个read/write,值越大说明访问DDR地址越连续,越大越好 |
srex | DDR 处于 self-refresh 状态的时间占比 |
pdex | DDR 处于 power down 状态的时间占比 |
clkstp | DDR 处于 clock stop 状态的时间占比 |
srpdex | DDR 处于 self-refresh power down 状态的时间占比 |
dsmex | DDR 处于 Deep Sleep Mode 状态的时间占比 |
lp/ LOW POWER | DDR 在 low power 状态的时间占比(low power状态包括self-refresh,power down 和 clock stop等) |
RK3588 芯片使用实例
使用步骤:
- 将rk-msch-probe-for-user-64bit工具push到机器中,并修改权限为777
$ adb push ~/206_samba/a2_Android13_29_sdk/RKDocs/common/DDR/DDR_bandwidth_statistics_tool/rk-msch-probe-for-user-64bit data/
$ adb shell chmod 777 ./data/rk-msch-probe-for-user-64bit
- 确认**/dev/mem**节点是否存在
130|rk3588_t_evb7:/ # ls /dev/mem
/dev/mem
- 设置DDR定频在最高频率2112MHz
1|rk3588_t_evb7:/ # echo userspace > sys/class/devfreq/dmc/governor
rk3588_t_evb7:/ # cat sys/class/devfreq/dmc/available_frequencies
528000000 1068000000 1560000000 2112000000
rk3588_t_evb7:/ # echo 2112000000 > sys/class/devfreq/dmc/userspace/set_freq
- 开始运行
1|rk3588_t_evb7:/ # ./data/rk-msch-probe-for-user-64bit -c rk3588
V1.30_20221206
2kijec4hi======================================================================================================
ddr freq: 2112Mhz cpu vicap gpu vop isp others total
master bw(MB/s) 3.49 0.00 0.00 0.00 0.00 0.40 3.89
bw prorated(%) 89.78 0.00 0.00 0.00 0.00 10.22 100.00
utilization(%) 0.01 0.00 0.00 0.00 0.00 0.00 0.01
theoretical bw 33792.00
----------------------------------------------ALL-------------------------CH0-------------------------CH1-------------------------CH2-------------------------CH3--------
recorded LOAD: max 3.89MB/s(0.01%), min 3.89MB/s(0.01%), avg 3.89MB/s(0.01%)
LOAD: 3.89MB/s(0.01%), 1.73MB/s(0.02%), 0.55MB/s(0.01%), 1.05MB/s(0.01%), 0.55MB/s(0.01%)
RD: 2.87MB/s(0.01%), 1.45MB/s(0.02%), 0.32MB/s(0.00%), 0.78MB/s(0.01%), 0.32MB/s(0.00%)
WR: 1.02MB/s(0.00%), 0.28MB/s(0.00%), 0.23MB/s(0.00%), 0.28MB/s(0.00%), 0.23MB/s(0.00%)
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- 设备上运行需要监控ddr信息的应用