【系统与架构设计】你知道硬盘能有多快吗?

应用软件通常都是由各种类型的软硬件相互配合实现,无论你是单体架构还是分布式架构,任何一个模块或者环节都可能是系统的瓶颈,可能是CPU,可能是网络,也可能是硬盘等。了解一些基础的边界(“量”),有助于我们分析系统的瓶颈。

问题

  • 大部分的应用系统都是IO密集型,同机房的服务一般性能的瓶颈在于磁盘IO,那么一般机械硬盘的性能上限是怎么样的,根据磁盘的最大性能能否判断我们的系统是否有优化的空间?

  • B+ tree 的索引 一般是3~4层,也就是平均情况下需要3到4次的I/O,我们的应用需要1000TPS,普通的机械磁盘的性能是否能达到要求?

  • 假如innodb的事务处理能力只受redo log 的写入速度影响,一条操作日志1kb的话,TPS可以到达多少?

  • 假如网络带宽限制不计的话,我们从一台机器同步一个1TB的数据,机械硬盘需要多久?

这些问题可能都不是正确的问题,我想表达的是假如现在来解答这些问题,能否根据自己的一些印象(磁盘的性能的量级。HDD硬盘100MB/s,SSD 500MB/s ,IOPS 100… 等)来估算一下。

存储设备的2个性能指标

  • IOPS :(Input/Output Per Second) 每秒的输入输出量,代表存储系统的每秒的I/O请求数。“只关系数量”

    • Random Read IOPS(随机读)
    • Random Write IOPS(随机写)
    • Sequential Read IOPS(顺序读)
    • Sequential Write IOPS(顺序写)
    • Total IOPS (混合读写)
  • 带宽/吞吐量:单位时间内传输的数据大小,比如10MB/秒 。“只关系比特数或者说容量”

对于OLTP应用/数据库,我们看重的更多的是随机I/O的性能,这个时候看IOPS更加合理,对于大文件或者顺序读写的应用(hadoop/kafka……),更加看重的是吞吐量。

机械硬盘 HDD

  • IOPS :100左右
设备 形式 IOPS 接口 注解
7,200RPMSATA硬盘驱动器 硬盘驱动器 ~75-100 IOPS SATA 3Gbit/s
10,000 RPM SATA硬盘驱动器 硬盘驱动器 ~125-150 IOPS SATA 3 Gbit/s
10,000 rpmSAS硬盘驱动器 硬盘驱动器 ~140 IOPS SAS(串列SCSI)
15,000 rpmSAS硬盘驱动器 硬盘驱动器 ~175-210 IOPS SAS(串列SCSI)

数据来源于百度百科 https://baike.baidu.com/item/IOPS

  • 带宽/吞吐量 :100MB/s 左右

数据来源 https://hdd.userbenchmark.com/

可以看到 机械硬盘的的读写速度在 ~20.6MB/s - 200MB/S 之间

固态硬盘 SSD

  • IOPS :8000~80000
设备 形式 IOPS 接口 注解
英特尔Intel X25-M G2(MLC) SSD ~8,600 IOPS SATA 3 Gbit/s 英特尔的数据表声称在4KB数据的写入及读取时,分别有有6,600/8,600 IOPS (80GB/160GB版本)及35,000 IOPS的速度。
英特尔 Intel X25-E (SLC) SSD ~5,000 IOPS SATA 3 Gbit/s 英特尔数据表声称在写入和读取的速度为3,300 IOPS及35,000 IOPS。写入和读取混和时为5,000 IOPS。英特尔的X25-E G1比X25-M G2快了约三倍
G.SkillPhoenix Pro SSD ~20,000 IOPS。 SATA 3 Gbit/s SandForce-1200为基础的固态硬件,配合加强版的固件,最快可到50,000 IOPS,性能测试的结果是随机读取可到~25,000 IOPS,随机写入可到~15,000 IOPS。
OCZVertex 3 SSD 最高可到60,000 IOPS SATA 6 Gbit/s 随机写入4KB (Aligned)
CorsairForce Series GT SSD 最高可到85,000 IOPS SATA 6 Gbit/s 240GB Drive,循序读取为555 MB/s,循序写入为525 MB/s。随机写入4KB (Aligned)

数据来源于百度百科 https://baike.baidu.com/item/IOPS

  • 带宽/吞吐量: 读548MB/S | 写 370MB/s

数据来源 https://ssd.userbenchmark.com/