淺析I/O處理過程與存儲性能的關係

    “性能”這個詞可以說伴隨着整個IT行業的發展,每次新的技術出現,從硬件到軟件大多數情況下都圍繞着性能提升而展開。“摩爾定理”指出CPU的處理速度每18個月會翻一番,但是進入21世紀的第二個十年來,似乎它的速度慢了下來。但是IT行業的各個行業領導者們,還是不斷在計算機的性能尋求突破,繼續挑戰物理極限。細看存儲行業,每款新的存儲產品的推出,也圍繞着如何更快、更好的服務前端服務器的I/O請求爲中心。本文從I/O(Block)的流向介紹,試圖解讀整個I/O流與存儲性能之間的些許聯繫。本文作爲一篇存儲基礎的介紹文章,幫助讀者瞭解看似簡單的數據讀寫中的更多細節。

更多信息

 

存儲I/O流與存儲性能:

 

     存儲I/O(後文簡稱I/O)的處理過程就是計算機在存儲器上讀取數據和寫入數據的過程。這種存儲器可以是非持久性存儲(RAM),也可以是類似硬盤的持久性存儲。一個完整的I/O可以理解爲一個數據單元完成從發起端到接收端的雙向的過程。在企業級的存儲環境中,在這個過程會經過多個節點,而每個節點中都會使用不同的數據傳輸協議。一個完整的I/O在每個不同節點間的傳輸,可能會被拆分成多個I/O,然後從一個節點傳輸到另外一個節點,最後再經歷相同的過程返回源端。

 

     下圖演示了一個文件在經過整個I/O路徑中每個節點所進行的變化(以EMC Symmetrix存儲陣列爲例):

 

IO-1.png

 

整個I/O流經歷一下幾個節點:

 

  • File System – 文件系統會根據文件與Block的映射關係,通過File System Manager將文件劃分爲多個Block,請求發送給HBA。
  • HBA – HBA執行對這一系列的更小的工作單元進行操作,將這部分I/O轉換爲Fibre Channel協議,包裝成不超過2KB的Frame傳輸到下一個連接節點FC Switch。
  • FC Switch – FC Switch會通過FC Fabric網絡將這些Frame發送到存儲系統的前端口(Front Adapter)。
  • Storage FA – 存儲前端口會將這些FC 的Frame重新封裝成和HBA初始發送I/O一致,然後FA會將數據傳輸到陣列緩存(Storage Array Cache)
  • Storage Array Cache – 陣列緩存處理I/O通常有兩種情況:1.直接返回數據已經寫入的訊號給HBA,這種叫作回寫,也是大多數存儲陣列處理的方式。2. 數據寫入緩存然後再刷新到物理磁盤,叫做寫透。I/O存放在緩存中以後,交由後端控制器(Disk Adapter)繼續處理,完成後再返回數據已經寫入的訊號給HBA。
  • Disk Adapter – 上述兩種方式,最後都會將I/O最後寫入到物理磁盤中。這個過程由後端Disk Adapter控制,根據後端物理磁盤的RAID級別的不同,一個I/O會變成兩個或者多個實際的I/O。

 

     根據上述的I/O流向的來看,一個完整的I/O傳輸,經過的會消耗時間的節點可以概括爲以下幾個:

 

  • CPU – RAM, 完成主機文件系統到HBA的操作。
  • HBA – FA,完成在光纖網絡中的傳輸過程。
  • FA – Cache,存儲前端卡將數據寫入到緩存的時間。
  • DA – Drive,存儲後端卡將數據從緩存寫入到物理磁盤的時間。

 

     下面的表中根據不同階段的數據訪問時間做了一個比較,一個8KB的I/O完成整個I/O流向的大概耗時。(表中的耗時根據每秒的傳輸數據整除獲得,例如HBA到FA的速度有102,400KB/秒除以8KB得到78 μs)。根據表中的數據顯而易見,I/O從主機的文件系統開始傳輸到存儲陣列的緩存在整個這個I/O佔比很小,由於機械硬盤的限制,最大的耗時還是在DA到物理磁盤的時間。如果使用閃存盤,那這個數據會大幅縮小,但是與其他幾個節點的傳輸時間相比,佔比還是比較大的。

          

8KB I/O的傳輸

耗時(單位:μs)

擴大1,000,000耗時

CPU到RAM的傳輸,166MHz 64位總線

6 μs

6 sec

HBA到FA,100MB/秒速率

78 μs

1 min 18 sec

FA到Cache(Symmetrix DMX Director 2.5GHz)

26 μs

26 sec

DA到物理磁盤,73GB 15,000   rpm, Seek 3.6ms,latency 2.0ms

5,700 μs

1 hr 35 min

 

     可以看到,存儲陣列的緩存在整個I/O流中所起到的作用是至關重要。緩存的處理效率與大小,直接影響到I/O處理的速度。而然,在實際的環境中,即使存儲陣列的緩存工作得當,主機的I/O也不會達到100 μs也就是0.1ms的水平,通常在1-3ms左右,就會認爲I/O處理處於比較高性能的模式。原因就是因爲另外兩個因素“數據頭處理”和“併發”。

 

     1. “數據頭處理“由於I/O流中每個I/O的數據組成並不是只包含數據,如下圖所示,一個I/O除了數據以外還包含了Negotiation,Acknowledgement用來負責在I/O流中的每個節點傳輸和進行管理的。其中包含和TCP/IP一樣的“Handshaking“信息以及流控制的信息,比如初始化傳輸,結束通訊等等。Header中則會定義一些例如CRC校驗的信息,保證數據的一致性。所有這些數據的處理都會耗費一定的處理資源,增加I/O流的耗時。

 

IO-2.png

 

     2.“併發“。由於I/O流整個過程中不可能只同時處理一個I/O,所有的I/O在HBA,FC,FA和DA處理的過程中都是已大量併發的情況下進行。而主要的耗時取決於I/O隊列的等待,雖然存儲陣列會在併發上進行優化。同一個處理Slice的處理還是會一隊列形式進行。入下圖所示,當存儲同時面對多個I/O的處理的情況,總會有某個I/O會在整個流的最後出來,而增加I/O的耗時。所以說,在I/O流的每個節點出現瓶頸,或者短板的時候。I/O的耗時就會增加。

 

IO-3.png

     綜上所述,I/O流與存儲性能的關係可以總結爲以下幾點:

 

  • 完成一個I/O流主要經歷過的節點有HBA,FC網絡,存儲前端口FA,存儲緩存、存儲後端口,物理磁盤。而很個過程中最耗時的是物理磁盤。
  • 存儲陣列的緩存的大小和處理方式直接影響到I/O流的性能,也是定義一個存儲陣列優劣的重要指標之一。
  • I/O的處理速度通常會遠離理論值,原因多個併發量較大而造成的隊列延遲。
  • 優化I/O的方式可以從多個節點入手,而最顯著的效果是提升物理磁盤的速度。因爲存儲陣列會把儘可能多的數據放入緩存,而當緩存用滿以後的數據交換則完全取決於物理磁盤的速度。
  • 適當選用合適的RAID級別,因爲不同的RAID級別的讀寫比例大不相同,可能使得物理磁盤處理耗時幾倍增加。參考:淺談RAID寫懲罰(Write Penalty)與IOPS計算
發佈了20 篇原創文章 · 獲贊 4 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章