测试ESSD PL-X云盘性能时,云盘本身和压测条件都会对云盘的性能产生重要影响。您可以按照本示例配置ESSD PL-X云盘性能的压测条件,充分发挥出系统对不同类型I/O模型的处理能力,压测出30 us时延和300万IOPS的性能指标。

压测条件

说明 ESSD PL-X云盘正在邀测中,邀测地域和可用区仅支持华东2(上海)的M可用区。如需使用,请前往邀测页面申请。
  • 镜像:使用公共镜像中高版本的Linux镜像,推荐使用阿里云官方维护的Alibaba Cloud Linux 2/3。本示例中,使用Alibaba Cloud Linux 3.2104 LTS 64位公共镜像。
    说明 经测试发现部分Linux发行版镜像,例如CentOS 8.2,因内核编译配置或优化较其他发行版有明显不足,可能无法达到预期的部分性能。因此强烈推荐您使用Alibaba Cloud Linux 2/3镜像。
  • 工具:使用FIO
  • 实例规格:推荐使用ecs.r7se-x.24xlarge。
  • ESSD PL-X云盘:请预先购买足量的IOPS。压测时延时,建议至少购买40,000 IOPS。压测IOPS时,建议购买3,000 GiB以上的云盘和 3,000,000 IOPS。本示例中,使用的DEV_NODE路径为/dev/your_device,请您根据云盘实际的设备名替换,例如/dev/vdc。更多信息,请参见ESSD云盘
    警告
    • 测试裸盘可以获得真实的块存储盘性能,但会破坏分区表和文件系统结构,请勿使用有重要数据的ESSD PL-X云盘进行测试。
    • 强烈建议您不要将操作系统所在的云盘或者含有重要数据的云盘作为测试对象。建议您只在新购买的无数据的ECS实例上使用工具测试块存储性能,避免造成数据丢失。

测试ESSD PL-X云盘时延

  1. 远程连接ECS实例。
    具体操作,请参见通过密码认证登录Linux实例
  2. 运行以下命令安装libaio和FIO。
    sudo yum install libaio fio -y
    其他Linux发行版镜像可以执行以下命令安装libaio和FIO。
    • Red Hat系列
      sudo yum install libaio fio -y
    • Debian系列
      sudo apt install -y libaio1 fio
    • SUSE系列
      sudo zypper -n install fio libaio
  3. 调整内核启动参数。
    警告 修改内核启动参数过程中的误操作可能会让操作系统无法正常使用,具有一定的危险性。强烈建议您不要将含有重要数据或业务的ECS实例作为测试对象。建议您只在新购买的无数据的ECS实例上使用工具测试块存储性能,避免造成业务受损或数据丢失。
    1. 打开/etc/default/grub
      sudo vim /etc/default/grub
    2. 找到GRUB_CMDLINE_LINUX="XXX"所在行,在最末尾添加idle=poll内容。
      如果内核配置中已有其他的idle=xxx参数项,请删除。调整内核启动参数
    3. 更新grub配置。
      sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      其他Linux发行版镜像可以执行以下命令更新grub配置。
      • Red Hat/SUSE系列
        sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      • Debian系列
        sudo update-grub2
    4. 重启实例。
      sudo reboot
  4. 切换路径。
    cd /tmp
  5. 新建test_plx_lat.sh脚本。
    vim test_plx_lat.sh
  6. test_plx_lat.sh脚本中添加以下内容。
    关于脚本内容的详细说明,请参见test_plx_lat.sh脚本解读
    DEV_NODE=$1
    
    echo 2 > /sys/block/$DEV_NODE/queue/rq_affinity
    
    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/$DEV_NODE --time_based=1 --direct=1 --name=test --group_reporting=1 --cpus_allowed_policy=split --cpus_allowed=$EFFECTIVE_SMP
  7. 测试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云盘性能测试结束。测试时延

test_plx_lat.sh脚本解读

以下为ESSD PL-X云盘的时延性能测试脚本test_plx_lat.sh的详细说明,请您根据实际情况进行配置。

  • 以下命令将块设备的系统参数rq_affinity取值修改为2
    echo 2 > /sys/block/$DEV_NODE/queue/rq_affinity
    命令中的rq_affinity参数取值说明如下表所示。
    rq_affinity取值 取值说明
    0 表示块设备收到I/O 完成(I/O Completion)的事件时,不限制I/O 被发送回的vCPU。在测试时延的情况下,可能有较大的内核切换与调度开销,对单路时延有影响。
    1 表示块设备收到I/O完成的事件时,这个I/O被发送回处理这个I/O下发流程的vCPU所在Group上处理。在测试时延的情况下,可能有一定的内核切换与调度开销,对单路时延有影响。
    2 表示块设备收到I/O完成的事件时,这个I/O会在当初下发的vCPU上执行。在测试时延的情况下,能最小化内核切换与调度开销,就可最大限度提升单路时延。
  • 以下命令获取块设备的device name
    DEVICE=`ls -al /sys/block/$DEV_NODE/device | awk '{print $11}' | sed 's%../%%g'`
  • 以下命令获取块设备I/O队列的一个中断号。
    INTERRUPT=`cat /proc/interrupts | grep $DEVICE | shuf -n 1 | awk '{print $1}' | sed 's/://g'`
  • 以下命令获取响应中断的vCPU的线程号。
    EFFECTIVE_SMP=`cat /proc/irq/$INTERRUPT/effective_affinity_list`
  • 以下命令启动FIO测试随机写单路时延,并将限制在已获取的vCPU线程上下发I/O请求。
    fio --ioengine=libaio --runtime=30s --numjobs=1 --iodepth=1 --bs=4k --rw=randwrite --filename=/dev/$DEV_NODE --time_based=1 --direct=1 --name=test --group_reporting=1 --cpus_allowed_policy=split --cpus_allowed=$EFFECTIVE_SMP
    命令中的各参数说明如下表所示。
    参数 说明 取值示例
    numjobs I/O线程数。由于这里的测试目的为单路时延,故采用1个I/O线程。 1
    iodepth I/O队列深度。由于这里的测试目的为单路时延,故队列深度为1。 1
    filename 被压测的文件。对ESSD PL-X云盘进行裸盘测试时,应配置为云盘的实际设备名。 /dev/vdc
    cpus_allowed 指定压测使用的vCPU线程号。和cpus_allowed_policy=split一起使用。测试单路时延时,建议配置为处理中断的vCPU线程号。 4

压测ESSD PL-X云盘IOPS

  1. 远程连接ECS实例。
    具体操作,请参见通过密码认证登录Linux实例
  2. 运行以下命令安装libaio和FIO。
    sudo yum install libaio fio -y
    其他Linux发行版镜像可以执行以下命令安装libaio和FIO。
    • Red Hat系列
      sudo yum install libaio fio -y
    • Debian系列
      sudo apt install -y libaio1 fio
    • SUSE系列
      sudo zypper -n install fio libaio
  3. 切换路径。
    cd /tmp
  4. 新建test_plx_iops.sh脚本。
    vim test_plx_iops.sh
  5. test_plx_iops.sh脚本中添加以下内容。
    关于脚本内容的详细说明,请参见test_plx_iops.sh脚本解读
    DEV_NODE=$1
    
    echo 0 > /sys/block/$DEV_NODE/queue/rq_affinity
    
    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
  6. 测试ESSD PL-X云盘的IOPS性能。
    sudo sh test_plx_iops.sh your_device
    请您根据实际情况,将your_device修改为ESSD PL-X云盘实际的设备名,例如vdc。
    警告
    • 测试裸盘可以获得真实的块存储盘性能,但会破坏分区表和文件系统结构,请勿使用有重要数据的ESSD PL-X云盘进行测试。
    • 强烈建议您不要将操作系统所在的云盘或者含有重要数据的云盘作为测试对象。建议您只在新购买的无数据的ECS实例上使用工具测试块存储性能,避免造成数据丢失。
    出现IOPS=***的结果时,表示ESSD PL-X云盘性能测试结束。测试IOPS

test_plx_iops.sh脚本解读

以下为ESSD PL-X云盘的IOPS性能测试脚本test_plx_iops.sh的详细说明,请您根据实际情况进行配置。

  • 可选:以下命令将块设备的系统参数rq_affinity取值修改为0
    echo 0 > /sys/block/$DEV_NODE/queue/rq_affinity
    命令中的rq_affinity参数说明如下表所示。
    rq_affinity取值 取值说明
    0 表示块设备收到I/O完成的事件时,不限制I/O被发送回的vCPU。该行为能最大程度提升Guest CPU收发I/O的并行度。由于云盘控制器能力的提升,Guest内的并行度需要同时提升,以避免造成性能瓶颈。
    1 表示块设备收到I/O完成的事件时,这个I/O被发送回处理这个I/O下发流程的vCPU所在Group上处理。该行为对Guest处理I/O的并行度有一定影响。
    2 表示块设备收到I/O Completion的事件时,这个I/O会在当初下发的vCPU上执行。该行为对 Guest处理I/O的并行度影响最大。
  • 以下命令启动FIO测试随机写IOPS。
    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
    命令中的各参数说明如下表所示。
    参数 说明 取值示例
    numjobs I/O线程数。由于这里的目的为测试 IOPS,需要尽量提升Guest内的并发度,故选择 64。 64
    iodepth I/O队列深度。由于这里的测试目的为测试IOPS,需要提升单队列压力,故队列深度为 64。 64
    filename 被压测的文件。对ESSD PL-X云盘进行裸盘测试时,应配置为云盘的实际设备名。 /dev/vdc