linux性能测试

  • super_pi 是一个单线程浮点运算程序,借助libc的数学库,可以求解任意位数的圆周率值。我们关心其运算的总耗时,由于实现方法不同,不推荐不同工具的横向对比
    • super_pi 1048576 即测试cpu计算出1048576位圆周率的耗时
  • sysbench 是一个模块化的、跨平台、多线程基准测试工具。

    • sysbench [general-options]... --test= [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] 测试磁盘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
  • 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进程

你可能感兴趣的:(linux性能测试)