硬盘

使用fio命令来进行硬盘测试。

安装:sudo apt install fio

基本参数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
filename=/dev/emcpowerb 支持文件系统或者裸设备,-filename=/dev/sda2或-filename=/dev/sdb
direct=1 测试过程绕过机器自带的buffer,使测试结果更真实
rw=randwread 测试随机读的I/O
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机混合写和读的I/O
rw=read 测试顺序读的I/O
rw=write 测试顺序写的I/O
rw=rw 测试顺序混合写和读的I/O
bs=4k 单次io的块文件大小为4k
bsrange=512-2048 同上,提定数据块的大小范围
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试
numjobs=30 本次的测试线程为30
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止
time_based: 如果在runtime指定的时间还没到时文件就被读写完成,将继续重复直到runtime时间结束。
ioengine=psync io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息
此外
lockmem=1g 只使用1g内存进行测试
zero_buffers 用0初始化系统buffer
nrfiles=8 每个进程生成文件的数量

随机读

向磁盘写一个2G文件,10线程,随机读1分钟

1
fio -filename=/tmp/test_randread -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest

随机写

1
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest

顺序读

1
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest

顺序写

1
fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -bs=16k -size=2G -numjobs=10 -runtime=60 -group_reporting -name=mytest

网络

测试局域网内设备之间的网速, 使用iperf3 进行测试。

安装:

  • ubuntu: apt install iperf3
  • windows: 去官网下载文件直接解压, 然后使用cmd运行即可
  1. 在局域网内某台服务器上(假设该台机器IP为10.0.0.239)启动iperf3

    1
    iperf3 -s
  2. 在局域网内的另一台机器上运行命令:

    1
    iperf3 -c 10.0.0.239

    即可得到网速输出结果

CPU

使用stress来进行。

安装: apt install stress

主要参数:

  • -c, –cpu N 产生 N 个进程,每个进程都反复不停的计算随机数的平方根
  • -i, –io N 产生 N 个进程,每个进程反复调用 sync() 将内存上的内容写到硬盘上
  • -m, –vm N 产生 N 个进程,每个进程不断分配和释放内存
  • –vm-bytes B 指定分配内存的大小
  • –vm-stride B 不断的给部分内存赋值,让 COW(Copy On Write)发生
  • –vm-hang N 指示每个消耗内存的进程在分配到内存后转入睡眠状态 N 秒,然后释放内存,一直重复执行这个过程
  • –vm-keep 一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存)
  • -d, –hadd N 产生 N 个不断执行 write 和 unlink 函数的进程(创建文件,写入内容,删除文件)
  • –hadd-bytes B 指定文件大小
  • -t, –timeout N 在 N 秒后结束程序
  • –backoff N 等待N微妙后开始运行
  • -q, –quiet 程序在运行的过程中不输出信息
  • -n, –dry-run 输出程序会做什么而并不实际执行相关的操作
  • –version 显示版本号
  • -v, –verbose 显示详细的信息

压满CPU命令,其中4是CPU核心数。通过调用 sqrt 函数计算由 rand 函数产生的随机数的平方根实现。

1
stress -c 4

在压测过程中每隔1s实时显示主频:

1
watch -n1 "cat /proc/cpuinfo | grep \"^[c]pu MHz\""