LMBench 是一套适用于处理器内核和操作系统基元的微基准测试工具。存储器带宽和延迟相关测试非常适用于现代嵌入式处理器。每次运行的结果略有不同 (<10%)。
LMBench 基准测试 bw_mem 测量实现的存储器复制性能。参数 cp 复制数组,bcopy 参数使用运行时 glibc 版本的 memcpy() 标准函数。利用 SIMD 等实现更高性能,在实施高度优化的基础上进行 glibc 实践。等于或小于给定级别高速缓存大小的 size 参数可测量进行典型的 for 循环或 memcpy() type 操作的软件可实现的存储器带宽。通常用于计算外部存储器带宽。带宽根据字节读写(每读写 1 字节计为 1)计算,结果约为 STREAM 复制结果的一半。表 3-1 展示了相对于理论线速测得的带宽和效率。使用的线速计算方式为:DDR MT/s x 宽度 ÷ 2(构成复制的读取和写入均会消耗总线)。此基准测试还允许利用 -P 参数创建并行线程。要获得更大的多核存储器带宽,请创建与操作系统可用内核相同数量的线程,对于 AM62x Linux 来说,为 4 个 (-P 4)。
表 3-1 LMBench 结果 | 说明 | Arm Cortex-A53,DDR4-1600MT/s-16 位 | DDR4 效率 |
|---|
| bw_mem -P 2 8M bcopy | 四核,glibc memcpy | 1222MB/s | 76% |
bw_mem 8M bcopy | 单核,glibc memcpy | 887MB/s | 55% |
bw_mem -P 4 8M cp | 四核,内联复制循环 | 731MB/s | 46% |
bw_mem 8M cp | 单核,内联复制循环 | 590MB/s | 37% |
LMBench 基准测试 lat_mem_rd 用于测量观察到的外部存储器(AM62x 上的 DDR4 和 LPDDR4)的存储器访问延迟和高速缓存命中率。两个参数分别为事务大小(表 3-2 中的 64)和读取跨度 (512)。选择这两个数值来测量高速缓存和外部存储器的延迟,而不是处理器数据预取器或其他推测性执行的延迟。存取模式可实现预取,但此基准测试特别适用于无法实现预取的存取模式下的相关测量。左列是数据存取模式的大小(单位为兆字节),右侧是往返读取延迟(单位为纳秒)。Arm Cortex-A53 读取延迟概述如下:
- L1D 为 2.5ns
- L2 延时为 11.5ns
- 对于 DDR4-1600 存取,延迟为 209ns
- 对于 LPDDR4-1600 存取,延迟为 218ns
表 3-2 DDR4 和 LPDDR4 的 LMBench 基准测试
| DDR4-1600: |
LPDDR4-1600: |
root@am62xx-evm:~
#lat_mem_rd 64 512
"stride=512
0.00049 2.503
0.00098 2.504
0.00195 2.503
0.00293 2.503
0.00391 2.503
0.00586 2.503
0.00781 2.504
0.01172 2.503
0.01562 2.503
0.02344 2.520
0.03125 2.562
0.04688 7.673
0.06250 8.980
0.09375 10.190
0.12500 10.772
0.18750 11.374
0.25000 11.675
0.37500 11.969
0.50000 12.784
0.75000 140.541
1.00000 179.407
1.50000 192.142
2.00000 197.091
3.00000 202.542
4.00000 205.342
6.00000 207.528
8.00000 208.155
12.00000 209.024
16.00000 209.193
24.00000 209.510
32.00000 209.754
48.00000 209.919
64.00000 209.947
|
root@am62xx-lp-evm:~ #lat_mem_rd 64 512
"stride=512
0.00049 2.404
0.00098 2.404
0.00195 2.404
0.00293 2.404
0.00391 2.404
0.00586 2.404
0.00781 2.404
0.01172 2.404
0.01562 2.404
0.02344 2.404
0.03125 4.658
0.04688 7.361
0.06250 8.649
0.09375 9.829
0.12500 10.425
0.18750 10.902
0.25000 11.206
0.37500 19.735
0.50000 45.997
0.75000 142.079
1.00000 192.943
1.50000 211.722
2.00000 214.697
3.00000 216.157
4.00000 217.630
6.00000 217.874
8.00000 218.525
12.00000 218.666
16.00000 218.752
24.00000 218.732
32.00000 218.727
48.00000 218.696
64.00000 218.854
|