零. 前言
如果从磁盘(disk)中读取/写入数据, CPU 就会处于空闲状态, 大大浪费了这段等待时间 CPU 的计算能力。 所以SSD、 缓存、 内存、 寄存器之类的设计就是为了减少 CPU 的等待时间, 释放计算能力。 可以看出业界对磁盘 I/O 的重视, 以及磁盘 I/O 对系统的影响之大。
一. 如何查看磁盘 I/O
在 Linux 平台或者 BSD 平台下, 借助 top 命令可以清楚看到磁盘 I/O 情况。
二. 如何衡量磁盘 I/O 存在瓶颈
磁盘 I/O 是否存在瓶颈取决于当前机器 CPU 的总核数(总核数计算移步我的另一篇博文: Linux 性能监控 ---- Load Average)。 公式: X(IO) = 1/(cpu 总核数) 用来衡量磁盘
I/O 情况, 以上图的机器为例子, 这台机器 2 CPU 12 核 也就是总核心数为 2*12 = 24, X(IO) = 0.04166666 = 4.17%。
如果上图指标长时间大于 4.17%, 那么我们的网站响应可能就会变慢了。
三. 影响 I/O 性能有哪几点
衡量 I/O 性能一个术语叫 IOPS(input/output per-second) 每秒输入或输出量
影响 IOPS 因素有如下 4 点:
- 多重磁盘阵列(Multidisk Arrays): 阵列里越多磁盘 IOPS 越高。 如果一个 disk 有 250 IOPS, 则 2 个 disk 有 500 IOPS
- 每个磁盘的平均 IOPS (Average IOPS per-drive): 磁盘速度越高, 当然 IOPS 越高
- RAID(具体参见 https://en.wikipedia.org/wiki/RAID) 因素: 使用 RAID 技术存储。 RAID 在写操作时有大量性能耗费。 对于 RAID6, 每次写需要 6 次磁盘操作。 RAID1 和 RAID10 每次写需要
2 次磁盘操作。
- 读写工作量(Read and Write Workload): 比如在 RAID 5 或者 RAID 6 有大量写操作, IOPS 将会很低
四. 如何解决 I/O 瓶颈问题
我们可以对磁盘进行调优, 这很复杂而且也不会超过 RAM 的速度。
所以, 可以先对 I/O 高的服务或应用进行处理, 最快的方法就是数据缓存到 RAM。 例如数据库服务器的内存配置到最高, 尽量缓存 SQL 的数据。