IOPS和Throughput吞吐量?jī)蓚€(gè)參數(shù)是衡量存儲(chǔ)性能的主要指標(biāo)。IOPS表示存儲(chǔ)每秒傳輸IO的數(shù)量,Throughput吞吐量則表示每秒數(shù)據(jù)的傳輸總量。兩者在不同的情況下都能表示存儲(chǔ)的性能狀況,但應(yīng)用的場(chǎng)景不盡相同。同時(shí),兩者之間也存在著相互的聯(lián)系,本文就IOPS和Throughput吞吐量對(duì)存儲(chǔ)性能衡量的場(chǎng)景入手,描述兩者之間的變化關(guān)系與計(jì)算方法。幫助讀者更好的了解存儲(chǔ)的性能分析與規(guī)劃。
IOPS與Throughput的關(guān)系:
IOPS(IO per Second)是用來(lái)計(jì)算I/O流中每個(gè)節(jié)點(diǎn)中每秒傳輸?shù)臄?shù)量(關(guān)于IO流中的每個(gè)節(jié)點(diǎn)的解釋,參考文章:淺析I/O處理過(guò)程與存儲(chǔ)性能的關(guān)系)。通常情況下,廣義的IOPS指得是服務(wù)器和存儲(chǔ)系統(tǒng)處理的I/O數(shù)量。但是,由于在IO傳輸?shù)倪^(guò)程中,數(shù)據(jù)包會(huì)被分割成多塊(block),交由存儲(chǔ)陣列緩存或者磁盤處理,對(duì)于磁盤來(lái)說(shuō)這樣每個(gè)block在存儲(chǔ)系統(tǒng)內(nèi)部也被視為一個(gè)I/O,存儲(chǔ)系統(tǒng)內(nèi)部由緩存到磁盤的的數(shù)據(jù)處理也會(huì)以IOPS來(lái)作為計(jì)量的指標(biāo)之一。本文中提到的IOPS,是指得廣義的IOPS,即由服務(wù)器發(fā)起的,并由存儲(chǔ)系統(tǒng)中處理的I/O單位。
IOPS通常對(duì)于小I/O,且傳輸I/O的數(shù)量比較大的情況下,是一個(gè)最主要的衡量指標(biāo)。例如,典型的OLTP系統(tǒng)中,高的IOPS則意味著數(shù)據(jù)庫(kù)的事務(wù)可以被存儲(chǔ)系統(tǒng)處理。
Throughput吞吐量是用來(lái)計(jì)算每秒在I/O流中傳輸?shù)臄?shù)據(jù)總量。這個(gè)指標(biāo),在大多數(shù)的磁盤性能計(jì)算工具中都會(huì)顯示,最簡(jiǎn)單的在Windows文件拷貝的時(shí)候,就會(huì)顯示MB/s。通常情況下,Throughput吞吐量只會(huì)計(jì)算I/O包中的數(shù)據(jù)部分,至于I/O包頭的數(shù)據(jù)則會(huì)被忽略在Throughput吞吐量的計(jì)算中。廣義上的Throughput吞吐量,也會(huì)被叫做“帶寬”,用來(lái)衡量I/O流中的傳輸通道,比如2/4/8Gbps Fibre Channel、60Mbps SCSI等等。但 “帶寬”會(huì)包括通道中所有數(shù)據(jù)的總傳輸量的最大值,而Throughput吞吐量則是只保護(hù)傳輸?shù)膶?shí)際數(shù)據(jù),兩者還是有些許區(qū)別。
Throughput吞吐量衡量對(duì)于大I/O,特別是傳輸一定數(shù)據(jù)的時(shí)候最小化耗時(shí)非常有用。備份數(shù)據(jù)的時(shí)候是一個(gè)典型的例子。在備份作業(yè)中,我們通常不會(huì)關(guān)心有多少I/O被存儲(chǔ)系統(tǒng)處理了,而是完成備份總數(shù)據(jù)的時(shí)間多少。
IOPS和Throughput吞吐量之間存在著線性的變化關(guān)系,而決定它們的變化的變量就是每個(gè)I/O的大小。從圖中可以看到,當(dāng)被傳輸?shù)腎/O比較小的情況下,每個(gè)I/O所需傳輸?shù)臅r(shí)間會(huì)比較少,單位時(shí)間內(nèi)傳輸?shù)腎/O數(shù)量就多。
而由于處理數(shù)據(jù)包頭,總的時(shí)間內(nèi)傳輸實(shí)際數(shù)據(jù)相對(duì)較低。
當(dāng)I/O尺寸比較大的情況下,如下圖所示,傳輸每個(gè)I/O的時(shí)間增大,IOPS數(shù)量下降。但是相比更高的百分比的I/O通道用來(lái)傳輸實(shí)際數(shù)據(jù),Throughput則明顯上升。
我們可以用一個(gè)簡(jiǎn)單的公式來(lái)計(jì)算Throughput和IOPS之間的關(guān)系:
Throughput MB/s = IOPS * KB per IO / 1024
假設(shè)一個(gè)10個(gè)10K SAS磁盤,每個(gè)磁盤提供140 IOPS,總共有1400最大IOPS。理論上這些磁盤處理不同的IO大小,所能達(dá)到的Throughput吞吐量是有區(qū)別的。簡(jiǎn)單的來(lái)說(shuō),物理層面IOPS和Throughput哪個(gè)先達(dá)到了物理磁盤的極限,就決定了這個(gè)物理磁盤的性能閥值。下面的計(jì)算公式可以看到,單位I/O大小可以使得吞吐量成倍提升,但是未能達(dá)到10個(gè)SAS磁盤1GB/S(每個(gè)磁盤100MB/s帶寬)的理論“帶寬”。顯而易見(jiàn),因?yàn)榇蠖鄶?shù)應(yīng)用的I/O不會(huì)那么大,所以你會(huì)看到存儲(chǔ)陣列的吞吐量遠(yuǎn)小于廠商提供的理論值,原因就是因?yàn)镮OPS先達(dá)到了性能閥值,使得吞吐量無(wú)法再提升。當(dāng)然也有特殊的應(yīng)用,例如流媒體服務(wù)器等,應(yīng)用端可以使用2MB的I/O大小,那么吞吐量利用率顯然會(huì)更加高,IOPS的要求則相對(duì)較低了。
MB/s = 1400 * 64 /1024 = 87.5 MB/s
MB/s = 1400 * 128 /1024 = 175 MB/s
MB/s = 1400 * 256 /1024 = 350 MB/s
綜上所述,在規(guī)劃存儲(chǔ)性能和處理存儲(chǔ)性能問(wèn)題的時(shí)候,需要綜合看IOPS和Throughput吞吐量這兩個(gè)參數(shù),本文的觀點(diǎn)總結(jié)為以下幾點(diǎn):
性能工具統(tǒng)計(jì)的Throughput吞吐量永遠(yuǎn)達(dá)不到實(shí)際的I/O流中節(jié)點(diǎn)的理論“帶寬”,原因是性能工具不會(huì)統(tǒng)計(jì)I/O的包頭信息,而是實(shí)際的數(shù)據(jù)傳輸量。
磁盤物理層面IOPS和Throughput哪個(gè)先達(dá)到了物理磁盤的極限,就決定了這個(gè)物理磁盤的性能閥值,然而決定哪個(gè)先達(dá)到性能閥值的就是I/O的大小。
性能監(jiān)控工具顯示IOPS低或者Throughput低于預(yù)期,先不要直接認(rèn)為存儲(chǔ)性能存在問(wèn)題,搞清楚應(yīng)用的I/O大小,再做后續(xù)判斷。
存儲(chǔ)性能另外一個(gè)重要因素還有磁盤響應(yīng)時(shí)間(Response Time),本文的內(nèi)容是建立在存儲(chǔ)可以提供接受訪問(wèn)內(nèi)的響應(yīng)時(shí)間為前提。