Skip to content

1. ESSD云盘

阿里云ESSD(Enterprise SSD)云盘结合25 GE网络和RDMA技术,为您提供单盘高达100万的随机读写能力和单路低时延性能。本文介绍了ESSD云盘的性能级别、适用场景及性能上限,提供了选择不同ESSD云盘性能级别时的参考信息。

ESSD云盘属性性能级别PL性能级别PL性能级别PL性能级别PL
PL3PL2PL1PL0
性能描述并发极限I/O性能极高,读写时延极稳定。并发极限I/O性能较高,读写时延稳定。并发极限I/O性能中等,读写时延较为稳定。并发极限I/O性能中等,读写时延较为稳定。
云盘容量范围(GiB)1,261~65,536461~65,53620~65,5361~65,536
单盘最大IOPS(Input/Output Operations Per Second)1,000,000100,00050,00010,000
单盘最大吞吐量(MB/s)4,000750350180
单盘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云盘系统盘

1.1 测试性能

测试工具:使用FIO。

FIO(Flexible I/O Tester)是一个开源的、强大的I/O性能测试工具,可以用来对存储设备进行随机读写、顺序读写等负载测试。

1.部署

yum install libaio libaio-devel fio -y
yum install libaio libaio-devel fio -y

2.测试

bash
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
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
  • 请将所有your_device设置为ESSD云盘实际的设备名,例如nvme1n1。
  • 根据实际情况设置RunFio 10 64 4k randwrite /dev/your_device中的10644krandwrite和*/dev/your_device*。
  • 如果云盘上的数据丢失不影响业务,可以设置filename=[设备名,例如/dev/vdb];否则,请设置为filename=[具体的文件路径,例如/mnt/test.image]
  • 执行
bash
sh st100w.sh
sh st100w.sh
  • 参数说明
rq_affinity取值取值说明
1表示块设备收到I/O完成(I/O Completion)的事件时,这个I/O被发送回处理这个I/O下发流程的vCPU所在Group上处理。在多线程并发的情况下,I/O Completion就可能集中在某一个vCPU上执行,造成瓶颈,导致性能无法提升。
2表示块设备收到I/O Completion的事件时,这个I/O会在当初下发的vCPU上执行。在多线程并发的情况下,就可以充分发挥各个vCPU的性能。

2. BPS和IOPS

BPS(每秒字节数)和IOPS(每秒输入/输出操作数)

2.1 bps和iops增高

  1. 高负载应用或服务
    • 如果服务器上运行的应用或服务(如数据库、文件服务器等)突然接收到大量请求,可能会导致BPS和IOPS的增加。检查应用日志和监控数据,确定是否有异常流量或请求模式。
  2. 内存不足
    • 服务器内存不足时,系统可能会使用磁盘作为虚拟内存(swap),这会导致磁盘I/O显著增加。检查内存使用情况,考虑增加内存资源或优化内存使用。
  3. 磁盘空间不足
    • 磁盘空间不足可能导致系统频繁地进行磁盘整理,从而增加IOPS。清理不必要的文件或增加磁盘空间可以解决这个问题。
  4. 数据库优化问题
    • 数据库查询效率低下或索引问题可能导致高IOPS。检查数据库性能,优化查询语句和索引。
  5. 系统或应用更新
    • 系统或应用的自动更新可能会在后台进行大量数据读写操作。检查更新日志,确认是否有更新活动。
  6. 硬件问题
    • 硬件故障(如磁盘损坏)也可能导致IOPS异常。检查硬件状态,必要时更换故障硬件。
  7. 安全问题
    • 服务器可能遭受攻击,如DDoS攻击,导致资源使用率异常。检查安全日志,采取相应的安全措施。
  8. 配置问题
    • 错误的系统或应用配置可能导致资源使用效率低下。检查配置文件,进行必要的调整。