「存儲極客」三步完成全閃存選型
“
在《存儲極客:SPC-1負載分析
與AFA壽命評估》一文中,
我們討論了如何從SSD耐用性角度
規劃match存儲系統的配置。
今天再談談閃存性能的規劃,
包括測試和配置選型兩個方面。
存儲極客設計了下面這個流程:
應用性能收集/評估 >>
存儲設備模擬測試 >>后續分析
怎樣把前兩個環節打通,是問題的關鍵。
”
某家存儲廠商性能收集/分析工具的截圖,
算是同類中的一個代表吧。
測試準備
全閃存陣列配置實踐
我先講一些基礎的東西,包括SAN存儲網絡建議怎么連、劃Zone的規則和HBA卡參數等。針對的應用環境是數據庫——Oracle OLTP。
圖片引用自《Accelerating Oracle OLTP with Dell SC Series All-Flash Arrays》,以下同。
上面是一個典型的傳統Oracle RAC+集中式存儲陣列+SAN網絡的配置。其中以Dell SC9000為例,雙控同時連接到后端的SC220 SAS驅動器機箱,里面滿配24個SSD中有一塊熱備盤。
1存儲網絡最佳配置
存儲和PowerEdge R730服務器之間有2個Brocade 6505 16Gb FC交換機。在服務器FC HBA驅動設置上,包括timeouts(超時)和QD(隊列深度)的建議如下:
To adjust the values, the following lines were added to file /etc/modprobe.d/qla2xxx.conf.
options qla2xxx qlport_down_retry=5
options qla2xxx ql2xmaxqdepth=
由于是冗余的本地存儲連接,每條路徑的超時重試時間為5秒。
Once the system has restarted, verify that the configuration changes have taken effect:
# cat /sys/module/qla2xxx/parameters/qlport_down_retry
5
# cat /sys/module/qla2xxx/parameters/ql2xmaxqdepth
32
FC HBA的隊列深度建議設為32。這部分都是以QLogic光纖卡為例,如果換Emulex也是同樣的道理。
下面我們看看Zone的配置。
以左右兩邊FC交換機為中心拓撲出2個存儲網絡故障域,如果是iSCSI就換成以太網交換機。
上圖以其中一臺服務器為例。2塊FC HBA卡上共有4個端口,camaro代表主機名,s1/s2分別對應左右兩邊的HBA卡。每塊HBA都同時連接到2臺FC交換機,然后可以看到兩個存儲控制器上的全部主機接口。
上圖是故障域Fabric 1中的4個Zone。前面2個Zone包含服務器camaro上兩塊HBA卡靠左邊的端口,它們都可以看到雙存儲控制器靠左的2個主機接口。如果感覺上面兩張圖的對應關系還不夠清楚,不妨再看看下面這個表:
如上表,在一臺服務器上,每塊HBA卡的2個口分別可以看到同Zone中所有存儲控制器上的1,2 / 3,4端口。目的大家也都清楚:為了實現SAN網絡連接的高可用、有效利用帶寬,隔離以降低管理上的復雜性。
2寬條帶化和Thin-Provisioning注意事項
本文測試的SC9000配置了24個1.92TB讀密集型3D NAND TLC SSD,2MB的“數據頁面”就是Dell SC(Compellent)的寬條帶化RAID打散粒度。如果做自動分層存儲的話,這個數據調度的粒度也是2MB,靠同一套元數據管理機制來實現的。
RAID 10-DM就是三重鏡像,可以理解為存儲控制器本地三副本,最大保障數據可靠性,同時沒有分布式存儲多副本的網絡開銷。
因為傳統RAID 10的雙盤故障風險在寬條帶化存儲池中被放大了,而RAID 6的隨機寫性能又不夠理想,RAID 10-DM給了用戶更多一種選擇。
以Dell SC為例,當SSD/HDD容量、個數在一定范圍內會推薦采用RAID 10-DM鏡像,如果超出一定水平則強制要求鏡像保護必須為RAID 10-DM,這是為數據安全性考慮的。
存儲管理界面截圖引用自《工程師筆記:SCv2000試用之RAID分層+快照》一文。
有沒有兼顧性能和容量利用率的方式呢?除了在自動分層存儲中將不同驅動器配置為不同RAID之外,在單一類型驅動器的存儲池中,Dell SC仍然支持跨兩種RAID級別進行分層存儲,結合鏡像和奇偶校驗各自的優點。其原理是利用周期快照“凍結”只讀數據塊并改為RAID 5/6方式存放,這種讀寫分離的思想同樣也能用于RI(讀密集型)SSD和WI(寫密集型)SSD之間的自動分層。
上圖只是一個舉例,由于本文是模擬OLTP應用環境的讀寫混合測試,實際都是在性能更好的RAID 10-DM配置進行。
在有元數據分配數據條帶的情況下,精簡配置(Thin-Provisioning)就成為原生的特性。但我也看到有同行朋友反映由于用戶沒做好容量預警,存儲池被寫爆的狀況。當然這也是有辦法避免的,比如上圖所示創建卷時“預分配存儲”選項。
需要注意的是,這個選項在我們的性能測試中另有深意,簡單說也可以解釋為“POC防作弊”。由于我們使用的是Oracle ORION測試工具,其寫入的數據為全零,如果是沒有預分配的Thin卷,有個智能技術(零檢測)——不會真正向SSD/HDD盤寫入數據。如果這樣的話,顯然我們看不到真實的性能數據。
混合讀寫測試結果
ORION是一個Oracle官方模擬數據庫存儲IO的測試工具。OTLP的典型負載為8KB隨機讀寫,這里通過參數指定讀/寫比例為70:30。
測試結果如上表。深紅色折線代表IOPS,我們看到當并發ORION任務達到14時,8KB混合讀寫IOPS超過250,000。
根據這個結果可以大致估算出100%讀IOPS能跑多高嗎?大家先看看我下面的方法是否合理:
估算方法一:在257,313 IOPS中有30%的寫IO,考慮到RAID 10落在SSD盤上會有寫放大,那么把這些寫的時間換成讀操作應該能快不少,保守估計跑到40萬IOPS以上問題不大。
問題1:
閃存盤讀比寫快,那么上面的估計是否保守了?
我的答案是yes,但具體低估了多少,除了實測之外另有一種推算方法可以考慮。
問題2:
前后端存儲網絡、連接會不會成為瓶頸?
按照40萬8KB IOPS來計算,折合3200MB/s的帶寬。具體到我們測試環境是端到端16Gb FC SAN網絡,4條交換機上行鏈路不應成為瓶頸;后端每條SAS線纜12Gb x4 lane也是如此。
問題3:
我用不了這么多個SSD,換個配置性能可以按比例縮放計算嗎?
以我在《SSD壽命與閃存陣列選型(上)為什么關注DWPD?》中引用的Dell SC4020 SPC-1性能測試結果為例,6塊SSD超過11萬IOPS,平均每個接近2萬了。
當然,SPC-1測試的混合工作負載數據塊大小和讀寫比例(《存儲極客:SPC-1負載分析與AFA壽命評估》中曾有詳細分析)與本文的ORION有些不同,另外6塊480GB SSD用的是RAID 10雙盤鏡像,所以只是個參考對比??紤]到SC9000比SC4020要高端,其性能上限應該也會較高。
估算方法二:這個我也是看到不只一家存儲廠商使用。大家知道SSD驅動器有個制造廠商的IOPS性能指標,而在陣列中的發揮會有不小的折扣。于是人們就在存儲系統中測試各種單盤RAID 0的性能,以此為基礎來估算不同數量SSD配置能夠達到的IOPS,當然如果是寫性能還要考慮RAID懲罰的影響。
關于方法二我就不詳細舉例了,有興趣了解的朋友可以找相關人士咨詢。
性能分析收集工具
了解存儲需求的助手
我在本文開頭列出過一張IOPS截圖,上面這個為主機上監測到訪問存儲的帶寬,對應的具體存儲配置未知。它們都是使用DPACK(Dell Performance Analysis Collection)軟件收集的。
讀寫I/O尺寸與應用類型相關,比如Oracle OLTP典型的是8KB,上面這個比較像Exchange郵件服務器。另外我還看到過有的存儲廠商宣稱32KB優化對實際應用的意義較大。
延時是另一個關乎應用體驗的重要指標,這個與I/O請求大小有很大關系。比如上面圖表大部分時間寫延遲很低,應該有存儲Cache的效果在里面,絕大多數I/O都在20ms以內,屬于Exchange正常接受的范圍。至于藍色的波峰,不排除是有個大數據塊I/O,也可能是由于持續寫入壓力大,緩存數據滿了落盤導致。
另外需要說明的是,如果按照Oracle OLTP的8KB訪問習慣,平均延時通常比上面圖中要低。而存儲I/O與數據庫事物交易延時并不是一回事,因為根據事物復雜度不同,每筆事物中包含的I/O數量也是不同的,而且還有計算的開銷要考慮。因此,我們不能從應用端一看到幾十ms的延時,就全都怪存儲不給力。
在用戶現有的應用系統中收集到上述性能數據之后,再加上我在本文中介紹的方法,存儲售前顧問就可以更有針對性地推薦陣列配置?,F在全閃存逐漸開始流行,而有些情況下用固態混合(SSD+HDD)分層存儲也是不錯的選擇。如果用戶看重容量和性價比,或者想保留更多的歷史快照數據,能夠兼容傳統硬盤的陣列就顯出優勢了。