K1 Power Linux上LMBench测试内存延迟
内存延迟测试,严格来说是指idle read latency。也就是空载情况下的内存读延时,繁忙的时候latency会相应加长。
延时的计量单位:
测试内存延时,用墙上时间(wall clock),一般是纳秒(ns)。这种情况下,内存的访问延时的墙上时间不随着CPU的主频变化而变化。
测试CPU的cache延时,用多少CPU cycle来表示。CPU主频快了,访问cache的也快了(墙上时间少了),但是不同主频访问cache换算出的cycle数量是恒定的。
测试软硬件
硬件FP5295G2 Power9 Monza处理器
系统:Ubuntu 18.04.4 LTS
编译lmbench
wget http://www.bitmover.com/lmbench/lmbench3.tar.gz
tar xf lmbench3.tar.gz
更改Makefile文件,更改后的文件是Makefile.bak。 更改内容,可以参考下面内容。
cd src
cp Makefile Makefile.bak
vim Makefile
--- Makefile 2005-08-22 19:19:54.000000000 -0500
+++ Makefile.bak 2017-12-17 23:40:03.470936848 -0600
@@ -111,8 +111,8 @@
$O/lib_sched.o
lmbench: $(UTILS)
- @env CFLAGS=-O MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="$(CC)"
OS="$(OS)" ../scripts/build all
- -@env CFLAGS=-O MAKE="$(MAKE)" MAKEFLAGS="-k $(MAKEFLAGS)" CC="$(CC)"
OS="$(OS)" ../scripts/build opt
+ @env CFLAGS="-O3 -fpeel-loops -funroll-loops -ftree-vectorize"
MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="$(CC)" OS="$(OS)"
../scripts/build all
+ -@env CFLAGS="-O3 -fpeel-loops -funroll-loops -ftree-vectorize"
MAKE="$(MAKE)" MAKEFLAGS="-k $(MAKEFLAGS)" CC="$(CC)" OS="$(OS)"
../scripts/build opt
results: lmbench
@env OS="${OS}" ../scripts/config-run
@@ -163,12 +163,13 @@
@env CFLAGS="-g -O" MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}"
OS="${OS}" ../scripts/build all opt
assembler:
- @env CFLAGS=-O MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}"
OS="${OS}" ../scripts/build asm
+ @env CFLAGS="-O3 -fpeel-loops -funroll-loops -ftree-vectorize"
MAKE="$(MAKE)" MAKEFLAGS="$(MAKEFLAGS)" CC="${CC}" OS="${OS}"
../scripts/build asm
-bk.ver: ../SCCS/s.ChangeSet
- rm -f bk.ver
- -echo `bk prs -hr+ -d'$$if(:SYMBOL:){:SYMBOL: }:UTC:' ../ChangeSet;` >
bk.ver
- touch bk.ver
+#bk.ver: ../SCCS/s.ChangeSet
+# rm -f bk.ver
+# -echo `bk prs -hr+ -d'$$if(:SYMBOL:){:SYMBOL: }:UTC:' ../ChangeSet;` >
bk.ver
+# touch bk.ver
+bk.ver:
dist: bk.ver
@if [ "X`cd ..; bk sfiles -c`" != "X" ]; then \
@@ -209,11 +210,11 @@
clean:
/bin/rm -f ../bin/*/CONFIG ../bin/*/*.[oas]
/bin/rm -f *.[oas]
- -bk clean
+# -bk clean
clobber:
/bin/rm -rf ../bin* SHAR
- -bk clean
+# -bk clean
shar:
cd ../.. && shar lmbench/Results/Makefile $(SAMPLES) lmbench/scripts/*
lmbench/src/Makefile lmbench/src/*.[ch] > lmbench/SHAR
编译
cd src
make
编译结果

测试
关闭prefetch “ppc64_cpu --dscr=1”
设置足够大的访问数据组,用来绕开cache(2G)
设置大于cache line的步进(512)
根据L1(dc )和L2和L3大小的边界来判断cache的延时
dc=32K (每个SMT4 core独占) --3cycle
L2=512K(每两个SMT4的core(core Pair)共享)–12 cycle
L3=10M (每两个SMT4的core (core Pair)共享)–27 cycle
注意固定频率,防止WoF的干扰

echo always > /sys/kernel/mm/transparent_hugepage/enabled
ppc64_cpu --smt=off
ppc64_cpu --dscr=1
cd lmbench3/bin
numactl --physcpubind 0 --membind 0 ./lat_mem_rd 2000 512
测试单个thread的mem latency的结果,在74.6ns左右,延迟非常低。
0.00391 1.060
0.00586 1.060
0.00781 1.060
0.00977 1.060
0.01172 1.060
...
0.02930 1.060
0.03125 1.060
0.03516 4.244
0.03906 4.244
0.04297 4.244
0.04688 4.244
...
0.43750 4.244
0.46875 4.244
0.50000 4.244
0.56250 9.735
0.62500 9.713
0.68750 9.697
0.75000 9.707
...
52.00000 23.330
56.00000 26.699
60.00000 27.881
64.00000 30.296
72.00000 33.360
80.00000 37.810
88.00000 41.150
96.00000 42.917
104.00000 44.354
112.00000 45.929
120.00000 43.485
....
1152.00000 74.771
1280.00000 74.745
1408.00000 74.727
1536.00000 74.657
1664.00000 74.642
1792.00000 74.723
1920.00000 74.690
1920这列是MB为单位,0.00391=4096/1024/1024, 步长转换成为MB。结果中,超过L1 32KB(32KB/1024=0.03125),发生一次延迟数值变化,0.03125 1.060。 超过L2 缓存(512KB/1024=0.5),发生一次变化0.50000 4.244。超过L3缓存后,数值会逐渐增加,但最终趋于稳定。
调优
cpu governor使用performance模式可带来新能提升,原因是高频的CPU,每个Cycle的时间减少了。
cpupower -c all frequency-set -g performance
cpupower -c all frequency-info|grep 'current CPU frequency'|sort|uniq -c
其他说明:
横向对比测试过程中,要保证测试参数一致。不同步长的测试结果不同。以128最好, Power的CPU L1 L2 cache默认cache line是128Bytes。

参考链接
https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/W51a7ffcf4dfd_4b40_9d82_446ebc23c550/page/Untangling%20memory%20access%20measurements%20-%20memory%20latency
https://developer.ibm.com/technologies/linux/articles/l-port-x86-lop
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
