zoukankan      html  css  js  c++  java
  • Linux服务器基准测试方案

    1.测试目的

       测试云服务器的基准性能,包括CPU、内存、磁盘性能。

    2.测试环境

    2.1 软件配置

    表1-1

    系统类型

    系统版本

    数量(套)

    说明

    Linux

    CentOS 7.6

    1

    购买参数:

    通用计算增强型 | c6.large.2 | 2vCPUs | 4GB

     2.1 硬件配置

    表1-2

    服务器

    CPU

    内存

    磁盘

    网络(基准/最大)

    数量

    ecs-cts3

    2 Cores

    4GB

    40G

    1.2/4 Gbit/s

    1

    3.测试工具

    3.1 CPU、内存测试工具sysbench

     sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。

     #yum -y install sysbench

    sysbench命令的基本参数:

    #sysbench --help

    表2-1

    测试项[testname]

    备注

    fileio

    文件I/O测试

    cpu

    cpu性能测试

    memory

    内存速度测试

    threads

    线程子系统性能测试

    mutex

    互斥性能测试

    表2-2

    选项[options]

    备注

    --threads=N

    需要使用的线程数,默认为1

    --events=N

    事件总数限制,默认为0,无限制

    --time=N

    限制的总执行时间,默认为10s

    --forced-shutdown=STRING

    执行时间结束后等待几秒然后强制关闭,默认为off,禁用

    --thread-stack-size=SIZE

    每个线程的堆栈大小,默认为64K

    --rate=N

    平均处理速率,默认为0,无限制

    --report-interval=N

    指定间隔(秒)报告统计信息,默认为0,禁用

    --report-checkpoints=[LIST,...]

    转存完整统计信息并在指定时间点重置所有计数器。参数是一个逗号分隔的值列表,表示必须执行报表检查点时,从测试开始算起经过的时间(以秒为单位)。默认情况下,报表检查点处于关闭状态。

    --debug[=on|off]

    输出更多调试信息,默认关闭

    --validate[=on|off]

    尽可能执行验证检查,默认关闭

    --help[=on|off]

    输出帮助信息并退出,默认关闭

    --version[=on|off]

    输出版本信息并退出,默认关闭

    --config-file=FILENAME

    包含命令行选项的文件

    表2-3

    命令[command]

    备注

    prepare

    准备

    run

    运行

    cleanup

    清理

    help

    帮助

    sysbenh测试工具命令

    根据测试需要调整参数

    sysbench [testname] [options].. [command]

    3.2 磁盘测试工具fio

    FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证。

    安装fio测试工具

    #yum -y install fio

    fio命令常用参数:                                                                      表3-1

    参数

    说明

    -direct

    定义是否使用direct IO,可选值如下:

     

    值为0,表示使用buffered IO

     

    值为1,表示使用direct IO

    -iodepth

    定义测试时的IO队列深度,默认为1。

     

    此处定义的队列深度是指每个线程的队列深度,如果有多个线程测试,意味着每个线程都是此处定义的队列深度。fio总的IO并发数=iodepth * numjobs。

    -rw

    定义测试时的读写策略,可选值如下:

     

    随机读:randread

     

    随机写:randwrite

     

    顺序读:read

     

    顺序写:write

     

    混合随机读写:randrw0

    -ioengine

    定义fio如何下发IO请求,通常有同步IO和异步IO:

     

    同步IO一次只能发出一个IO请求,等待内核完成后才返回。这样对于单个线程IO队列深度总是小于1,但是可以透过多个线程并发执行来解决。通常会用16~32个线程同时工作把IO队列深度塞满。

     

    异步IO则通常使用libaio这样的方式一次提交一批IO 请求,然后等待一批的完成,减少交互的次数,会更有效率。

    -bs

    定义IO的块大小(block size),单位是k、K、m和M等,默认IO块大小为4 KB。

    -size

    定义测试IO操作的数据量,若未指定runtime这类参数,fio会将指定大小的数据量全部读/写完成,然后才停止测试。

     

    该参数的值,可以是带单位的数字,比如size=10G,表示读/写的数据量为10GB;也可是百分数,比如size=20%,表示读/写的数据量占该设备总文件的20%的空间。

    -numjobs

    定义测试的并发线程数。

    -runtime

    定义测试时间。

     

    如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/写完。

    -group_reporting

    定义测试结果显示模式,group_reporting 表示汇总每个进程的统计信息,而非以不同job汇总展示信息。

    -filename

    定义测试文件(设备)的名称。

     

    此处选择文件,则代表测试文件系统的性能。例如:-filename=/opt/fiotest/fiotest.txt

     

    此处选择设备名称,则代表测试裸盘的性能。例:-filename=/dev/vdb1 

     

    注意:

     

    如果在已经分区、并创建文件系统,且已写入数据的磁盘上进行性能测试,请注意filename选择指定文件,以避免覆盖文件系统和原有数据。

    -name

    定义测试任务名称。

    3.3 网络测试工具iperf

    iperf 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以报告带宽、延迟抖动和数据包丢失。

    iperf测试需要两台服务器,两个系统,因为一个系统必须充当服务端,另外一个系统充当客户端,客户端连接到需要测试速度的服务端。

    安装iperf测试工具

    #yum -y install iperf

    iperf命令的基本参数:

    表3-2

    命令行选项

    描述

    客户端与服务器共用选项

     

    -b, --bandwidth [kmgKMG | pps]

    发送的带宽,以bits/sec或pps为单位

    -e, --enhancedreports

    使用增强的报告提供更多的tcp/udp和流量信息

    -f, --format [kmgKMG]

    报告采用的单位:Kbits、Mbits、KBytes、Mbytes

    -i, --interval

    带宽报告产生的周期,单位为秒

    -l, --len [kmKM]

    要读或写的缓冲区长度(字节)(默认值:TCP=128K,v4-UDP=1470,v6-UDP=1450)

    -m, --print_mss

    打印TCP最大段大小(MTU-TCP/IP报头)

    -o, --output <filename>

    将报告或错误消息输出到此指定文件

    -p, --port

    要侦听/连接到的服务器端口

    -u, --udp

    使用UDP而不是TCP

    -w, --window [KM]

    TCP窗口大小(套接字缓冲区大小)

    -z, --realtime

    实时调度程序

    -B, --bind <host>[:<port>][%<dev>]

    监听的主机,IP(包括多播地址)和可选端口和设备

    -C, --compatibility

    兼容旧版本,不发送额外的msg

    -M, --mss

    设置TCP最大段大小(MTU-40字节)

    -N, --nodelay

    设置TCP无延迟,禁用Nagle算法

    -S, --tos

    设置套接字的IP(字节)字段

    服务器端专用选项

     

    -s, --server

    以服务器模式运行

    -t, --time

    列出新连接和接收流量的时间(秒)(默认值未设置)

    -B, --bind <ip>[%<dev>]

    绑定到多播地址和可选设备

    -H, --ssm-host <ip>

    设置ssm源,与-B一起用于(S,G)

    -U, --single_udp

    以单线程udp模式运行

    -D, --daemon

    作为后台程序运行服务器

    -V, --ipv6_domain

    通过将域和套接字设置为AF/INET6来启用ipv6接收(可以在IPv4和ipv6上接收)

    客户端专用选项

     

    -c, --client <host>

    以客户端模式运行,连接到<host>

    -d, --dualtest

    同时进行双向测试

    -n, --num

    要传输的字节数

    -r, --tradeoff

    单独进行双向测试

    -t, --time

    传输时间(秒)(默认为10秒)

    -B, --bind [<ip> | <ip:port>]

    绑定从其到源流量的ip(和可选端口)

    -F, --fileinput <name>

    输入要从文件传输的数据

    -I, --stdin

    输入从stdin传输的数据

    -L, --listenport

    要接收双向测试的端口

    -P, --parallel

    要运行的并行客户端线程数

    -R, --reverse

    反转测试(客户端接收,服务器发送

    -T, --ttl

    生存时间,用于多播(默认值1)

    -V, --ipv6_domain

    将域设置为ipv6(通过ipv6发送数据包)

    -X, --peer-detect

    执行服务器版本检测和版本交换

    -Z, --linux-congestion <algo>

    设置TCP拥塞控制算法(仅限linux)

    其它

     

    -x, --reportexclude [CDMSV]

    排除C(连接)D(数据)M(多播)S(设置)V(服务器)报告

    -y, --reportstyle C

    报告以逗号分隔值

    -h, --help

    打印此消息并退出

    -v, --version

    打印版本信息并退出

    iperf测试工具命令

    根据测试需要调整参数

    iperf [-s|-c host] [options]

    4.测试方法

    4.1 测试CPU性能

    使用命令sysbench cpu [options] run

    查看可用[options]参数  sysbench cpu help

    表4-1

    参数

    备注

    --cpu-max-prime=N

    产生质数的上限,默认值为10000

    4.2 测试内存性能

    使用命令sysbench memory [options] run

    查看可用[options]参数 sysbench memory help

    表4-2

    参数

    备注

    --memory-block-size=SIZE

    测试内存块大小,默认为1k

    --memory-total-size=SIZE

    要传输的数据的总大小,默认为100G

    --memory-scope=STRING

    内存访问作用域{global,local},默认为global

    --memory-hugetlb[=on|off]

    从HugeTLB池分配内存[on|off],默认为off

    --memory-oper=STRING

    内存操作的类型{read, write, none},默认为write

    --memory-access-mode=STRING

    内存访问模式{seq,rnd},默认为seq

    4.3 磁盘测试 

    测试随机写IOPS:

    #fio -direct=1 -iodepth=64 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600

      -group_reporting -filename=/dev/vdb -name=Rand_Write_IOPS_Test

    测试随机读IOPS:

    #fio -direct=1 -iodepth=64 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600

    -group_reporting -filename=/dev/vdb -name=Rand_Read_IOPS_Test

    测试写吞吐量:

    #fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1M -size=10G -numjobs=1 -runtime=600

    -group_reporting -filename=/dev/vdb -name=Write_BandWidth_Test

    测试读吞吐量:

    #fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1M -size=10G -numjobs=1 -runtime=600

    -group_reporting -filename=/dev/vdb -name=Read_BandWidth_Test

     4.4 网络测试

     tcp模式下测试带宽

    服务端运行iperf -s

    客户端运行iperf -c <服务端ip>

     

    udp模式下测试带宽,延时,丢包率

    服务端运行iperf -s –u

    客户端运行iperf -c <服务端ip> -b 1.2G/4G

    5.测试用例

    5.1 CPU性能测试

    测试用例1:CPU性能测试

    测试目的

    CPU在单核及多核运行情况下的运算速度

    前置条件

    客户端运行正常

    步骤

    1、 根据需求测试项,调整测试参数

    2、 单线程测试

    执行sysbench cpu --cpu-max-prime=20000 --threads=1 

    --time=60 run  //20000素数单线程60秒

    3、 多线程测试,根据CPU内核数修改,修改--threads =[1,2,4,8…]

    sysbench cpu --cpu-max-prime=20000 --threads=2 

    --time=60 run  //20000素数2线程60

    4、 记录测试结果

    参数化变量

    --threads:根据CPU内核数修改线程数,线程数小于等于内核数

    获取指标

    1、CPU speed

    5.2 内存测试

    测试用例2:内存测试

    测试目的

    不同内存大小情况下,连续读写或随机读写测试

    前置条件

    客户端运行正常

    步骤

    1、 根据需求测试项,调整测试参数

    2、 不同模式下执行内存的读写测试,修改--memory-access-mode参数,单线程、多线程都要测试,例如

    在内存中传输10G的数据,其中每个block 大小为4k,限制总执行时间为60秒

    ①  随机写入模式

    单线程执行

    sysbench memory --time=60 --threads=1 --memory-block-size=4k --memory-total-size=30G --memory-access

    -mode=rnd run

    多线程执行(线程由CPU内核决定,本案例为两核CPU,最大取值至2即可)

    sysbench memory --time=60 --threads=2 --memory-block-size=4k --memory-total-size=10G --memory-access-mode=rnd run  

    ②  顺序写入模式

    单线程

    sysbench memory --time=60 --threads=1 --memory-block-size=4k --memory-total-size=10G --memory-access-mode=seq run

    多线程

    sysbench memory --time=60 --threads=2 --memory-block-size=4k --memory-total-size=10G --memory-access-mode=seq run

    ③  随机读取模式

    单线程

    sysbench memory --time=60 --threads=1 --memory-block-size=4k --memory-total-size=10G --memory-access-mode=rnd --memory-oper=read run

    多线程

    sysbench memory --time=60 --threads=2 --memory-block-size=4k --memory-total-size=10G --memory-access-mode=rnd --memory-oper=read run

    ④  顺序读取模式

    单线程

    sysbench memory --time=60 --threads=1 --memory-block-size=4k --memory-total-size=10G --memory-access-mode=seq --memory-oper=read run

    多线程

    sysbench memory --time=60 --threads=2 --memory-block-size=4k --memory-total-size=10G --memory-access-mode=seq --memory-oper=read run

    3、记录测试结果

    参数化变量

    --threads:根据CPU内核数修改线程数,线程数小于等于内核数

    获取指标

    1、传输速度(MiB/sec)

     5.3 磁盘性能测试

    测试用例3:磁盘性能测试

    测试目的

    磁盘读写性能测试

    前置条件

    客户端运行正常

    当前数据盘大小50G

    步骤

    1、 根据需求测试项,调整测试参数

    测试随机写IOPS:fio -direct=1 -iodepth=64 -rw=randwrite -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/dev/vdb -name=rndwr_test

    测试随机读IOPS:fio -direct=1 -iodepth=64 -rw=randread -ioengine=libaio -bs=4k -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/dev/vdb -name=rndrd_test

    测试写吞吐量:fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1M -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/dev/vdb -name=seqwr_test

    测试读吞吐量:fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=1M -size=10G -numjobs=1 -runtime=600 -group_reporting -filename=/dev/vdb -name=seqrd_test

    2、 记录测试结果

    参数化变量

    -bs,调整测试文件块大小

    获取指标

    1、 IOPS   2、BW

     5.4 测试带宽

    测试用例4:TCP下测试带宽

    测试目的

    TCP下测试带宽

    前置条件

    1、服务器运行正常

    2、两个服务器互相通讯正常

    步骤

    1、 根据需求测试项,调整测试参数

    2、 服务端执行iperf -s -i 1  //作为测试服务端,每1秒发送一次报告

    客户端执行iperf -c <服务端IP> -t 60 -i 1  //作为客户端,向服务端传输数据60秒,每秒发送一次报告

    3、 记录测试结果

    获取指标

    1、 Bandwidth

    测试用例5:UDP下测试带宽,延迟抖动及数据丢包率

    测试目的

    UDP下测试带宽,延迟抖动及数据丢包率

    前置条件

    1、服务器运行正常

    2、两个服务器互相通讯正常

    步骤

    1、 根据需求测试项,调整测试参数

    2、 服务端执行iperf -s -u -i 1  //作为UDP测试服务端,每1秒发送一次报告

    客户端执行iperf -c <服务端IP> -u -t 60 -b 1.2G -i 1 //作为UDP测试客户端,设定带宽为当前购买服务器的基准带宽1.2G,向服务端传输数据60秒,每秒发送一次报告

    客户端执行iperf -c <服务端IP> -u -t 60 -b 4G -i 1 //作为UDP测试客户端,设定带宽为当前购买服务器的最大带宽4G,向服务端传输数据60秒,每秒发送一次报告

    3、 记录测试结果

    获取指标

    1、 Bandwidth    2、 Jitter   3、 Datagrams

     6.测试结果

     6.1 CPU性能测试

    线程数

    计算最大素数

    最大执行时间

    速度(每秒执行事件数)

    1

    20000

    60s

     

    2

    20000

    60s

     

    6.2 内存性能测试

    线程

    内存访问模式

    最大执行时间

    块大小

    数据大小

    速度(MiB/sec)

    1

    随机写入

    60s

    4k

    10G

     

    顺序写入

    60s

    4k

    10G

     

    随机读取

    60s

    4k

    10G

     

    顺序读取

    60s

    4k

    10G

     

    2

    随机写入

    60s

    4k

    10G

     

    顺序写入

    60s

    4k

    10G

     

    随机读取

    60s

    4k

    10G

     

    顺序读取

    60s

    4k

    10G

     

    6.3 磁盘性能测试

    测试项目

    块大小

    测试文件大小

    执行时间

    IOPS(读写操作速率)

    吞吐(读写速率)

    随机写入

    4k

    10G

     

     

     

     

    8k

    10G

     

     

     

     

    16k

    10G

     

     

     

     

    32k

    10G

     

     

     

     

    64k

    10G

     

     

     

     

    1M

    10G

     

     

     

    随机读取

    4k

    10G

     

     

     

     

    8k

    10G

     

     

     

     

    16k

    10G

     

       

     

    32k

    10G

     

       

     

    64k

    10G

     

       

     

    1M

    10G

     

       

    顺序写入

    4k

    10G

     

       

     

    8k

    10G

     

     

     

     

    16k

    10G

     

       

     

    32k

    10G

     

       

     

    64k

    10G

     

       

     

    1M

    10G

     

     

     

    顺序读取

    4k

    10G

     

       

     

    8k

    10G

     

       

     

    16k

    10G

     

     

     

     

    32k

    10G

     

       

     

    64k

    10G

     

       

     

    1M

    10G

     

       

     6.4 网络测试

    1)TCP参数记录

    测试时长(s)

    传输数据(GB)

    带宽(Gbits/sec)

     

       

     

    2) UDP参数记录

    测试条件

    测试时长(s)

    传输数据(GB)

    带宽(Gbits/sec)

    延迟抖动(ms)

    丢包率

    基准带宽

     

     

         

    最大带宽

     

     

     

       

    说明:截图部分省略。

     7.测试总结

     根据测试数据描述;

  • 相关阅读:
    BZOJ 1726 洛谷 2865 [USACO06NOV]路障Roadblocks【次短路】
    BZOJ 1699 [Usaco2007 Jan]Balanced Lineup排队
    洛谷 2777 [AHOI2016初中组]自行车比赛
    BZOJ 1832、1787 洛谷 4281 [AHOI2008]紧急集合
    BZOJ 4385 洛谷3594 POI2015 WIL-Wilcze doły
    【HDU 3037】Saving Beans(卢卡斯模板)
    【POJ 1061】青蛙的约会(EXGCD)
    【HIHOCODER 1469 】福字(DP)
    【BZOJ 1076】[SCOI2008]奖励关(期望)
    【HIHOCODER 1509 】 异或排序
  • 原文地址:https://www.cnblogs.com/llwxhn/p/12531458.html
Copyright © 2011-2022 走看看