参考来源:
深入浅出云计算-05 | 云硬盘:云上IO到底给不给力
云硬盘的性能等级
当下的云硬盘经过了多次的软硬件迭代,尤其是SSD的迅速发展,吞吐量和随机读写能力等各项性能指标都已经不再是问题了。在现代云计算中,已经发展出了基于不同存储介质的、丰富的性能等级选择,你已经能够找到单盘IOPS在数十万量级甚至达到百万的云硬盘产品了。
所以,现在的云硬盘,性能上已经非常“给力”了。你更多的是要考虑如何根据应用场景,选择合适介质的硬盘等级,同时权衡好相应的成本。
那么下面,我们就分别来看一看主流云硬盘的不同性能等级,以及它们对应的磁盘类型和存储介质。
第一个等级的云硬盘,是基于传统HDD硬盘构建而成的。这类云盘的性能一般,最高IOPS大概在数百左右。在很多的云上,已经不把它作为推荐的选择了。但它并非一无是处,成本低就是它的最大优势,在不注重性能的测试环境,或者是个人自用的服务器,它就是一个很好的选择。
第二个等级,往往是基于混合硬盘,也就是结合HDD和SSD硬盘构建的云硬盘。它会综合发挥SSD的性能优势和HDD的容量优势。比如它可以用SSD部分来承载热点区域数据,或是作为缓存,来提高响应性能。在这个等级下,典型的IOPS为数千左右,是很多云上创建硬盘的默认选项,比较适合像是操作系统启动盘这样的常规负载。
第三个等级的云硬盘,它的存储介质就是纯SSD硬盘了。虽然贵一些,但一分价钱一分货,这个等级下的云硬盘能够提供非常稳定的IO能力,IOPS通常能够上万,也有相当不俗的吞吐量和较低的访问延时。你可以用它来承载生产环境中重要的关键业务应用,或是各类数据库等IO密集型应用。
第四个等级,也是当下业界的最高等级,就是进一步优化增强的最新SSD云盘。它一般会采用更新一代的企业级闪存硬件,配合自研或改进后的底层传输协议,和虚拟化技术栈的优化来提供服务。因此它能够达到惊人的性能水平,满足我们最为苛刻的性能场景需求,比如承载SAP HANA(SAP的高性能计算平台)、高并发OLTP数据库等等。这类SSD云盘的IOPS通常能够突破十万以上。
各个云对于不同等级云硬盘的命名方法各有不同,我把相应的产品类型和名称整理成了一个表格,方便你去了解和查询:
用lsblk和df命令查看一下磁盘的情况
挂载了一个5G的硬盘,查看是否挂载正常
root@ub1804:/home/xiaoyue# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 5G 0 disk
将这块磁盘进行格式化,并创建ext4文件系统
root@ub1804:/home/xiaoyue# mkfs.ext4 /dev/sdb
mke2fs 1.44.1 (24-Mar-2018)
创建含有 1310720 个块(每块 4k)和 327680 个inode的文件系统
文件系统UUID:83b8c1b7-0397-4c8a-b4df-41adebf1d3ab
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736
正在分配组表: 完成
正在写入inode表: 完成
创建日志(16384 个块) 完成
写入超级块和文件系统账户统计信息: 已完成
挂载块设备
在/mnt下,创建一个data目录,并将这个新的块设备挂载到该目录
root@ub1804:/home/xiaoyue# mkdir /mnt/data
root@ub1804:/home/xiaoyue# mount /dev/sdb /mnt/data/
测试磁盘4K随机读方面的能力
使用fio工具,来测试下这块SSD盘4K随机读方面的能力。和前面不同的是,这回我们要把测试文件路径定位到“/mnt/data”目录,因为这个目录指向的是刚刚创建的新硬盘:
root@ub1804:/home/xiaoyue# fio --name=mytest2 --filename=/mnt/data/testfile2 --rw=randread --refill_buffers --bs=4k --size=1G -runtime=10 -direct=1 -iodepth=128 -ioengine=libaio
mytest2: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=128
fio-3.1
Starting 1 process
mytest2: Laying out IO file (1 file / 1024MiB)
Jobs: 1 (f=1): [r(1)][100.0%][r=79.5MiB/s,w=0KiB/s][r=20.4k,w=0 IOPS][eta 00m:00s]
mytest2: (groupid=0, jobs=1): err= 0: pid=5141: Thu May 30 18:16:13 2024
**read: IOPS=20.1k, BW=78.4MiB/s (82.2MB/s)(784MiB/10001msec)**
slat (usec): min=26, max=4698, avg=42.81, stdev=21.81
clat (usec): min=26, max=25145, avg=6318.94, stdev=635.86
lat (usec): min=59, max=25479, **avg=6363.29**, stdev=639.43
clat percentiles (usec):
| 1.00th=[ 5538], 5.00th=[ 5669], 10.00th=[ 5735], 20.00th=[ 5866],
| 30.00th=[ 5997], 40.00th=[ 6128], 50.00th=[ 6259], 60.00th=[ 6390],
| 70.00th=[ 6521], 80.00th=[ 6718], 90.00th=[ 6915], 95.00th=[ 7111],
| 99.00th=[ 7701], 99.50th=[ 7963], 99.90th=[15270], 99.95th=[17433],
| 99.99th=[22676]
bw ( KiB/s): min=71225, max=82568, per=99.72%, **avg=80091.84**, stdev=2520.48, samples=19
iops : min=17806, max=20642, **avg=20022.68**, stdev=630.10, samples=19
lat (usec) : 50=0.01%, 100=0.01%, 250=0.01%, 500=0.01%, 750=0.01%
lat (usec) : 1000=0.01%
lat (msec) : 2=0.01%, 4=0.02%, 10=99.71%, 20=0.22%, 50=0.02%
cpu : usr=0.03%, sys=99.72%, ctx=1395, majf=0, minf=137
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1%
issued rwt: total=200811,0,0, short=0,0,0, dropped=0,0,0
latency : target=0, window=0, percentile=100.00%, depth=128
Run status group 0 (all jobs):
READ: bw=78.4MiB/s (82.2MB/s), 78.4MiB/s-78.4MiB/s (82.2MB/s-82.2MB/s), io=784MiB (823MB), run=10001-10001msec
**Disk stat**s (read/write):
sdb: ios=200256/2, merge=0/1, ticks=18819/0, in_queue=8, util=99.20%
root@ub1804:/home/xiaoyue#