「Storage」- 性能指标:IOPS

问题描述

任何存储设 IOPS(I/O Operation Per Second)是一个最常用的指标。顾名思义,QPS 就是每秒 的读与操作,当然是速度越快越好。从数字来看,5w 的 IOPS 一定比 6w 的快吗?这并不是事实。而且不同厂家 SSD,相同的 IOPS 数据,在具体运行起来时,竟然会有完全不同的感觉;

IOPS 应该是当前硬盘数据中最重耍的一个值,测试方法有很多。

影响因素

测试时使用的不同因素,如 CPU、多核打幵,内存多少;CPU 的速度冇时会决定 SSD 的性能;
块的大小,诸如 4KB、8KB 等等,(这点重要);
是循序读入还是随机读入,顺序读入会快很多;
读写操作的比重,如读比与多;
读入时的任务进程有多少,越多越快 0
命令的深度,命令越深,等待时间会越少;
安装的操作系统,如 Windows 8 或 XP 就会有不同的数据;
操作系统在后台是否运行其他代码;
SSD 使用历史,是否有被多次读与过;
驱动程序是否有针对操作系统或 SSD 优化;Windows 是针对 SSD 冇优化的体系

顺序读入,就是连续读数据的速度,正常 SATA3 SSD 数值 500MB/s 以上
达标的 SATA3 SSD,如果使用正常的优质颗粒,计算机的速度也正常,应该是在 500MB 以上;

顺序写入,正常 SATA3 SSD 数值 350MB/S 以上。
这个数值随着不同的控制芯片、不同的颗粒以及驱动程序优化等因素会有影响。不同的品牌也有不同的效 果。但最重要的,就是当这台 SSD 使用一段时间后,这个数值就会下降(除非重新做分区)。有趣的是,同一品 SSD,这个数值会随着容量变大而大增,如 128GB 的为 200MB, 256GB 的可能会到 350MB,而 512GB 的会到 445MB;

随机读入,块大小为 4KB,正常 SATA3 数值:30000 IOPS 以上
这个数值是业界最爱用的测试,较能贴近真正使用 SSD 时的情境。由于这个数值对控制芯片的要求很高,因此不同的产品有不同的成绩。一般来说,以 Sandforce SF2281 的产品来说,最高值都可超过 60000,而对Marvell 9174 芯片组的 SSD 来说,最高可超过 70000。我们会在梢后附上测试的完整方式。要注意的是,这个数值会随着容量的不同而改变;

随机写入,块大小为 4KB,正常 SATA3 数值:20000 IOPS 以上
随机写入也是以 4K 为主,也会随着容量改变而改变。当前最高的 Plextor M2P 256GB 可达 65000, 一般 也在 30000 以上;

性能基准

Know Your Storage Constraints: IOPS and Throughput

Generally a HDD will have an IOPS range of 55-180, while a SSD will have an IOPS from 3,000 – 40,000.

Queue Depth and Latency

为什么这里提高队列深度,IOPS 没有提高,反而 IO 平均响应时间变大了?

原因是当队列深度为 1时,如果硬盘的利用率已经达到了98% ,说明硬盘已经没有多少空闲时间可以压榨了。而且响应时间为 4ms 。此时,对于 SATA 硬盘,当增加队列深度时,并不会增加 IOPS ,只会增加响应时间。这是因为硬盘只有一个磁头,并行度是1,所以当 IO 请求队列变长时,每个 IO 请求的等待时间都会变长(IO 位置不同,寻道时间增加),导致响应时间也变长。

测试一块 SATA 硬盘的 4K 随机写性能,可以看到 IOPS 不会随着队列深度的增加而增加,反而是平均响应时间在倍增。

寻址空间对 IOPS 的影响

我们发现,当设置 size=1GB 时, IOPS 会显著提高到 568 ,IO 平均响应时间会降到 7ms (队列深度为 4)?

这是因为当寻址空间为 1GB 时,磁头需要移动的距离变小了,每次 IO 请求的服务时间就降低了,这就是空间局部性原理。假如我们测试的 RAID 卡或者是磁盘阵列( SAN ),它们可能会用 Cache 把这 1GB 的数据全部缓存,极大降低了 IO 请求的服务时间(内存的写操作比硬盘的写操作快 1000 倍)。所以设置寻址空间为 1GB 的意义不大,因为我们是要测试硬盘的全盘性能,而不是 Cache 的性能。

观察指标

你可以使用 iostat -x 命令在 await 列查看每个设备的等待时间。r_await 和 w_await 列给出了读取和写入请求的等待时间。%iowait 列给出了系统的全局等待时间;

参考文献

磁盘性能指标–IOPS 理论