为什么磁盘的I/O使用率已接近100%,但磁盘的读IOPS没有达到IOPS上限?
问题现象:
单块500GiB的超高IO磁盘,磁盘I/O使用率为99.94%时,磁盘的读IOPS只有12000,没有达到磁盘的IOPS上限。
原因说明:
- 磁盘I/O使用率达到100%,不能代表磁盘的IOPS也达到上限。
磁盘I/O使用率,用于统计测量对象在测量周期内提交读取或写入操作的占比,不能代表磁盘的I/O性能数据,仅代表磁盘的繁忙程度。
由于云硬盘具有可以并行处理多个I/O请求的能力,因此当磁盘的I/O使用率达到100%时,也不表示达到了磁盘的瓶颈。例如:某个云硬盘处理单个I/O请求需要0.1秒,且可以同时处理10个I/O请求,那么当10个I/O请求依次按顺序(串行)提交时,需要1秒才可以全部完成,则在1秒的采样周期中,磁盘的I/O使用率达到了100%;而如果10个I/O请求一次性全部(并行)提交时,需要0.1秒就可以全部完成,则在1秒的采样周期中,磁盘的I/O使用率仅达到10%。由此可见,即使磁盘的I/O使用率达到100%,磁盘仍然有余力可以处理更多的I/O请求,即没有达到饱和状态。
- 磁盘的读IOPS没有达到IOPS上限的原因
对于500GiB的超高IO磁盘,其IOPS性能上限=min (单个云硬盘最大IOPS, 单个云硬盘最小IOPS + 每GiB云硬盘的IOPS × 云硬盘容量 ) = min (20000, 1500 + 50 × 500 ) = 20000
磁盘的读IOPS,用于统计每秒从测量对象读取数据的请求次数。IOPS实际是由时延控制的,目前在数据块大小为4KiB的情况下,超高IO磁盘的单队列访问时延为1ms,那么在单队列场景下,1秒可以处理的IOPS为1000,即当IOPS为12000时,队列深度大约为12,如果要达到IOPS上限20000,则队列深度大约需要达到20。