磁盘IO测试是指在性能测试过程中,对系统的磁盘读写操作进行测试和评估的过程。磁盘是计算机系统中重要的存储介质,对于许多应用程序来说,磁盘IO的性能影响着系统的整体性能。
在性能测试中,磁盘IO测试通常有以下指标。
磁盘读取:磁盘读取测试是通过模拟实际应用程序对磁盘的读取操作来评估磁盘的读取性能。该测试通常会模拟不同的读取负载,例如随机读取、顺序读取等不同的读取模式。通过监控读取操作的吞吐量、响应时间等指标,可以评估磁盘的读取性能。
磁盘写入:磁盘写入测试是通过模拟实际应用程序对磁盘的写入操作来评估磁盘的写入性能。该测试通常会模拟不同的写入负载,例如随机写入、顺序写入等不同的写入模式。通过监控写入操作的吞吐量、响应时间等指标,可以评估磁盘的写入性能。
带宽测试:通过传输大文件来测试存储系统的带宽。
吞吐量测试:通过模拟多个并发访问,在一定时间内对存储系统进行读写操作,测试存储系统的吞吐量。
延迟测试:通过发送请求并检查收到响应所需的时间,测试存储系统的延迟。
IOPS测试:通过模拟多个并发请求,测试每秒处理的输入/输出操作次数(IOPS)。
峰值负载测试:通过模拟高负载情况,测试存储系统在峰值负载下的性能表现。
随机性能测试:通过模拟随机读写操作,测试存储系统在随机工作负载下的性能表现。
理解磁盘IO的性能对于了解系统的瓶颈和优化系统性能非常重要。通过性能测试中的磁盘IO的相关指标,可以发现磁盘的性能瓶颈,例如磁盘读写速度是否达到系统的需求,是否存在磁盘队列等待的情况等。在优化系统性能时,可以根据磁盘IO的性能指标来调整磁盘配置,例如增加磁盘缓存、优化磁盘访问模式等,从而提高系统的整体性能。
1.基于当前云平台环境的硬件配置,一般通过官网查询到存储性能指标的计算公式。通过该公式,可以估算出当前规模下该存储集群可提供的最大集群性能(IOPS和吞吐)。
2.增加多云主机或多挂载磁盘的方式,通过fio测试工具进行性能压测,测试存储集群的最大性能。
3.测试指标包括:
不同类型磁盘(SAS/SATA/SSD)的随机读IOPS、随机写IOPS、顺序读带宽、顺序写带宽、随机读延时、随机写延时;
不同存储集群(SAS/SATA/SSD)的随机读IOPS、随机写IOPS、顺序读带宽、顺序写带宽、存储集群性能上限;
4.测试所用工具
1)fio---磁盘性能测试工具
fio 是一个 I/O 工具用来对硬件进行压力测试和验证,支持 13 种不同的 I/O 引擎,包括:sync, mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等,I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs, 等等。
2)? iostat---磁盘性能监控工具
iostat 主要用于输出磁盘IO 和 CPU的统计信息。iostat属于sysstat软件包。可以用yum install sysstat 直接安装。
1)测试前提动作:
在计算及存储节点执行echo 3 > /proc/sys/vm/drop_caches清空缓存
创建相同规格的虚拟机,挂载不同磁盘类型的50G云盘记为vdb;
执行mkfs.xfs /dev/vdb格式化数据盘;
执行mkdir -p /perf-test;
执行mount /dev/vdb /perf_test;dd if=/dev/zero of=/perf_test/testfile \ bs=1M oflag=direct,sync count=20480
2)随机读IOPS测试:
fio -direct=1 -iodepth=128 -rw=randread -ioengine=libaio \
-bs=4k -size=20G -numjobs=1 -group_reporting \
-log_avg_msec=1000 -write_bw_log=test-fio \
-write_lat_log=test-fio -write_iops_log=test-fio \
-per_job_logs=0 -filename=/perf_test/testfile -name=rr-iops
3)随机写IOPS测试:
fio -direct=1 -iodepth=128 -rw=randwrite -ioengine=libaio \
-bs=4k -size=20G -numjobs=1 -group_reporting \
-log_avg_msec=1000 -write_bw_log=test-fio \
-write_lat_log=test-fio -write_iops_log=test-fio \
-per_job_logs=0 -filename=/perf_test/testfile -name=rw-iops
?4)测试记录
查看fio随机读写命令输出结果;或使用gnuplot生成fio测试过程数据,生成数据趋势图。
1)测试前提动作:
在计算及存储节点执行echo 3 > /proc/sys/vm/drop_caches清空缓存
创建相同规格的虚拟机,挂载不同磁盘类型的50G云盘记为vdb;
执行mkfs.xfs /dev/vdb格式化数据盘;
执行mkdir -p /perf-test;
执行mount /dev/vdb /perf_test;dd if=/dev/zero of=/perf_test/testfile \ bs=1M oflag=direct,sync count=20480
?2)顺序读带宽测试:
fio -direct=1 -iodepth=64 -rw=read -ioengine=libaio \
-bs=1024k -size=20G -numjobs=1 -group_reporting \
-log_avg_msec=1000 -write_bw_log=test-fio \
-write_lat_log=test-fio -write_iops_log=test-fio \
-per_job_logs=0 -filename=/perf_test/testfile -name=sr-bw
?3)顺序写带宽测试:
fio -direct=1 -iodepth=64 -rw=write -ioengine=libaio \
-bs=1024k -size=20G -numjobs=1 -group_reporting \
-log_avg_msec=1000 -write_bw_log=test-fio \
-write_lat_log=test-fio -write_iops_log=test-fio \
-per_job_logs=0 -filename=/perf_test/testfile -name=sw-bw;
?4)测试记录
查看fio随机读写命令输出结果;或使用gnuplot生成fio测试过程数据,生成数据趋势图。
1)测试前提动作:
在计算及存储节点执行echo 3 > /proc/sys/vm/drop_caches清空缓存
创建相同规格的虚拟机,挂载不同磁盘类型的50G云盘记为vdb;
执行mkfs.xfs /dev/vdb格式化数据盘;
执行mkdir -p /perf-test;
执行mount /dev/vdb /perf_test;dd if=/dev/zero of=/perf_test/testfile \ bs=1M oflag=direct,sync count=20480
2)随机读时延测试:
fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio \
-bs=4k -size=20G -numjobs=1 -group_reporting \
-log_avg_msec=1000 -write_bw_log=test-fio \
-write_lat_log=test-fio -write_iops_log=test-fio \
-per_job_logs=0 -filename=/perf_test/testfile -name=rr-latency
?3)随机写时延测试:
fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio \
-bs=4k -size=20G -numjobs=1 -group_reporting \
-log_avg_msec=1000 -write_bw_log=test-fio \
-write_lat_log=test-fio -write_iops_log=test-fio \
-per_job_logs=0 -filename=/perf_test/testfile -name=rw_latency
?4)测试记录
查看fio随机读写命令输出结果;或使用gnuplot生成fio测试过程数据,生成数据趋势图。
1)测试前提动作
创建多台测试虚拟机(不同规格存储轮流测试)备用
2)IOPS上限测试
依次启动虚拟机,并参照1(随机读写IOPS的步骤)执行压测命令,10台主机一组,完成测试并记录为一组数据,然后继续增加测试组数,每组测试较上一组测试增加10台虚机,同时启动测试命令,完成测试并记录为一组数据;直到所有虚机随机读写IOPS之和不在增加则停止测试
3)带宽上限测试
依次启动虚拟机,并参照1(顺序读写带宽的步骤)执行压测命令,10台主机一组,完成测试并记录为一组数据,然后继续增加测试组数,每组测试较上一组测试增加10台虚机,同时启动测试命令,完成测试并记录为一组数据;直到所有虚机顺序读写带宽之和不在增加则停止测试
4)测试记录
查看fio随机读写命令输出结果;或使用gnuplot生成fio测试过程数据,生成数据趋势图;也可以使用iostat等工具记录每组测试过程中服务器的相关监控数据。