磁盤IOPS概念及IOPS的計算與測試

IOPS概念算法

       IOPS (Input/Output Per Second)即每秒的輸入輸出量(或讀寫次數),是衡量磁盤性能的主要指標之一。IOPS是指單位時間內系統能處理的I/O請求數量,通常以每秒處理的I/O請求數量爲單位,I/O請求一般爲讀或寫數據操做請求。隨機讀寫頻繁的應用,如OLTP(Online Transaction Processing),IOPS是關鍵衡量指標。另外一個重要指標是數據吞吐量(Throughput),指單位時間內能夠成功傳輸的數據數量。對於大量順序讀寫的應用,如電視臺的視頻編輯,視頻點播VOD(Video On Demand),則更關注吞吐量指標。數據庫

IOPS計算方法dom

      傳統磁盤本質上一種機械裝置,如FC, SAS, SATA磁盤,轉速一般爲5400/7200/10K/15K rpm不等。影響磁盤的關鍵因素是磁盤服務時間,即磁盤完成一個I/O請求所花費的時間,它由尋道時間、旋轉延遲和數據傳輸時間三部分構成。
       尋道時間Tseek是指將讀寫磁頭移動至正確的磁道上所須要的時間。尋道時間越短,I/O操做越快,目前磁盤的平均尋道時間通常在3-15ms。
       旋轉延遲Trotation是指盤片旋轉將請求數據所在扇區移至讀寫磁頭下方所須要的時間。旋轉延遲取決於磁盤轉速,一般使用磁盤旋轉一週所需時間的1/2表示。好比,7200 rpm的磁盤平均旋轉延遲大約爲60*1000/7200/2 = 4.17ms,而轉速爲15000 rpm的磁盤其平均旋轉延遲約爲2ms。
       數據傳輸時間Ttransfer是指完成傳輸所請求的數據所須要的時間,它取決於數據傳輸率,其值等於數據大小除以數據傳輸率。目前IDE/ATA能達到133MB/s,SATA II可達到300MB/s的接口數據傳輸率,數據傳輸時間一般遠小於前兩部分時間。所以,理論上能夠計算出磁盤的最大IOPS,即IOPS = 1000 ms/ (Tseek + Troatation),忽略數據傳輸時間。假設磁盤平均物理尋道時間爲3ms, 磁盤轉速爲7200,10K,15K rpm,則磁盤IOPS理論最大值分別爲,ide

 IOPS = 1000 / (3 + 60000/7200/2)  = 140
 IOPS = 1000 / (3 + 60000/10000/2) = 167
 IOPS = 1000 / (3 + 60000/15000/2) = 200工具

       固態硬盤SSD是一種電子裝置, 避免了傳統磁盤在尋道和旋轉上的時間花費,存儲單元尋址開銷大大下降,所以IOPS能夠很是高,可以達到數萬甚至數十萬。實際測量中,IOPS數值會受到不少因素的影響,包括I/O負載特徵(讀寫比例,順序和隨機,工做線程數,隊列深度,數據記錄大小)、系統配置、操做系統、磁盤驅動等等。所以對比測量磁盤IOPS時,必須在一樣的測試基準下進行,即使如何也會產生必定的隨機不肯定性。一般狀況下,IOPS可細分爲以下幾個指標:性能

       Toatal IOPS,混合讀寫和順序隨機I/O負載狀況下的磁盤IOPS,這個與實際I/O狀況最爲相符,大多數應用關注此指標。
一、Random Read IOPS,100%隨機讀負載狀況下的IOPS。
二、Random Write IOPS,100%隨機寫負載狀況下的IOPS。
三、Sequential Read IOPS,100%順序負載讀狀況下的IOPS。
四、Sequential Write IOPS,100%順序寫負載狀況下的IOPS。
       IOPS的測試benchmark工具主要有Iometer, IoZone, FIO等,能夠綜合用於測試磁盤在不一樣情形下的IOPS。對於應用系統,須要首先肯定數據的負載特徵,而後選擇合理的IOPS指標進行測量和對比分析,據此選擇合適的存儲介質和軟件系統。測試


IOPS (Input/Output Operations Per Second),即每秒進行讀寫(I/O)操做的次數,多用於數據庫等場合,衡量隨機訪問的性能。存儲端的IOPS性能和主機端的IO是不一樣的,IOPS是指存儲每秒可接受多少次主機發出的訪問,主機的一次IO須要屢次訪問存儲才能夠完成。例如,主機寫入一個最小的數據塊,也要通過「發送寫入請求、寫入數據、收到寫入確認」等三個步驟,也就是3個存儲端訪問spa



決定IOPS的主要取決於陣列的算法,cache命中率,以及磁盤個數。陣列的算法由於不一樣的陣列不一樣而不一樣,如咱們遇到在hds usp上面,可能由於ldev(lun)存在隊列或者資源限制,而單個ldev的iops就上不去,因此,在使用這個存儲以前,有必要了解這個存儲的一些算法規則與限制。操作系統

cache的命中率取決於數據的分佈,cache size的大小,數據訪問的規則,以及cache的算法,若是完整的討論下來,這裏將變得很複雜,能夠有一天好討論了。我這裏只強調一個cache的命中率,若是一個陣列,讀cache的命中率越高越好,通常表示它能夠支持更多的IOPS,爲何這麼說呢?這個就與咱們下面要討論的硬盤IOPS有關係了。線程

硬盤的限制,每一個物理硬盤能處理的IOPS是有限制的,如

10 K rpm 15 K rpm ATA

——— ——— ———

100 150 50

一樣,若是一個陣列有120塊15K rpm的光纖硬盤,那麼,它能撐的最大IOPS爲120*150=18000,這個爲硬件限制的理論值,若是超過這個值,硬盤的響應可能會變的很是緩慢而不能正常提供業務。

在raid5與raid10上,讀iops沒有差異,可是,相同的業務寫iops,最終落在磁盤上的iops是有差異的,而咱們評估的卻正是磁盤的IOPS,若是達到了磁盤的限制,性能確定是上不去了。

那咱們假定一個case,業務的iops是10000,讀cache命中率是30%,讀iops爲60%,寫iops爲40%,磁盤個數爲120,那麼分別計算在raid5與raid10的狀況下,每一個磁盤的iops爲多少。

raid5:

單塊盤的iops = (10000*(1-0.3)*0.6 + 4 * (10000*0.4))/120

= (4200 + 16000)/120

= 168

這裏的10000*(1-0.3)*0.6表示是讀的iops,比例是0.6,除掉cache命中,實際只有4200個iops

而4 * (10000*0.4) 表示寫的iops,由於每個寫,在raid5中,實際發生了4個io,因此寫的iops爲16000個

爲了考慮raid5在寫操做的時候,那2個讀操做也可能發生命中,因此更精確的計算爲:

單塊盤的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4)*(1-0.3) + 2 * (10000*0.4))/120

= (4200 + 5600 + 8000)/120

= 148

計算出來單個盤的iops爲148個,基本達到磁盤極限

raid10

單塊盤的iops = (10000*(1-0.3)*0.6 + 2 * (10000*0.4))/120

= (4200 + 8000)/120

= 102

能夠看到,由於raid10對於一個寫操做,只發生2次io,因此,一樣的壓力,一樣的磁盤,每一個盤的iops只有102個,還遠遠低於磁盤的極限iops。

在一個實際的case中,一個恢復壓力很大的standby(這裏主要是寫,並且是小io的寫),採用了raid5的方案,發現性能不好,經過分析,每一個磁盤的iops在高峯時期,快達到200了,致使響應速度巨慢無比。後來改形成raid10,就避免了這個性能問題,每一個磁盤的iops降到100左右

相關文章
相關標籤/搜索