服务器性能测试 fio、sysbench、iperf3
目录
- 一、磁盘性能测试
- 安装fio磁盘性能测试工具
- 测试内容为顺序读、随机读、顺序写、随机写、随机读写
- 结果分析
- 二、CPU性能测试
- 安装sysbench性能测试工具
- 结果分析
- 三、内存性能测试
- 结果分析
- 四、网络性能测试
- 测试iperf3工具
- 测试结果分析
- 1.测试TCP吞吐量
- 2 . 测试UDP丢包和延迟
此次测试服务器为虚拟机(192.168.16.70),物理机(192.168.16.25)
测试内容包括:磁盘性能测试、CPU性能测试、内存性能测试、网络性能测试
一、磁盘性能测试
安装fio磁盘性能测试工具
yum -y install epel-release yum install -y fio yum install libaio-devel
测试内容为顺序读、随机读、顺序写、随机写、随机读写
fio -filename=/data/fiotest -direct=1 -iodepth 1 -thread -rw=read -ioengine=libaio -bs=16k -size=50G -numjobs=30 -runtime=100 -group_reporting -name=readtest fio -filename=/data/fiotest -direct=1 -iodepth 1 -thread -rw=randread -ioengine=libaio -bs=16k -size=50G -numjobs=30 -runtime=100 -group_reporting -name=randreadtest fio -filename=/data/fiotest -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=16k -size=50G -numjobs=30 -runtime=100 -group_reporting -name=writetest fio -filename=/data/fiotest -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=16k -size=50G -numjobs=30 -runtime=100 -group_reporting -name=randwritetest fio -filename=/data/fiotest -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=libaio -bs=16k -size=50G -numjobs=30 -runtime=100 -group_reporting -name=randrwtest
参数定义
filename=/tmp/fiotest 支持文件系统或者裸设备,-filename=/dev/sda2或-filename=/dev/sdb direct=1 测试过程绕过机器自带的buffer,使测试结果更真实 -thread:使用pthread_create创建线程,另一种是fork创建进程。进程的开销比线程要大,一般都采用thread测试。 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=50g 本次的测试文件大小为50g,以每次16k的io进行测试 numjobs=30 本次的测试线程为30 runtime=100 测试时间为100秒,如果不写则一直将50g文件分16k每次写完为止 ioengine=libaio io引擎使用libaio方式 # rwmixwrite=30 在混合读写的模式下,写占30% group_reporting 关于显示结果的,汇总每个进程的信息 lockmem=1g 只使用1g内存进行测试 zero_buffers 用0初始化系统 buffer nrfiles=8 每个进程生成文件的数量
结果分析
randreadtest: (g=0): rw=randread, bs=(R) 16.0KiB-16.0KiB, (W) 16.0KiB-16.0KiB, (T) 16.0KiB-16.0KiB, ioengine=libaio, iodepth=1 ... fio-3.7 Starting 30 threads randreadtest: (groupid=0, jobs=30): err= 0: pid=70058: Mon Feb 13 14:03:04 2023 read: IOPS=394, BW=6304KiB/s (6455kB/s)(1848MiB/300101msec) slat (usec): min=5, max=2693, avg=34.48, stdev=14.56 clat (usec): min=131, max=1014.7k, avg=76084.14, stdev=80707.24 lat (usec): min=165, max=1014.7k, avg=76119.37, stdev=80707.24 clat percentiles (msec): | 1.00th=[ 4], 5.00th=[ 6], 10.00th=[ 9], 20.00th=[ 16], | 30.00th=[ 25], 40.00th=[ 35], 50.00th=[ 48], 60.00th=[ 66], | 70.00th=[ 90], 80.00th=[ 124], 90.00th=[ 182], 95.00th=[ 241], | 99.00th=[ 372], 99.50th=[ 426], 99.90th=[ 567], 99.95th=[ 634], | 99.99th=[ 802] bw ( KiB/s): min= 31, max= 640, per=3.34%, avg=210.53, stdev=86.17, samples=17962 iops : min= 1, max= 40, avg=13.10, stdev= 5.39, samples=17962 lat (usec) : 250=0.01%, 500=0.02%, 750=0.01% lat (msec) : 2=0.05%, 4=1.56%, 10=9.94%, 20=13.73%, 50=25.94% lat (msec) : 100=22.34%, 250=21.98%, 500=4.22%, 750=0.19%, 1000=0.01% cpu : usr=0.02%, sys=0.07%, ctx=118608, majf=0, minf=3452 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued rwts: total=118242,0,0,0 short=0,0,0,0 dropped=0,0,0,0 latency : target=0, window=0, percentile=100.00%, depth=1 Run status group 0 (all jobs): READ: bw=6304KiB/s (6455kB/s), 6304KiB/s-6304KiB/s (6455kB/s-6455kB/s), io=1848MiB (1937MB), run=300101-300101msec Disk stats (read/write): sda: ios=118184/928, merge=0/2224, ticks=8989961/890698, in_queue=9821141, util=100.00%
指标主要看每秒 I/O 数(iops) 和 硬盘传输数据流的速度(BW)
二、CPU性能测试
安装sysbench性能测试工具
yum -y install epel-release yum -y install sysbench
结果分析
pro70
sysbench cpu --cpu-max-prime=20000 --threads=8 --time=30 run sysbench 1.0.17 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 8 Initializing random number generator from current time Prime numbers limit: 20000 Initializing worker threads... Threads started! CPU speed: events per second: 2787.23 General statistics: total time: 30.0028s total number of events: 83630 Latency (ms): min: 2.70 avg: 2.87 max: 19.43 95th percentile: 3.36 sum: 239795.21 Threads fairness: events (avg/stddev): 10453.7500/47.54 execution time (avg/stddev): 29.9744/0.01 Prime numbers limit: 20000,每个线程产生的素数上限均为2000 events per second: 2787.23,所有线程每秒完成了2787.23次event total time: 30.0028s,共耗时30秒 total number of events: 83630,30秒内所有线程一共完成了83630次event min: 2.70,完成1次event的最少耗时2.70秒 avg: 2.87,所有event的平均耗时2.87毫秒 max: 19.43,完成1次event的最多耗时19.43毫秒 95th percentile: 3.36, 95%次event在3.36秒毫秒内完成 sum: 239795.21,每个线程耗时30秒,8个线程叠加耗时就是240秒 events (avg/stddev): 10453.7500/47.54 // 平均每个线程完成10453次event,标准差为47 execution time (avg/stddev): 29.9744/0.01 // 每个线程平均耗时30秒,标准差为0
pro25
sysbench cpu --cpu-max-prime=20000 --threads=8 --time=30 run sysbench 1.0.17 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 8 Initializing random number generator from current time Prime numbers limit: 20000 Initializing worker threads... Threads started! CPU speed: events per second: 3799.96 General statistics: total time: 30.0027s total number of events: 114027 Latency (ms): min: 2.03 avg: 2.10 max: 7.76 95th percentile: 2.39 sum: 239966.24 Threads fairness: events (avg/stddev): 14253.3750/22.81 execution time (avg/stddev): 29.9958/0.00 Prime numbers limit: 20000,每个线程产生的素数上限均为2000 events per second: 3799.96 ,所有线程每秒完成了3799.96次event total time: 30.0027s,共耗时30秒 total number of events: 114027,30秒内所有线程一共完成了114027次event min: 2.03,完成1次event的最少耗时2.03秒 avg: 2.10,所有event的平均耗时2.10毫秒 max: 7.76,完成1次event的最多耗时7.76毫秒 95th percentile: 2.39, 95%次event在2.39秒毫秒内完成 sum: 239966.24,每个线程耗时30秒,8个线程叠加耗时就是240秒 events (avg/stddev): 14253.3750/22.81 // 平均每个线程完成14253.3750/22.81次event,标准差为23 execution time (avg/stddev): 29.9958/0.00 // 每个线程平均耗时30秒,标准差为0
三、内存性能测试
结果分析
pro70
sysbench memory --threads=12 --memory-block-size=8K --memory-total-size=100G --memory-access-mode=seq run sysbench 1.0.17 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 12 Initializing random number generator from current time Running memory speed test with the following options: block size: 8KiB total size: 102400MiB operation: write scope: global Initializing worker threads... Threads started! Total operations: 10112320 (1011060.89 per second) 79002.50 MiB transferred (7898.91 MiB/sec) General statistics: total time: 10.0001s total number of events: 10112320 Latency (ms): min: 0.00 avg: 0.01 max: 28.03 95th percentile: 0.01 sum: 116284.49 Threads fairness: events (avg/stddev): 842693.3333/45270.47 execution time (avg/stddev): 9.6904/0.04 total number of events: 13107200 读/写一个内存块的events数 min: 0.00 最小耗时 这里等于0是因为内存块太小,返回的结果数值精度不够 sum: 62961.90 所有线程总耗时62962ms events (avg/stddev): 1638400.0000/0.00 平均每线程完成events数1638400/标准差0 execution time (avg/stddev): 7.8702/1.15 平均每线程执行时间8s 标准差1s
pro25
sysbench memory --threads=12 --memory-block-size=8K --memory-total-size=100G --memory-access-mode=seq run sysbench 1.0.17 (using system LuaJIT 2.0.4) Running the test with following options: Number of threads: 12 Initializing random number generator from current time Running memory speed test with the following options: block size: 8KiB total size: 102400MiB operation: write scope: global Initializing worker threads... Threads started! Total operations: 7038742 (703511.93 per second) 54990.17 MiB transferred (5496.19 MiB/sec) General statistics: total time: 10.0002s total number of events: 7038742 Latency (ms): min: 0.00 avg: 0.02 max: 0.49 95th percentile: 0.02 sum: 118420.01 Threads fairness: events (avg/stddev): 586561.8333/6249.45 execution time (avg/stddev): 9.8683/0.00 total number of events: 7038742 读/写一个内存块的events数 min: 0.00 最小耗时 这里等于0是因为内存块太小,返回的结果数值精度不够 sum: 118420.01 所有线程总耗时118420ms events (avg/stddev): 586561.8333/6249.45 平均每线程完成events数586562/标准差6249 execution time (avg/stddev): 9.8683/0.00 平均每线程执行时间10s 标准差0s
四、网络性能测试
测试iperf3工具
yum install -y sysstat wget tar automake make gcc wget https://downloads.es.net/pub/iperf/iperf-3.9.tar.gz tar -zxvf iperf-3.9.tar.gz cd iperf-3.9 ./configure && make && make install
测试结果分析
要使用iperf,首先要启用一个服务端,这里指定服务端的IP地址为pro70,在此服务器上运行“iperf3 -s -i 2”即可开启iperf的服务器模式。在默认情况下,iperf3将在服务端打开一个5201监听端口,此时就可以在pro25服务器作为客户端执行iperf功能测试了。
pro70
[root@pro70 ~]# iperf3 -s -i 2 ----------------------------------------------------------- Server listening on 5201 -----------------------------------------------------------
1.测试TCP吞吐量
pro25
[root@pro25 ~]# iperf3 -c 192.168.16.70 -F /data/fiotest -i 5 -t 180 Connecting to host 192.168.16.70, port 5201 [ 5] local 192.168.16.25 port 51856 connected to 192.168.16.70 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-5.00 sec 4.76 GBytes 8.17 Gbits/sec 670 1.18 MBytes [ 5] 5.00-10.00 sec 4.80 GBytes 8.25 Gbits/sec 237 854 KBytes [ 5] 10.00-15.00 sec 4.78 GBytes 8.21 Gbits/sec 1172 604 KBytes [ 5] 15.00-20.01 sec 2.21 GBytes 3.79 Gbits/sec 28 1014 KBytes [ 5] 20.01-25.00 sec 1.10 GBytes 1.90 Gbits/sec 42 788 KBytes [ 5] 25.00-30.00 sec 1.06 GBytes 1.83 Gbits/sec 71 274 KBytes [ 5] 30.00-35.00 sec 1.08 GBytes 1.85 Gbits/sec 32 389 KBytes [ 5] 35.00-40.00 sec 1.09 GBytes 1.86 Gbits/sec 20 365 KBytes [ 5] 40.00-45.00 sec 1.10 GBytes 1.88 Gbits/sec 98 304 KBytes [ 5] 45.00-50.00 sec 1.08 GBytes 1.85 Gbits/sec 22 393 KBytes [ 5] 50.00-55.00 sec 1.10 GBytes 1.88 Gbits/sec 1 406 KBytes [ 5] 55.00-60.00 sec 1.06 GBytes 1.82 Gbits/sec 43 337 KBytes [ 5] 60.00-65.00 sec 1.10 GBytes 1.88 Gbits/sec 0 397 KBytes [ 5] 65.00-70.00 sec 1.09 GBytes 1.88 Gbits/sec 0 403 KBytes [ 5] 70.00-75.00 sec 1.10 GBytes 1.89 Gbits/sec 0 419 KBytes [ 5] 75.00-80.00 sec 1.07 GBytes 1.84 Gbits/sec 0 427 KBytes [ 5] 80.00-85.00 sec 1.09 GBytes 1.88 Gbits/sec 0 434 KBytes [ 5] 85.00-90.00 sec 1.09 GBytes 1.88 Gbits/sec 0 443 KBytes [ 5] 90.00-95.00 sec 1.09 GBytes 1.87 Gbits/sec 0 448 KBytes [ 5] 95.00-100.02 sec 1.06 GBytes 1.81 Gbits/sec 0 457 KBytes [ 5] 100.02-105.00 sec 1.09 GBytes 1.88 Gbits/sec 0 465 KBytes [ 5] 105.00-110.00 sec 1.06 GBytes 1.82 Gbits/sec 0 475 KBytes [ 5] 110.00-115.00 sec 1.09 GBytes 1.87 Gbits/sec 0 496 KBytes [ 5] 115.00-120.01 sec 1.09 GBytes 1.88 Gbits/sec 0 663 KBytes [ 5] 120.01-125.00 sec 1.09 GBytes 1.88 Gbits/sec 0 663 KBytes [ 5] 125.00-130.00 sec 1.09 GBytes 1.87 Gbits/sec 0 1003 KBytes [ 5] 130.00-135.00 sec 1.06 GBytes 1.82 Gbits/sec 0 1003 KBytes [ 5] 135.00-140.00 sec 1.08 GBytes 1.86 Gbits/sec 0 1003 KBytes [ 5] 140.00-145.00 sec 1.10 GBytes 1.89 Gbits/sec 0 1003 KBytes [ 5] 145.00-150.00 sec 1.09 GBytes 1.87 Gbits/sec 0 1.42 MBytes [ 5] 150.00-155.00 sec 1.09 GBytes 1.87 Gbits/sec 0 1.42 MBytes [ 5] 155.00-160.00 sec 1.09 GBytes 1.88 Gbits/sec 0 1.42 MBytes [ 5] 160.00-165.00 sec 1.09 GBytes 1.87 Gbits/sec 0 1.42 MBytes [ 5] 165.00-170.00 sec 1.04 GBytes 1.78 Gbits/sec 33 1.01 MBytes [ 5] 170.00-174.36 sec 982 MBytes 1.89 Gbits/sec 0 1.01 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-174.36 sec 50.0 GBytes 2.46 Gbits/sec 2469 sender Sent 50.0 GByte / 50.0 GByte (100%) of /data/fiotest [ 5] 0.00-174.36 sec 50.0 GBytes 2.46 Gbits/sec receiver iperf Done.
在这此测试中 我们通过“-F”参数指定了一个50G的fiotest文件作为iperf要传输的数据,需要同时指定一个“-t”参数来设置要测试传输的时间,这个时间尽量设置长一些,因为在默认传输时间10秒内,这个文件可能还没有传完。
通过结果我们可以看到传输速率平均在2.46 Gbits/sec
2 . 测试UDP丢包和延迟
iperf也可以用于UDP数据包吞吐量、丢包率和延迟指标,但是由于UDP协议是一个非面向连接的轻量级传输协议,并且不提供可靠的数据传输服务,因此对UDP应用的关注点不是传输数据有多快,而是它的丢包率和延时指标。通过iperf的“-u”参数即可测试UDP应用的传输性能
pro70
[root@pro25 ~]# iperf3 -c 192.168.16.70 -u -b 1G -f M -i 3 Connecting to host 192.168.16.70, port 5201 [ 5] local 192.168.16.25 port 47184 connected to 192.168.16.70 port 5201 [ ID] Interval Transfer Bitrate Total Datagrams [ 5] 0.00-3.00 sec 358 MBytes 119 MBytes/sec 258918 [ 5] 3.00-6.00 sec 358 MBytes 119 MBytes/sec 258955 [ 5] 6.00-9.00 sec 356 MBytes 119 MBytes/sec 257490 [ 5] 9.00-10.00 sec 121 MBytes 121 MBytes/sec 87860 - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Jitter Lost/Total Datagrams [ 5] 0.00-10.00 sec 1.16 GBytes 119 MBytes/sec 0.000 ms 0/863223 (0%) sender [ 5] 0.00-10.00 sec 1.16 GBytes 118 MBytes/sec 0.008 ms 5513/863223 (0.64%) receiver iperf Done.
此次测试使用iperf3传输1DB的UDP数据包的输出结果
重点关注虚线下的一段内容,在这段输出中,“Jitter”列表示抖动时间,或者称为传输延迟,“Lost/Total”列表示丢失的数据报和总的数据报数量,后面的0%是平均丢包的比率。
这个输出结果过于简单,要了解更详细的UDP丢包和延时信息,可以在iperf服务端查看,因为在客户端执行传输测试的同时,服务端也会同时显示传输状态