>  기사  >  운영 및 유지보수  >  ESSD 클라우드 디스크 성능을 간단하고 빠르게 스트레스 테스트하는 방법

ESSD 클라우드 디스크 성능을 간단하고 빠르게 스트레스 테스트하는 방법

坏嘻嘻
坏嘻嘻원래의
2018-09-29 15:08:463505검색

本篇文章给大家带来的内容是关于如何简单快速的压测 ESSD 云盘的性能,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

如何压测 ESSD 云盘的性能

ESSD 云盘,又称增强型(Enhanced) SSD 云盘,是阿里云全新推出的超高性能的云盘产品。由于压测云盘的性能时,云盘本身以及压测条件都起着重要的作用,因此本文提供了如何配置合适的条件压测 ESSD 云盘性能的示例,并测试出 100 万 IOPS。

警告:

测试裸盘可以获得真实的块存储盘性能,但直接测试裸盘会破坏文件系统结构,请在测试前提前做好数据备,例如,创建磁盘快照。建议您只在新购无数据的 ECS 实例上使用工具测试块存储性能,避免造成数据丢失。

准备工作

为了充分发挥出多核多并发的系统性能,压测出 100 万 IOPS 性能指标,您可以参阅以下建议测试 ESSD 云盘的性能。

镜像推荐

您可以使用阿里云官方 镜像 中高版本的 Linux 镜像版本。例如,CentOS 7.4/7.3/7.2 64 位和 AliyunLinux 17.1 64 位操作系统。由于对应的驱动还不够完善,不推荐使用其他低版本的 Linux 镜像和 Windows 镜像。

工具推荐

您可以使用 FIO 作为云盘性能标准的测试工具。

实例规格推荐

目前只有存储增强型 g5se 实例规格族支持挂载 ESSD 云盘,您需要 申请 加入使用存储增强型 g5se 实例规格族白名单。申请审核完成后,您便可以同时选购存储增强型 g5se 实例规格族和 ESSD 云盘。

操作示例

以实例规格 ecs.g5se.18xlarge 为例,同时 ESSD 云盘的设备名为 /dev/vdb,示范通过随机写(randwrite)测试 ESSD 云盘的性能。

远程连接 并登录到 Linux 实例。

运行以下命令安装 libaio 和 FIO。

sudo yum install libaio –y
sudo yum install libaio-devel –y
sudo yum install fio -y

运行 cd /tmp 切换路径。

运行 vim test100w.sh 新建脚本文件,并粘贴以下内容,脚本为随机写 randwrite IOPS 性能测试示例。

function RunFio
{
 numjobs=$1  # 实例中的测试线程数,如示例中的 8
 iodepth=$2  # 同时发出I/O数的上限,如示例中的 64
 bs=$3       # 单次I/O的块文件大小,如示例中的 4K
 rw=$4       # 测试时的读写策略,如示例中的 randwrite
 filename=$5 # 指定测试文件的名称,如示例中的 /dev/vdb
 nr_cpus=`cat /proc/cpuinfo |grep "processor" |wc -l`
 if [ $nr_cpus -lt $numjobs ];then
     echo "Numjobs is more than cpu cores, exit!"
     exit -1
 fi
 let nu=$numjobs+1
 cpulist=""
 for ((i=1;i<10;i++))
 do
     list=`cat /sys/block/vdb/mq/*/cpu_list | awk &#39;{if(i<=NF) print $i;}&#39; i="$i" | tr -d &#39;,&#39; | tr &#39;\n&#39; &#39;,&#39;`
     if [ -z $list ];then
         break
     fi
     cpulist=${cpulist}${list}
 done
 spincpu=`echo $cpulist | cut -d &#39;,&#39; -f 2-${nu}`
 echo $spincpu
 fio --ioengine=libaio --runtime=30s --numjobs=${numjobs} --iodepth=${iodepth} --bs=${bs} --rw=${rw} --filename=${filename} --time_based=1 --direct=1 --name=test --group_reporting --cpus_allowed=$spincpu --cpus_allowed_policy=split
}
echo 2 > /sys/block/vdb/queue/rq_affinity
sleep 5
RunFio 8 64 &#39;4k&#39; &#39;randwrite&#39; &#39;/dev/vdb&#39;

注意:

因测试环境而异,脚本中您需要修改的命令行有:

命令行 list=cat /sys/block/vdb/mq/*/cpu_list | awk '{if(i

命令行 RunFio 8 64 '4k' 'randwrite' '/dev/vdb' 中的 8、64、4k、randwrite 和 /dev/vdb。

直接测试裸盘会破坏文件系统结构,如果云盘上的数据丢失不影响业务,可以设置 filename=[设备名,如本示例中的/dev/vdb]。否则,请设置为 filename=[具体的文件路径,比如/mnt/test.image]。

运行 sh test100w.sh 开始测试 ESSD 云盘性能。

ESSD 클라우드 디스크 성능을 간단하고 빠르게 스트레스 테스트하는 방법

脚本解读

块设备参数

测试实例时,脚本 test100w.sh 中的命令echo 2 > /sys/block/vdb/queue/rq_affinity 是将 ECS 实例中的块设备中的参数 rq_affinity 值修改为 2:

参数 rq_affinity 的值为 1 时,表示块设备收到 I/O 完成(I/O Completion)的事件时,这个 I/O 被发送回处理这个 I/O 下发流程的 vCPU 所在 Group 上处理。在多线程并发的情况下,I/O Completion 就可能集中在某一个 vCPU 上执行,这样会造成瓶颈,导致性能无法提升。

参数 rq_affinity 的值为 2 时,表示块设备收到 I/O Completion 的事件时,这个 I/O 会在当初下发的 vCPU 上执行。在多线程并发的情况下,就可以完全充分发挥各个 vCPU 的性能。

绑定对应的 vCPU

普通模式下,一个设备(Device)只有一个请求列表(Request-Queue)。在多线程并发处理 I/O 的情况下,这个唯一的 Request-Queue 就是一个性能瓶颈点。

최신 멀티 큐(Multi-Queue) 모드에서는 장치(Device)가 여러 개의 요청 큐 처리 I/O를 가질 수 있어 백엔드 스토리지의 성능을 최대한 발휘할 수 있습니다. 4개의 I/O 스레드가 있는 경우 4개의 스레드를 서로 다른 요청 대기열에 해당하는 CPU 코어에 바인딩해야 다중 대기열을 최대한 활용하여 성능을 향상시킬 수 있습니다.

장치(Device)의 성능을 최대한 발휘하려면 I/O 스레드를 다른 요청 대기열에 분산하여 처리해야 합니다. test100w.sh 스크립트에서 fio --ioengine=libaio --runtime=30s --numjobs=${numjobs} --iolength=${iodegree} --bs=${bs} --rw=${rw를 전달합니다. } - -filename=${filename} --time_based=1 --direct=1 --name=test --group_reporting --cpus_allowed=$spincpu --cpus_allowed_policy=split 여러 작업을 서로 다른 CPU 코어에 바인딩합니다. 그 중 vd* 클라우드 디스크 장치의 이름입니다(예: /dev/vdb).

FIO는 vCPU를 바인딩하기 위해 매개변수 cpus_allowed 및 cpus_allowed_policy를 제공합니다. 위 명령은 여러 CPU 코어에 바인딩되고 서로 다른 Queue_Id에 해당하는 총 여러 작업을 실행합니다.

Queue_Id에 바인딩된 cpu_core_id를 보는 방법과 관련하여 다음을 수행할 수 있습니다.

ls /sys/block/vd*/mq/를 실행하여 vdb와 같은 장치 이름이 vd*인 클라우드 디스크의 Queue_Id를 볼 수 있습니다.

cat /sys/block/vd*/mq/*/cpu_list를 실행하여 vd* cloud disk라는 해당 장치의 Queue_*에 바인딩된 cpu_core_id를 확인하세요.

위 내용은 ESSD 클라우드 디스크 성능을 간단하고 빠르게 스트레스 테스트하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.