1. 程式人生 > >磁碟IOPS和頻寬(throughput)

磁碟IOPS和頻寬(throughput)

    SAN和NAS儲存一般都具備2個評價指標:IOPS和頻寬(throughput),兩個指標互相獨立又相互關聯。體現儲存系統性能的最主要指標是IOPS

IOPS (Input/Output Per Second)即每秒的輸入輸出量(或讀寫次數),是衡量磁碟效能的主要指標之一。IOPS是指單位時間內系統能處理的I/O請求數量,一般以每秒處理的I/O請求數量為單位,I/O請求通常為讀或寫資料操作請求。隨機讀寫頻繁的應用,如OLTP(Online Transaction Processing),IOPS是關鍵衡量指標。另一個重要指標是資料吞吐量(Throughput),指單位時間內可以成功傳輸的資料數量。對於大量順序讀寫的應用,如VOD(Video On Demand),則更關注吞吐量指標。

IOPS可細分為如下幾個指標:

  1. Toatal IOPS,混合讀寫和順序隨機I/O負載情況下的磁碟IOPS,這個與實際I/O情況最為相符,大多數應用關注此指標。
  2. Random Read IOPS,100%隨機讀負載情況下的IOPS。
  3. Random Write IOPS,100%隨機寫負載情況下的IOPS。
  4. Sequential Read IOPS,100%順序負載讀情況下的IOPS。
  5. Sequential Write IOPS,100%順序寫負載情況下的IOPS。

下圖為一個典型的NFS測試結果:

image

IOPS的測試benchmark工具主要有, IoZone, FIO等,可以綜合用於測試磁碟在不同情形下的IOPS。對於應用系統,需要首先確定資料的負載特徵,然後選擇合理的IOPS指標進行測量和對比分析,據此選擇合適的儲存介質和軟體系統.

可以檢視http://en.wikipedia.org/wiki/IOPS得到磁碟IOPS參考資料。

IOPS 當然取決與I/O塊的大小.採用不同I/O塊的大小測出的IOPS值是不同的。 對一個具體的IOPS, 可以瞭解它當時測試的I/O塊的尺寸。

IOPS計算公式

對於磁碟來說一個完整的IO操作是這樣進行的:當控制器對磁碟發出一個IO操作命令的時候,磁碟的驅動臂(Actuator Arm)帶讀寫磁頭(Head)離開著陸區(Landing Zone,位於內圈沒有資料的區域),移動到要操作的初始資料塊所在的磁軌(Track)的正上方,這個過程被稱為定址(Seeking),對應消耗的時間被稱為定址時間(Seek Time);但是找到對應磁軌還不能馬上讀取資料,這時候磁頭要等到磁碟碟片(Platter)旋轉到初始資料塊所在的扇區(Sector)落在讀寫磁頭正上方的之後才能開始讀取資料,在這個等待碟片旋轉到可操作扇區的過程中消耗的時間稱為旋轉延時(Rotational Delay);接下來就隨著碟片的旋轉,磁頭不斷的讀/寫相應的資料塊,直到完成這次IO所需要操作的全部資料,這個過程稱為資料傳送(Data Transfer),對應的時間稱為傳送時間(Transfer Time)。完成這三個步驟之後一次IO操作也就完成了。

在我們看硬碟廠商的宣傳單的時候我們經常能看到3個引數,分別是平均定址時間、碟片旋轉速度以及最大傳送速度,這三個引數就可以提供給我們計算上述三個步驟的時間。

第一個定址時間,考慮到被讀寫的資料可能在磁碟的任意一個磁軌,既有可能在磁碟的最內圈(定址時間最短),也可能在磁碟的最外圈(定址時間最長),所以在計算中我們只考慮平均定址時間,也就是磁碟引數中標明的那個平均定址時間,這裡就採用當前最多的10krmp硬碟的5ms。

第二個旋轉延時,和定址一樣,當磁頭定位到磁軌之後有可能正好在要讀寫扇區之上,這時候是不需要額外額延時就可以立刻讀寫到資料,但是最壞的情況確實要磁碟旋轉整整一圈之後磁頭才能讀取到資料,所以這裡我們也考慮的是平均旋轉延時,對於10krpm的磁碟就是(60s/15k)*(1/2) = 2ms。

第三個傳送時間,磁碟引數提供我們的最大的傳輸速度,當然要達到這種速度是很有難度的,但是這個速度卻是磁碟純讀寫磁碟的速度,因此只要給定了單次 IO的大小,我們就知道磁碟需要花費多少時間在資料傳送上,這個時間就是IO Chunk Size / Max Transfer Rate。

現在我們就可以得出這樣的計算單次IO時間的公式:

  IO Time = Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate

於是我們可以這樣計算出IOPS

  IOPS = 1/IO Time = 1/(Seek Time + 60 sec/Rotational Speed/2 + IO Chunk Size/Transfer Rate)

對於給定不同的IO大小我們可以得出下面的一系列的資料

  4K (1/7.1 ms = 140 IOPS)
  5ms + (60sec/15000RPM/2) + 4K/40MB = 5 + 2 + 0.1 = 7.1
  8k (1/7.2 ms = 139 IOPS)
  5ms + (60sec/15000RPM/2) + 8K/40MB = 5 + 2 + 0.2 = 7.2
  16K (1/7.4 ms = 135 IOPS)
  5ms + (60sec/15000RPM/2) + 16K/40MB = 5 + 2 + 0.4 = 7.4
  32K (1/7.8 ms = 128 IOPS)
  5ms + (60sec/15000RPM/2) + 32K/40MB = 5 + 2 + 0.8 = 7.8
  64K (1/8.6 ms = 116 IOPS)
  5ms + (60sec/15000RPM/2) + 64K/40MB = 5 + 2 + 1.6 = 8.6

從上面的資料可以看出,當單次IO越小的時候,單次IO所耗費的時間也越少,相應的IOPS也就越大。

上面我們的資料都是在一個比較理想的假設下得出來的,這裡的理想的情況就是磁碟要花費平均大小的定址時間和平均的旋轉延時,這個假設其實是比較符合我們實際情況中的隨機讀寫,在隨機讀寫中,每次IO操作的定址時間和旋轉延時都不能忽略不計,有了這兩個時間的存在也就限制了IOPS的大小。現在我們考慮一種相對極端的順序讀寫操作,比如說在讀取一個很大的儲存連續分佈在磁碟的的檔案,因為檔案的儲存的分佈是連續的,磁頭在完成一個讀IO操作之後,不需要從新的定址,也不需要旋轉延時,在這種情況下我們能到一個很大的IOPS值,如下

  4K (1/0.1 ms = 10000 IOPS)
  0ms + 0ms + 4K/40MB = 0.1
  8k (1/0.2 ms = 5000 IOPS)
  0ms + 0ms + 8K/40MB = 0.2
  16K (1/0.4 ms = 2500 IOPS)
  0ms + 0ms + 16K/40MB = 0.4
  32K (1/0.8 ms = 1250 IOPS)
  0ms + 0ms + 32K/40MB = 0.8
  64K (1/1.6 ms = 625 IOPS)
  0ms + 0ms + 64K/40MB = 1.6

相比第一組資料來說差距是非常的大的,因此當我們要用IOPS來衡量一個IO系統的系能的時候我們一定要說清楚是在什麼情況的IOPS,也就是要說明讀寫的方式以及單次IO的大小,當然在實際當中,特別是在OLTP的系統的,隨機的小IO的讀寫是最有說服力的。

另外:百度文庫

 IOPS(Input/OutputPer Second) IOPS即每秒的輸入輸出量(或讀寫次數),是衡量磁碟效能的主要指標之一。IOPS是指單位時間內系統能處理的I/O請求數量,一般以每秒處理的I/O請求數量為單位,I/O請求通常為讀或寫資料操作請求。隨機讀寫頻繁的應用,如OLTP(OnlineTransaction Processing),IOPS是關鍵衡量指標。
 另一個重要指標是資料吞吐量(Throughput),指單位時間內可以成功傳輸的資料數量。對於大量順序讀寫的應用,如VOD(Video On Demand),則更關注吞吐量指標。

 傳統磁碟本質上一種機械裝置,如FC, SAS, SATA磁碟,轉速通常為5400/7200/10K/15K rpm不等。影響磁碟的關鍵因素是磁碟服務時間,即磁碟完成一個I/O請求所花費的時間,它由尋道時間、旋轉延遲和資料傳輸時間三部分構成。

(1)尋道時間
 Tseek是指將讀寫磁頭移動至正確的磁軌上所需要的時間。尋道時間越短,I/O操作越快,目前磁碟的平均尋道時間一般在3-15ms。
(2)旋轉延遲
 Trotation是指碟片旋轉將請求資料所在扇區移至讀寫磁頭下方所需要的時間。旋轉延遲取決於磁碟轉速,通常使用磁碟旋轉一週所需時間的1/2表示。比如,7200 rpm的磁碟平均旋轉延遲大約為60*1000/7200/2 = 4.17ms,而轉速為15000 rpm的磁碟其平均旋轉延遲約為2ms。
(3)資料傳輸時間
 Ttransfer是指完成傳輸所請求的資料所需要的時間,它取決於資料傳輸率,其值等於資料大小除以資料傳輸率。目前IDE/ATA能達到133MB/s(MBPS),SATA II可達到300MB/s的介面資料傳輸率,資料傳輸時間通常遠小於前兩部分時間。

IOPS(每秒IO次數) = 1s/(尋道時間+旋轉延遲+資料傳輸時間)

因此,理論上可以計算出磁碟的最大IOPS,即IOPS = 1000ms/ (Tseek + Troatation),忽略資料傳輸時間。假設磁碟平均物理尋道時間為3ms, 磁碟轉速為7200,10K,15Krpm,則磁碟IOPS理論最大值分別為:
 IOPS = 1000 / (3 + 60000/7200/2) = 140 IOPS = 1000 / (3 + 60000/10000/2) = 167 IOPS = 1000 / (3 + 60000/15000/2) = 200

2.2 固態硬碟的IOPS 固態硬碟SSD是一種電子裝置, 避免了傳統磁碟在尋道和旋轉上的時間花費,儲存單元定址開銷大大降低,因此IOPS可以非常高,能夠達到數萬甚至數十萬。實際測量中,IOPS數值會受到很多因素的影響,包括I/O負載特徵(讀寫比例,順序和隨機,工作執行緒數,佇列深度,資料記錄大小)、系統配置、作業系統、磁碟驅動等等。因此對比測量磁碟IOPS時,必須在同樣的測試基準下進行,即便如何也會產生一定的隨機不確定性。

通常情況下,IOPS可細分為如下幾個指標:
 Toatal IOPS:混合讀寫和順序隨機I/O負載情況下的磁碟IOPS,這個與實際I/O情況最為相符,大多數應用關注此指標。
 Random Read IOPS:100%隨機讀負載情況下的IOPS。
 Random WriteIOPS:100%隨機寫負載情況下的IOPS。
 Sequential ReadIOPS:100%順序負載讀情況下的IOPS。
 Sequential WriteIOPS:100%順序寫負載情況下的IOPS。


三.ORION 工具說明 ORION (OracleI/O Calibration Tool)Oracle 公司推出的一個校準資料庫的儲存系統I/O效能的獨立工具。有關該工具的說明,參考:
Oracle ORION IO 測試工具
http://blog.csdn.net/tianlesoftware/article/details/5965331


我們使用ORION 工具測試一下看看:
[[email protected] software]# cat dave.lun
/dev/sdb1

[[email protected] software]# ./orion_linux_x86-64 -run advanced -testname dave -num_disks 2
ORION: ORacle IO Numbers -- Version11.1.0.7.0
dave_20111026_2026
Test will take approximately 16 minutes
Larger caches may take longer

檢視生成的結果:
[[email protected] software]# ls dave*
dave_20111026_2026_iops.csv dave_20111026_2026_summary.txt dave.lun_20111026_2025_summary.txt
dave_20111026_2026_lat.csv dave_20111026_2026_trace.txt
dave_20111026_2026_mbps.csv dave.lun

[[email protected] software]# cat dave_20111026_2026_summary.txt
ORION VERSION 11.1.0.7.0

Commandline:
-run advanced -testname dave -num_disks 2

This maps to this test:
Test: dave
Small IO size: 8 KB
Large IO size: 1024 KB
IO Types: Small Random IOs, Large RandomIOs
Simulated Array Type: CONCAT
Write: 0%
Cache Size: Not Entered
Duration for each Data Point: 60 seconds
Small Columns:, 0
Large Columns:, 0,1, 2, 3,4
Total Data Points: 15

Name: /dev/sdb1 Size: 449495069184
1 FILEs found.

Maximum Large MBPS=159.61 @ Small=0 andLarge=4
Maximum Small IOPS=534 @ Small=10 andLarge=0
Minimum Small Latency=4.97 @ Small=1 andLarge=0

這裡顯示的吞吐量是160MBPS. IOPS 為534.

兩大瓶頸詳解

1、吞吐量

吞吐量主要取決於陣列的構架,光纖通道的大小(現在陣列一般都是光纖陣列,至於SCSI這樣的SSA陣列,我們不討論)以及硬碟的個數。陣列的構架與每個陣列不同而不同,他們也都存在內部頻寬(類似於pc的系統匯流排),不過一般情況下,內部頻寬都設計的很充足,不是瓶頸的所在。 光纖通道的影響還是比較大的,如資料倉庫環境中,對資料的流量要求很大,而一塊2Gb的光纖卡,所能支撐的最大流量應當是2Gb/8(小B)=250MB/s(大B)的實際流量,當4塊光纖卡才能達到1GB/s的實際流量,所以資料倉庫環境可以考慮換4Gb的光纖卡。 最後說一下硬碟的限制,這裡是最重要的,當前面的瓶頸不再存在的時候,就要看硬碟的個數了,我下面列一下不同的硬碟所能支撐的流量大小: 10 K rpm 15 K rpm ATA ——— ——— ——— 10M/s 13M/s 8M/s 那麼,假定一個陣列有120塊15K rpm的光纖硬碟,那麼硬碟上最大的 可以支撐的流量為120*13=1560MB/s,如果是2Gb的光纖卡,可能需要6塊才能夠,而4Gb的光纖卡,3-4塊就夠了。

2、IOPS

決定IOPS的主要取決與陣列的演算法,cache命中率,以及磁碟個數。陣列的演算法因為不同的陣列不同而不同,如我們最近遇到在hds usp上面,可能因為ldev(lun)存在佇列或者資源限制,而單個ldev的iops就上不去,所以,在使用這個儲存之前,有必要了解這個儲存的一些演算法規則與限制。 cache的命中率取決於資料的分佈,cache size的大小,資料訪問的規則,以及cache的演算法,如果完整的討論下來,這裡將變得很複雜,可以有一天好討論了。我這裡只強調一個cache的命中率,如果一個陣列,讀cache的命中率越高越好,一般表示它可以支援更多的IOPS,為什麼這麼說呢?這個就與我們下面要討論的硬碟IOPS有關係了。[1] 硬碟的限制,每個物理硬碟能處理的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左右。

相關推薦

磁碟IOPS頻寬throughput

    SAN和NAS儲存一般都具備2個評價指標:IOPS和頻寬(throughput),兩個指標互相獨立又相互關聯。體現儲存系統性能的最主要指標是IOPS。 IOPS (Input/Output Per Second)即每秒的輸入輸出量(或讀寫次數),是衡量磁碟效能的主

LoRa關鍵引數 1、擴頻因子SF 2、編位元速率CR 3、訊號頻寬BW 4、LoRa訊號頻寬BW、符號速率Rs資料速率DR的關係

 LoRa學習:LoRa關鍵引數(擴頻因子,編位元速率,頻寬)的設定及解釋 1、擴頻因子(SF) 2、編位元速率(CR) 3、訊號頻寬(BW) 4、LoRa訊號頻寬BW、符號速率Rs和資料速率DR的關係 5、 LoRa訊號頻寬、擴頻

吞吐量Throughput延遲Latency

簡介 Latency,中文譯作延遲。Throughput,中文譯作吞吐量。它們是衡量軟體系統的最常見的兩個指標。 延遲一般包括單向延遲(One-way Latency)和往返延遲(Round Trip Latency),實際測量時一般取往返延遲。它的單位一般是ms、s、mi

如何增加VMWare虛擬機器的磁碟空間兩種方法:增加磁碟方式增加分割槽方式

首先是通過增加磁碟的方式:最近需要在虛擬機器裡面實際操作些東西,需要至少兩個盤,一個系統盤,一個普通盤,結果發現安裝完虛擬機器後預設只有一個C盤,本來還想打算採用工具無損分割槽從C盤分出來一些,後來發現不行, 太麻煩不說,而且不符合虛擬機器的自由玩精神,後來發現原來可以從虛擬

Linux學習之三:文件夾系統的結構相對絕對路徑

sharp 二進制 沒有 數據 csharp pan 用戶 ont 臨時 理解每個目錄的作用 bin   二進制文件 boot   系統的啟動文件、內核 dev   設備文件 etc   配置文件 home  用戶的家目錄 lib    鏈接庫文件  l

SpringMVC的攔截器Interceptor過濾器Filter的區別與聯系

get err 實例 分享 切面 簡介 () lee XML 一 簡介 (1)過濾器: 依賴於servlet容器。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取

Android的方法屬性2

pin spinner 城市 android har lap ng- drawable -c 1.RadioButton(單選按鈕)   嵌入到RsdioGroup中實現單選效果   android:checkedButton="radio的id值"   int getC

地址映象變換之主存虛存

規則 根據 pan 命中率 實現 -s tro 分享 使用 地址映象:是將每一個虛存單元按某種規則裝入實存,即建立多用戶虛地址與實存地址之間的相應關系。 地址變換:是程序依照這樣的映象關系裝入實存後。在運行時,多用戶虛地址怎樣變換成相應的實存地址。 頁面爭用(實頁沖突

Oracle學習筆記—Db_name、Db_domain、Global_name、Service_name、Instance_nameOracle_SID轉載

安全 文件中 分布 好處 避免 名稱 detail 數據庫安全 自動 轉載自: Oracle中DB_NAME,SID,DB_DOMAIN,SERVICE_NAME等之間的區別 Db_name:對一個數據庫(Oracle database)的唯一標識。這種表示對於單個數據

SVN服務器搭建使用

進行 文本框 logs 版本 強制寫 移動 對話 刪除文件 對話框 接下來,試試用TortoiseSVN修改文件,添加文件,刪除文件,以及如何解決沖突等. 添加文件 在檢出的工作副本中添加一個Readme.txt文本文件,這時候這個文本文件會顯示為沒有版本控制的狀態,如圖

【CAN總線】CAN代碼相關問題註釋1 ------------4.6更新

配置 註釋 一次 保護 tex 擴展 控制 xca 比較 前言:   在看如何用FPGA實現can_controller ,本來想把代碼上傳上來的,結果沒成功。如果有意向研究的,可以自己去下載 pudn就有。can tb有點問題,我也只是在剛剛研究,如果有意向可以和我交流

【CAN總線】CAN代碼相關問題註釋2

讀取數據 文件 觸發 == mod tpc term urn i++ 本節內容提要: 根據SJA1000的初始化程序,了解CAN的初始化過程以及對象。本來是想整理的,後來發現一整篇都很有用就直接轉載了。 不過我在想,如果是直接用verilog實現can 是否有另外的方法來對

數組矩陣3——Next Greater Element I

exp put and ann emp arr num .com esp https://leetcode.com/problems/next-greater-element-i/#/description You are given two arrays (withou

基於rhel7.2的Zabbix平臺搭建部署

linux 監控軟件 zabbix nginx mysql php lnmp基於rhel7.2的zabbix平臺搭建和部署(一)一、實驗環境:(1)虛擬機:rhel7.2 x86_64(2)數據庫:mysql5.7.13(3)nginx1.10.2(4)PHP5.6.27(5)zabbix二、安裝編譯工具及

block,inlineinline-block概念區別

line eight wan pan 排列 isp 我們 .com 是個 總體概念 block和inline這兩個概念是簡略的說法,完整確切的說應該是 block-level elements (塊級元素) 和 inline elements (內聯元素)。block元素

Redis的安裝部署windows

數據庫 inux 保持 設置 cli 窗口 mas log height Redis是一個開源的試用ANSI C語言編寫的、遵守BSD協議、支持網絡、可基於內存可持久化的日誌型、key-value數據庫。通常被稱為數據結構服務器. redis的數據類型有:字符串(strin

UVM序列篇之二:sequenceitem

技術 一點 目標 idt 需要 開始 掛載 ron 前行 無論是自駕item,穿過sequencer交通站,通往終點driver,還是坐上sequence的大巴,一路沿途觀光,最終跟隨導遊停靠到風景點driver,在介紹如何駕駛item和sequence,遵守什麽交規,最終

基於rhel7.2的Zabbix平臺搭建部署

linux 監控軟件 zabbix nginx mysql php lnmp基於rhel7.2的Zabbix平臺搭建和部署(四)一、實現zabbix添加監測項,添加對Linux主機的監控、說明:先在“配置”-“主機”裏添加主機監控,監控os資源:內存,cpu,io,負載,帶寬等.(1)登錄zabbix,先在

修飾符關鍵字繼承

ati 構造 pub 常用 另一個 修飾 tro pri 修飾符 一、靜態修飾符----static   static可以修飾內部類、塊、屬性、方法,經static修飾過的元素儲存地址唯一,不會改變 1 public class Test{ 2 static

虛擬機搭建redis單機版及redis-cluster,使用redis desktop managerjavaeclipse連接redis過程遇到問題匯總

init clu centos 一律 有用 tex 保護模式 bin service 如果你看到這裏,我默認你已經安裝好了redis,並且已經成功的在虛擬機的Linux系統中ping通。 介紹一下我的環境:VMware虛擬機安裝centos 6.5版的Linux系統,red