介紹
企業(yè)數(shù)據(jù)存儲(chǔ)性能瓶頸常常會(huì)發(fā)生在端口,控制器和磁盤,難點(diǎn)在于找出引起擁塞的單元,往往需要應(yīng)用多重工具以及豐富的經(jīng)驗(yàn)來查找并解決。
本文詳細(xì)闡述存儲(chǔ)瓶頸發(fā)生最常見的四種情況,可能發(fā)生的擁塞點(diǎn),需要監(jiān)控的參數(shù)指標(biāo),以及部署存儲(chǔ)系統(tǒng)的最佳實(shí)踐。
更新歷史
2014年6月22日 - 轉(zhuǎn)載修改初稿
閱讀原文 - http://wsgzao.github.io/post/storage-performence/
數(shù)據(jù)存儲(chǔ)瓶頸的四個(gè)常見場(chǎng)景:
以下是儲(chǔ)瓶頸發(fā)生最常見的四種典型情況:
當(dāng)多個(gè)用戶同時(shí)訪問某一業(yè)務(wù)應(yīng)用,無論是郵件服務(wù)器,企業(yè)資源規(guī)劃(ERP)系統(tǒng)或數(shù)據(jù)庫,數(shù)據(jù)請(qǐng)求會(huì)累積在隊(duì)列中。單個(gè)I/O的響應(yīng)時(shí)間開始增長,短暫延時(shí)開始轉(zhuǎn)變成為漫長的等待。
這類響應(yīng)時(shí)間敏感型應(yīng)用的特征是,很多隨機(jī)請(qǐng)求,讀取比寫入更多,I/O較小。最好的方法是:將負(fù)載分布在多塊磁盤上,否則可能造成性能瓶頸。
如果應(yīng)用增加了更多用戶,或應(yīng)用IOPS請(qǐng)求增加,則可能需要在RAID組中添加更多磁盤,或數(shù)據(jù)可能需要跨越更多磁盤,在更多層級(jí)做條帶化。
存儲(chǔ)在這樣的情況下往往首先被懷疑,但大多數(shù)情況下并非存儲(chǔ)引發(fā),原因可能在于網(wǎng)絡(luò)、應(yīng)用或服務(wù)器。帶寬敏感型應(yīng)用——如數(shù)據(jù)備份,視頻流或安全登錄,這類應(yīng)用當(dāng)多個(gè)用戶同時(shí)訪問大型文件或數(shù)據(jù)流時(shí)可能造成瓶頸。
定位這一問題存儲(chǔ)管理員應(yīng)當(dāng)從備份服務(wù)器開始一路向下檢查至磁盤,原因可能存在于這一通路的任何地方。
問題不一定發(fā)生在存儲(chǔ),可能是由于備份應(yīng)用創(chuàng)建的方式或是磁帶系統(tǒng)的工作方式引起的。如果瓶頸定位于存儲(chǔ),那么可能是由于服務(wù)I/O的磁盤數(shù)量不足,在控制器造成爭用,或是陣列前端口帶寬不足。
性能調(diào)優(yōu)需要針對(duì)不同應(yīng)用程序負(fù)載來完成。針對(duì)大型文件和流數(shù)據(jù)的調(diào)優(yōu)并不適合于小型文件,反之亦然。這也就是為什么在大多數(shù)存儲(chǔ)系統(tǒng)中往往做一個(gè)平衡,需要用戶嘗試并找出系統(tǒng)的折中。用戶通常需要優(yōu)化吞吐量或IOPS,但并不需要對(duì)兩者同時(shí)優(yōu)化。RAID組中的磁盤故障。特別是在RAID 5中會(huì)造成性能的下降,因?yàn)橄到y(tǒng)需要重建校驗(yàn)數(shù)據(jù)。相比數(shù)據(jù)讀寫操作,重建會(huì)對(duì)性能造成更大影響。
即便壞盤是造成故障的根源,但控制器還是可能成為瓶頸,因?yàn)樵谥亟ㄟ^程中它需要不停地服務(wù)數(shù)據(jù)。當(dāng)重建完成時(shí),性能才會(huì)恢復(fù)正常。部署了一種新的應(yīng)用,而卷存在于處理繁忙郵件系統(tǒng)的同一磁盤。如果新的應(yīng)用變得繁忙,郵件系統(tǒng)性能將會(huì)遭受影響。額外的流量最終會(huì)將磁盤完全覆蓋。
存儲(chǔ)瓶頸常發(fā)區(qū)域:
存儲(chǔ)區(qū)域網(wǎng)絡(luò)(Storage-area network, SAN)/陣列前端口
存儲(chǔ)部署于集中化SAN環(huán)境時(shí),需考慮服務(wù)器和SAN之間的潛在網(wǎng)絡(luò)瓶頸。例如,運(yùn)行多部虛擬機(jī)的整合服務(wù)器可能不具備支持工作負(fù)載要求的足夠網(wǎng)絡(luò)端口。添加網(wǎng)絡(luò)端口或轉(zhuǎn)移網(wǎng)絡(luò)密集型工作負(fù)載至其他服務(wù)器可解決這一問題。如前所述,對(duì)于帶寬集中型應(yīng)用,需考慮NFS有多少Fiber Channel 端口, or iSCSI 端口 or Ethernet 端口,需要用戶站在帶寬的角度來考量整個(gè)架構(gòu)。
可能發(fā)生的問題包括:
- 如果陣列中端口數(shù)量不夠,就會(huì)發(fā)生過飽和/過度使用。
- 虛擬服務(wù)器環(huán)境下的過量預(yù)定
- 端口間負(fù)載不均衡
- 交換機(jī)間鏈路爭用/流量負(fù)荷過重
- 如某一HBA端口負(fù)載過重將導(dǎo)致HBA擁塞。使用虛擬機(jī)會(huì)導(dǎo)致問題更加嚴(yán)重。
存儲(chǔ)控制器
一個(gè)標(biāo)準(zhǔn)的主動(dòng)——被動(dòng)或主動(dòng)——主動(dòng)控制器都有一個(gè)性能極限。接近這條上限取決于用戶有多少塊磁盤,因?yàn)槊繅K磁盤的IOPS和吞吐量是固定的。
可能出現(xiàn)的問題包括:
- 控制器I/O過飽和,使得從緩存到陣列能夠處理的IOPS受到限制
- 吞吐量“淹沒“處理器
- CPU過載/處理器功率不足
- 性能無法跟上SSD
Cache
由于服務(wù)器內(nèi)存和CPU遠(yuǎn)比機(jī)械磁盤快得多,需為磁盤添加高速內(nèi)存以緩存讀寫數(shù)據(jù)。例如,寫入磁盤的數(shù)據(jù)存儲(chǔ)在緩存中直到磁盤能夠跟上,同時(shí)磁盤中的讀數(shù)據(jù)放入緩存中直到能被主機(jī)讀取。Cache比磁盤快1000倍,因此將數(shù)據(jù)寫入和讀出Cache對(duì)性能影響巨大。智能緩存算法能夠預(yù)測(cè)你需要查找的數(shù)據(jù),你是否會(huì)對(duì)此數(shù)據(jù)頻繁訪問,甚至是將訪問頻繁的隨機(jī)數(shù)據(jù)放在緩存中。
可能發(fā)生的問題包括:
- Cache memory不足
- Cache寫入過載,引起性能降低
- 頻繁訪問順序性數(shù)據(jù)引起cache超負(fù)荷
- Cache中需要持續(xù)不斷地寫入新數(shù)據(jù),因此如果cache總是在refill,將無法從cache獲益。
磁盤
磁盤瓶頸與磁盤轉(zhuǎn)速有關(guān), 慢速磁盤會(huì)引入較多延時(shí)。存儲(chǔ)性能問題的排查首先考慮的因素就是磁盤速度,同時(shí)有多少塊磁盤可進(jìn)行并發(fā)讀寫。而另一因素是磁盤接口。采用更快的接口能夠緩解磁盤瓶頸,但更重要的是在快速接口與相應(yīng)更大的緩存大小以及轉(zhuǎn)速之間取得平衡。同樣,應(yīng)避免將快速和慢速磁盤混入同一接口,因?yàn)槁俅疟P將會(huì)造成快速接口與快速磁盤的性能浪費(fèi)。
可能引發(fā)的問題包括:
- 過多應(yīng)用命中磁盤
- 磁盤數(shù)量不足以滿足應(yīng)用所需的IOPS或吞吐量
- 磁盤速度過慢無法滿足性能需求及支持繁重工作負(fù)荷
- Disk group往往是classic存儲(chǔ)架構(gòu)的潛在性能瓶頸,這種結(jié)構(gòu)下RAID最多配置在16塊磁盤。Thin結(jié)構(gòu)通常每個(gè)LUN擁有更多磁盤,從而數(shù)據(jù)分布于更多spindle,因增加的并發(fā)性而減少了成為瓶頸的可能。
需要監(jiān)控的指標(biāo):
曾經(jīng)一度存儲(chǔ)廠商們強(qiáng)調(diào)的是IOPS和吞吐量,但現(xiàn)在重點(diǎn)逐漸轉(zhuǎn)變成為響應(yīng)時(shí)間。也就是說,不是數(shù)據(jù)移動(dòng)的速度有多快,而在于對(duì)請(qǐng)求的響應(yīng)速度有多快。
正常情況下,15,000 rpm Fibre Channel磁盤響應(yīng)時(shí)間為4ms,SAS磁盤響應(yīng)時(shí)間約為5ms至6ms,SATA為10ms,而SSD少于1ms。如果發(fā)現(xiàn)Fibre Channel磁盤響應(yīng)時(shí)間為12ms,或SSD響應(yīng)時(shí)間變成5ms,那么就說明可能產(chǎn)生了爭用,可能芯片發(fā)生了故障。
除了響應(yīng)時(shí)間,其他需要監(jiān)控的指標(biāo)包括:
- 隊(duì)列長度,隊(duì)列中一次積累的請(qǐng)求數(shù)量,平均磁盤隊(duì)列長度;
- 平均I/O大小千字節(jié)數(shù);
- IOPS (讀和寫,隨機(jī)和順序,整體平均IOPS);
- 每秒百萬字節(jié)吞吐量;
- 讀寫所占比例;
- 容量(空閑,使用和保留)。
數(shù)據(jù)存儲(chǔ)性能最佳實(shí)踐:
性能調(diào)優(yōu)和改進(jìn)的方式有很多種,用戶當(dāng)然可以通過添加磁盤,端口,多核處理器,內(nèi)存來改善,但問題是:性價(jià)比,以及對(duì)業(yè)務(wù)是否實(shí)用。本文建議的方式是在預(yù)算范圍內(nèi)找尋性能最大化的解決方案。另外一個(gè)需要考慮的方面是環(huán)境并非一塵不變,系統(tǒng)部署方案要能夠適應(yīng)環(huán)境的改變需求。
首先需要考慮刷數(shù)據(jù)的性能特征,需要了解IO工作情況是怎樣的。是否是cache友好型?是否是CPU集中型?業(yè)務(wù)數(shù)據(jù)很大數(shù)量很少,還是很小但數(shù)量很多?另外一方面就是構(gòu)成存儲(chǔ)環(huán)境的組件。包括應(yīng)用,存儲(chǔ)系統(tǒng)本身,網(wǎng)絡(luò)。。。瓶頸可能在哪里,改善哪里最有效?
以下是一些常規(guī)建議:
- 不要僅僅根據(jù)空閑空間來分配存儲(chǔ),而需要結(jié)合考慮性能需求,確保為吞吐量或IOPS分配足夠多的磁盤。
- 在磁盤間均衡分布應(yīng)用負(fù)載,以減少熱點(diǎn)地區(qū)的產(chǎn)生。
- 理解應(yīng)用負(fù)載類型,并針對(duì)負(fù)載選擇匹配的RAID類型。例如,寫密集型應(yīng)用建議使用RAID 1而不是RAID 5。因?yàn)楫?dāng)寫入RAID 5時(shí),需要計(jì)算校驗(yàn)位,需耗費(fèi)較多時(shí)間。而RAID 1,寫入兩塊磁盤速度快得多,無需計(jì)算。
- 磁盤類型(Fibre Channel, SAS, SATA)與期望性能相匹配。對(duì)于關(guān)鍵業(yè)務(wù)應(yīng)用部署高性能磁盤,例如15,000 rpm Fibre Channel。
- 對(duì)于I/O密集型應(yīng)用考慮采用SSD,但并不適用于寫性能重要型應(yīng)用。只要沒有達(dá)到控制器瓶頸,SSD對(duì)讀性能提升顯著,但對(duì)寫性能提升并沒有明顯效果。
- 采用端對(duì)端的監(jiān)控工具,特別是虛擬服務(wù)器環(huán)境。虛擬端與物理端之間有一道防火墻,所以,需要穿透防火墻進(jìn)行端到端的監(jiān)控。
- 有些性能分析工具涵蓋從應(yīng)用到磁盤,有些僅局限于存儲(chǔ)系統(tǒng)本身。由于性能是一個(gè)連鎖反應(yīng)包含很多變量,所以需要全面地分析數(shù)據(jù)。
- 以數(shù)據(jù)僅寫入磁盤外部扇區(qū)的方式格式化磁盤。因減少數(shù)據(jù)定位時(shí)間而在高I/O環(huán)境下提升性能。負(fù)面作用是相當(dāng)一部分磁盤容量未能得以使用。
應(yīng)用于
存儲(chǔ)性能分析、定位與排查
閱讀原文