【ceph】什么是條帶化(Data striping) ?


目錄

簡介:

詳細:

 原理

條帶參數

條帶深度(條帶的大小)

條帶寬度

應用例子分析


http://blog.csdn.net/jlds123/article/details/11813313

簡介:

背景:當多個進程同時訪問一個磁盤時,會出現磁盤沖突,排隊訪問,性能低。
條帶法:把連續的數據分割成相同大小的數據塊,把每段數據分別寫入到陣列中的不同磁盤上的方法。(多路並行)
多個物理磁盤條帶邏輯上組合成一體(一個卷)。

詳細:

 原理

  
當多個進程同時訪問一個磁盤時,可能會出現磁盤沖突。大多數磁盤系統都對訪問次數(每秒的 I/O 操作,IOPS)和數據傳輸率(每秒傳輸的數據量,TPS)有限制。
當達到這些限制時,后面需要訪問磁盤的進程就需要等待,這時就是所謂的磁盤沖突。


條帶化技術就是一種自動的將 I/O 的負載均衡到多個物理磁盤上的技術,條帶化技術就是將一塊連續的數據分成很多小部分並把他們分別存儲到不同磁盤上去。
這就能使多個進程同時訪問數據的多個不同部分而不會造成磁盤沖突,而且在需要對這種數據進行順序訪問的時候可以獲得最大程度上的 I/O 並行能力,從而獲得非常好的性能。


由於條帶化在 I/O 性能問題上的優越表現,以致於在應用系統所在的計算環境中的多個層次或平台都涉及到了條帶化的技術,如操作系統和存儲系統這兩個層次中都可能使用條帶化技術。
條帶化后,條帶卷所能提供的速度比單個盤所能提供的速度要快很多,由於現在存儲技術成熟,大多數系統都采用條帶化來實現系統的I/O負載分擔,如果OS有LVM軟件或者硬件條帶設備,
決定因素是條帶深度(stripe depth)和條帶寬度(stripe width)。

條帶參數


條帶深度(條帶的大小)

指的是條帶的大小,也叫條帶大小。有時也被叫做block size, chunk size, stripe length 或者granularity。這個參數指的是寫在每塊磁盤上的條帶數據塊的大小。
RAID的數據塊大小一般在2KB到512KB之間(或者更大),其數值是2 的次方,即2KB,4KB,8KB,16KB這樣。條帶大小對性能的影響比條帶寬度難以量化的多。


減小條帶大小: 
   由於條帶大小減小了,則文件被分成了更多個,更小的數據塊。這些數據塊會被分散到更多的硬盤上存儲,因此提高了傳輸的性能,但是由於要多次尋找不同的數據塊,磁盤定位的性能就下降了。
增加條帶大小: 
   與減小條帶大小相反,會降低傳輸性能,提高定位性能。
   
不同的應用類型,不同的性能需求,不同驅動器的不同特點(如SSD硬盤),不存在一個普遍適用的"最佳條帶大小"。所以這也是存儲廠家,文件系統編寫者允許我們自己定義條帶大小的原因。


條帶寬度

是指同時可以並發讀或寫的條帶數量。這個數量等於RAID中的物理硬盤數量。例如一個經過條帶化的,具有4塊物理硬盤的陣列的條帶寬度就是 4。增加條帶寬度,可以增加陣列的讀寫性能。
道理很明顯,增加更多的硬盤,也就增加了可以同時並發讀或寫的條帶數量。在其他條件一樣的前提下,一個由8塊 18G硬盤組成的陣列相比一個由4塊36G硬盤組成的陣列具有更高的傳輸性能。

 

應用例子分析

    
下面先看下影響IO大小的操作系統和Oracle的相關參數:

db_block_size oracle數據塊的大小,也決定了oracle一次單個IO請求中oracle數據塊的大小
db_file_multiblock_read_count:在多數據塊讀時,一次讀取數據塊的數量,它和參數db_block_size一起決定了一次多數據塊讀的大小,它們的乘積不能大於操作系統的最大IO大小。
操作系統的數據塊大小:這個參數決定了Redo Log和Archive Log操作時的數據塊大小,對於大多數Unix系統來說,該值為512K。
最大操作系統IO大小:決定了一次單個的IO操作的IO大小的上限,對於大多數Unix系統來說,由參數max_io_size設置。
sort_area_size:內存中sort area的大小,也決定了並發排序操作時的IO大小。
hash_area_size:內存中hash area的大小,也決定了哈希操作的IO大小。
 
 在OLTP系統中,會存在大量小的並發的IO請求。這時就需要考慮選擇比較大的條帶深度。使條帶深度大於IO大小就稱為粗粒度條帶(Coarse Grain Striping)。在高並行度系統中,條帶深度為(n * db_block_size),其中n為大於1的整數。


 通過粗粒度條帶能實現最大的IO吞吐量(一次物理IO可以同時響應多個並發的邏輯IO)。大的條帶深度能夠使像全表掃描那樣的多數據塊讀操作由一個磁盤驅動來響應,並提高多數據塊讀操作的性能。
 在低並發度的DSS系統中,由於IO請求比較序列化,為了避免出現熱點磁盤,我們需要避免邏輯IO只有一塊磁盤處理。這是,粗粒度條帶就不適合了。 我們選擇小的條帶深度,使一個邏輯IO分布到多個磁盤上,從而實現IO的負載均衡。這就叫細粒度條帶。條帶深度的大小為(n * db_block_size),其中n為小於多數據塊讀參數(db_file_multiblock_read_count)大小的整數。
 

可以簡單的理解為並發程度高的IO采用粗粒度條帶化,並發程度低的IO采用細粒度條帶化。


 IO過程中,你無法保證Oracle數據塊的邊界能和條帶單元的大小對齊。如果條帶深度大小和Oracle數據塊大小完全相同,而它們的邊界沒有對齊的話,那么就會存在大量一個單獨的IO請求被兩塊磁盤來完成。
 在OLTP系統中,為了避免一個邏輯IO請求被多個物理IO操作完成,條帶寬度就需要設置為兩倍或者兩倍以上於Oracle數據塊大小。例如,如果條帶深度是IO大小的N倍,對於大量並發IO請求,我們可以保證最少有(N-1)/ N的請求是由一塊磁盤來完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM