一種scsi與scsi子系統的實現方法
【專利摘要】本發明涉及一種SCSI與iSCSI子系統的實現方法,該子系統包括一先進先出的消息隊列,用于存儲進入所述子系統的、已被封裝成消息的任務;該方法包括:SCSI與iSCSI子系統啟動,首先處于初始化狀態,然后執行系統初始化任務,生成連接磁盤陣列任務,連接磁盤陣列任務被封裝成消息后提交到消息隊列,進入待機狀態;在待機狀態下收到包含連接磁盤陣列任務的消息后,進入建立TCP連接狀態,通過socket函數與磁盤陣列建立TCP連接,根據iSCSI標準生成discovery命令和login命令,并發送到磁盤陣列完成連接工作,進入待機狀態;在待機狀態下接收到以消息方式封裝的任務后,轉換到與任務相對應的狀態,執行任務,任務執行完成后回到待機狀態。
【專利說明】-種SCSI與SCSI子系統的實現方法
【技術領域】
[0001] 本發明涉及計算機網絡技術,特別涉及一種SCSI與iSCSI子系統的實現方法。
【背景技術】
[0002] 隨著計算機技術和網絡技術的不斷發展,傳統處理器在功耗、并發、散熱等方面暴 露出的問題日益嚴重,已經不能滿足各類網絡應用對處理器性能的迫切需求,因此具有較 低功耗、更高并發性能的網絡處理器被更多地用于計算機網絡應用中,計算機網絡技術中 開始廣泛地使用網絡處理器來搭建各類高性能的網絡應用。
[0003] 在各類網絡視頻應用中,磁盤陣列設備都是資源存儲中心的核心組成部分,尤其 是iSCSI磁盤陣列以其使用簡單、性能突出等特性得到更加廣泛的應用,所以在基于多核 處理器為計算中心、基于iSCSI磁盤陣列為存儲中心的新型視頻類應用系統中,如何合理 地結合多核處理器和iSCSI磁盤陣列,并有效地提高系統的整體性能,是增強網絡視頻應 用系統服務質量的關鍵之一。對iSCSI磁盤陣列的訪問需要根據SCSI子系統生產的SCSI 命令字,并通過iSCSI協議進行封裝,最終通過TCP/IP協議棧實現iSCSI Host端和iSCSI Target端的高效數據交互,而操作系統上的SCSI子系統有多個組成部分,因此SCSI命令 執行流程冗余繁雜,會造成處理器處理資源的浪費,而處理器的實時執行環境執行效率較 高,但是沒有操作系統中各種功能的支持,無法直接實現SCSI命令、iSCSI協議的處理和執 行,因此需要有效地整合多核處理器上Linux操作系統和實時執行環境的優勢和特點,提 高SCSI命令的處理效率。
【發明內容】
[0004] 本發明的目的在于克服現有技術中SCSI命令執行流程冗余繁雜,會造成處理器 處理資源浪費的缺陷,從而提供一種處理過程簡單、節約處理器資源的方法。
[0005] 為了實現上述目的,本發明提供了一種SCSI與iSCSI子系統的實現方法,該子系 統包括一先進先出的消息隊列,所述消息隊列用于存儲進入所述子系統的、已被封裝成消 息的任務,所述任務根據多核處理器的消息通訊機制被封裝成消息;該方法包括:
[0006] 步驟1 )、所述SCSI與iSCSI子系統啟動,該子系統首先處于初始化狀態,然后執行 系統初始化任務,并生成連接磁盤陣列任務,所述連接磁盤陣列任務被封裝成消息后提交 到所述消息隊列,SCSI與iSCSI子系統進入待機狀態;
[0007] 步驟2)、所述SCSI與iSCSI子系統在待機狀態下收到包含連接磁盤陣列任務的消 息后,進入建立TCP連接狀態,通過socket函數與磁盤陣列建立TCP連接,根據iSCSI標準 生成discovery命令和login命令,并發送到磁盤陣列完成連接工作,接著SCSI與iSCSI 子系統進入待機狀態;
[0008] 步驟3)、所述SCSI與iSCSI子系統在待機狀態下接收到以消息方式封裝的任務 后,轉換到與所述任務相對應的狀態,執行所述任務,任務執行完成后回到所述待機狀態。
[0009] 上述技術方案中,在所述的步驟3)中,所述任務包括磁盤陣列數據讀取任務、磁盤 陣列數據寫入任務、網絡數據解析任務、錯誤處理任務;其中,
[0010] 與所述磁盤陣列數據讀取任務相對應的狀態為磁盤陣列數據讀取狀態,與所述磁 盤陣列數據寫入任務相對應的狀態為磁盤陣列數據寫入狀態,與所述網絡數據解析任務相 對應的狀態為網絡數據解析狀態,與所述錯誤處理任務相對應的狀態為錯誤處理狀態。
[0011] 上述技術方案中,當所述任務為磁盤陣列數據讀取任務時,所述SCSI與iSCSI 子系統進入磁盤陣列數據讀取狀態,根據SCSI標準生成read命令,根據iSCSI標準封裝 iSCSI rou,并通過socket函數發送rou,最后所述SCSI與iSCSI子系統進入待機狀態。
[0012] 上述技術方案中,當所述任務為磁盤陣列數據寫入任務時,所述SCSI與iSCSI子 系統進入磁盤陣列數據寫入狀態,根據SCSI標準生成write命令,根據iSCSI標準封裝 iSCSI rou,并通過socket函數發送rou,最后所述SCSI與iSCSI子系統進入待機狀態。
[0013] 上述技術方案中,當所述任務為網絡數據解析任務時,所述SCSI與iSCSI子系 統進入網絡數據解析狀態,執行網絡數據解析任務,根據iSCSI標準接卸iSCSI rou,根據 SCSI標準解析SCSI數據,如果為read回應,則處理磁盤陣列返回的數據,SCSI與iSCSI子 系統進入待機狀態;如果為write回應,則判斷write是否成功,成功,則SCSI與iSCSI子 系統進入待機狀態,失敗則生成錯誤處理消息;非read、write回應數據則直接丟棄,SCSI 與iSCSI子系統進入待機狀態。
[0014] 上述技術方案中,當所述任務為錯誤處理任務時,所述SCSI與iSCSI子系統進入 錯誤處理狀態,執行錯誤處理任務,記錄磁盤陣列發生錯誤的位置,最后所述SCSI與iSCSI 子系統進入待機狀態。
[0015] 本發明的優點在于:
[0016] 本發明提出了一種運行于多核網絡處理器實時執行環境的SCSI與iSCSI子系統 實現方法,該方法基于有限狀態機驅動SCSI與iSCSI子系統接收與處理上層應用提交的磁 盤陣列讀寫請求,并將請求封裝為消息在狀態機的不同狀態之間轉換,通過消息傳遞保證 SCSI/iSCSI子系統的無停滯運行,提高了 SCSI與iSCSI子系統訪問磁盤陣列的實時性和并 發性。
【專利附圖】
【附圖說明】
[0017] 圖1是本發明中SCSI與iSCSI子系統基于消息驅動運行的原理圖。
[0018] 附圖標識
[0019] 101磁盤陣列 102 SCSI與iSCSI子系統 103消息
[0020] 104任務 105 消息封裝 106狀態轉換
[0021] 107初始化狀態 108 任務執行操作 109系統初始化任務
[0022] 110新任務生成 111 連接磁盤陣列任務 112 數據
[0023] 113網絡數據 114 上層應用 115磁盤陣列數據讀取請求
[0024] 116數據 117 消息隊列 118建立TCP連接狀態
[0025] 119磁盤陣列數據讀取狀態120磁盤陣列數據寫入狀態121網絡數據解析狀態
[0026] 122錯誤處理狀態 123 消息隊列掃描 124待機狀態
[0027] 125狀態轉換 126 網絡數據解析任務 127接收數據
[0028] 128協議棧 129 錯誤處理任務 130 socket發送函數
[0029] 131 socket發送函數 132 數據寫入結果 133磁盤陣列數據寫入任務
[0030] 134磁盤陣列數據寫入請求135 磁盤陣列數據讀取任務136狀態轉換
[0031] 151狀態轉換 152 狀態轉換 153狀態轉換
[0032] 154狀態轉換 155 狀態轉換 156狀態轉換
[0033] 157狀態轉換 158 狀態轉換 159消息封裝
【具體實施方式】
[0034] 現結合附圖對本發明作進一步的描述。
[0035] 本發明中所述的SCSI與iSCSI子系統是從屬于Linux操作系統的一個子系統, 該子系統對需要處理的任務進行抽象,并使用多核處理器的消息通訊機制將任務封裝進消 息,通過消息驅動SCSI與iSCSI子系統進入相應的執行流程,實現SCSI與iSCSI子系統在 多核處理器上的實時、高效運行。
[0036] 下面結合圖1對該子系統做進一步的詳細說明。
[0037] 本發明的SCSI與iSCSI子系統包括一消息隊列,進入子系統的任務根據多核處理 器的消息通訊機制被封裝成消息,按照時序存儲在該消息隊列中,并依照在消息隊列中的 次序依次予以處理。
[0038] 本發明的SCSI與iSCSI子系統在工作過程中要執行多種任務,每一種任務對應一 種特定的操作,具體的說,所述任務包括:系統初始化任務、連接磁盤陣列任務、磁盤陣列數 據讀取任務、磁盤陣列數據寫入任務、網絡數據解析任務、錯誤處理任務。
[0039] 本發明的SCSI與iSCSI子系統運行于多個狀態下,每個狀態對應不同的執行流 程,消息進入SCSI與iSCSI子系統后在不同的狀態間傳遞,驅動SCSI與iSCSI子系統在 不同狀態間轉換,從而完成消息中任務的處理。SCSI與iSCSI子系統所包含的狀態具體包 括:初始化狀態、建立TCP連接狀態、磁盤陣列數據讀取狀態、磁盤陣列數據寫入狀態、網絡 數據解析狀態、錯誤處理狀態和待機狀態。
[0040] 下面對SCSI與iSCSI子系統的工作流程加以說明。
[0041] SCSI與iSCSI子系統啟動時處于初始化狀態,執行系統初始化任務,生成連接磁 盤陣列任務,該任務被封裝成消息后提交到消息隊列,SCSI與iSCSI子系統進入待機狀態。
[0042] SCSI與iSCSI子系統在待機狀態下收到包含連接磁盤陣列任務的消息后,進 入建立TCP連接狀態,通過socket函數與磁盤陣列建立TCP連接,根據iSCSI標準生成 discovery命令和login命令,并發送到磁盤陣列完成連接工作,SCSI與iSCSI子系統進入 待機狀態。
[0043] SCSI與iSCSI子系統在待機狀態下收到上層應用提交的磁盤陣列數據讀取任務 后,進入磁盤陣列數據讀取狀態,根據SCSI標準生成read命令,根據iSCSI標準封裝iSCSI H)U,并通過socket函數發送H)U,SCSI與iSCSI子系統進入待機狀態。
[0044] SCSI與iSCSI子系統在待機狀態下收到上層應用提交的磁盤陣列數據寫入任 務后,進入磁盤陣列數據寫入狀態,根據SCSI標準生成write命令,根據iSCSI標準封裝 iSCSI rou,并通過socket函數發送rou,SCSI與iSCSI子系統進入待機狀態。
[0045] SCSI與iSCSI子系統在待機狀態下收到網絡數據包后,進入網絡數據解析狀態, 執行網絡數據解析任務,根據iSCSI標準接卸iSCSI rou,根據SCSI標準解析SCSI數據, 如果為read回應,則處理磁盤陣列返回的數據,SCSI與iSCSI子系統進入待機狀態;如果 為write回應,則判斷write是否成功,成功,則SCSI與iSCSI子系統進入待機狀態,失敗 則生成錯誤處理消息;非read、write回應數據則直接丟棄,SCSI與iSCSI子系統進入待機 狀態。
[0046] SCSI與iSCSI子系統在待機狀態下收錯誤處理消息后,進入錯誤處理狀態,執行 錯誤處理任務,記錄磁盤陣列發生錯誤的位置,SCSI與iSCSI子系統進入待機狀態。
[0047] 下面結合一個實施例對本發明做進一步的說明。在一個實施例中,選用Cavium Networks公司的0CTE0N系列處理器平臺。使用Cavium Networks公司提供的簡單執行環 境SE (Simple Executive)作為本發明中SCSI與iSCSI子系統的運行環境。
[0048] SCSI與iSCSI子系統102對磁盤陣列101訪問的流程如下:
[0049] SCSI與iSCSI子系統102啟動時運行于初始化狀態107,通過任務執行操作108 執行系統初始化任務109,完成系統環境的初始化工作。
[0050] SCSI與iSCSI子系統102在完成系統的初始化后,通過新任務生成110,生成連接 磁盤陣列任務111,并通過消息封裝105,生成消息103,其中包含要處理的任務104,然后將 消息103提交到消息隊列117的尾部,SCSI與iSCSI子系統102通過狀態切換106進入待 機狀態124。
[0051] SCSI與iSCSI子系統102在待機狀態124下進行消息隊列掃描123,由消息隊列 117的頭部讀取消息103,如果消息隊列117中為空,則繼續掃描等待,直到消息隊列117中 收到消息103 ;如果消息隊列117中有消息103,則從消息隊列117中獲取消息103。
[0052] SCSI與iSCSI子系統102從消息103中解析出連接磁盤陣列任務111,通過狀態 切換136進入建立TCP連接狀態118,通過socket完成SCSI與iSCSI子系統102與磁盤陣 列101完成連接,SCSI與iSCSI子系統102再次通過狀態轉換151回到待機狀態124。
[0053] 上層應用114向SCSI與iSCSI子系統102發起磁盤陣列數據讀取請求115,由 SCSI與iSCSI子系統102生成磁盤陣列數據讀取任務135,并通過消息封裝105,生成消 息103,其中包含要處理的任務104,然后將消息103提交到消息隊列117的尾部,SCSI與 iSCSI子系統102通過狀態切換106進入待機狀態124。
[0054] SCSI與iSCSI子系統102從消息103中解析出磁盤陣列數據讀取任務135,通過 狀態切換125進入磁盤陣列數據讀取狀態119,根據SCSI標準封裝相應的SCSI命令字,并 根據iSCSI協議封裝待發送的數據,通過socket發送函數131調用協議棧128向磁盤陣列 101發送封裝了 SCSI命令的網絡數據113。
[0055] 磁盤陣列101發送數據112給SCSI與iSCSI子系統102,協議棧128接收數據 127,生成網絡數據解析任務126,并通過消息封裝105,生成消息103,其中包含要處理的任 務104,然后將消息103提交到消息隊列117的尾部,SCSI與iSCSI子系統102通過狀態切 換152進入待機狀態124。
[0056] SCSI與iSCSI子系統102從消息103中解析出網絡數據解析任務126,通過狀態 切換157進入網絡數據解析狀態121,如果數據為磁盤陣列101的回應數據,則執行磁盤陣 列數據讀取任務135,將數據116返回給上層應用114;如果數據不是磁盤陣列的回應數據, SCSI與iSCSI子系統102將生成錯誤處理任務129,通過消息封裝105,生成消息103,其中 包含要處理的任務104,然后將消息103提交到消息隊列117的尾部,SCSI與iSCSI子系統 102通過狀態切換154進入待機狀態124。
[0057] SCSI與iSCSI子系統102從消息103中解析出錯誤處理任務129,通過狀態切換 156進入錯誤處理狀態122,丟棄收到的數據包,SCSI與iSCSI子系統102通過狀態切換155 進入待機狀態124。
[0058] 上層應用114向SCSI與iSCSI子系統102發起磁盤陣列數據寫入請求134,由 SCSI與iSCSI子系統102生成磁盤陣列數據寫入任務133,并通過消息封裝159,生成消 息103,其中包含要處理的任務104,然后將消息103提交到消息隊列117的尾部,SCSI與 iSCSI子系統102通過狀態切換158進入磁盤陣列數據寫入狀態120,根據SCSI標準封裝 相應的SCSI命令字,并根據iSCSI協議封裝待發送的數據,通過socket發送函數130調用 協議棧128向磁盤陣列101發送封裝了 SCSI命令的網絡數據113。
[0059] 磁盤陣列101發送數據112給SCSI與iSCSI子系統102,協議棧128接收數據 127,生成網絡數據解析任務126,并通過消息封裝105,生成消息103,其中包含要處理的任 務104,然后將消息103提交到消息隊列117的尾部,SCSI與iSCSI子系統102通過狀態切 換153進入待機狀態124。
[0060] SCSI與iSCSI子系統102從消息103中解析出網絡數據解析任務126,通過狀態 切換157進入網絡數據解析狀態121,如果數據為磁盤陣列101的回應數據,則執行磁盤陣 列數據讀取任務135,將數據132返回給上層應用114;如果數據不是磁盤陣列的回應數據, SCSI與iSCSI子系統102將生成錯誤處理任務129,通過消息封裝105,生成消息103,其中 包含要處理的任務104,然后將消息103提交到消息隊列117的尾部,SCSI與iSCSI子系統 102通過狀態切換154進入待機狀態124。
[0061] SCSI與iSCSI子系統102從消息103中解析出錯誤處理任務129,通過狀態切換 156進入錯誤處理狀態122,丟棄收到的數據包,SCSI與iSCSI子系統102通過狀態切換155 進入待機狀態124。
[0062] 最后所應說明的是,以上實施例僅用以說明本發明的技術方案而非限制。盡管參 照實施例對本發明進行了詳細說明,本領域的普通技術人員應當理解,對本發明的技術方 案進行修改或者等同替換,都不脫離本發明技術方案的精神和范圍,其均應涵蓋在本發明 的權利要求范圍當中。
【權利要求】
1. 一種SCSI與iSCSI子系統的實現方法,其特征在于,該子系統包括一先進先出的消 息隊列,所述消息隊列用于存儲進入所述子系統的、已被封裝成消息的任務,所述任務根據 多核處理器的消息通訊機制被封裝成消息;該方法包括: 步驟1)、所述SCSI與iSCSI子系統啟動,該子系統首先處于初始化狀態,然后執行系統 初始化任務,并生成連接磁盤陣列任務,所述連接磁盤陣列任務被封裝成消息后提交到所 述消息隊列,SCSI與iSCSI子系統進入待機狀態; 步驟2)、所述SCSI與iSCSI子系統在待機狀態下收到包含連接磁盤陣列任務的消息 后,進入建立TCP連接狀態,通過socket函數與磁盤陣列建立TCP連接,根據iSCSI標準生 成discovery命令和login命令,并發送到磁盤陣列完成連接工作,接著SCSI與iSCSI子 系統進入待機狀態; 步驟3)、所述SCSI與iSCSI子系統在待機狀態下接收到以消息方式封裝的任務后,轉 換到與所述任務相對應的狀態,執行所述任務,任務執行完成后回到所述待機狀態。
2. 根據權利要求1所述的SCSI與iSCSI子系統的實現方法,其特征在于,在所述的步 驟3)中,所述任務包括磁盤陣列數據讀取任務、磁盤陣列數據寫入任務、網絡數據解析任 務、錯誤處理任務;其中, 與所述磁盤陣列數據讀取任務相對應的狀態為磁盤陣列數據讀取狀態,與所述磁盤陣 列數據寫入任務相對應的狀態為磁盤陣列數據寫入狀態,與所述網絡數據解析任務相對應 的狀態為網絡數據解析狀態,與所述錯誤處理任務相對應的狀態為錯誤處理狀態。
3. 根據權利要求2所述的SCSI與iSCSI子系統的實現方法,其特征在于,當所述任務 為磁盤陣列數據讀取任務時,所述SCSI與iSCSI子系統進入磁盤陣列數據讀取狀態,根據 SCSI標準生成read命令,根據iSCSI標準封裝iSCSI rou,并通過socket函數發送rou,最 后所述SCSI與iSCSI子系統進入待機狀態。
4. 根據權利要求2所述的SCSI與iSCSI子系統的實現方法,其特征在于,當所述任務 為磁盤陣列數據寫入任務時,所述SCSI與iSCSI子系統進入磁盤陣列數據寫入狀態,根據 SCSI標準生成write命令,根據iSCSI標準封裝iSCSI rou,并通過socket函數發送rou, 最后所述SCSI與iSCSI子系統進入待機狀態。
5. 根據權利要求2所述的SCSI與iSCSI子系統的實現方法,其特征在于,當所述任務 為網絡數據解析任務時,所述SCSI與iSCSI子系統進入網絡數據解析狀態,執行網絡數據 解析任務,根據iSCSI標準接卸iSCSI rou,根據SCSI標準解析SCSI數據,如果為read回 應,則處理磁盤陣列返回的數據,SCSI與iSCSI子系統進入待機狀態;如果為write回應, 則判斷write是否成功,成功則SCSI與iSCSI子系統進入待機狀態,失敗則生成錯誤處理 消息;非read、write回應數據則直接丟棄,SCSI與iSCSI子系統進入待機狀態。
6. 根據權利要求2所述的SCSI與iSCSI子系統的實現方法,其特征在于,當所述任務 為錯誤處理任務時,所述SCSI與iSCSI子系統進入錯誤處理狀態,執行錯誤處理任務,記錄 磁盤陣列發生錯誤的位置,最后所述SCSI與iSCSI子系統進入待機狀態。
【文檔編號】H04L29/08GK104144171SQ201310161733
【公開日】2014年11月12日 申請日期:2013年5月6日 優先權日:2013年5月6日
【發明者】郭秀巖, 張武, 尚秋里, 查奇文 申請人:中國科學院聲學研究所, 北京中科華影傳媒技術有限公司