數據存儲系統的IOPS性能與哪些因素有關

一、IOPS的理解

IOPS(Input/Output Operations Per Second)故名思意就是數據存儲系統每秒能完成的I/O讀寫次數,即單位時間內系統能處理的I/O請求數量,是一個用於計算機數據存儲性能測試的量測指標。這個存儲系統可以是單塊硬盤或者單臺設備也可以是包含多臺設備的一套存儲網絡系統,比如SAN或者分佈式多節點系統等。

二、影響存儲系統IOPS性能有哪些因素?

其實我一直想寫一篇關於如何準確評估IOPS性能的文章,但是仔細一想我覺得要把存儲系統的IOPS評估的非常準確,真的屬實不容易,爲什麼呢?因爲IOPS性能和許多因素相關,比如以下幾個,我覺得都是比較值得一提的,每一個都會對IOPS性能產生影響(這裏是針對單臺或一套存儲設備或存儲網絡):

1、系統的硬盤數量和類型

(1)硬盤數量即一套存儲系統能同時管理和運行的硬盤數量是多少塊,一般情況下,硬盤數量越多,整體IOPS性能會越好,可以簡單的理解爲堆疊;

(2)硬盤的類型,具體包括硬盤的接口類型,機械硬盤還是SSD硬盤等。機械硬盤的轉速、容量(存儲密度)、磁頭尋道時間、旋轉延遲,數據傳輸時間這些都和系統的IOPS性能相關聯的。而固態硬盤SSD是一種電子裝置,避免了傳統HDD磁盤在尋道和旋轉上的時間花費,存儲單元尋址開銷大大降低,因此IOPS可明顯提高。

2、網絡和接口速度

對一套存儲系統來說,應用服務器和存儲設備之間的網絡帶寬和網絡接口速度以及多節點情況下各存儲節點之間所使用的網絡的速度也都是影響IOPS性能的重要因素。

3、應用的隨機讀寫或者順序讀寫I/O比例

根據實際的應用情況可將IOPS細分爲如下幾種情形:

(1)讀寫混合以及隨機I/O負載情況下的IOPS,這個與實際I/O情況最爲相符,大多數應用是要關注此指標;

(2)100%隨機讀負載情況下的IOPS(Random Read IOPS);

(3)100%隨機寫負載情況下的IOPS(Random Write IOPS);

(4)100%順序讀負載情況下的IOPS(Sequential Read IOPS);

(5)100%順序寫負載情況下的IOPS(Sequential Write IOPS)。

以上每種不同的情況下的IOPS差別是很大的,比如一般順序的讀寫肯定比隨機讀寫的IOPS值要高的,順序的尋址時間比隨機的快

此外傳統的機械硬盤讀取和寫入時間差不多,而大部分閃存SSD的寫入速度比讀要慢很多,原因是無法寫入一個之前寫過的區域,會強制引導垃圾數據回收功能,但總體SSD性能肯定要好於HDD。

4、Cache命中率

Cache命中率對實際IOPS有決定性的影響,Cache命中率取決於數據的分佈,Cache SIZE的大小和數據訪問的規則以及Cache的算法,我們這裏把這些內部原理都省略掉,只強調:對於一個存儲系統來說,讀Cache的命中率越高,一般就表示它可以支持更多的IOPS。那麼什麼叫命中率呢?終端用戶訪問加速緩存時,如果緩存駐了要被訪問的數據時就叫做命中,如果沒有的話需要回到原設備提取,就是沒有命中。命中率=命中數/(命中數+沒有命中數), 緩存命中率也是判斷加速效果好壞的重要因素之一。

5、RAID或文件系統模式

這裏包含傳統的RAID以及分佈式文件系統等,對於順序讀寫而且寫性能要求高,有冗餘要求的應用,選擇RAID1或RAID10。順序寫要求高的數據, 應單獨在一個RAID組中,避免來回尋址,典型的有Oracle的 redo log, Exchange 的 Transaction log等日誌型的數據。對於有額外備份措施的數據, 沒有冗餘的要求, 讀寫性能要求高的用RAID0,比如實時數據採集。對於讀要求高於寫要求,隨機寫要求不高,容量上有考慮的,選擇RAID5。對於分佈式軟件定義存儲系統,小文件類和隨機讀寫頻繁的選擇副本機制,其他的可選擇糾刪碼模式。

6、隊列深度

主要指的是端口隊列中等待服務的I/O請求數量。如果I/O請求的數量超過了最大隊列深度,則該事務將在一段時間無法重新嘗試。使用SAS和SATA,排隊的I/O請求有一定的侷限,但NVMe在大大增加隊列深度方面是一個重要的進步,NVMe可以提供海量的隊列深度。其實加大硬盤隊列深度就是讓硬盤不斷工作,減少硬盤的空閒時間。

7、應用線程數

線程數和IOPS的關係不言而喻,一個應用同時工作的線程越多那麼自然需要更多的I/O併發,所以自然就需要更高的IOPS來支撐,反之亦然。

三、如何綜合評估IOPS性能?

1、利用測試工具

對於測試工具來講,一個請求從主機下發到存儲,存儲完成後返回到主機,這纔算是這個I/O的一個完整週期。存儲設備製造商提出的IOPS性能不保證就是實際應用下的性能,因爲實際的情況多種多樣。但IOPS可以通過測試程序來模擬一些不同的業務情形,建立測試模型,然後按照測試模型來實際運行,以便找到最佳的存儲配置。

2、根據經驗和行業參考值來估算

每種類型的硬盤都有在特定環境下的IOPS參考值或者叫理論值,個人認爲如今的硬盤接口以及網絡的帶寬已經不是瓶頸,因爲技術的發展讓這些指標已經很快了。如果預估IOPS,最主要是讀寫比例和RAID模式的寫懲罰,要有一個固定參考值,才能估算出較爲接近的數值。

硬盤的IOPS參考值以及總的可用IOPS的計算公式,比如:

單硬盤IOPS = 1000ms / ((磁盤旋轉延遲時間(ms) + 磁頭尋道時間(ms))

系統總的IOPS=硬盤數量 × 單磁盤IOPS

系統總的可用IOPS=(系統總的IOPS×寫百分比÷RAID寫懲罰)+(系統總的IOPS×讀百分比)

RAID5寫懲罰爲4,RAID6寫懲罰爲6,RAID10寫懲罰爲2,RAID1寫懲罰爲2,RAID0寫懲罰爲1,分佈式多節點的以此類推。

我個人覺得如果不是那種每秒鐘都有幾十次以上的在線交易系統,絕大部分的業務系統的IOPS需求都是比較容易滿足的。如果能估算出應用總的IOPS的需求,那麼就可以計算出需要多少塊硬盤了。

四、順便提一下吞吐量

吞吐量指的是單位時間內存儲系統可以成功傳輸的數據數量。如果前面估算出了系統的IOPS了,吞吐量也就迎刃而解了。吞吐量估算公式爲:

每秒I/O吞吐量= IOPS × 平均 I/O SIZE

從公式可以看出:I/O SIZE越大以及IOPS越高,那麼每秒I/O 的吞吐量就越高。對於一個存儲系統來講,這兩個指標均有其最大值,而且這兩個指標也是相輔相成的。

五、數據塊的大小和存儲性能

對於數據塊很小並且隨機讀寫頻繁的應用,IOPS是關鍵衡量指標,比如OLTP(Online Transaction Processing)在線交易處理。而對於大數據塊並且是順序讀寫的應用,如VOD(Video On Demand)視頻類需求,這種應用則更加關注吞吐量指標(Throughput),這時候IOPS指標就不是那麼的重要了。

這裏可以舉例子:

比如:讀取10000個1KB文件,用時10秒,雖然Throught(吞吐量)=1MB/s,但是IOPS=1000 ,對於追求IOPS的應用就有意義;

再比如:讀取1個10MB文件,用時0.2秒,IOPS只等於5,但是Throught(吞吐量)=50MB/s,對於追求吞吐量的應用就有意義。

所以並不是每個應用都要追求高的IOPS的,也就是不是每套存儲系統的性能都是以IOPS作爲唯一的衡量指標,要根據應用的數據塊大小以及應用的特性來綜合判斷哪個指標是最需要關注的!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章