數(shù)據(jù)存儲系統(tǒng)的IOPS性能與哪些因素有關(guān)?
本文轉(zhuǎn)載自微信公眾號「存儲災備」,作者畢磊。轉(zhuǎn)載本文請聯(lián)系存儲災備公眾號。
一、IOPS的理解
IOPS(Input/Output Operations Per Second)故名思意就是數(shù)據(jù)存儲系統(tǒng)每秒能完成的I/O讀寫次數(shù),即單位時間內(nèi)系統(tǒng)能處理的I/O請求數(shù)量,是一個用于計算機數(shù)據(jù)存儲性能測試的量測指標。這個存儲系統(tǒng)可以是單塊硬盤或者單臺設備也可以是包含多臺設備的一套存儲網(wǎng)絡系統(tǒng),比如SAN或者分布式多節(jié)點系統(tǒng)等。
二、影響存儲系統(tǒng)IOPS性能有哪些因素?
其實我一直想寫一篇關(guān)于如何準確評估IOPS性能的文章,但是仔細一想我覺得要把存儲系統(tǒng)的IOPS評估的非常準確,真的屬實不容易,為什么呢?因為IOPS性能和許多因素相關(guān),比如以下幾個,我覺得都是比較值得一提的,每一個都會對IOPS性能產(chǎn)生影響(這里是針對單臺或一套存儲設備或存儲網(wǎng)絡):
1、系統(tǒng)的硬盤數(shù)量和類型
(1)硬盤數(shù)量即一套存儲系統(tǒng)能同時管理和運行的硬盤數(shù)量是多少塊,一般情況下,硬盤數(shù)量越多,整體IOPS性能會越好,可以簡單的理解為堆疊;
(2)硬盤的類型,具體包括硬盤的接口類型,機械硬盤還是SSD硬盤等。機械硬盤的轉(zhuǎn)速、容量(存儲密度)、磁頭尋道時間、旋轉(zhuǎn)延遲,數(shù)據(jù)傳輸時間這些都和系統(tǒng)的IOPS性能相關(guān)聯(lián)的。而固態(tài)硬盤SSD是一種電子裝置,避免了傳統(tǒng)HDD磁盤在尋道和旋轉(zhuǎn)上的時間花費,存儲單元尋址開銷大大降低,因此IOPS可明顯提高。
2、網(wǎng)絡和接口速度
對一套存儲系統(tǒng)來說,應用服務器和存儲設備之間的網(wǎng)絡帶寬和網(wǎng)絡接口速度以及多節(jié)點情況下各存儲節(jié)點之間所使用的網(wǎng)絡的速度也都是影響IOPS性能的重要因素。
3、應用的隨機讀寫或者順序讀寫I/O比例
根據(jù)實際的應用情況可將IOPS細分為如下幾種情形:
(1)讀寫混合以及隨機I/O負載情況下的IOPS,這個與實際I/O情況最為相符,大多數(shù)應用是要關(guān)注此指標;
(2)100%隨機讀負載情況下的IOPS(Random Read IOPS);
(3)100%隨機寫負載情況下的IOPS(Random Write IOPS);
(4)100%順序讀負載情況下的IOPS(Sequential Read IOPS);
(5)100%順序?qū)懾撦d情況下的IOPS(Sequential Write IOPS)。
以上每種不同的情況下的IOPS差別是很大的,比如一般順序的讀寫肯定比隨機讀寫的IOPS值要高的,順序的尋址時間比隨機的快,示意圖:
此外傳統(tǒng)的機械硬盤讀取和寫入時間差不多,而大部分閃存SSD的寫入速度比讀要慢很多,原因是無法寫入一個之前寫過的區(qū)域,會強制引導垃圾數(shù)據(jù)回收功能,但總體SSD性能肯定要好于HDD。
4、Cache命中率
Cache命中率對實際IOPS有決定性的影響,Cache命中率取決于數(shù)據(jù)的分布,Cache SIZE的大小和數(shù)據(jù)訪問的規(guī)則以及Cache的算法,我們這里把這些內(nèi)部原理都省略掉,只強調(diào):對于一個存儲系統(tǒng)來說,讀Cache的命中率越高,一般就表示它可以支持更多的IOPS。那么什么叫命中率呢?終端用戶訪問加速緩存時,如果緩存駐了要被訪問的數(shù)據(jù)時就叫做命中,如果沒有的話需要回到原設備提取,就是沒有命中。命中率=命中數(shù)/(命中數(shù)+沒有命中數(shù)), 緩存命中率也是判斷加速效果好壞的重要因素之一。
5、RAID或文件系統(tǒng)模式
這里包含傳統(tǒng)的RAID以及分布式文件系統(tǒng)等,對于順序讀寫而且寫性能要求高,有冗余要求的應用,選擇RAID1或RAID10。順序?qū)懸蟾叩臄?shù)據(jù), 應單獨在一個RAID組中,避免來回尋址,典型的有Oracle的 redo log, Exchange 的 Transaction log等日志型的數(shù)據(jù)。對于有額外備份措施的數(shù)據(jù), 沒有冗余的要求, 讀寫性能要求高的用RAID0,比如實時數(shù)據(jù)采集。對于讀要求高于寫要求,隨機寫要求不高,容量上有考慮的,選擇RAID5。對于分布式軟件定義存儲系統(tǒng),小文件類和隨機讀寫頻繁的選擇副本機制,其他的可選擇糾刪碼模式。
6、隊列深度
主要指的是端口隊列中等待服務的I/O請求數(shù)量。如果I/O請求的數(shù)量超過了最大隊列深度,則該事務將在一段時間無法重新嘗試。使用SAS和SATA,排隊的I/O請求有一定的局限,但NVMe在大大增加隊列深度方面是一個重要的進步,NVMe可以提供海量的隊列深度。其實加大硬盤隊列深度就是讓硬盤不斷工作,減少硬盤的空閑時間。
7、應用線程數(shù)
線程數(shù)和IOPS的關(guān)系不言而喻,一個應用同時工作的線程越多那么自然需要更多的I/O并發(fā),所以自然就需要更高的IOPS來支撐,反之亦然。
三、如何綜合評估IOPS性能?
1、利用測試工具
對于測試工具來講,一個請求從主機下發(fā)到存儲,存儲完成后返回到主機,這才算是這個I/O的一個完整周期。存儲設備制造商提出的IOPS性能不保證就是實際應用下的性能,因為實際的情況多種多樣。但IOPS可以通過測試程序來模擬一些不同的業(yè)務情形,建立測試模型,然后按照測試模型來實際運行,以便找到最佳的存儲配置。
2、根據(jù)經(jīng)驗和行業(yè)參考值來估算
每種類型的硬盤都有在特定環(huán)境下的IOPS參考值或者叫理論值,個人認為如今的硬盤接口以及網(wǎng)絡的帶寬已經(jīng)不是瓶頸,因為技術(shù)的發(fā)展讓這些指標已經(jīng)很快了。如果預估IOPS,最主要是讀寫比例和RAID模式的寫懲罰,要有一個固定參考值,才能估算出較為接近的數(shù)值。
硬盤的IOPS參考值以及總的可用IOPS的計算公式,比如:
單硬盤IOPS = 1000ms / ((磁盤旋轉(zhuǎn)延遲時間(ms) + 磁頭尋道時間(ms))
系統(tǒng)總的IOPS=硬盤數(shù)量 × 單磁盤IOPS
系統(tǒng)總的可用IOPS=(系統(tǒng)總的IOPS×寫百分比÷RAID寫懲罰)+(系統(tǒng)總的IOPS×讀百分比)
RAID5寫懲罰為4,RAID6寫懲罰為6,RAID10寫懲罰為2,RAID1寫懲罰為2,RAID0寫懲罰為1,分布式多節(jié)點的以此類推。
我個人覺得如果不是那種每秒鐘都有幾十次以上的在線交易系統(tǒng),絕大部分的業(yè)務系統(tǒng)的IOPS需求都是比較容易滿足的。如果能估算出應用總的IOPS的需求,那么就可以計算出需要多少塊硬盤了。
四、順便提一下吞吐量
吞吐量指的是單位時間內(nèi)存儲系統(tǒng)可以成功傳輸?shù)臄?shù)據(jù)數(shù)量。如果前面估算出了系統(tǒng)的IOPS了,吞吐量也就迎刃而解了。吞吐量估算公式為:
每秒I/O吞吐量= IOPS × 平均 I/O SIZE
從公式可以看出:I/O SIZE越大以及IOPS越高,那么每秒I/O 的吞吐量就越高。對于一個存儲系統(tǒng)來講,這兩個指標均有其最大值,而且這兩個指標也是相輔相成的。
五、數(shù)據(jù)塊的大小和存儲性能
對于數(shù)據(jù)塊很小并且隨機讀寫頻繁的應用,IOPS是關(guān)鍵衡量指標,比如OLTP(Online Transaction Processing)在線交易處理。而對于大數(shù)據(jù)塊并且是順序讀寫的應用,如VOD(Video On Demand)視頻類需求,這種應用則更加關(guān)注吞吐量指標(Throughput),這時候IOPS指標就不是那么的重要了。
這里可以舉例子:
比如:讀取10000個1KB文件,用時10秒,雖然Throught(吞吐量)=1MB/s,但是IOPS=1000 ,對于追求IOPS的應用就有意義;
再比如:讀取1個10MB文件,用時0.2秒,IOPS只等于5,但是Throught(吞吐量)=50MB/s,對于追求吞吐量的應用就有意義。
所以并不是每個應用都要追求高的IOPS的,也就是不是每套存儲系統(tǒng)的性能都是以IOPS作為唯一的衡量指標,要根據(jù)應用的數(shù)據(jù)塊大小以及應用的特性來綜合判斷哪個指標是最需要關(guān)注的!