本篇將說明LSI產品中, IOP與RoC之間的差異性. 長年以來的RAID Processing分類: Hardware RAID與Software RAID. 一個決定點是在於Host資源的依賴程度. 所謂的Hardware RAID存在特製化的專屬ASIC硬線加速設計, 使得Host在I/O Processing的負載有一定程度的減輕; 而Software RAID正是缺乏那些特製化加速設計, 讓Host必須被消費更多資源作用於I/O Processing.
LSI的IOP, 諸如LSISAS2008或著LSISAS1068/E, 這些基本上歸類為Software RAID; 而RoC像是LSISAS1078, LSISAS2108或著LSISAS2208等則是Hardware RAID, 提供更好的性能.
LSI提供的IOP(I/O Processor)與RoC(RAID on Chip), 其兩者硬體架構上存在一些差別, 這些差別決定不同的I/O性能. IOP的硬線架構設計比RoC單純許多, 相對在功耗上會減輕些. 但是缺乏特製化的加速設計使得性能與RoC存在不少的差距. 如下圖的方塊圖所示, 這是LSISAS2008 IOP與LSISAS2108 RoC的比較差異, 可以看出RoC比IOP多了一些功能, 這些功能使得I/O Processing能有效進行加速:
從上圖看到這兩款有一個共通點在於它們都擁有Built-in Processor, 被廣泛應用的PPC440處理器, 不過這兩款時脈(Clock)不一樣. LSISAS2008的PPC440是533MHz, 而LSISAS2108則是800MHz. Built-in Processor能有效幫助I/O上的負載, 例如中斷操作處理, 條帶(Stripe)計算輔助等. 不過, 也有可能兼任像是debug的內部作業任務.
這兩款關鍵的差異在於RoC如何提供有效的硬線加速設計, 從LSISAS2108方塊圖看到包含RAID/XOR的加速電路, 允許進行Single-parity或著Double-parity的運算操作, 對於被廣泛使用的Parity RAID模式來說, 能大幅增強I/O性能, 尤其是寫入操作. RAID/XOR的加速電路可稱為RAID Assistant, 這表示該單元用來輔助RAID的I/O Processing. 另外看到RAID Assistant附接了外部記憶體控制器(External Memory Controller), 該控制器用來連接DRAM Buffer所使用, 這些DRAM Buffer的用途作為Cache Memory, 存放相關的I/O數據, 包括讀操作或著寫操作數據. 有效的Cache機制對於RAID性能來說至高重要. Cache Memory裡的數據存在了經常被使用以及區域性的特點, 這些數據被稱為熱數據(Hot-data), 所以Cache Memory又可被稱為Hot-data Buffer.
典型的Parity RAID模式, 例如RAID 5或著RAID 6, 對於Cache操作是相當敏感, 表示Cache Memory經常被使用. 大量的寫操作, 需要頻繁進行XOR運算產生Parity, 寫操作包括不同的作業方式, Full-stripe Write, Read-Modify-Write或著Reconstruct Write, Parity屬於條帶切割的一部分, 如果將產生Parity的相關數據快取到Cache Memory, 那麼延遲率能有效壓到1ms時間以下. 不管是新產生的Parity以及資料數據都暫時快取到Cache Memory上, 這樣的寫回快取操作稱為Write-back Caching. Write-back Caching對於Parity RAID模式有相當的影響性, 以下的圖表以HD Tune Pro進行寫入測試, 然後用Process Explorer取得Disk I/O的負載結果, 擷取Write-back Caching啟動前後的差異, 這是以WD SAS 2.0 1TBx4做RAID 5(256KB, Disk Cache Enabled)測試出來的結果:
從上表看出Write-back Caching對於Parity RAID模式的嚴重影響性, 當關閉Write-back Caching時稱為Write-through. 一個悲觀的例子是當發生一個條帶的寫入操作, 而該操作並不是Full-stripe Write, 沒有剛好等於條帶大小, data blocks寫入佔整個條帶的一半以上, 假設是一個條帶的7成new data blocks寫入, 那麼需要先將2成未更新的old data blocks讀取出來, 再與7成的new data blocks進行XOR操作計算出new parity block, 最後將new data blocks與new parity block寫回到PDs上, 完成一個條帶的寫入操作. 沒有Write-back Caching的情況下, 直接寫到PDs上會佔用I/O操作時間, 數據量提高將會對性能造成傷害, 而使用Write-back Caching的改善會將new data blocks與new parity暫存到Cache Memory, 這樣所造成的延遲率會大幅縮短, 最後根據RAID f/w操作的設定, 會將整批的寫入數據flush到PDs上, 這段過程稱為Cache Flush. 因此從上圖的例子可以知道Write-back Caching對於Parity RAID模式的寫入操作非常重要.
不幸的是, LSI設計的IOP除了Disk Cache Policy以外, 其他Cache Policy都不支持, 例如Read Cache或著Write Cache. 在Parity RAID模式下, 使得寫入性能會遭受很大程度的打擊. 如下圖使用HD Tune Pro進行寫入測試, 呈現的性能數值並不是很好看:
前面提到過RoC具備了RAID Assistant, 用以操作XOR相關運算, 而IOP缺乏了這項特徵, 使得IOP操作Parity RAID模式必須依賴Host提供的資源來輔助相關的I/O Processing. 有一個關鍵在於RAID f/w是如何操作這兩種不同情況, 依賴IOP與RoC提供的RAID stack差異性. 以往Software RAID與Hardware RAID上的架構區分, 根據Adaptec的一份技術文件描述如下, 為不同RAID架構的Stack差異比對:
上圖是典型的Software RAID與Hardware RAID在Software Stack差異上的比對,HostRAID Device Driver在載入作業系統環境後才正式操作RAID I/O Processing, 說明了Software RAID大部分的設計是建立在軟件部分; 而Hardware RAID則是在BIOS initializing階段時, 會操作RAID Controller進行相關的I/O Processing, 這代表大部分操作資源放置在容量較大的獨立Firmware, RAID f/w封裝相關硬線電路的執行代碼, 在初始化完成後載入到系統記憶體進行各種相關的RAID I/O Processing, 不需要依賴正式載入到作業系統環境上. 這樣的差異區別了典型Software RAID與Hardware RAID的不同情形.
不過上面這個典型的差異例子, 在LSI的MegaRAID會有些不一樣, 不管是RoC或著IOP, 它們都依賴RAID f/w封裝的相關執行代碼, 作業系統載入的驅動程式是一個輕型框架, 用來溝通與RAID f/w載入到系統記憶體後的相關執行代碼. 也就是說LSI的RoC或著IOP都是Firmware-based的, 從Intel一份技術文件中提供一張圖表來說明相關差異, 如下所示:
上表有一個問題就是沒有包括使用MegaRAID Stack的LSISAS2008, 但是可以把他歸類在IR3 RAID裡, 不過不是完全一樣, 請特別注意! 表中的ERST2或著RSTe都是典型的driver-based RAID, 屬於Software RAID. 圖表的焦點請關注在IR3 RAID項目上, IR3 RAID就是LSI的MegaRAID Stack, 在BIOS initializing階段後, RAID f/w相關執行代碼載入到系統記憶體後就會進行有關的I/O Processing, LSISAS2008缺乏RoC擁有的相關硬線加速設計, 這代表在BIOS initializing階段時, 情況會有些不同.
LSISAS2008會更依賴Host相關的資源, 如果在Parity RAID模式下, 透過RAID f/w封裝的相關演算法使用Host的資源進行操作, 像是CPU或著系統記憶體部分. 但是跟典型的driver-based RAID相比, 是更加可靠的. 軟件的絕大部分並不是建立在作業系統環境上, 而是自有的IP Core封裝在Firmware裡, RAID f/w執行操作RAID Controller處理相關的I/O Processing不會涉及到作業系統, 透過客製化的BIOS UI介面執行各種相關的I/O操作, 而非正式載入到作業系統後才能運行, 例如OCE,ORLM或著Media Scans等..., 所以不管IOP或著RoC在這層次上都是一樣的, 差別在於資源移轉以及依賴操作上的不同. IOP透過RAID f/w操作會更加依賴Host資源.
LSI提供的Software Stack與Hardware Stack在根本上, 是基於多年發展出來的一種開放式I/O架構-Fusion MPT, 該架構整合不同層次的驅動模塊, 職責不同的用途. 當然這個架構的重點在於Firmware Level部分, 它決定了能允許甚麼樣的功能以及性能上的協調, 如下圖說明了Fusion-MPT架構的各種層次:
基於Fusion-MPT架構, LSI的MegaRAID驅動程式是輕型框架, 大部分是依賴RAID f/w進行操作, 來自Intel的一份技術文件其中一張架構圖描述該驅動程式的模型框架, 如下所示:
Miniport Driver部分是屬於作業系統範疇的功能驅動程式(function driver)部分, 請關注在RAID Engine這塊, 真正的操作也這裡. RAID Engine相關的執行代碼被封裝在Firmware裡, 他有三個重要部分: BIOS Console, RAID BIOS和MFC Setting, 這三個部份的簡要說明如下區分:
- BIOS Console: 主要提供一種人性化的UI操作介面, 提供各種選擇功能.
- RAID BIOS: 是來自PCI規範的擴展ROM部分, 主要載入到系統記憶體執行相關的初始化操作(POST).
- MFC Setting: 定義出廠設定值(factory setting), 有的參數允許修改; 有的則是無法更改(真正存放可修改的設定會在NVRAM裡).
除此這三個部份之外, RAID Engine也封裝了LSI自家IP Core的相關RAID演算法以及功能代碼, 例如RAID模式, OCE, ORLM等..Miniport Driver會有一個程式進入點(Driver Entry), 透過專屬的API與自家的RAID Engine進行通訊. 涉及到任何關鍵上的變化都必須要依賴Firmware部分. 例如MegaRAID早期v3.x版不支持高階軟件服務(Advanced Software Options), 後來開放支持以後, 必須得更新Firmware內容才能允許使用. RAID f/w會接通與target dvices的連線進行I/O上的操作.
RAID f/w決定硬體上的效能與功能使用, 使得IOP和RoC之間有各種差異, LSI透過RAID f/w對IOP的設限跟RoC相比, 可以說是限制多多. 從下表可以看出IOP和RoC的MegaRAID Stack有哪些差異:
可以得知這些限制使得IOP提供的RAID功能是屬於入門級別的, 包括對target device以及VD建立的支持數量. 但是數據可靠性部分卻是與RoC沒太多區別, 除非是MegaRAID版本上的不同才會有其差異.
LSI對於IOP與RoC的功能設計區別不僅僅是RAID f/w和RAID Controller本身, 其包括相關產品部分, 整個layout存在許多差異, 使得IOP對於RAID應用來說僅僅作為入門級的企業產品. 如下圖所示, 可以看出兩者不同的layout設計:
上圖兩張RAID HBA, 左邊為採用LSISAS2008 IOP的MegaRAID SAS 9240系列; 右邊則為LSISAS2108 RoC的MegaRAID SAS 9260系列. 明顯的差異顯示出LSISAS2108 RoC完全適用在高效能的Enterprise RAID領域, PFK支持強化對RoC的服務加值, 而LSISAS2008 IOP目前推出的9240系列不能透過PFK加值服務, 雖然這款已預先遷入SafeStore數據保護技術. 另外這兩款都存有一顆NVRAM作為Write-journaling, TTY Log以及保存出廠設定和異動設定(可變跟或不可異動).
作為完善且可靠的Enterprise RAID方案, LSI發展出的RoC提供良好的性能以及不斷改進的MegaRAID, 持續增強數據可靠性. 而IOP使用MegaRAID雖然被賦予跟RoC相近的數據可靠性, 不過由於RAID f/w上的種種限制, 使得IOP在MegaRAID應用僅作為入門級方案.