✨前言:
什么是lmbench?
lmbench 是一个广泛使用的、开源的系统性能测量工具,它能对Unix-like操作系统(包括Linux、BSD等)进行全面的性能测试。这个套件包含了一系列针对不同系统组件(如处理器、内存、文件系统等)的基准测试工具。在内存测试方面,lmbench 主要测量内存的带宽和延迟。
✨安装lmbench
git clone https://github.com/redrose2100/lmbench.git
cd lmbench/
make && make install
编译完成之后可以看到bin目录下生成二进制文件
✨使用 lmbench 进行内存测试
lmbench 包含多个工具和测试,以下是针对内存测试的一些常用命令:
🌟参数详解:
bw_mem 是 lmbench
套件中的一个工具,用于测量内存的带宽性能。你可以通过不同的选项来定制测试的行为。以下是对bw_mem命令参数的解释:-P : 指定并行度,即同时运行测试的线程或进程数。增加并行度可以测试系统在高并发场景下的内存带宽表现。
-W : 指定热身次数。在正式开始收集数据前,程序会先执行指定次数的测试,这有助于使CPU和内存达到一个稳定的工作状态,从而让测试结果更加准确。
-N : 指定重复执行测试的次数。增加重复次数可以使结果更稳定,减少偶然误差的影响。
: 指定测试使用的数据块大小。这对于评估在处理不同大小数据时的内存带宽非常重要。大小必须大于512字节。
what: 指定测试的类型。包括以下几种: rd: 仅读取内存数据。 wr: 仅写入内存数据。 rdwr: 交替读写内存数据。 cp:
内存拷贝,复制内存数据。 fwr: 使用非临时存取指令写入内存数据。 frd: 使用非临时存取指令读取内存数据。 fcp:
使用非临时存取指令复制内存数据。 bzero: 清零内存。 bcopy: 内存数据拷贝(可能和 cp 类似,但具体实现可能有所不同)。
[conflict]: 该选项可选,允许测试中引入地址冲突,以评估某些特定内存访问模式下的性能。这些参数允许你根据具体的测试需求配置bw_mem工具,以评估系统在不同操作(如读、写、拷贝等)和不同条件(如并行度和数据大小)下的内存带宽性能。使用时,根据测试目标合理选择参数,可以获得有价值的性能评估结果。
🌟内存带宽测试:
bw_mem:用于测试内存的读写带宽。可以通过不同的参数指定测试的大小和类型(读、写、复制等)。
🌟rd: 读取测试。测量连续读取内存的能力。
./bw_mem 1g rd
这个命令会测试在读取1GB内存数据时的带宽。
🌟wr: 写入测试。测量连续写入内存的能力。
./bw_mem 1g wr
这个命令会测试在写入1GB内存数据时的带宽。
🌟rdwr: 读写交替测试。测量交替读取和写入内存的能力。
./bw_mem 1g rdwr
这个命令会测试在交替读写1GB内存数据时的带宽。
🌟cp: 内存拷贝测试。测量内存区域间拷贝数据的能力。
./bw_mem 1g cp
这个命令会测试拷贝1GB内存数据的带宽。
🌟fwr: 带有“非临时”(fetch-and-add 类型操作)标记的写入测试。
./bw_mem 1g fwr
这个命令在执行写入操作时,表现出了非临时型的行为,适用于评估特定场景下的带宽。
🌟frd: 带有“非临时”标记的读取测试。
./bw_mem 1g frd
这个命令在执行读取操作时,表现出了非临时型的行为,适用于评估特定场景下的带宽。
🌟fcp: 用“非临时”原语执行的内存拷贝测试。
./bw_mem 1g fcp
类似于 cp,但采用非临时原语来对内存进行操作。
🌟bzero: 清零内存测试。测量清零一段内存区域的性能。
./bw_mem 1g bzero
这个命令测量清零1GB内存区域的带宽。
🌟bcopy: 内存拷贝测试。类似于 cp,但可能使用不同的API或方法。
./bw_mem 1g bcopy
🌟指定NUMA节点
当然你也可以指定要测试的NUMA节点:
numactl -N 0 -m 2 ./bw_mem -P 2 -N 2 100M rd