IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    测试存储性能

    ysicing (i@ysicing.me)发表于 2024-03-16 12:25:34
    love 0

    本文主要是记录一下最近的工作: 测试存储性能, 介绍如何在Linux环境下使用FIO(Flexible I/O Tester)工具对存储设备进行性能测试。

    提醒

    不同工具测试的硬盘基准性能会有差异,如dd、sysbench、iometer等工具可能会受到测试参数配置和文件系统影响,难以反映真实性能。本示例的性能参数,均为Linux系统下采用FIO工具的测试结果。请在测试前提前创建快照做好数据备份,建议只在全新环境下进行测试,避免造成数据丢失

    准备工作

    1. 创建了待测试的存储,并将相关测试存储挂载到服务器上
    2. 查询块存储设备是否已经4 KiB对齐, 返回的结果中,Start值能被8整除即是4 KiB对齐。否则,请完成4 KiB对齐后再继续性能测试.(仅限块存储)
    fdisk -lu
    # 结果
    Device     Boot Start       End   Sectors Size Id Type
    /dev/sda1  *     2048 125730782 125728735  60G 83 Linux
    
    1. 安装libaio和FIO
    # centos
    yum install libaio -y
    yum install libaio-devel -y
    yum install fio -y
    # debian
    apt install libaio-dev fio -y
    

    性能测试命令

    示例命令中的参数取值仅供参考,请您根据实际情况替换。例如,如果需要测试的存储为/dev/sdb,则将以下示例命令中的/dev/your_device替换为/dev/sdb,但是这种比较有风险,测试裸盘可以获得真实的块存储盘性能,但会破坏文件系统结构,请在测试前提前创建快照做好数据备份。也可以选择将/dev/sdb挂载到某个目录下,如/opt/quickon/storage/longhorn, 将示例命令中的/dev/your_device替换为/opt/quickon/storage/longhorn/随机文件名

    测试硬盘的4k随机写IOPS

    fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Write_Testing
    

    测试硬盘的4k随机读IOPS

    fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Read_Testing
    

    测试硬盘的4k顺序读IOPS

    fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Read_Testing
    

    测试硬盘的4k顺序写IOPS

    fio -direct=1 -iodepth=128 -rw=write -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Write_Testing
    

    测试硬盘的4k混合随机读写IOPS

    fio -direct=1 -iodepth=128 -rw=randrw -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Rand_Read_Write_Testing
    

    下面的仅列举一个,其他修改相关参数就可以

    测试硬盘的顺序写吞吐量

    fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=1024k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/your_device -name=Write_PPS_Testing
    

    测试硬盘的随机写时延

    fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/dev/your_device -name=Rand_Write_Latency_Testing
    

    FIO参数说明

    测试命令中有关FIO各参数含义的说明如下表所示。

    参数 说明
    direct 表示是否使用direct I/O。默认值:1。* 值为1:表示使用direct I/O,忽略I/O缓存,数据直写。* 值为0:表示不使用direct I/O。
    iodepth 表示测试时的IO队列深度。例如-iodepth=128表示FIO控制请求中的I/O最大个数为128。
    rw 表示测试时的读写策略。您可以设置为:randwrite:随机写。 randread:随机读。* read:顺序读。* write:顺序写。* randrw:混合随机读写。
    ioengine 表示测试时FIO选择哪种I/O引擎,通常选择libaio,更符合日常应用模式,更多的选择请查阅FIO官方文档。
    bs 表示I/O单元的块大小(block size)。默认值:4 KiB。读取和写入的值可以以read、write格式单独指定,其中任何一个都可以为空以将该值保留为其默认值。
    size 表示测试文件大小。FIO会将指定的文件大小全部读/写完成,然后才停止测试,除非受到其他选项(例如运行时)的限制。如果未指定该参数,FIO将使用给定文件或设备的完整大小。也可以将大小作为1到100之间的百分比给出。例如指定size=20%,FIO将使用给定文件或设备完整大小的20%空间。
    numjobs 表示测试的并发线程数。默认值:1。
    runtime 表示测试时间,即FIO运行时长。如果未指定该参数,则FIO会持续将上述size指定大小的文件,以每次bs值为块大小读/写完。
    group_reporting 表示测试结果显示模式。如果指定该参数,测试结果会汇总每个进程的统计信息,而不是以不同任务来统计信息。
    filename 表示待测试的对象路径,路径可以是云盘设备名称或者一个文件地址。本文中的FIO测试全部是以整盘为测试对象,不含文件系统,即裸盘测试。同时为了避免误测试到其他盘导致数据被破坏,本示例地址为**/dev/your_device**,请您正确替换。
    name 表示测试任务名称,可以随意设定。例如本示例的Rand_Write_Testing。

    有关各参数的更多说明,请参见FIO MAN手册



沪ICP备19023445号-2号
友情链接