网络知识 娱乐 评测云硬盘读写性能

评测云硬盘读写性能

我的云服务器硬盘性能到底有多快,以及该如何衡量呢?

希望你看过本文后,至少以后不要再用dd命令了~

0x00 背景

通过讲解如何优雅扩容云硬盘,我们了解了云盘连接到服务器上的具体操作过程。那么,如何进一步了解已挂载硬盘的实际性能呢?你或许会疑惑,测试硬盘性能,为什么不能用Linux系统自带的dd工具呢?而且不少人之前都这么用的:

dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync

其实这样做可能根本不能达到评测的目的。dd仅能作单线程的顺序写入工作,然后只报告一个类似吞吐量的数值,毕竟该命令最初就是用来dump disk的数据内容的。因为对于大部分典型的Web/数据库的服务器,是不可能只有这种写入模式的,所以dd显示的吞吐量不具备实际意义。另外,通常dd数据量过小,这个结果会很大程度上被云服务器所在的物理机缓存影响,且测试时间短,很可能测的不是一致的可持续的性能,而只是个峰值性能。另外,这个命令也几乎不能用来测试读性能。

那我们该用什么工具评测硬盘性能呢?别着急,我们先来看看该评测哪些指标。

0x01 硬盘性能指标

在开始评测前,我们必须先明确需要考虑哪些指标。对于I/O密集型系统,其指标最重要的是以下三个:

  • 吞吐量(Throughput):每秒的读写数据量,单位为MB/s。类似如:吞吐率、带宽、传输率等。
  • 时延(Latency):I/O 操作的发送到接收确认所经过的时间,单位为毫秒。类似如:响应时间、请求时间等。
  • IOPS(I/O per second):每秒读/写次数,单位为次(计数)。类似如:系统并发量、每秒请求RPS等。

上述这些指标,彼此并非是完全独立的,通常鱼与熊掌不可兼得,系统设计中常会做些妥协。且各类IO系统中,不论是硬盘还是网络,都会有类似概念的指标。我们将会在评测过后简要分析常见的优化思路。一般来讲,长时间的同类任务,通常系统吞吐量高更重要;短时间的随机任务,系统的时延小更重要,而在时延保证的前提下,IOPS越高系统的服务能力越强。

另外,读写块大小(I/O Block Size)是非常重要的因素。在具体的性能评测中,吞吐量和IOPS有如下关系:

通过128K的块大小让系统达到最大吞吐量

可以看到虽然吞吐量上去了,达到210MiB/s,但是并非没有有代价,时延达到了4ms左右,而IOPS不到2K。

随机读:评测云盘的时延和IOPS

fio -name=read-latency-iops -readwrite=randread -blocksize=4k -numjobs=8 -ioengine=libaio -iodepth=1 -direct=1 -runtime=60 -refill_buffers -norandommap -randrepeat=0 -group_reporting --size=10G -filename=/dev/vdb

评测时延和IOPS,一般用4K的随机读写的负载。因为4K往往是最小的读写寻址单元,比如对于SSD硬盘。同样类似的,提升IOPS可以通过增加线程数来完成。

测试结果类似如下:

通过4K随机读写测试云盘IOPS

可以看到,此时IOPS达到7K+,而平均请求时延也控制在了1ms,甚至大多数情况下更低,是比较理想的随机读写负载。当然,代价就是带宽吞吐量降到了30MiB/s左右。这里有个常见的权衡点:提升IOPS不能以牺牲太多时延为代价。因为时延是一种服务质量的体现,在CPU资源一定时,IOPS和时延是一定程度上负相关的,但如果能通过多线程/队列(引入CPU外援)等方法,可以在增加一些可忍的时延(如10%以内)但同时提升数倍的IOPS并发量,那么通常是值得的,也是常见的系统优化tradeoff。

通过控制台云硬盘监控查看实时负载

另外,更方便地,我们可以在腾讯云的硬盘监控页实时查看它的状态:从硬盘的读写吞吐量到读写IOPS、I/O时延等。

前两行就是硬盘的读写吞吐量,而三、四行就是读写的IOPS。这些值和fio测试后统计的均值通常是一致的,可以互相佐证。再后面的是I/O Await,其数值若偏高可能意为着系统负载过重。而I/O Svctm可以反映出时延指标。其对与高性能云硬盘和SSD云盘时延差距不大,评测时一般0.5ms~5ms之间都可以算是正常的。最后是I/O的利用率(utilization),如果作为评测,一般是需要跑满的。

0x04 云盘评测结果

云厂商通常提供若干种类型的云盘,从机械硬盘到各种类型的SSD硬盘等等,那么该如何选择呢?

这里简单回顾下HDD(机械硬盘)和SSD(Solid State Disk)固态硬盘。机械硬盘是传统普通硬盘,它的构成主要由盘片,磁头、盘片转轴、控制电机、磁头控制器等部件构成,读写速度和转速(通常上万转)相关;而SSD盘是以固态电子存储芯片阵列组成,包括如闪存芯片、控制芯片、缓存芯片等。其实还有混合硬盘,在机械硬盘上加以闪存颗粒作为缓存以提升性能。典型的HDD和SSD示意图:

HDD vs SSD 结构

由于其结构的不同,二者在性能等多方面也差异巨大。一般来说,SSD比HDD机械硬盘在访问性能上是数十倍,能耗(质量、体积、功耗)和可靠性(防震、耐温)各方面上也有很大提升,所以现在的PC/笔记本等大多已选择了SSD固态硬盘。而HDD硬盘一般在容量和成本上更有优势。

那么对于云硬盘,是不是一定得用SSD了呢?其实未必,腾讯云的高性能云硬盘并不是普通的HDD,而是一种混合型存储,它通过缓存机制提供接近固态存储的高性能存储能力,和SSD硬盘并没有数量级的差异,在满足需求的场景下是个性价比不错的方案。

而且,随着技术和规模的发展,云上的SSD硬盘的也正在逐渐变得划算,而且单块的容量上也和HDD足够大了。另外,对于有超高IOPS的场景,基于NVME技术的增强型SSD云盘也完全没有问题。所以,还是看业务的需求选择最适合的类型。

下表格为在香港二区标准型S5机型(CentOS8.0系统)的1TiB单盘的实测结果:

云盘类型

最大吞吐量(MiB/s)

最大IOPS (次/秒)

高性能云硬盘

151

7480

SSD云硬盘

262

22.7K

增强型SSD

354

49.8K

单块SSD比HDD随即读写性能强非常多,但云盘的差距远没有这么大。

所以选择一种适合你的云盘,才是最具性价比的方案。

0x05 性能优化总结

至此,我们已经更进一步熟悉了腾讯云云硬盘地类型与特点,对云硬盘主要的指标地概念以及各自的关系有了更深入地认识。当然最重要的,是更加系统地探索了如何根据业务特点进行针对地性能评测,进而选择最适合自己业务的云硬盘类存储产品。

祝你在腾讯云高效访问自己的数据~

欢迎订阅专栏:巫山跬步,关注本文作者:溪歪歪,持续获取云服务技术的最佳实践讲解。感谢点赞支持!

0x06 参考资料

  • 如何挂载优雅扩容云硬盘
  • fio github repo
  • fio man page
  • fio doc
  • https://cloud.tencent.com/document/product/362/6741