整個(gè)I/O流經(jīng)歷一下幾個(gè)節(jié)點(diǎn):

File System – 文件系統(tǒng)會(huì)根據(jù)文件與Block的映射關(guān)系,通過File System Manager將文件劃分為多個(gè)Block,請求發(fā)送給HBA。

HBA – HBA執(zhí)行對這一系列的更小的工作單元進(jìn)行操作,將這部分I/O轉(zhuǎn)換為Fibre Channel協(xié)議,包裝成不超過2KB的Frame傳輸?shù)较乱粋€(gè)連接節(jié)點(diǎn)FC Switch。

FC Switch – FC Switch會(huì)通過FC Fabric網(wǎng)絡(luò)將這些Frame發(fā)送到存儲系統(tǒng)的前端口(Front Adapter)。

Storage FA – 存儲前端口會(huì)將這些FC 的Frame重新封裝成和HBA初始發(fā)送I/O一致,然后FA會(huì)將數(shù)據(jù)傳輸?shù)疥嚵芯彺妫⊿torage Array Cache)

Storage Array Cache – 陣列緩存處理I/O通常有兩種情況:1.直接返回?cái)?shù)據(jù)已經(jīng)寫入的訊號給HBA,這種叫作回寫,也是大多數(shù)存儲陣列處理的方式。2. 數(shù)據(jù)寫入緩存然后再刷新到物理磁盤,叫做寫透。I/O存放在緩存中以后,交由后端控制器(Disk Adapter)繼續(xù)處理,完成后再返回?cái)?shù)據(jù)已經(jīng)寫入的訊號給HBA。

Disk Adapter – 上述兩種方式,最后都會(huì)將I/O最后寫入到物理磁盤中。這個(gè)過程由后端Disk Adapter控制,根據(jù)后端物理磁盤的RAID級別的不同,一個(gè)I/O會(huì)變成兩個(gè)或者多個(gè)實(shí)際的I/O。

根據(jù)上述的I/O流向的來看,一個(gè)完整的I/O傳輸,經(jīng)過的會(huì)消耗時(shí)間的節(jié)點(diǎn)可以概括為以下幾個(gè):

CPU – RAM, 完成主機(jī)文件系統(tǒng)到HBA的操作。

HBA – FA,完成在光纖網(wǎng)絡(luò)中的傳輸過程。

FA – Cache,存儲前端卡將數(shù)據(jù)寫入到緩存的時(shí)間。

DA – Drive,存儲后端卡將數(shù)據(jù)從緩存寫入到物理磁盤的時(shí)間。

下面的表中根據(jù)不同階段的數(shù)據(jù)訪問時(shí)間做了一個(gè)比較,一個(gè)8KB的I/O完成整個(gè)I/O流向的大概耗時(shí)。(表中的耗時(shí)根據(jù)每秒的傳輸數(shù)據(jù)整除獲得,例如HBA到FA的速度有102,400KB/秒除以8KB得到78 μs)。根據(jù)表中的數(shù)據(jù)顯而易見,I/O從主機(jī)的文件系統(tǒng)開始傳輸?shù)酱鎯﹃嚵械木彺嬖谡麄€(gè)這個(gè)I/O占比很小,由于機(jī)械硬盤的限制,最大的耗時(shí)還是在DA到物理磁盤的時(shí)間。如果使用閃存盤,那這個(gè)數(shù)據(jù)會(huì)大幅縮小,但是與其他幾個(gè)節(jié)點(diǎn)的傳輸時(shí)間相比,占比還是比較大的。

可以看到,存儲陣列的緩存在整個(gè)I/O流中所起到的作用是至關(guān)重要。緩存的處理效率與大小,直接影響到I/O處理的速度。而然,在實(shí)際的環(huán)境中,即使存儲陣列的緩存工作得當(dāng),主機(jī)的I/O也不會(huì)達(dá)到100 μs也就是0.1ms的水平,通常在1-3ms左右,就會(huì)認(rèn)為I/O處理處于比較高性能的模式。原因就是因?yàn)榱硗鈨蓚€(gè)因素“數(shù)據(jù)頭處理”和“并發(fā)”。

 1. “數(shù)據(jù)頭處理“由于I/O流中每個(gè)I/O的數(shù)據(jù)組成并不是只包含數(shù)據(jù),如下圖所示,一個(gè)I/O除了數(shù)據(jù)以外還包含了Negotiation,Acknowledgement用來負(fù)責(zé)在I/O流中的每個(gè)節(jié)點(diǎn)傳輸和進(jìn)行管理的。其中包含和TCP/IP一樣的“Handshaking“信息以及流控制的信息,比如初始化傳輸,結(jié)束通訊等等。Header中則會(huì)定義一些例如CRC校驗(yàn)的信息,保證數(shù)據(jù)的一致性。所有這些數(shù)據(jù)的處理都會(huì)耗費(fèi)一定的處理資源,增加I/O流的耗時(shí)。

2.“并發(fā)“。由于I/O流整個(gè)過程中不可能只同時(shí)處理一個(gè)I/O,所有的I/O在HBA,F(xiàn)C,F(xiàn)A和DA處理的過程中都是已大量并發(fā)的情況下進(jìn)行。而主要的耗時(shí)取決于I/O隊(duì)列的等待,雖然存儲陣列會(huì)在并發(fā)上進(jìn)行優(yōu)化。同一個(gè)處理Slice的處理還是會(huì)一隊(duì)列形式進(jìn)行。入下圖所示,當(dāng)存儲同時(shí)面對多個(gè)I/O的處理的情況,總會(huì)有某個(gè)I/O會(huì)在整個(gè)流的最后出來,而增加I/O的耗時(shí)。所以說,在I/O流的每個(gè)節(jié)點(diǎn)出現(xiàn)瓶頸,或者短板的時(shí)候。I/O的耗時(shí)就會(huì)增加。

綜上所述,I/O流與存儲性能的關(guān)系可以總結(jié)為以下幾點(diǎn):

完成一個(gè)I/O流主要經(jīng)歷過的節(jié)點(diǎn)有HBA,F(xiàn)C網(wǎng)絡(luò),存儲前端口FA,存儲緩存、存儲后端口,物理磁盤。而很個(gè)過程中最耗時(shí)的是物理磁盤。

存儲陣列的緩存的大小和處理方式直接影響到I/O流的性能,也是定義一個(gè)存儲陣列優(yōu)劣的重要指標(biāo)之一。

I/O的處理速度通常會(huì)遠(yuǎn)離理論值,原因多個(gè)并發(fā)量較大而造成的隊(duì)列延遲。

優(yōu)化I/O的方式可以從多個(gè)節(jié)點(diǎn)入手,而最顯著的效果是提升物理磁盤的速度。因?yàn)榇鎯﹃嚵袝?huì)把盡可能多的數(shù)據(jù)放入緩存,而當(dāng)緩存用滿以后的數(shù)據(jù)交換則完全取決于物理磁盤的速度。

適當(dāng)選用合適的RAID級別,因?yàn)椴煌腞AID級別的讀寫比例大不相同,可能使得物理磁盤處理耗時(shí)幾倍增加。參考:淺談RAID寫懲罰(Write Penalty)與IOPS計(jì)算

本文作者為EMC中文技術(shù)社區(qū)(https://community.emc.com/go/chinese)技術(shù)版主。如果您對本文有任何疑問和不同見解,也歡迎到EMC中文支持論壇參與討論。

分享到

fenglin

相關(guān)推薦