bw_mem 和 lmbench
一、bwmem
名称
bw_mem - 时间内存带宽
概要
bw_mem_cp [ -P <并行度> ] [ -W <热身次数> ] [ -N <重复次数> ] 大小 rd|wr|rdwr|cp|fwr|frd|bzero|bcopy [对齐]
描述
bw_mem 分配两倍指定内存量,将其归零,然后将前半部分复制到后半部分。将每秒移动的兆字节数作为结果进行报告。
大小规范可能以“k”或“m”结尾,表示千字节 (* 1024) 或兆字节 (* 1024 * 1024)。
输出
输出格式为 CB"%0.2f %.2f\n", 兆字节,兆字节每秒,即
8.00 25.33
bw_mem 中有九种不同的内存基准。它们各自测量读取、写入或复制数据的方法略有不同。
rd
测量将数据读入处理器的时间。它计算整数值数组的总和。它每次访问四个字。
wr
测量将数据写入内存的时间。它为整数值数组的每个内存分配一个常量值。它每次访问四个字。
rdwr
测量将数据读入内存然后将数据写入同一内存位置的时间。对于数组中的每个元素,它将当前值添加到运行总和中,然后再为元素分配新的(常量)值。它每次访问四个字。
cp
测量将数据从一个位置复制到另一个位置的时间。它执行数组复制:dest[i] = source[i]。它每次访问四个字。
frd
测量将数据读入处理器的时间。它计算整数值数组的总和。
fwr
测量将数据写入内存的时间。它为整数值数组的每个内存分配一个常量值。
fcp
测量将数据从一个位置复制到另一个位置的时间。它执行数组复制:dest[i] = source[i]。
bzero
测量系统清零内存的速度。
bcopy
测量系统复制数据的速度。
内存利用率
此基准测试最多可将请求的内存移动三倍。Bcopy 将使用 2-3 倍的内存带宽:从源读取一次,然后写入目标。写入通常会导致缓存行读取,然后在稍后的某个时间点写回缓存行。如果处理器架构实现了“加载缓存行”和“存储缓存行”指令(以及“getcachelinesize”),内存利用率可能会减少 1/3。
二、lmbench
代码:https://github.com/intel/lmbench.git
翻译:https://lmbench.sourceforge.net/man/lmbench.8.html
名称
lmbench - 系统基准测试
描述
lmbench 是一系列微基准测试,旨在测量基本操作系统和硬件系统指标。基准测试分为三大类:带宽、延迟和“其他”。
大多数 lmbench 基准测试都使用 timing(3) 中描述的标准计时工具,并具有一些标准选项:并行性、预热和重复。并行性指定要并行运行的基准测试进程数。这主要在测量 SMP 或分布式计算机的性能时有用,并可用于评估系统的性能可扩展性。预热是基准测试在开始测量性能之前应执行基准测试功能的最小微秒数。同样,这主要对 SMP 或分布式系统有用,旨在为进程调度程序提供“稳定”时间并将进程迁移到其他处理器的时间。通过测量不同预热期内的性能,用户可以评估调度程序的响应能力。重复是基准测试应进行的测量次数。这允许 lmbench 为其报告的结果提供更大或更小的统计强度。默认重复次数为 11。
带宽测量
数据迁移是大多数计算机系统性能的基础。带宽测量旨在显示系统如何移动数据。可以比较带宽指标的结果,但必须注意了解正在比较的内容。带宽基准可以归结为两个主要组成部分:操作系统开销和内存速度。带宽基准以每秒移动的兆字节数报告其结果,但请注意,移动的数据不一定与用于移动数据的内存带宽相同。有关更多信息,请参阅各个手册页。
下面列出了每个带宽基准,并简要概述了基准的目的。
bw_file_rd
通过 read(2) 接口读取和汇总文件。
bw_mem_cp
内存复制。
bw_mem_rd
内存读取和汇总。
bw_mem_wr
内存写入。
bw_mmap_rd
通过内存映射 mmap(2) 接口读取和汇总文件。
bw_pipe
通过管道读取数据。
bw_tcp
通过 TCP/IP 套接字读取数据。
bw_unix
从 UNIX 套接字读取数据。
延迟测量
控制消息也是大多数计算机系统性能的基础。延迟测量旨在显示系统可以多快地被指示执行某些操作。延迟指标的结果大部分可以相互比较。特别是,pipe、rpc、tcp 和 udp 事务都是在不同系统抽象上执行的相同基准。
此处的延迟数字应主要以每个操作的微秒为单位。
lat_connect
建立 TCP/IP 连接所需的时间。
lat_ctx
上下文切换;进程的数量和大小各不相同。
lat_fcntl
fcntl 文件锁定。
lat_fifo
通过 UNIX FIFO 的“热土豆”事务。
lat_fs
创建和删除小文件。
lat_pagefault
从文件中将页面错误所需的时间。
lat_mem_rd
内存读取延迟(精确到 ~2-5 纳秒范围,以纳秒为单位报告)。
lat_mmap
设置内存映射的时间。
lat_ops
基本处理器操作,例如整数 XOR、ADD、SUB、MUL、DIV 和 MOD,以及浮点 ADD、MUL、DIV 和双精度 ADD、MUL、DIV。
lat_pipe
通过 Unix 管道的“热土豆”事务。
lat_proc
进程创建时间(各种类型)。
lat_rpc
通过 UDP 或 TCP 上的 Sun RPC 进行的“热土豆”事务。
lat_select
选择延迟
lat_sig
信号安装和捕获延迟。还有保护故障信号延迟。
lat_syscall
进入系统的非平凡入口。
lat_tcp
通过 TCP 进行的“热土豆”事务。
lat_udp
通过 UDP 进行的“热土豆”事务。
lat_unix
通过 UNIX 套接字进行的“热土豆”事务。
lat_unix_connect
建立 UNIX 套接字连接所需的时间。
其他测量
mhz
处理器周期时间
tlb
TLB 大小和 TLB 未命中延迟
line
缓存行大小(以字节为单位)
cache
缓存统计信息,例如行大小、缓存大小、内存并行性。
stream
John McCalpin 的流基准
par_mem
内存子系统并行性。内存子系统可以并行服务多少个请求,这可能取决于数据在内存层次结构中的位置。
par_ops
基本处理器操作并行性。
也可以看看
bargraph(1) , graph(1) , lmbench(3) , results(3) , timing(3) , bw_file_rd(8) , bw_mem_cp(8) , bw_mem_wr(8) , bw_mmap_rd(8) , bw_pipe(8) , bw_tcp(8) , bw_unix(8) , lat_connect(8) , lat_ctx(8) , lat_fcntl(8) , lat_fifo(8) , lat_fs(8) , lat_http(8) , lat_mem_rd(8) , lat_mmap(8) , lat_ops(8) , lat_pagefault(8) , lat_pipe(8) , lat_proc(8) , lat_rpc(8) , lat_select(8) , lat_sig(8) , lat_syscall(8) , lat_tcp(8) , lat_udp(8) , lmdd(8) , par_ops(8) , par_mem(8) , mhz(8) , tlb(8) , line(8) , cache(8) , stream(8)
三、补充
1. bw_mem各项具体测试了啥
./bw_mem -N 10 -P 10 32m fwr & //死循环执行 p[0]=p[1]=p[2]=...p[127]=1; int *p+=128; ./bw_mem -N 10 -P 10 32m frd & //死循环执行 sum += p[0]+p[1]+p[2]+...+p[127]; int *p+=128; ./bw_mem -N 10 -P 10 32m rd & //死循环执行 sum += p[0]+p[4]+p[8]+...+p[124]; int *p+=128; ./bw_mem -N 10 -P 10 32m wr & //死循环执行 p[0]=1; p[4]=1; p[8]=1; ... p[124]=1; int p+=128; ./bw_mem -N 10 -P 10 32m rdwr & //死循环执行 sum += p[0]; p[0] = 1; sum += p[4]; p[4] = 1; ... sum += p[124]; p[124] = 1; int *p+=128; ./bw_mem -N 10 -P 10 32m cp & //死循环执行 dst[0] = p[0]; dst[4] = p[4];...dst[124] = p[124]; int *p += 128; int *dst += 128; ./bw_mem -N 10 -P 10 16m fcp & //死循环执行 dst[0]=p[0]; dst[1]=p[1]; dst[2]=p[2];...dst[127]=p[127]; int *p += 128; int *dst += 128; ./bw_mem -N 10 -P 10 32m bzero & //死循环对参数指定的buffer大小执行 memset(b, 0, len) ./bw_mem -N 10 -P 10 16m bcopy & //死循环对参数指定的buffer大小执行 bcopy(p,dst,N)
fwr 和 bzero 相近,比较大,frd 和 rd 偏弱。
此命令有个"热身"的动作,要十几秒后开始读取数据。
posted on 2024-07-16 20:22 Hello-World3 阅读(642) 评论(0) 编辑 收藏 举报