在我们选择阿里云服务器系统盘和数据盘时,如果是选择ESSD云盘,还需要选择云盘的云盘性能级别PL,PL性能级别有PL3、PL2、PL1、PL0四个性能级别的云盘规格,如果是通过阿里云的活动来购买云服务器的话,由于系统盘默认一般为20G或40G容量,可选的PL性能级别通常只有PL0(单盘IOPS性能上限1万)和PL1(单盘IOPS性能上限5万)可选择,有的用户肯能并不清楚ESSD云盘的性能等级之间有何区别,单盘IOPS性能指的是什么,本文为大家介绍一下ESSD云盘的云盘性能级别PL3、PL2、PL1、PL0相关知识点。
一、IOPS 和吞吐量是什么?
IOPS全称为Input/Output Operations Per Second,大意是硬盘每秒的读写次数。IOPS和 吞吐量 是衡量存储性能的两个关键指标,它们描述了存储设备的性能能力和数据传输速率。下面是它们的详细解释:
1、IOPS (Input/Output Operations Per Second)
- 定义:IOPS 是每秒内存储设备可以完成的读写操作数量。这是一个衡量随机存取性能的关键指标。
- 用途:IOPS 常用于数据库和应用程序工作负载,因为这些应用通常需要快速的随机读写。
注意:IOPS 的数值可以根据读写操作的大小和类型(随机或顺序)而变化。因此,当比较或评估 IOPS 时,应确保在相同的条件下进行。
2、吞吐量
- 定义:吞吐量是在特定时间段内从存储设备传输的数据量,通常以 MB/s (兆字节每秒) 或 GB/s (吉字节每秒) 表示。
- 用途:吞吐量是衡量存储设备进行大型、顺序数据传输能力的指标,例如文件传输、备份或流媒体应用。
与 IOPS 的关系:高 IOPS 不一定意味着高吞吐量,反之亦然。例如,一个进行大量小文件操作的设备可能有高 IOPS 但低吞吐量,而进行大文件传输的设备可能有高吞吐量但低 IOPS。
总之,IOPS 和吞吐量都是描述存储性能的指标,但它们衡量的是不同的操作和应用场景。在选择存储解决方案或优化存储性能时,应根据具体的工作负载和应用需求来考虑这两个指标。
二、ESSD云盘的规格
ESSD(增强型SSD云盘)是一种基于 SSD(固态硬盘)的高性能云存储解决方案,它提供了PL0/PL1/PL2/PL3四种性能级别来满足不同应用场景的需求。ESSD云盘的API取值为cloud_essd,提供了四个性能级别的云盘规格,四种性能级别的核心差异在于单盘性能上限的不同。
ESSD云盘属性 | 性能级别PL3 | 性能级别PL2 | 性能级别PL1 | 性能级别PL0 |
---|---|---|---|---|
性能描述 | 并发极限I/O性能极高,读写时延极稳定。 | 并发极限I/O性能较高,读写时延稳定。 | 并发极限I/O性能中等,读写时延较为稳定。 | 并发极限I/O性能中等,读写时延较为稳定。 |
云盘容量范围(GiB) | 1,261~65,536 | 461~65,536 | 20~65,536 | 1~65,536 |
数据可靠性 | 100.00% | 100.00% | 100.00% | 100.00% |
单盘最大IOPS(Input/Output Operations Per Second) | 1,000,000 | 100,000 | 50,000 | 10,000 |
单盘最大吞吐量(MB/s) | 4,000 | 750 | 350 | 180 |
单盘IOPS性能计算公式 | min{1800+50*容量, 1000000} | min{1800+50*容量, 100000} | min{1800+50*容量, 50000} | min{1800+12*容量, 10000} |
单盘吞吐量性能计算公式(MB/s) | min{120+0.5*容量, 4000} | min{120+0.5*容量, 750} | min{120+0.5*容量, 350} | min{100+0.25*容量, 180} |
业务场景示例 | 中大型核心业务关系型数据库及NoSQL数据库,大型SAP和Oracle系统。 | 中等规模的关系型数据库、NoSQL数据库、中等规模的ELK日志集群、SAP和Oracle等企业级商用软件。 | 中小型MySQL和SQLServer等数据库场景,中小规模ELK日志集群,SAP和Oracle等企业级商用软件,容器应用。 | 中小型MySQL和SQLServer等数据库场景,中小规模ELK日志集群,SAP和Oracle等企业级商用软件,容器应用。 |
在推荐业务场景下,这些产品的系统盘或数据盘建议替换为ESSD云盘。 | 16核vCPU以上本地SSD实例规格族(i1、i2、i2g)的数据盘 | SSD云盘,本地SSD实例规格族(i1、i2、i2g)的数据盘 | SSD云盘 | 系统盘 |
三、容量范围与性能级别的关系
对于存储设备而言,不同的容量能达到的性能不同,容量越大,存储设备的数据处理能力越强。所有ESSD云盘性能级别的单位容量的I/O性能均一致,但云盘性能随容量增长而线性增长,直至达到该性能级别的单盘性能上限。
性能级别 | ESSD云盘容量范围(GiB) | 最大IOPS | 最大吞吐量(MB/s) |
---|---|---|---|
PL0 | 1-65,536 | 10,000 | 180 |
PL1 | 20-65,536 | 50,000 | 350 |
PL2 | 461-65,536 | 100,000 | 750 |
PL3 | 1,261-65,536 | 1,000,000 | 4,000 |
四、PL0至PL3性能的选择场景
如果我们是通过阿里云的活动来购买云服务器的话,通常计算型c7、计算型c7a、计算型c8a、通用型g8a、通用型g8i、内存型r8a等最新第七代和八代云服务器默认系统盘都是ESSD云盘,而如果选择经济型e和通用算力型u1实例则有ESSD Entry和ESSD两种云盘种类可选,选择ESSD云盘作为系统盘时一般默认容量为20G或40G,可选PL性能只有PL0和PL1可选,如下图所示:
由于阿里云目前活动中的云服务器,ESSD云盘最高只能选择100G,所以PL性能只有PL0和PL1可选,例如20 GiB容量时。则PL0或者PL1性能级别的ESSD云盘,对应的上限分别为1万和5万。
如果我们是通过云服务器ECS页面购买云服务器的话,云盘容量范围为20GiB-65536GiB,此时才能选择PL2和PL3,例如选择了32000 GiB。则PL0至PL3性能级别的ESSD云盘,对应的IOPS上限分别为1万、5万、10万和100万,如下图所示:
五、实例规格的存储I/O性能
部分全新一代实例规格族的存储I/O性能和实例规格成正比线性关系,以存储增强型实例规格族g7se为例,实例规格越高可获得的存储IOPS和吞吐量越高。实例规格与ESSD云盘性能的关系规则如下所示:
- 如果ESSD云盘的性能总和不超过实例规格族所对应的存储I/O能力,实际存储性能以ESSD云盘性能为准。
- 如果ESSD云盘的性能总和超过了实例规格族所对应的存储I/O能力,实际存储性能以该实例规格对应的存储I/O能力为准。
以存储增强型实例规格族g7se为例,不同规格的实例挂载不同性能级别的ESSD云盘时,实际的存储性能会有所不同。以下为示例。
示例一:A用户选择了ecs.g7se.xlarge 16 GiB规格实例,该实例规格最大存储I/O性能为60,000 IOPS。ECS实例仅挂载了1块2,000 GiB,性能级别为PL2的ESSD云盘,对应单盘IOPS最大为100,000。则该ECS实例的最大存储IOPS为60,000,无法达到100,000。
示例二:B用户选择了ecs.g7se.4xlarge 64 GiB规格实例,该实例规格最大存储I/O性能为150,000 IOPS。ECS实例挂载了3块2,000 GiB,性能级别为PL2的ESSD云盘,对应单盘IOPS最大为100,000,总IOPS最大为300,000。则该ECS实例的最大存储IOPS为150,000。
示例三:C用户选择了ecs.g7se.4xlarge 64 GiB规格实例,该实例规格最大存储I/O性能为150,000 IOPS。ECS实例仅挂载了1块2,000 GiB,性能级别为PL3的ESSD云盘,对应单盘IOPS最大为101,800。则该ECS实例的最大存储IOPS为101,800。
说明:并非所有实例规格的云服务器选择ESSD云盘时都支持PL0-PL3,ESSD云盘PL0-PL3支持的实例规格族,请参见:实例规格族
六、如何测试ESSD云盘IOPS性能
测试ESSD云盘性能时,云盘本身以及压测条件都起着重要的作用。我们可以按照下面的示例配置ESSD云盘性能的压测条件,充分发挥出多核多并发的系统性能,压测出100万IOPS的性能指标。
1、压测条件
示例操作:随机写(randwrite)。
镜像:使用公共镜像中高版本的Linux镜像。例如,CentOS 7.4/7.3/7.2 64位或者Alibaba Cloud Linux 2.1903 64位操作系统。
工具:使用FIO。
实例规格:推荐使用ecs.g7se.32xlarge。
ESSD云盘:推荐使用ESSD PL3云盘。本示例中,使用的设备名为/dev/your_device,请您根据实际情况替换。
2、操作步骤
第一步:远程连接ECS实例。
第二步:依次运行以下命令,安装libaio和FIO。
sudo yum install libaio -y
sudo yum install libaio-devel -y
sudo yum install fio -y
第三步:运行以下命令,切换路径。
cd /tmp
第四步:运行以下命令,新建test100w.sh脚本。
vim test100w.sh
第五步:在test100w.sh中粘贴以下内容。
function RunFio
{
numjobs=$1 # 实例中的测试线程数,例如示例中的10
iodepth=$2 # 同时发出I/O数的上限,例如示例中的64
bs=$3 # 单次I/O的块文件大小,例如示例中的4k
rw=$4 # 测试时的读写策略,例如示例中的randwrite
size=$5
filename=$6 # 指定测试文件的名称,例如示例中的/dev/your_device
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/your_device/mq/*/cpu_list | awk '{if(i<=NF) print $i;}' i="$i" | tr -d ',' | tr '\n' ','`
if [ -z $list ];then
break
fi
cpulist=${
cpulist}${
list}
done
spincpu=`echo $cpulist | cut -d ',' -f 2-${
nu}`
echo $spincpu
fio --ioengine=libaio --runtime=30s --numjobs=${
numjobs} --iodepth=${
iodepth} --bs=${
bs} --size=${
size} --rw=${
rw} --filename=${
filename} --time_based=1 --direct=1 --name=test --group_reporting --cpus_allowed=$spincpu --cpus_allowed_policy=split
}
echo 2 > /sys/block/your_device/queue/rq_affinity
sleep 5
RunFio 10 128 4k randwrite 1024g /dev/your_device
第六步:因测试环境而异,根据实际情况修改test100w.sh脚本。
请将所有your_device设置为ESSD云盘实际的设备名,例如nvme1n1。
根据实际情况设置RunFio 10 64 4k randwrite /dev/your_device中的10、64、4k、randwrite和/dev/your_device。
如果云盘上的数据丢失不影响业务,可以设置filename=[设备名,例如/dev/vdb];否则,请设置为filename=[具体的文件路径,例如/mnt/test.image]。
第七步:运行以下命令,测试ESSD云盘性能。
sh test100w.sh
出现IOPS=*的结果时,表示ESSD云盘性能测试结束,如下图所示:
通过以上内容我们可以知道ESSD云盘的四种性能级别可以达到的性能上限不同,并根据自己的业务需求来选择适合自己的性能级别,后期我们还可以根据应用程序的性能需求选择不同的性能级别,并在必要时进行调整。具体操作步骤请参见:修改ESSD云盘性能级别
七、选择最高性能PL3是否就能获得最大的存储I/O性能性能上限
并不是选择最高性能PL3就能获得最大的存储I/O性能性能上限,云服务器ECS不同实例规格族的存储I/O性能以及不同实例规格挂载云盘时的性能表现不同。实例维度的存储I/O性能和实例规格大小相关,同一类型的实例规格等级越高,可获得的存储I/O性能(即IOPS和吞吐量)越高。了解实例存储性能与云盘存储性能之间的关系后,我们可以基于性能数据,从实际业务需求出发,合理选择实例规格和块存储产品,避免不合理配置给应用带来性能瓶颈。
1、实例存储IOPS性能说明
当我们创建ECS实例挂载了云盘时,ECS实例最终的存储I/O性能表现有以下场景:
场景一:如果云盘的性能总和超过了实例规格族所对应的存储I/O能力,最终存储I/O性能以该实例规格对应的存储I/O能力为准。
场景二:如果云盘的性能总和不超过实例规格族所对应的存储I/O性能,最终存储I/O性能以云盘性能为准。
以存储增强型实例规格族g7se为例,不同规格的实例挂载不同性能级别的ESSD云盘时,实际的存储性能不同。以下为示例。
示例一:A用户选择了ecs.g7se.xlarge 16 GiB规格实例,该实例规格最大存储I/O性能为60000 IOPS。ECS实例仅挂载了1块2000 GiB,性能级别为PL2的ESSD云盘,对应单盘IOPS最大为100000。则该ECS实例最大存储IOPS为60000,无法达到100000。
示例二:B用户选择了ecs.g7se.4xlarge 64 GiB规格实例,该实例规格最大存储I/O性能为150000 IOPS。ECS实例挂载了3块2000 GiB,性能级别为PL2的ESSD云盘,对应单盘IOPS最大为100000,总IOPS最大为300000。则该ECS实例最大存储IOPS为150000。
示例三:C用户选择了ecs.g7se.4xlarge 64 GiB规格实例,该实例规格最大存储I/O性能为150000 IOPS。ECS实例仅挂载了1块2000 GiB,性能级别为PL3的ESSD云盘,对应单盘IOPS最大为101800。则该ECS实例最大存储IOPS为101800。
综上,如果我们的场景是中等规模的关系型数据库、NoSQL数据库、ELK日志集群、SAP和Oracle等企业级商用软件时,才需要使用PL2以上的性能等级,如果是中大型核心业务关系型数据库及NoSQL数据库,大型SAP和Oracle系统等场景,一般需要PL3的性能等级。
需要注意的是,选择不同PL性能等级,价格会有所不同,例如我们通过阿里云目前的活动购买计算型c8a实例2核4G配置,系统盘为ESSD云盘 40G时,选择PL0(单盘IOPS性能上限1万),价格为68.66元,如下图所示:
选择PL1(单盘IOPS性能上限5万)时价格则为74.66元,如下图所示:
更多阿里云服务器实时活动价格及选择PL0和PL1性能等级时的价格,可通过活动自行查询:https://www.aliyun.com/daily-act/ecs/activity_selection
对于中小型的web应用、中小型数据库系统、缓存、搜索集群等大部分个人和普通企业用户的上云场景来说,选择ESSD云盘的性能等级时,选择PL0与PL1就够用了。