怎样测试磁盘的性能 本节主要介绍怎样测试磁盘的性能问题 操作须知 测试性能时,若分区的初始磁柱编号是非4KB对齐,则对性能影响较大,请先确保分区的初始磁柱编号已经4KB对齐,再开始测试。 注意 测试共享云硬盘性能时,必须满足以下要求: 共享云硬盘必须同时挂载至多台云主机(弹性云主机或者物理机)。 当共享云硬盘挂载至多台弹性云主机时,这些弹性云主机必须位于同一个策略为“反亲和性”的云主机组内。 如果弹性云主机不满足反亲和性,则共享云硬盘性能无法达到最优。 LINUX CentOS 6.5等较老版本的操作系统用fdisk创建分区时,默认为非4KB对齐选择初始磁柱编号,对性能有较大的影响,建议针对该类操作系统,在创建分区时4KB对齐选取初始磁柱编号。 本文以“CentOS 7.2 64位”操作系统为例,不同操作系统的格式化操作可能不同,本文仅供参考,具体操作步骤和差异请参考对应操作系统的产品文档。 测试性能前请先安装fio性能测试工具。 1、登录云主机并切换为root用户。 2、进行性能测试之前,请执行以下步骤,确认磁盘分区的初始磁柱编号是否已经4KB对齐。 fdisk lu 回显类似如下信息: plaintext [root@ecscentos sdc] fdisk lu Disk /dev/xvda: 10.7 GB, 10737418240 bytes, 20971520 sectors Units sectors of 1 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x7db77aa5 Device Boot Start End Blocks Id System /dev/xvda1 2048 20968919 10483436 83 Linux Disk /dev/xvdb: 10.7 GB, 10737418240 bytes, 20971520 sectors Units sectors of 1 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/xvdc: 53.7 GB, 53687091200 bytes, 104857600 sectors Units sectors of 1 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x3cf3265c Device Boot Start End Blocks Id System /dev/xvdc1 2048 41943039 20970496 83 Linux 若start对应的初始磁柱编号能被8整除,则表示4KB对齐,请执行3进行性能测试。 若start对应的初始磁柱编号不能被8整除,则表示未4KB对齐,如需继续测试请删除原有分区,重新按照4KB对齐选择初始磁柱编号。 说明 删除分区并重新按照4KB对齐选取初始磁柱编号会导致磁盘原有数据的丢失,请谨慎操作。 3、执行以下命令,使用fio工具测试磁盘性能。 测试随机写IOPS:fio direct1 iodepth128 rwrandwrite ioenginelibaio bs4k size10G numjobs1 runtime600 groupreporting filename/opt/fiotest/fiotest.txt nameRandWriteIOPSTest 测试随机读IOPS:fio direct1 iodepth128 rwrandread ioenginelibaio bs4k size10G numjobs1 runtime600 groupreporting filename/opt/fiotest/fiotest.txt nameRandReadIOPSTest 测试写吞吐量:fio direct1 iodepth32 rwwrite ioenginelibaio bs1024k size10G numjobs1 runtime600 groupreporting filename/opt/fiotest/fiotest.txt nameWriteBandWidthTest 测试读吞吐量:fio direct1 iodepth32 rwread ioenginelibaio bs1024k size10G numjobs1 runtime600 groupreporting filename/opt/fiotest/fiotest.txt nameReadBandWidthTest 测试单队列随机读时延:fio direct1 iodepth1 rwrandread ioenginelibaio bs4k size10G numjobs1 runtime60 groupreporting filename/opt/fiotest/fiotest.txt nameRandReadLATETest 说明 使用fio工具进行裸盘性能测试时,不能在已创建文件系统的磁盘上测试,因为fio性能测试会破坏文件系统,导致磁盘变为只读,需要删除后重新购买。 请尽量不要在保存业务数据的磁盘上进行测试。如果需要,请按照以下建议操作: 在测试开始前对磁盘数据进行备份,防止误操作造成数据丢失。 在测试命令中指定filename参数为某个文件,例如filename/opt/fiotest/fiotest.txt。 测试fio相关参数说明如下表所示。 参数 说明 direct 定义是否使用direct IO,可选值如下: 值为0,表示使用buffered IO 值为1,表示使用direct IO iodepth 定义测试时的IO队列深度,默认为1。此处定义的队列深度是指每个线程的队列深度,如果有多个线程测试,意味着每个线程都是此处定义的队列深度。fio总的IO并发数iodepth numjobs。 rw 定义测试时的读写策略,可选值如下: 随机读:randread 随机写:randwrite 顺序读:read 顺序写:write混合 随机读写:randrw 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会将指定大小的数据量全部读/写完成,然后才停止测试。该参数的值,可以是带单位的数字,比如size10G,表示读/写的数据量为10GB;也可是百分数,比如size20%,表示读/写的数据量占该设备总文件的20%的空间。 numjobs 定义测试的并发线程数。 runtime 定义测试时间。如果未配置,则持续将size指定的文件大小,以每次bs值为分块大小读/写完。 groupreporting 定义测试结果显示模式,groupreporting表示汇总每个进程的统计信息,而非以不同job汇总展示信息。 filename 定义测试文件(设备)的名称。 此处选择文件,则代表测试文件系统的性能。例如:filename/opt/fiotest/fiotest.txt 此处选择设备名称,则代表测试裸盘的性能。例:filename/dev/vdb1 须知 : 如果在已经分区、并创建文件系统,且已写入数据的磁盘上进行性能测试,请注意filename选择指定文件,以避免覆盖文件系统和原有数据。 name 定义测试任务名称。
来自: