在目前的存储环境中,我们经常看到很多关于存储性能的评测报告,但是各个厂商为了突出自己的性能指标,可能会混淆很多概念。这就需要在看此类报告的时候对于其中的各种参数,首先要有一个正确的理解。另外,在系统运行过程中,出现的各类性能相关的问题,要如何看待,这都需要对性能有个基本的了解。
首先性能是什么,通常习惯用2个指标来标识:
- 吞吐量
(Throughput) = IOPS * Op size
单位时间内完成的IO数量 x 单个操作的大小 - 延迟 (Lantency) - 系统完成单个操作所需要的时间 = 在队列中等待的时间 + 系统处理的时间
从上面的公式可以看出,吞吐量的单位可以是 MB/s,也可以是Mb/s,具体取决于你用什么单位。 但是可以看出,它并不是单纯的由IOPS决定,还和单个操作的大小有关。
例如,A系统的IOPS = 10000/s, B系统的IOPS = 5000/s,这并不能表明A系统比B系统的性能好。
假如A系统的OP size是4KB,而B系统的是64KB,那么各自的吞吐量为:
-
A = 10000/s x 4KB = 40000KB/s
-
B = 5000/s x 64KB = 320000KB/s
如果仅仅从吞吐量上看,B是A的8倍。
此外,还要注意的一点是,吞吐量中的OP size(operation size)并不是处理请求的系统决定的,而是由发送请求的,一般是客户端来决定的。所以提高吞吐量的一个方式就是提高客户端请求的OP size。
至于IOPS,这个一般来讲由两个因素决定,一个是接收请求的一方,例如存储的处理能力,另一方面是发送请求一方的发送能力。并不是单一由存储系统来决定的。
举个例子,H1是客户端1号,每秒钟并行向存储发送100个请求;H2是客户端2号,每秒钟通过单线程向相同的存储发送10个请求。虽然存储端相同,但是因为单位时间内接收的请求数量不同,在其他因素都相同的前提下,得到的IOPS一个是100,另一个是10。
从上面大家可以看出,单一的看IOPS,或者单一的看吞吐量,都是仅仅看到一个侧面,并不能实际反应一个系统的真实性能指标。延迟,应该说是衡量一个系统的性能的一个非常重要的指标,反而被很多人忽略。原因是,延迟,是请求从进入系统的处理队列,到完成处理返回给客户端的所花的时间的总和。
如果一个系统的吞吐量很高,但是延迟很高,无法满足客户端应用的响应时间的要求,那么对于客户端来讲再高的吞吐量都是没有太大意义的。
除了这两个指标,还有很多因素会影响到性能。例如,并行性,读写类型,随机读写,顺序读写,以及各种组合,网络等等。所以仅仅强调单一指标,是没有太大意义的。需要综合评定一个系统的整体性能,要结合多方面的因素来评定。
同理,在出现性能问题的时候,就需要从这几方面来判定性能问题客户是如何来判定,测量的,有哪些因素影响,是否是客户本身对性能的期望本身有问题等等。