本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
便宜云服务器ESSD PL-X云盘是一款具备超高IOPS、超高吞吐量和超低时延等多维度高性能的云盘。您可以按照本示例配置ESSD PL-X云盘性能的压测条件,测试ESSD PL-X云盘作为裸盘时的访问时延和IOPS。
压测条件
测试工具:使用FIO。
说明FIO(Flexible I/O Tester)是一个开源的、强大的I/O性能测试工具,可以用来对存储设备进行随机读写、顺序读写等负载测试。
实例规格:推荐使用ecs.g8ise.12xlarge。更多信息,请参见存储增强通用型实例规格族g8ise。
镜像:使用公共镜像中高版本的Linux镜像,本文使用Alibaba Cloud Linux 3。
说明经测试发现部分Linux发行版镜像可能无法达到预期的性能,强烈推荐您使用便宜云服务器官方维护的Alibaba Cloud Linux 3镜像。
ESSD PL-X云盘:
测试裸盘可以获得较为真实的云盘性能,建议您直接通过FIO压测裸盘进行云盘性能测试。
为确保云盘性能测试的准确性,请预先准备好足够的IOPS。有关ESSD PL-X云盘规格信息,请参见ESSD PL-X云盘(邀测)。
压测时延时,建议至少准备40,000 IOPS。
压测IOPS时,建议准备3,000 GiB以上的云盘和3,000,000 IOPS。
重要测试裸盘可以获得较为真实的块存储性能。但如果块存储设备中含有分区、文件系统以及其他数据,直接使用FIO压测会导致文件系统异常以及数据丢失,请在测试前提前创建快照做好数据备份。具体操作,请参见创建快照。
强烈建议您不要将操作系统所在的系统盘或含有数据的数据盘作为测试对象,以避免数据丢失。建议在新创建的空数据盘上使用工具测试块存储性能。
性能测试结果均在测试环境下获得,仅供参考。在真实生产环境中,受网络环境、并发访问量等因素影响,云盘的性能表现可能存在差异,请您以实际情况为准。
测试ESSD PL-X云盘时延
远程连接ECS实例。
具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
运行以下命令,查询块存储的设备名称。
sudo fdisk -lu
如上图所示,表示该实例有3块块存储设备,系统盘/dev/vda、数据盘/dev/vdb、/dev/vdc。
运行以下命令,查询块存储设备是否存在分区和文件系统。
sudo blkid
如上图所示,块存储设备/dev/vda与/dev/vdb上存在分区及文件系统,而结果中未存在/dev/vdc相关的回执信息,表明/dev/vdc没有分区及文件系统。
在测试ESSD PL-X云盘性能前,请确保已经对测试对象进行数据备份,避免数据丢失。ESSD PL-X云盘不支持快照,您可依照本地盘备份方式,将数据通过云备份定期备份、备份至OSS、备份至云盘或NAS来实现数据备份。具体操作可参考备份本地盘文件。
运行以下命令,安装libaio库和测试工具FIO。
sudo yum install libaio libaio-devel fio -y
调整内核启动参数。
重要调整内核启动参数是在grub配置文件中添加
idle=poll
参数,目的是改变Linux系统的CPU空闲循环处理方式,从而提升I/O响应速度,对I/O延时敏感的应用至关重要。调整内核启动参数过程中的误操作可能会让操作系统无法正常使用,具有一定风险,请您在测试前提前创建快照做好数据备份。运行以下命令,打开
/etc/default/grub
。sudo vim /etc/default/grub
运行以下命令,找到
GRUB_CMDLINE_LINUX="XXX"
所在行,在最末尾添加idle=poll
内容。如果内核配置中已有其他的
idle=xxx
参数项,请删除。运行以下命令,更新grub配置。
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
运行以下命令,重启实例使配置生效。
sudo reboot
运行以下命令,切换路径。
cd /tmp
运行以下命令,新建test_plx_lat.sh脚本。
sudo vim test_plx_lat.sh
在test_plx_lat.sh脚本中添加以下内容。
#!/bin/bash DEV_NODE=$1 DEV_NAME=/dev/$DEV_NODE function CheckHasFS { local device=$1 # 设备路径 # 检查设备是否存在 if [ ! -b "$device" ]; then echo "错误: 设备 $device 不存在" exit 1 fi # 使用 `blkid` 命令检查分区表和文件系统类型 local pt_type=$(sudo blkid -o value -s PTTYPE "$device") local fs_type=$(sudo blkid -o value -s TYPE "$device") if [ -n "$pt_type" ] || [ -n "$fs_type" ]; then return 1 else return 0 fi } CheckHasFS "$DEV_NAME" if [ $? -eq 1 ]; then echo "$DEV_NAME 包含分区表或文件系统,停止 fio 脚本!" exit 1 fi echo 2 > /sys/block/$DEV_NODE/queue/rq_affinity sleep 5 DEVICE=`ls -al /sys/block/$DEV_NODE/device | awk '{print $11}' | sed 's%../%%g'` INTERRUPT=`cat /proc/interrupts | grep $DEVICE | shuf -n 1 | awk '{print $1}' | sed 's/://g'` EFFECTIVE_SMP=`cat /proc/irq/$INTERRUPT/effective_affinity_list` fio --ioengine=libaio --runtime=30s --numjobs=1 --iodepth=1 --bs=4k --rw=randwrite --filename=$DEV_NAME --time_based=1 --direct=1 --name=test --group_reporting=1 --cpus_allowed_policy=split --cpus_allowed=$EFFECTIVE_SMP
关于脚本内容的详细说明,请参见如下test_plx_lat.sh脚本说明。
单击展开test_plx_lat.sh脚本说明
测试ESSD PL-X云盘的时延性能。
sudo sh test_plx_lat.sh your_device
请您根据实际情况,将your_device修改为ESSD PL-X云盘实际的设备名,例如vdc。
您可以在返回结果中查看
lat (usec): min=xx, max=xxxx, avg=xx.xx, stdev=x.xx
内容,表示ESSD PL-X云盘的时延。如果返回结果为如下示例所示,表示当前测试对象存在分区或文件系统,为保证数据安全,fio脚本停止执行,建议您使用新创建的空数据盘进行测试。
[[ecs-user@ecs tmp]$ sudo sh test_plx_lat.sh vdc /dev/vdc 包含分区表或文件系统,停止 fio 脚本!
压测ESSD PL-X云盘IOPS
远程连接ECS实例。
具体操作,请参见使用Workbench工具以SSH协议登录Linux实例。
运行以下命令,查询块存储的设备名称。
sudo fdisk -lu
如上图所示,表示该实例有3块块存储设备,系统盘/dev/vda、数据盘/dev/vdb、/dev/vdc。
运行以下命令,查询块存储设备是否存在分区和文件系统。
sudo blkid
如上图所示,块存储设备/dev/vda与/dev/vdb上存在分区及文件系统,而结果中未存在/dev/vdc相关的回执信息,表明/dev/vdc没有分区及文件系统。
在测试ESSD PL-X云盘性能前,请确保已经对测试对象进行数据备份,避免数据丢失。ESSD PL-X云盘不支持快照,您可依照本地盘备份方式,将数据通过云备份定期备份、备份至OSS、备份至云盘或NAS来实现数据备份。具体操作可参考备份本地盘文件。
运行以下命令,安装libaio库和测试工具FIO。
sudo yum install libaio libaio-devel fio -y
运行以下命令,切换路径。
cd /tmp
运行以下命令,新建test_plx_iops.sh脚本。
sudo vim test_plx_iops.sh
在test_plx_iops.sh脚本中添加以下内容。
#!/bin/bash DEV_NODE=$1 DEV_NAME=/dev/$DEV_NODE function CheckHasFS { local device=$1 # 设备路径 # 检查设备是否存在 if [ ! -b "$device" ]; then echo "错误: 设备 $device 不存在" exit 1 fi # 使用 `blkid` 命令检查分区表和文件系统类型 local pt_type=$(sudo blkid -o value -s PTTYPE "$device") local fs_type=$(sudo blkid -o value -s TYPE "$device") if [ -n "$pt_type" ] || [ -n "$fs_type" ]; then return 1 else return 0 fi } CheckHasFS "$DEV_NAME" if [ $? -eq 1 ]; then echo "$DEV_NAME 包含分区表或文件系统,停止 fio 脚本!" exit 1 fi echo 0 > /sys/block/$DEV_NODE/queue/rq_affinity sleep 5 fio --ioengine=libaio --runtime=30s --numjobs=64 --iodepth=64 --bs=4k --rw=randwrite --filename=/dev/$DEV_NODE --time_based=1 --direct=1 --name=test --group_reporting=1
关于脚本内容的详细说明,请参见如下test_plx_iops.sh脚本说明。
单击展开test_plx_iops.sh脚本说明
运行以下命令,测试ESSD PL-X云盘的IOPS性能。
sudo sh test_plx_iops.sh your_device
请您根据实际情况,将
your_device
修改为ESSD PL-X云盘实际的设备名,例如vdc。您可以在返回结果中查看
IOPS=***
内容,表示ESSD PL-X云盘的IOPS。说明您可以根据测试出来的IOPS大小计算该云盘的吞吐量。计算公式请参见ESSD PL-X云盘(邀测)。
如果返回结果为如下示例所示,表示当前测试对象存在分区或文件系统,为保证数据安全,fio脚本停止执行,建议您使用新创建的空数据盘进行测试。
[[ecs-user@ecs tmp]$ sudo sh test_plx_iops.sh vdc /dev/vdc 包含分区表或文件系统,停止 fio 脚本!