zero, 说明:
为了对系统的性能进行优化,因而需要分析系统的性能瓶颈在哪里,需要对系统的一些设备的性能进行测试。这一篇文章用于记录内存带宽的测试,如果文章中有不足的地方,请不吝赐教。
一,背景知识:
下面提供一些关于内存结构的链接,如若侵权,请联系我进行删除.
CMU MainMemory
圖解RAM結構與原理,系統記憶體的Channel、Chip與Bank
二,实验环境
所使用的CPU的信息如下 : 一台机器有24个物理核
所使用的内存条的信息如下 : 一台机器有8个相同的内存条
三,初步测试
最初打算寻找一些现有的工具对直接进行测试,测试的结果如下:
1,使用dd命令进行测试,命令如下 :
dd if=/dev/zero of=/dev/shm/A bs=2M count=1024
测试的结果如下 :
显然,2.7GB/s的内存带宽这个结果,是不能令人满意的。
2,使用mbw命令进行测试,命令如下:
mbw 16 -b 4096
测试的结果如下 : (进行了多次测试,其中选取测试结果表现最好)
由于mbw使用了三种不同的方式进行了测试 :
(1), 使用memcpy将一个数组复制到另一个数组 :
其avg bandwidth为5.2GB/s,但是由于需要从一个数组复制到另一个,所以应该包括内存读和内存写,假设读写速度一样的话,其avg bandwidth应该为 5.2 * 2 = 10.4GB/s
(2), 使用for循环将一个数组复制到另一个数组 :
同理,可以看出其avg bandwidth为 12.2 GB/s
(3), 使用mempcpy将一个块复制到一个数组 :
由于只是重复地复制一个块,所以可以看做只有内存写操作,故其avg bandwidth为 12.2GB/s
3, 使用sysbench进行测试,测试命令如下
sysbench --test=memory --memory-block-size=4K --memory-totol-size=2G --num-threads=1 run
sysbench --test=memory --memory-block-size=4K --memory-totol-size=2G --num-threads=16 run
其中第一个命令使用了1个线程,第二个命令使用了16个线程,测试结果如下 :