我的云服务器硬盘性能到底有多快,以及该如何衡量呢?
希望你看过本文后,至少以后不要再用dd命令了~
通过讲解如何优雅扩容云硬盘,我们了解了云盘连接到服务器上的具体操作过程。那么,如何进一步了解已挂载硬盘的实际性能呢?你或许会疑惑,测试硬盘性能,为什么不能用Linux系统自带的dd工具呢?而且不少人之前都这么用的:
dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
其实这样做可能根本不能达到评测的目的。dd仅能作单线程的顺序写入工作,然后只报告一个类似吞吐量的数值,毕竟该命令最初就是用来dump disk的数据内容的。因为对于大部分典型的Web/数据库的服务器,是不可能只有这种写入模式的,所以dd显示的吞吐量不具备实际意义。另外,通常dd数据量过小,这个结果会很大程度上被云服务器所在的物理机缓存影响,且测试时间短,很可能测的不是一致的可持续的性能,而只是个峰值性能。另外,这个命令也几乎不能用来测试读性能。
那我们该用什么工具评测硬盘性能呢?别着急,我们先来看看该评测哪些指标。
在开始评测前,我们必须先明确需要考虑哪些指标。对于I/O密集型系统,其指标最重要的是以下三个:
上述这些指标,彼此并非是完全独立的,通常鱼与熊掌不可兼得,系统设计中常会做些妥协。且各类IO系统中,不论是硬盘还是网络,都会有类似概念的指标。我们将会在评测过后简要分析常见的优化思路。一般来讲,长时间的同类任务,通常系统吞吐量高更重要;短时间的随机任务,系统的时延小更重要,而在时延保证的前提下,IOPS越高系统的服务能力越强。
另外,读写块大小(I/O Block Size)是非常重要的因素。在具体的性能评测中,吞吐量和IOPS有如下关系:
所以在评测最大吞吐量和最大IOPS时,需要针对地选择BlockSize;提升BlockSize,通常会使系统吞吐率提升,系统IOPS下降。
另外,最大峰值性能(maximum performance)不同于可持续性能(sustained performance),所以在评测时需要维持一段时间的稳定负载并统计平均值。
如上所述,既然这些云硬盘的指标的关注点各不相同,那该如何判断,其中哪个指标对我们的业务最重要,从而更针对地优化它进而提升性能或者降低成本呢?这就需要明确文件的访问模式了。
I/O访问模式 | 访问特点 | 典型的应用 |
---|---|---|
流式读 Streaming Read | 全部读,大数据量顺序请求 | 流媒体服务、视频传输 |
流式写 Streaming Write | 全部写,大数据量顺序请求 | 存储备份、归档、录像监控 |
在线事务处理 OLTP | 大量的并发随机读写请求,4K~16K | 数据库系统,在线业务系统 |
文件服务器 File Server | 主要为随机访问,4K~64K,大并发 | 文件、打印、邮件、聊天、决策辅助系统 |
Web服务器 | 大并发随机访问,4K~512K | Web服务、博客、在线电商、存储服务 |
工作站 WorkStation | 数据量中等,顺序/随机访问都有。 | 云游戏,云电脑,个人PC也属于此类 |
访问模式(包括读写是随机/顺序,以及读写的比例)和读写的块大小(BlockSize)通常是影响I/O性能的关键。
所以我们在为业务系统选择存储产品时,需根据业务系统的特点针对性地具体评测以及选择,没有必要为了某一非重点特性或指标上无谓投入。根据业务类型确认访问模式,锁定性能指标最后通过合适的评测选择最具性价比的方案。
那么我们开始测吧~
fio,即flexible I/O tester,是更先进且系统的磁盘性能评测工具,目前各个主流云厂商都推荐用它来对硬件进行各种压力测试和验证,成为了当前公认的评测标准。fio作者是Jens Axboe,创建它是为了允许对特定的磁盘IO工作负载进行基准测试。fio于2012年左右发布且目前仍在活跃维护中,主要由C语言实现。
fio功能强大且特性丰富。通过fio,用户可以指定多个线程/进程来执行一种特定的IO负载。fio可以使用许多同步和异步IO API中的一个来发出IO请求,也可以使用各种API,允许通过一个API调用来发出许多IO请求。我们还可以调整fio使用的文件有容量大小,在这些文件中IO发生的偏移量是多少,甚至在发出IO请求之间有多少延迟,以及在每个IO请求之间是否有文件系统同步调用(同步调用是告诉操作系统,确保缓存在内存中的任何信息都已保存到磁盘上,因此可能会带来明显的延迟)。fio的选项允许指定非常精确的IO模式,如随机读写、顺序读写等,并查看磁盘子系统完成这些任务需要多长时间。
fio的安装过程非常简单,一般通过发行版的包管理工具(如yum、apt等)安装fio就行,如在CentOS下:
yum install fio
# 如果低版本的CentOS可能需要安装libaio库
fio常用命令参数
注意,fio默认执行fsync,这点不同于dd。
友情提示:尽量不要在系统盘上进行fio测试,避免损坏系统重要文件。另外,为避免底层文件系统元数据损坏导致数据损坏,也不要在业务数据盘上进行测试。
我们的测试环境:CentOS 8.2,高性能云硬盘,容量3T左右。
fio -name=write-throughput -readwrite=write -blocksize=128k -numjobs=8 -ioengine=libaio -iodepth=1 -direct=1 -runtime=60 -refill_buffers -norandommap -randrepeat=0 -group_reporting --size=10G -filename=/dev/vdb
测试吞吐量一般需要用大一些的block size,选择128K比较合适。如需要进一步同时提升IOPS,可以采取增加线程数(多核下更推荐,对时延影响相对小)以及增加队列深度(即iodepth参数,核数少时的办法)。
测试结果类似如下:
可以看到虽然吞吐量上去了,达到210MiB/s,但是并非没有有代价,时延达到了4ms左右,而IOPS不到2K。
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可以通过增加线程数来完成。
测试结果类似如下:
可以看到,此时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),如果作为评测,一般是需要跑满的。
云厂商通常提供若干种类型的云盘,从机械硬盘到各种类型的SSD硬盘等等,那么该如何选择呢?
这里简单回顾下HDD(机械硬盘)和SSD(Solid State Disk)固态硬盘。机械硬盘是传统普通硬盘,它的构成主要由盘片,磁头、盘片转轴、控制电机、磁头控制器等部件构成,读写速度和转速(通常上万转)相关;而SSD盘是以固态电子存储芯片阵列组成,包括如闪存芯片、控制芯片、缓存芯片等。其实还有混合硬盘,在机械硬盘上加以闪存颗粒作为缓存以提升性能。典型的HDD和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 |
所以选择一种适合你的云盘,才是最具性价比的方案。
至此,我们已经更进一步熟悉了腾讯云云硬盘地类型与特点,对云硬盘主要的指标地概念以及各自的关系有了更深入地认识。当然最重要的,是更加系统地探索了如何根据业务特点进行针对地性能评测,进而选择最适合自己业务的云硬盘类存储产品。
祝你在腾讯云高效访问自己的数据~
欢迎订阅专栏:巫山跬步,关注本文作者:溪歪歪,持续获取云服务技术的最佳实践讲解。感谢点赞支持!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。