- super_pi 是一个单线程浮点运算程序,借助libc的数学库,可以求解任意位数的圆周率值。我们关心其运算的总耗时,由于实现方法不同,不推荐不同工具的横向对比
- super_pi 1048576 即测试cpu计算出1048576位圆周率的耗时
-
sysbench 是一个模块化的、跨平台、多线程基准测试工具。
- sysbench [general-options]... --test=<test-name> [test-options]... command
- general-options
- --num-threads=N 测试的线程
- --max-requests=N 限制总的请求量
- --max-time=N 线程程序执行时间
- --thread-stack-size=SIZE 限制每个线程栈大小,默认32K
- test-options
- fileio 磁盘io性能
- cpu cpu性能测试
- memory 内存读写速度
- threads 多线程性能测试
- mutex 互斥锁性能测试
- oltp - OLTP test
-
sysbench --test=cpu test options解释
- --cpu-max-prime=N cpu测试主要是进行素数的加法运算,每个线程并行执行直到请求总数或执行时间超过选项指定值
-
sysbench --test=fileio fileio基准测试在不同类型的i/o负载下的处理能力,文件的大小:测试文件的大小应该大于内存,如果测试数据过小,内存缓存文件数据,则不能表示为一种i/o密集型的工作负载;
- 我们关注i/o子系统调整的主要信息:每秒的请求数量和总体的吞吐量
- --file-num 准备阶段指定生成的文件数量
- --file-block-size 指定文件块的大小,默认16K
- --file-total-size 指定文件总的大小,默认2G
- --file-test-mode 指定产生文件负荷的类型,可以有以下值
- seqwr 顺序写
- seqrewr 顺序读写
- seqrd 顺序读
- rndrd 随机读
- rndwr 随机写
- rndrw 随机读写
- --file-io-mode I/O 模式,默认sync
- sync
- async
- fastmmap
- slowmmap
- --file-rw-ratio 指定reads/writes比例,默认1.5
-
sysbench --test=memory 测试内存的分配和传输速度
- 我们关注执行的总时间
- --memory-block-size=SIZE 内存块的大小默认 [1K]
- --memory-total-size=SIZE 总的传输文件大小,默认[100G]
- --memory-hugetlb=[on|off] allocate memory from HugeTLB pool [off]
- --memory-oper=STRING 内存操作类型 read/write 默认write
- --memory-access-mode=STRING memory access mode {seq,rnd} [seq]
- fio [options] [job options] <job file(s)> 测试磁盘I/O性能
- 我们关注iops和吞吐量
- --output 把输出结果写到文件
- --runtime 执行时间,读写时间可能较长,指定时间结束执行
- --bandwidth-log Generate per-job bandwidth logs
- --output-format=x Output format (terse,json,normal)
- job paramaters
- filename=str 测试文件名称, 只能是分区,不能是目录,会破坏数据。
- lockfile=str 如果文件是共享访问的,fio通过顺序化IO保证最终结果的正确,共享通常是模拟真实的文件模式
- none 不添加锁 default
- exclusive/readwrite
- rw=str I/O模式
- read 顺序读
- write 顺序写
- randread 随机读
- randwrite 随机写
- rw 顺序读写
- randrw 随机读写
- size=int 总的文件大小
- bs=int 读写的文件块默认4K
- ioengine=str defines how the job issues I/O
- sync 同步I/O
- psync 同步I/O,从指定offset位置开始读写
- vsync 垂直同步
- pvsync
- libaio Linux默认的异步I/O
- mmap 将一个文件或者其它对象映射进内存
- net 从网络传输 传输协议可以通过protocol参数指定
- iodepth=int 在某个时刻,队列中的IO请求、磁盘正在处理的IO请求总数,增加队列深度可以让硬盘不停的工作,减少空闲时间。不过,IO在队列的等待时间也会增加,导致IO响应时间变大
- direct=bool 如果true,测试过程绕过机器自带的buffer。使测试结果更真实。默认false
- buffered=bool 和direct相反,默认true
- rwmixread=int 同时读写是读占的比重,默认50
- rwmixwrite=int 同上
- runtime=int 指定秒数后终止执行
- numjobs=int 指定测试线程,默认为1
- group_reproting 如果设置,则会汇总每个进程的信息。
- thread Use threads created with pthread_create(3) instead of processes created with fork(2)
- lockmem=1g 只使用1g内存进行测试。
-
iperf3网络测试 需要两台虚拟机,一台作为服务器,一台作为客户端
- Server or Client:
- -p, --port 服务端监听的端口
- -i, --interval # 周期性带宽报告间隔秒数,默认一秒
- -A, --affinity n/n,m set CPU affinity
- -V, --verbose 详细输出信息
- -J, --json 输出json格式
- Server specific:
- -s, --server 开启服务端
- -D, --daemon 后台运行
- Client specific:
- -u, 使用udp 默认是tcp
- -b, --bandwidth #[KMG] 设置带宽大小,udp默认1Mbits/s,不限制tcp,如果不设置不能正确测试udp吞吐量
- -n, --bytes #[KMG] number of bytes to transmit (instead of -t)
- -k, --blockcount #[KMG] number of blocks (packets) to transmit (instead of -t or -n)
- -l, --len #[KMG] 读写的缓存大小tcp默认128K,udp默认8K
- -P, --parallel # 线程数
- -R, --reverse 服务器发送,客户端接收
- -w, --window #[KMG] tcp 传输的包的大小,可测试大小不同的包
- -M, --set-mss #设置TCP的 MTU大小
- -N, --nodelay set TCP no delay, disabling Nagle's Algorithm
- -4, --version4 only use IPv4
- -6, --version6 only use IPv6
- -Z, --zerocopy 发送数据时使用零缓存策略
- -O, --omit N 忽略前n个数据包,连接刚建立时数据不稳定
- --get-server-output get results from server
- Server or Client:
iperf3用来测试网络吞吐量、延迟和丢包率和稳定性,测试稳定性时应该持续一段时间观察网络的吞吐量
- stress-ng 可以提供近200中测试,我们只使用其中的cpu测试
- --io 产生多个处理sync()函数的磁盘I/O进程,sync()用于将内存上的内容写到硬盘上
- eg:stress-ng --io 4
- -t secs 指定执行秒数
- -m | --vm forks 产生多个处理malloc()内存分配函数的进程
- --vm-bytes bytes指定内存的Bytes数,默认值是1(与--vm-hang配合使用)
- --vm-hang 指示每个消耗内存的进程在分配到内存后转入休眠状态,与正常的无限分配和释放内存的处理相反,这有利于模拟只有少量内存的机器;例如,下面命令运行时就会配到并一直持有256M内存,直到进程被终止;
- stress --vm 2 --vm-bytes 128M --vm-hang
- -d --hadd n 产生n个执行write和unlink函数的进程
- -c forks|--cpu forks 产生多个处理sqrt()函数的CPU进程