Sysbench 测试磁盘性能

2023年 7月 16日 103.4k 0

简介

硬盘作为电脑的一个主要部件,不仅肩负着记录一切数据信息的重要职责,而且它的性能对整个系统的性能有直接影响。由于磁存储介质的发展较一日千里的半导体技术落后,所以硬盘在整机系统中很多时候充当着一个 瓶颈 的角色。如果把一台整机比喻成一只水桶的话,硬盘就好比水桶中最低一侧的桶壁,水桶是否可以装更多的水就由这一侧桶壁的高度决定。由此,我们可见硬盘对整机系统性能的影响有多大。

既然明白了硬盘性能在整机系统中担当的重要角色,了解如何测试硬盘的性能相信是不少电脑用户所关心的问题。在测试硬盘之前,我们首先要了解一下影响硬盘性能的有关参数,只有这样我们才能在测试中做到有的放矢,更好地分析和利用测试结果,这也有助于我们提高在计算机上所允许的应用的性能。

磁盘性能测试所要关注的参数主要有以下几个:

  • 数据吞吐量(Throughput),指单位时间内可以成功传输的数据数量。对于大量顺序读写的应用,如 VOD(Video On Demand),则更关注吞吐量指标。连续数据的传输速度又是实际应用中磁盘性能的主要体现,反映了硬盘的数据交换能力,所以硬盘的数据吞吐量是硬盘测试的一个重要数据
  • IOPS 即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS 是指单位时间内系统能处理的 I/O 请求数量,一般以每秒处理的 I/O 请求数量为单位,I/O 请求通常为读或写数据操作请求。随机读写频繁的应用,如 OLTP(OnlineTransaction Processing),IOPS 是关键衡量指标。
  • 硬盘还有一个指标就是响应延时。响应延时实际上是由转速、缓存、单碟容量等等性能综合决定的一个参数,体现在用户的角度,就是一个总体的性能指标。目前主流硬盘的响应延时差别都不大,一般在9ms左右。
  • Sysbench介绍

    sysbench:是一款开源的多线程性能测试工具,可以执行 CPU/内存/线程/IO/数据库等方面的性能测试。本文将指导各位如何安装和配置性能测试工具sysbench来进行磁盘性能测试。

    Sysbench安装

    编译安装

    1、 从git下载软件到本地

     git clone https://github.com/akopytov/sysbench.git

    2、编译安装sysbench

    cd sysbench/
    ./autogen.sh 
    ./configure --without-mysql
    make && make install

    注意:若不添加额外参数 –without-mysql ,则会提示需要安装 mysql 相关库。

    Yum安装

    yum -y install sysbench

    使用sysbench对磁盘进行性能测试

    1、 准备IO测试文件:执行如下命令,生成16个文件,用于本次测试。

    sysbench --test=fileio --file-num=16 --file-total-size=2G prepare

    参数含义:
    –test=fileio  测试的名称叫做 fileio
    –file-num=16 文件的数量是 16 个
    –file-total-size=2G 文件的总体大小是 2GB
    说明:每个测试文件的大小是 130MB,总计花费 32 秒。
    查看测试文件:

    $ ll
    总用量 2097156
    drwxr-xr-x 13 root root      4096 8月  24 15:50 sysbench
    -rw-------  1 root root 134217728 8月  24 15:57 test_file.0
    -rw-------  1 root root 134217728 8月  24 15:57 test_file.1
    -rw-------  1 root root 134217728 8月  24 15:58 test_file.10
    -rw-------  1 root root 134217728 8月  24 15:58 test_file.11
    -rw-------  1 root root 134217728 8月  24 15:58 test_file.12
    -rw-------  1 root root 134217728 8月  24 15:58 test_file.13
    -rw-------  1 root root 134217728 8月  24 15:58 test_file.14
    -rw-------  1 root root 134217728 8月  24 15:58 test_file.15
    -rw-------  1 root root 134217728 8月  24 15:57 test_file.2
    -rw-------  1 root root 134217728 8月  24 15:57 test_file.3
    -rw-------  1 root root 134217728 8月  24 15:57 test_file.4
    -rw-------  1 root root 134217728 8月  24 15:57 test_file.5
    -rw-------  1 root root 134217728 8月  24 15:57 test_file.6
    -rw-------  1 root root 134217728 8月  24 15:58 test_file.7
    -rw-------  1 root root 134217728 8月  24 15:58 test_file.8
    -rw-------  1 root root 134217728 8月  24 15:58 test_file.9

    2、测试多线程下小IO的随机只读性能

    $ sysbench --test=fileio --file-num=16 --file-total-size=2G --file-test-mode=rndrd  --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
    WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
    sysbench 1.0.6 (using system LuaJIT 2.0.4)
    
    Running the test with following options:
    Number of threads: 1
    Initializing random number generator from current time
    
    
    Extra file open flags: 3
    16 files, 128MiB each
    2GiB total file size
    Block size 16KiB
    Number of IO requests: 0
    Read/Write ratio for combined random IO test: 1.50
    Calling fsync() at the end of test, Enabled.
    Using synchronous I/O mode
    Doing random read test
    Initializing worker threads...
    
    Threads started!
    
    
    File operations:
        reads/s:                      1487.34
        writes/s:                     0.00
        fsyncs/s:                     0.00
    
    Throughput:
        read, MiB/s:                  23.24
        written, MiB/s:               0.00
    
    General statistics:
        total time:                          10.0002s
        total number of events:              14877
    
    Latency (ms):
             min:                                  0.15
             avg:                                  0.67
             max:                                168.34
             95th percentile:                      0.84
             sum:                               9978.66
    
    Threads fairness:
        events (avg/stddev):           14877.0000/0.00
        execution time (avg/stddev):   9.9787/0.00

    参数含义:
    –test=fileio 测试的名称叫做 fileio
    –file-num=16  文件的数量是 16 个
    –file-total-size=2G  文件的总体大小是 2GB
    –file-test-mode=rndrd  测试模式是随机读取
    –file-extra-flags=direct  使用额外的标志来打开文件{sync,dsync,direct}
    –file-fsync-freq=0  执行 fsync() 的频率
    –file-block-size=16384 测试时文件块的大小位 16384 (16K)

    测试结果:
    随机读取的数据吞吐量:23.24 MB/s
    随机读的IOPS: 1487.34
    平均延迟:0.67毫秒

    3、测试多线程下小IO的随机写入性能

    $ sysbench --test=fileio --file-num=16 --file-total-size=2G --file-test-mode=rndwr --max-time=180  --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
    WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
    WARNING: --max-time is deprecated, use --time instead
    sysbench 1.0.6 (using system LuaJIT 2.0.4)
    
    Running the test with following options:
    Number of threads: 1
    Initializing random number generator from current time
    
    
    Extra file open flags: 3
    16 files, 128MiB each
    2GiB total file size
    Block size 16KiB
    Number of IO requests: 0
    Read/Write ratio for combined random IO test: 1.50
    Calling fsync() at the end of test, Enabled.
    Using synchronous I/O mode
    Doing random write test
    Initializing worker threads...
    
    Threads started!
    
    
    File operations:
        reads/s:                      0.00
        writes/s:                     1536.37
        fsyncs/s:                     0.00
    
    Throughput:
        read, MiB/s:                  0.00
        written, MiB/s:               24.01
    
    General statistics:
        total time:                          180.0041s
        total number of events:              276556
    
    Latency (ms):
             min:                                  0.22
             avg:                                  0.65
             max:                                279.43
             95th percentile:                      1.01
             sum:                             179649.14
    
    Threads fairness:
        events (avg/stddev):           276556.0000/0.00
        execution time (avg/stddev):   179.6491/0.00

    参数含义:
    –file-test-mode=rndwr  测试模式是随机写

    测试结果:
    随机写入的数据吞吐量:24.01 MB/s
    随机写的IOPS: 1536.37
    平均延迟:0.65毫秒

    4、测试多线程下小IO的随机读写性能

    $ sysbench --test=fileio --file-num=16 --file-total-size=2G --file-test-mode=rndrw --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
    WARNING: the --test option is deprecated. You can pass a script name or path on the command line without any options.
    sysbench 1.0.6 (using system LuaJIT 2.0.4)
    
    Running the test with following options:
    Number of threads: 1
    Initializing random number generator from current time
    
    
    Extra file open flags: 3
    16 files, 128MiB each
    2GiB total file size
    Block size 16KiB
    Number of IO requests: 0
    Read/Write ratio for combined random IO test: 1.50
    Calling fsync() at the end of test, Enabled.
    Using synchronous I/O mode
    Doing random r/w test
    Initializing worker threads...
    
    Threads started!
    
    
    File operations:
        reads/s:                      1516.94
        writes/s:                     1011.33
        fsyncs/s:                     0.00
    
    Throughput:
        read, MiB/s:                  23.70
        written, MiB/s:               15.80
    
    General statistics:
        total time:                          10.0073s
        total number of events:              25307
    
    Latency (ms):
             min:                                  0.12
             avg:                                  0.39
             max:                                 66.01
             95th percentile:                      0.77
             sum:                               9981.29
    
    Threads fairness:
        events (avg/stddev):           25307.0000/0.00
        execution time (avg/stddev):   9.9813/0.00

    参数含义:
    –file-test-mode=rndrw    测试模式是随机读写
    随机读取的数据吞吐量:23.70 MB/s
    随机写入的数据吞吐量:15.80 MB/s
    随机读IOPS:1516.94
    随机写IOPS:1011.33
    平均延迟:0.39毫秒

    至此,完成本次对磁盘的全部性能测试。

    附录:

    Sysbench 的文件测试模式,seqwr 顺序写,seqrew r顺序读写,seqrd 顺序读,rndrd 随机读,rndwr 随机写,rndrw 随机读写。

    –file-rw-ratio=4 读写比例调整,为4表示读写比例4:1

     

     

     

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论