对于存储系统IOPS和性能的理解
http://rickardnobel.se/storage-performance-iops-latency-throughput/
iops(io per second)是我们在分析存储介质时抽象出的概念,表示可以发起多少个io操作/s. 因为每种存储介质工作方式是不同的,抽象出的iops则可以更好地让我们分析。 好比磁盘的话我们使用转速来衡量,但是放在磁带或者是SSD上的话,那么转速这个指标就没有意义。iops可以比较好定量地分析某个存储介质的操作速度。
如果我们考虑磁盘的话,那么iops基本上和磁盘转速相关。 (也和磁盘带宽和读写负载也有关系) 比如转速是7200RPM的话,那么应该是120RPS.如果一个操作磁头需要转一圈的话,那么延迟大概在8ms左右。另外考虑向某个磁道移动时间的话,我们可以大概可以认为延迟在15ms左右。 这样折合计算iops大概在66-67. (不过这个数值没有实际意义,因为不可能每次读取都需要转动磁头以及移动磁道)
存储系统一方便受限于iops,一方便受限于磁盘带宽 。通常磁盘带宽大约在80MB/s一下,50~60MB/s是比较典型的值。(磁盘带宽还取决于读写负载)
note@2015-05-22: 更正一下,即使对于HDD来说iops也不仅仅和磁盘转速相关,还和磁盘带宽以及读写负载有关,所以事实上iops就是衡量存储介质和存储系统的一个独立综合指标。这也同时意味着,当我们宣称某个存储介质或者是存储系统iops是多少时,我们一定要把读写负载情况这个context也说明情况。
note@2015-05-21: iops的测算非常复杂,主要是涉及到的环境配置参数非常多,比如read/write buffer size, 多少个线程来做读写,以及随机和顺序读写等。前段时间想要测量一下磁盘的iops,所以就在网上搜索了一下这方面的工具和文章:
- http://code.google.com/p/ioping/ # ioping. C, 使用方便,可测读写,但是不支持多线程
- Measuring Disk Usage In Linux (%iowait vs IOPS) - Everything is a Ghetto : http://www.thattommyhall.com/2011/02/18/iops-linux-iostat/ # 使用iostat -dx 1来查看iops
- Measuring Disk IO Performance « Benjamin Schweizer. : http://benjamin-schweizer.de/measuring-disk-io-performance.html # iops. Python, 使用方便,只能测读,支持多线程
- http://www.ee.pw.edu.pl/~pileckip/aix/iowait.htm # 只看iowait比例是没有意义的
存储系统的性能主要包括两个维度:吞吐量和访问延迟。设计系统时要求能够在保证访问延迟的基础上,通过最低的成本实现尽可能高的吞吐量。磁盘和SSD的访问延迟差别很大,但是带宽差别不大。因此磁盘适合大块顺序访问的存储系统,SSD适合随机访问较多或者对延迟比较敏感的关键系统。二者也常常组合在一起进行混合存储,热数据(访问频繁)存储到SSD,冷数据(访问不频繁)存储到磁盘中。