磁盤的性能指标?在服務器使用過程中,經常需要對磁盤性能進行評估,以此來判斷磁盤能否滿足業務需要本文主要講解磁盤性能相關的基本概念和常見的測試性能的方法,今天小編就來說說關于磁盤的性能指标?下面更多詳細答案一起來看看吧!
在服務器使用過程中,經常需要對磁盤性能進行評估,以此來判斷磁盤能否滿足業務需要。本文主要講解磁盤性能相關的基本概念和常見的測試性能的方法。
一、磁盤性能相關的基本概念
磁盤的I/O,顧名思義就是磁盤的輸入輸出。輸入指的是對磁盤寫入數據,輸出指的是從磁盤讀出數據。我們常見的磁盤類型有 ATA、SATA、FC、SCSI、SAS、SSD,這幾種磁盤中,服務器常用的是SATA、SAS、SSD磁盤,每一種磁盤的性能是不一樣的。一般來說I/O性能: SATA < SAS < SSD
磁盤陣列的瓶頸分析主要體現在2個方面:IOPS與吞吐量。
ioPS(Input/Output Per Second)即每秒進行讀寫(I/O)操作的次數,是衡量磁盤性能的主要指标之一,多用于數據庫等場合,衡量随機讀寫的性能。
另一個重要指标是數據吞吐量(Throughput),指單位時間内可以成功傳輸的數據數量。對于大量順序讀寫的應用,如VOD(VideoOn Demand),則更關注吞吐量指标。
簡而言之:
磁盤的IOPS,也就是在一秒内,磁盤進行多少次I/O讀寫。
磁盤的吞吐量,也就是每秒磁盤I/O的流量,即磁盤寫入加上讀出的數據的大小。
IOPS 與吞吐量的關系:
每秒I/O吞吐量=IOPS*平均I/O size。
從公式可以看出:I/O SIZE 越大,IOPS越高,那麼每秒I/O的吞吐量就越高。因此,我們會認為 IOPS 和吞吐量的數值越高越好。實際上,對于一個磁盤來講,這兩個參數均有其最大值,而且這兩個參數也存在着一定的關系。
吞吐量
吞吐量主要取決于陣列的架構,光纖通道的大小以及硬盤的個數。
陣列的架構與每個陣列不同,但也都存在内部帶寬,不過在一般情況下,内部帶寬都設計的很充足,不是瓶頸所在。
其次是光纖通道對數據流量的影響。比如為了達到1GB/s的數據流量要求,必須使用1GB*8=8GB的光纖卡,或4塊2GB的光纖卡。
最後說一下硬盤的限制,當前面的瓶頸不再存在的時候,就要看硬盤的個數了,因為不同的硬盤所能支撐的流量大小也不一樣。
假設為了滿足1GB/s的數據流量要求,除了需要8塊1GB的光纖卡,同時所必須的磁盤個數為:
磁盤轉速規格
10K rpm
15K rpm
ATA
數據傳輸率
10 MB/s
13 MB/s
8 MB/s
所需磁盤個數
100塊
80塊
125塊
IOPS
決定IOPS的主要取決于陣列的算法、cache命中率以及磁盤個數。
Cache命中率取決于數據的分布、Cache Size的大小、數據的訪問規則,以及Cache的算法。
磁盤的限制,每個磁盤能處理的IOPS是有限制的,通常情況下每個磁盤的最大IOPS是确定的。比如IDE和SATA硬盤的IOPS大緻在100以内,而且IOPS的測試結果與測試方式(例如随機讀寫和順序讀寫、讀和寫的比例、傳輸數據庫尺寸的大小、磁盤的數量)有很大關系。盡管如此,磁盤的IOPS指标還是對我們評估磁盤的壓力和是否能夠滿足系統的性能需求有着一定的指導意義。
決定IOPS
具體分析
陣列的算法
同樣的讀寫,在不同的陣列所産生的iops是不同的:
RAID 0 :IOPS = Read IOPS 1*Write IOPS
RAID 1 :IOPS = Read IOPS 2*Write IOPS
RADI 3 :IOPS = Read IOPS 4*Write IOPS
RAID 5 :IOPS = Read IOPS 4*Write IOPS
RADI 6 :IOPS = Read IOPS 6*Write IOPS
RAID 10:IOPS = Read IOPS 2*Write IOPS
cache命中率
取決于數據的分布、Cache大小、數據訪問規則、Cache算法。
cache算法越高效,則cache的命中率越高,加速效果越明顯;
cache容量越大,可以存儲的信息量越大,相對的命中率越高;
當cache的容量一定時,讀數據的塊大小對命中率的影響非常敏感;
磁盤因素
磁盤IOPS瓶頸:單個物理磁盤能夠處理的的最大IOPS是有限制的
SAS 15k rpm IOPS:150^180
SAS 10k rpm IOPS:130^150
SATA 7.2k rpm IOPS:70^90
SATA 5.4k rpm IOPS:30^50
SSD IOPS:5K^15K
磁盤容量:相同轉速,容量越小,所需的尋址之間越短,IOPS相對越高
測試方式
随機讀寫、順序讀寫、讀寫比例、傳輸數據的大小
備注:
1. 同樣的讀寫,不同RAID的讀操作所産生的IOPS相差無幾,而對IOPS影響最大的是寫操作.寫操作效率RAID 0最高,RAID 1和10次之.
2. 讀cache的命中率越高越好
3. 磁盤接口簡述:
•小型計算機系統接口(SCSI)
•集成設備電子學(IDE)
•串行高級技術附件(SATA)
•串行SCSI(SAS)
•光纖通道(FC)
•固态硬盤(SSD)或閃存盤
單個磁盤的IOPS計算方法:
讀操作
1個寫操作
每個磁盤的IOPS
每個磁盤的IOPS(考慮命中率 讀寫比例)
RAID 0
讀次數*(1-Cahe命中率)
實際1次io
(讀 寫)/磁盤個數
[讀*讀比例*(1-Cache命中率) (1*寫*寫比例)]/磁盤個數
RAID 1
讀次數*(1-Cahe命中率)
實際2次io
[讀 (2*寫)]/2
raid1隻能配置2塊盤
[讀*讀比例*(1-Cahe命中率) (2*寫*寫比例)]/2
RAID 5
讀次數*(1-Cahe命中率)
實際4次io
[讀 (4*寫)]/磁盤個數
[讀*讀比例*(1-Cahe命中率) (4*寫*寫比例)]/磁盤個數
RAID 10
讀次數*(1-Cahe命中率)
實際2次io
[讀 (2*寫)]/磁盤個數
[讀*讀比例*(1-Cahe命中率) (2*寫*寫比例)]/磁盤個數
需求計算
案例一:假定業務需求10000 IOPS,120塊硬盤,讀cache命中率30%,讀iops為60%,寫iops為40%,分别計算raid1、5、10的情況下,每個磁盤要求的iops為多少?
raid 1:
每塊硬盤的iops= (10000*0.6*(1-0.3) 2* (10000*0.4))/2= (4200 8000)/2 = 6000
這裡,10000*(1-0.3)*0.6表示是讀的iops,比例是0.6,除掉cache命中,實際隻有4200個iops;
請注意:在raid1中,1個寫操作實際發生了2個io,所以寫的iops為8000。且raid1的RAID系數為2,所以增加硬盤對提升IOPS有限。
raid5:
每塊硬盤的iops= (10000*0.6*(1-0.3) 4 * (10000*0.4))/120= (4200 16000)/120 = 168
而4 *(10000*0.4) 表示寫的iops,因為每一個寫,在raid5中,實際發生了4個io,所以寫的iops為16000個;
raid10:
每塊硬盤的iops= (10000*0.6*(1-0.3) 2 * (10000*0.4))/120 = (4200 8000)/120= 102
因為raid10對于一個寫操作,隻發生2次io,所以,同樣的壓力 同樣的磁盤,每個盤的iops隻有102個,遠遠低于磁盤的極限iops。
吞吐率:
此外當吞吐率超過85%時,單個磁盤IOPS計算規則為:
((10000*讀比例*(1-Cache命中率)) 10000*寫比例*RAID系數)/磁盤數/0.85
Cache比例
Cache 20%
Cache 40%
讀寫比例
讀80%,寫20%
讀60%,寫40%
讀80%,寫20%
讀60%,寫40%
RAID 0
82
86
67
75
RAID 1
6118
7529
5176
6824
RAID 5
141
204
125
192
RAID 10
102
125
86
114
即每塊磁盤的IOPS大約在200左右即可滿足RAID0、RAID5、RAID10的要求。
案例二:一個由5塊450G 10K RPM硬盤組成的RAID5,讀寫比為2:1,cache命中率為80%,求該RAID支持的最大IOPS以及能夠給業務提供的IOPS?
首先10K RPM的FC硬盤,單盤的IOPS為140,5塊盤最大IOPS值為700;
能夠提供給業務的IOPS為:[X*(2/3)*(1-0.8) X*(1/3)*4]/5 = 140 X = 477
案例分析
在一個實際的case中,一個恢複壓力很大的standby(這裡主要是寫,而且是小io的寫),采用了raid5的方案,發現性能很差,通過分析,每個磁盤的iops在高峰時期達到了200,導緻響應速度巨慢無比。後來改造成raid10,就避免了這個性能問題,每個磁盤的iops降到100左右。
二、性能評測方法
操作系統 ubuntu 14.04
測試工具 fio
以順序讀為例子,
命令如下:fio -name iops -rw=read -bs=4k-runtime=60 -iodepth 32 -filename /dev/sda6 -ioengine libaio -direct=1
其中 rw=read表示随機讀,bs=4k表示每次讀4k,filename指定對應的分區,這裡我是/dev/sda6,direct=1表示穿越linux的緩存
以下我們會依次測試sata硬盤,sas硬盤,ssd硬盤的順序讀,随機讀,順序寫,随機寫的速度
順序讀
測試命令:fio -name iops-rw=read -bs=4k -runtime=60 -iodepth 32 -filename /dev/sda6 -ioengine libaio-direct=1
SATA Jobs: 1 (f=1): [R] [16.4% done] [124.1M/0K /s] [31.3K/0 iops] [eta 00m:51s] SAS Jobs: 1 (f=1): [R] [16.4% done] [190M/0K /s] [41.3K/0 iops] [eta 00m:51s] SSD Jobs: 1 (f=1): [R] [100.0% done] [404M/0K /s] [103K /0 iops] [eta 00m:00s]
可以看到 在對4KB數據包進行連續讀的情況下:
SSD其速度可以達到404MB/S,IOPS達到103K/S
SAS其速度可以達到190MB/S,IOPS達到41K/S
SATA其速度可以達到124MB/S,IOPS達到31K/S
順序讀,SAS總體表現是SATA硬盤的1.3倍,SSD總體表現是sata硬盤的4倍。
随機讀
測試命令 fio -nameiops -rw=randread -bs=4k -runtime=60 -iodepth 32 -filename /dev/sda6 -ioenginelibaio -direct=1
SATA Jobs: 1 (f=1): [r] [41.0% done] [466K/0K /s] [114 /0 iops] [eta 00m:36s] SAS Jobs: 1 (f=1): [r] [41.0% done] [1784K/0K /s] [456 /0 iops] [eta 00m:36s] SSD Jobs: 1 (f=1): [R] [100.0% done] [505M/0K /s] [129K /0 iops] [eta 00m:00s]
随機讀,SAS總體表現是SATA硬盤的4倍,SSD總體表現是sata硬盤的一千多倍。
順序寫
測試命令:fio -name iops-rw=write -bs=4k -runtime=60 -iodepth 32 -filename /dev/sda6 -ioengine libaio-direct=1
SATA Jobs: 1 (f=1): [W] [21.3% done] [0K/124.9M /s] [0 /31.3K iops] [eta 00m:48s] SAS Jobs: 1 (f=1): [W] [21.3% done] [0K/190M /s] [0 /36.3K iops] [eta 00m:48s] SSD Jobs: 1 (f=1): [W] [100.0% done] [0K/592M /s] [0 /152K iops] [eta 00m:00s]
同樣的4KB數據包順序寫的情況下,SSD卡的成績為592MB/S,IOPS為152K。而本地硬盤僅為118MB/S,IOPS僅為30290。
随機寫
測試命令: fio -nameiops -rw=randwrite -bs=4k -runtime=60 -iodepth 32 -filename /dev/sda6 -ioenginelibaio -direct=1
SATA Jobs: 1 (f=1): [w] [100.0% done] [0K/548K /s] [0 /134 iops] [eta 00m:00s] SAS Jobs: 1 (f=1): [w] [100.0% done] [0K/2000K /s] [0 /512 iops] [eta 00m:00s] SSD Jobs: 1 (f=1): [W] [100.0% done] [0K/549M /s] [0 /140K iops] [eta 00m:00s]
在接下來的4KB數據包随機寫操作中,SSD卡再次展示了其高超的IO性能,高達549MB/S的随機寫速率,IOPS高達140K。相比之下,本地硬盤的随機讀寫僅為548KB/S,IOPS為134。
作者:孫明柱
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!