聊聊iSCSI存儲協議的發展簡史

iSCSI的全稱是Internet Small Computer System Interface,可以看出iSCSI是基於乙太網的SCSI。 SCSI的全稱是Small Computer System Interface,也就是小型電腦系統介面。 很多設備是基於SCSI來與計算機交互數據的,常見的如硬碟、軟碟機、光碟機、印表機、掃描器等。

接下來我們繼續介紹iSCSI相關的內容。

1. SCSI協定

SCSI最早發明於1982年,一路走來有多個不同的標準,比如SCSI-1,SCSI-2和SCSI-3等等。 不同標準的速度不同,硬體的介面也不盡相同。 如圖是不同的SCSI介面。

SCSI不僅僅是一種介面,更是一套完整的協定,它實現了計算機的主機與週邊設備通信的協定。 這樣,計算機主機就可以與這些外圍設備交互數據了。 這其中比較典型的如與硬碟和光碟機等交互數據。

2. iSCSI 協定

採用這種粗苯的線纜來傳輸數據並不方面,於是有了iSCSI。 iSCSI基於乙太網來傳輸SCSI指令,乙太網的連接非常方便,自然設備的訪問也變得方便了。

  

乙太網是如何承載SCSI指令的呢? 其實原理很簡單,就是將SCSI指令封裝為數據包,然後通過TCP協定傳輸。 如圖所示,所謂的iSCSI協定可以理解為一個應用層的協定,其內容為各種SCSI指令。

我們知道TCP協定是CS架構的,iSCSI協定自然也是CS架構的,iSCSI的整體架構如圖所示。 iSCSI通常是用來存取存放裝置的,存放裝置為服務端,而計算伺服器為用戶端。 在iSCSI中有專有名詞,用戶端軟體通常被稱為initiator,也就是啟動器; 而服務端軟體則被稱為target,目標器。 基於iSCSI協定,當主機連接到存儲時,在主機就可以看到一個磁碟,該磁碟與本地磁碟沒有任何差別。

這樣,在主機端就可以基於該磁碟來格式化文件系統,並將數據放到磁碟上。 當對磁碟進行讀寫等訪問時,這時讀寫請求就會經過啟動器轉化為SCSI指令發送到服務端,服務端解析並處理後給啟動器端返回應答。 由於協定基於乙太網,因此主機和存儲之間可以通過交換機形成一個非常複雜的網路。 那麼主機對存儲資源的訪問也就變得非常靈活了。

3. 基於RDMA的iSCSI

iSCSI協議已經非常好了,但是由於基於乙太網協定需要在使用者態和內核態拷貝記憶體,這不僅要佔用CPU資源,還會導致IO延遲增大。 為了進一步提升iSCSI的性能,於是有了基於RDMA的iSCSI,也就是iSER。
iSER的全稱是iSCSI Extensions for RDMA,可以看出它是基於RDMA的iSCSI擴展協定。 它主要還是利用RDMA技術,本質上還是封裝的SCSI指令。 如圖所示,當在啟動器端寫數據時,數據直接從該端的記憶體發送到目標器端的CPU中進行處理,最終持久化到目標器的持久化存儲中。 也就是跳過了啟動器端CPU的處理。

基於上述技術,使得啟動器訪問目標器的延時得到了大幅的降低,性能自然也會有相應的提高。

4. 性能對比

前面廢話一大堆,具體性能是怎麼樣的呢? 我們看一下SNIA的測試數據。 下面這個是IO回應延遲的數據,可以看到基於iSER的延遲大幅下降。

帶寬方面,基於iSER則大幅增加。 因此目前基於RDMA技術的iSCSI在性能方面有著非常明顯的優勢。

本文簡要介紹了iSCSI的發展史,從SCSI說起,到基於乙太網的iSCSI,最後介紹了基於RDMA技術的iSCSI。 通過本文的介紹,希望大家對iSCSI有所瞭解。