亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于現(xiàn)場可編程門陣列的光纖i/o亂序幀處理方法

文檔序號:7618050閱讀:223來源:國知局
專利名稱:一種基于現(xiàn)場可編程門陣列的光纖i/o亂序幀處理方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機存儲技術(shù)領(lǐng)域,尤其是一種基于現(xiàn)場可編程門陣列(FPGA)的光纖通道協(xié)議,在I/O處理中接收到亂序幀進行重新排列的處理方法。
背景技術(shù)
目前,在光纖通道(FC)協(xié)議中,交換由多個非并行的序列組成,而序列由多個相關(guān)的幀組成。由于發(fā)送節(jié)點重新發(fā)送丟失的幀或者同一序列的幀在傳輸網(wǎng)絡(luò)中通過不同路徑中傳輸,因此接收端口接收到幀的順序很可能和發(fā)送端口發(fā)送順序是不同的,稱為亂序的幀。接收端口需要將這些亂序的幀按照正確順序重新排序之后才通過DMA方式將之傳輸給接收節(jié)點緩存內(nèi)。接收端口可以通過光纖通道幀頭部內(nèi)的序列計數(shù)(Seq_Cnt)或者偏移 (Offset)進行重新排序。處理方法一種直接的辦法是將這些亂序的幀暫時存起來,等到接收到其前面所有的幀之后,才將該幀傳送到接收節(jié)點。這種辦法在資源消耗和處理時間上效率都比較低下,因為數(shù)據(jù)流中可能會有很多亂序的幀序列,這樣會消耗很多的存儲資源,同時在數(shù)據(jù)幀處理時間上并不均勻。另一種更加實際的辦法是接收端口在接收到亂序到達的幀之后,到系統(tǒng)緩存中依次查詢地址/長度列表,并計算亂序幀應(yīng)該存放的緩存地址,之后將該幀寫入到緩存對應(yīng)位置。但是,這種方法也有缺陷,當(dāng)數(shù)據(jù)流中有較多亂序幀時,使用這種方式會反復(fù)在緩存中查詢地址/長度列表,這樣會延遲亂序幀的處理,且對整體傳輸性能造成一些影響?,F(xiàn)場可編程門陣列(FPGA)是一種十分靈活的可編程器件,用戶可多次對FPGA內(nèi)部的邏輯資源和I/O資源重新配置,以實現(xiàn)用戶需要的邏輯。光纖通道(FC)協(xié)議是一個復(fù)雜的協(xié)議簇,它支持多種服務(wù)和高層協(xié)議,同時光纖通道協(xié)議標準目前仍處于發(fā)展階段,其標準內(nèi)容仍在不斷完善過程中。使用FPGA實現(xiàn)光纖通道協(xié)議,可以方便對最新協(xié)議版本進行更新支持。

發(fā)明內(nèi)容
本發(fā)明的目的是克服背景技術(shù)所述的現(xiàn)有處理亂序的幀的方法缺點,在通過系統(tǒng)緩存中查詢地址/長度列表的方法基礎(chǔ)上,發(fā)明一種速度更快、效率高的處理方法。
為達上述發(fā)明目的,本發(fā)明采用的技術(shù)手段是
光纖通道的數(shù)據(jù)交換由多個非并行的序列組成,而序列由多個相關(guān)的幀組成;系統(tǒng)緩存中存有地址/長度列表;其特征是當(dāng)出現(xiàn)亂序的幀時,首先在FPGA的本地存儲資源(例如BRAM等)組建一個亂序信息表項,存儲當(dāng)前期望數(shù)據(jù)幀的“斷點”信息,然后通過系統(tǒng)緩存中查詢地址/長度列表,尋找亂序幀對應(yīng)的地址信息,并將該幀寫入緩存相應(yīng)位置;當(dāng)再次出現(xiàn)亂序幀時,首先在亂序信息表項內(nèi)查詢是否存在期望偏移等于接收幀頭部內(nèi)的偏移,若存在則通過亂序信息表內(nèi)的斷點信息計算該亂序幀再緩存中的位置,并清除亂序信息表該項對應(yīng)信息;若在亂序信息表項內(nèi)查詢不到結(jié)果,再從緩存中查詢地址/長度列表,查找并計算亂序幀對應(yīng)的地址信息。所述的斷點信息是指期望偏移、緩存地址索引和緩存偏移。本發(fā)明的方法同樣適用于亂序幀的頭部序列計數(shù)(Seq_Cnt),對于按照序列計數(shù)進行重新排序的情況,所述的斷點信息是指期望序列計數(shù)、緩存地址索引和緩存偏移。本發(fā)明的方法可以減少在緩存中搜索的地址/長度列表次數(shù),效率比普通的緩存搜索地址/長度列表方法高。而且?guī)蛄兄袥]有亂序幀存在時,該幀交換將不占用亂序信息表項,只有在出現(xiàn)亂序的幀交換中,才使用亂序信息表項記錄亂序幀的當(dāng)前”斷點”信息, 當(dāng)前亂序幀處理完畢之后,清空亂序信息表項,這樣可以允許多個不同的幀交換分時共享存儲資源。


圖1是存儲設(shè)備在光纖通道(FC SAN)環(huán)境內(nèi)的拓撲連接。圖2是FC節(jié)點接收到數(shù)據(jù)幀的數(shù)據(jù)結(jié)構(gòu)描述。圖3是亂序信息表項格式。圖4是FC端口數(shù)據(jù)幀的處理流程圖。
具體實施例方式下面,以根據(jù)光纖通道幀頭部內(nèi)的偏移(Offset)字段進行重新排序為例,說明本發(fā)明的實施方式。如圖1所示的一個的光纖通道(FC SAN)內(nèi)的拓撲連接內(nèi),交換網(wǎng)絡(luò)SAN包括5個交換機SWl、Sff2, Sff3, SW4和SW5,帶有HBA卡的主機端A與存儲設(shè)備B之間可通過兩條路徑完成數(shù)據(jù)通信,第一條路徑是A — SWl — SW2 - SW3 - SW5 一 B,另外一條路徑是A — Sffl - SW4 一 SW5 — B。當(dāng)主機端A和存儲設(shè)備B進行通信時,主機端A按照先后順序發(fā)送的數(shù)據(jù)幀可能分別通過兩條路徑傳送到存儲設(shè)備B,由于兩條路徑的傳輸延時不同,因此很可能在存儲設(shè)備B端存在亂序到達的數(shù)據(jù)幀。圖2為光纖(FC)節(jié)點接收幀的數(shù)據(jù)結(jié)構(gòu)描述,圖中交換狀態(tài)信息表、地址/長度列表以及數(shù)據(jù)緩存都存在系統(tǒng)緩存內(nèi)。交換狀態(tài)信息表內(nèi)的000位標志當(dāng)前序列是否有亂序狀況,000_index標志對應(yīng)著端口本地亂序信息表索引地址,系統(tǒng)驅(qū)動初始化時將會把這兩項設(shè)置為零,當(dāng)出現(xiàn)亂序幀后,由端口進行配置和更新。Bufferjndex標志地址/長度列表內(nèi)當(dāng)前地址/長度對的索引,而Buffer_0ffSet為當(dāng)前地址/長度對的索引指向緩存中偏移位置。EXpect_R0為期望下一個達到幀的偏移。Byte_C0Unt為該交換目前接收的數(shù)據(jù)幀(以byte為單位),Expect_byte_cnt為該交換所有數(shù)據(jù)幀的大小(以byte為單位)。AL_ Baseaddr為地址/長度列表的基地址。當(dāng)一個數(shù)據(jù)幀到達后,F(xiàn)C端口通過系統(tǒng)總線從緩存中取出交換狀態(tài)信息表,比較接收到數(shù)據(jù)幀頭部內(nèi)Offset字段和ExpeCt_R0是否相同,在所有數(shù)據(jù)幀到達順序和主機端 A發(fā)送順序相同的情況下,Offset字段和ExpeCt_R0是一直相同的,此時接收端口只需要根據(jù)AL_Baseaddr、Buffer_index和Buffer_offset就可以確定當(dāng)前數(shù)據(jù)幀的地址信息存放在地址/長度列表的位置,從地址/長度列表取出地址信息,并將數(shù)據(jù)幀存儲在緩存對應(yīng)位置,之后更新交換信息表內(nèi)的ExpeCt_R0字段、Bufferjndex字段、Buff er_offset字段和
4Byte_count 字段。按照傳統(tǒng)的方法,一旦在接收端口出現(xiàn)亂序數(shù)據(jù)幀,就需要讀出緩存中地址/長度列表多個地址/長度對項,并計算亂序幀應(yīng)該存放在緩存中的地址,這可能需要多次訪問地址/長度列表。圖3為存在于FPGA本地的亂序信息表格式,它主要用來在出現(xiàn)亂序幀時,存儲當(dāng)前期望數(shù)據(jù)幀在緩存中存放位置的“斷點”信息。亂序信息表包括字段有Exp_R0、Buff_ index和Buff_offset,Exp_R0為期望下一幀的偏移,Buffjndex為地址/長度列表內(nèi)當(dāng)前地址/長度對的索引,Buff_0ffSet為當(dāng)前地址/長度對的索引指向緩存中偏移位置。 亂序信息表內(nèi)的這三個字段分別對應(yīng)交換狀態(tài)信息表內(nèi)的ExpeCt_R0、Buffer_index和 Buffer_offset 字段。當(dāng)數(shù)據(jù)流中出現(xiàn)一個亂序幀時,接收端口判斷本地是否有對應(yīng)該交換的亂序信息表,若本地不存在亂序信息表,則首先要建立亂序信息表,之后再將交換狀態(tài)信息表內(nèi)的 Expect_RO、Buffer_index和Buffer_offset字段保存在亂序信息表內(nèi)的對應(yīng)位置,接下來在緩存中地址/長度列表內(nèi)查找存儲該幀的地址信息。若本地存在亂序信息表,則首先在亂序信息表內(nèi)查找EXpect_R0字段,判斷有無與當(dāng)前收到亂序幀頭部內(nèi)偏移字段相同,若存在相同的ExpeCt_R0,則直接從亂序信息表取出Buffjndex和Buff_0ffset字段,與交換狀態(tài)信息表內(nèi)的AL_BaSeaddr —同計算出當(dāng)前亂序幀在緩存中地址信息。若在亂序信息表查詢不到相同的EXpect_R0字段,則在亂序信息表內(nèi)保存當(dāng)前”斷點”信息,之后再在緩存中地址/長度列表內(nèi)搜索地址/長度對,并計算出當(dāng)前亂序幀在緩存中存放位置。圖4為FC端口在接收到數(shù)據(jù)幀時的流程圖,詳細地描述了接收端口對亂序數(shù)據(jù)幀的處理過程。在步驟1中,接收端系統(tǒng)驅(qū)動會準備存放數(shù)據(jù)幀的緩存塊地址,填寫地址/長度列表信息,并初始化交換狀態(tài)信息表。步驟2中,端口會不斷檢查有無收到的數(shù)據(jù)幀。當(dāng)端口接收到一個數(shù)據(jù)幀后執(zhí)行步驟3,通過系統(tǒng)總線從緩存中讀出該交換對應(yīng)的交換狀態(tài) fn息表ο步驟4中,端口會比較接收數(shù)據(jù)幀頭部內(nèi)Offset字段和交換狀態(tài)信息塊內(nèi)的 Expect_R0字段,判斷接收的數(shù)據(jù)幀是否為亂序幀。若數(shù)據(jù)幀偏移Offset字段和EXpect_R0 字段相等,說明當(dāng)前接收的數(shù)據(jù)幀與先前的接收是連續(xù)的;若兩者并不相等,則當(dāng)前接收的數(shù)據(jù)幀相對于先前的接收是亂序的。對于第一種情況,如步驟5所示,根據(jù)交換狀態(tài)信息表內(nèi)的AL_BaSeaddr字段和 Buffer_index字段,從地址/長度列表取出對應(yīng)的地址/長度對,結(jié)合Buffer_offset字段,即可確定出當(dāng)前數(shù)據(jù)幀在緩存中存放地址信息,之后執(zhí)行步驟15和16,按照獲得的地址信息將數(shù)據(jù)幀寫入緩存中相應(yīng)位置,并根據(jù)具體條件更新交換狀態(tài)信息表內(nèi)的Buffer_ index 字段、Buffer_offset 字段、Expect_R0 字段禾口 Byte_count 字段。對于第二種情況,則執(zhí)行步驟6,通過查看交換狀態(tài)信息表內(nèi)的000字段是否有效,判斷本地亂序信息表是否存在。若000字段有效,則首先執(zhí)行步驟7,查詢亂序信息表內(nèi) Exp_R0字段是否有和當(dāng)前接收數(shù)據(jù)幀的Offset字段相同記錄。若在本地亂序信息表查詢得到記錄,則執(zhí)行步驟9,從亂序信息表取出BufTjndex和BufT_0fTSet字段,與交換狀態(tài)信息表內(nèi)的AL_BaSeaddr —同計算出當(dāng)前亂序幀在緩存中地址信息,同時將該行記錄信息從亂序信息表內(nèi)刪除。此后執(zhí)行步驟10,檢查此時亂序信息表內(nèi)有無其它記錄;若無,則需要設(shè)置000變量和000_index變量無效,并清空該亂序信息表。如果步驟6中000字段無效,在步驟12中創(chuàng)建一個亂序信息表,并設(shè)置000變量和000_indeX變量,之后和步驟8中亂序信息表內(nèi)查詢不到等于偏移(offset)字段的記錄一樣,則執(zhí)行步驟13,根據(jù)交換狀態(tài)信息表內(nèi)的 AL_Baseaddr 字段、Expect_R0 字段、Buffer_index 字段和 Buffer_offset 字段以及接收數(shù)據(jù)幀頭部內(nèi)Offset字段,在地址/長度列表內(nèi)的查找當(dāng)前接收數(shù)據(jù)幀需要的地址/長度對信息,并在步驟14中計算出當(dāng)前數(shù)據(jù)幀在緩存中存放地址信息。在取得當(dāng)前數(shù)據(jù)幀在緩存中存放地址信息后,執(zhí)行步驟15和16,存儲數(shù)據(jù)幀到緩存適當(dāng)位置,并根據(jù)具體要求,更新交換狀態(tài)信息表內(nèi)的Bufferjndex字段、Buffer, offset字段、Expect_R0字段和Byte_count字段,若000變量和000_index變量設(shè)置,還需要清除交換狀態(tài)信息表內(nèi)的000字段和000_indeX字段。步驟17中,檢查設(shè)置后的Byte_ count字段是否等于交換狀態(tài)信息表內(nèi)的ExpeCt_byte_Cnt,若不相等,說明數(shù)據(jù)幀沒有接收完畢,回到步驟2重新接收下一幀;若兩者相等,則說明數(shù)據(jù)幀接收完畢,執(zhí)行步驟18,向系統(tǒng)發(fā)送完成請求,通知系統(tǒng)處理接收完畢的數(shù)據(jù)。如果亂序數(shù)據(jù)幀之間偏移相差比較大時,為得到正確的地址/長度對,可能需要多次搜索地址/長度列表。通過引入本地亂序信息表,可以在接收端口出現(xiàn)亂序數(shù)據(jù)幀時, 減少在緩存中地址/長度列表的搜索地址/長度對的過程。由于在只有在出現(xiàn)亂序的幀交換才需要亂序信息表,這樣就可以允許并行的幀交換可以分時共享建立亂序信息表需要的存儲資源。以上實施例是基于幀頭部偏差的處理方法,同時對基于光纖通道幀頭部內(nèi)的序列計數(shù)(Seq_Cnt)也有同樣效果。
權(quán)利要求
1.一種基于現(xiàn)場可編程門陣列的光纖I/O亂序幀處理方法,光纖通道的交換由多個非并行的序列組成,而序列由多個相關(guān)的幀組成;系統(tǒng)緩存中存有地址/長度列表;其特征是當(dāng)出現(xiàn)亂序的幀時,首先在FPGA的本地存儲資源(例如BRAM等)組建一個亂序信息表項,存儲當(dāng)前期望數(shù)據(jù)幀的“斷點”信息,然后通過系統(tǒng)緩存中查詢地址/長度列表,尋找亂序幀對應(yīng)的地址信息,并將該幀寫入緩存相應(yīng)位置;當(dāng)再次出現(xiàn)亂序幀時,首先在亂序信息表項內(nèi)查詢是否存在期望偏移等于接收幀頭部內(nèi)的偏移,若存在則通過亂序信息表內(nèi)的斷點信息計算該亂序幀再緩存中的位置,并清除亂序信息表該項對應(yīng)信息;若在亂序信息表項內(nèi)查詢不到結(jié)果,再從緩存中查詢地址/長度列表,查找并計算亂序幀對應(yīng)的地址信息。
2.根據(jù)權(quán)利要求1所述的一種基于現(xiàn)場可編程門陣列的光纖通道I/O亂序幀處理方法,其特征是所述的斷點信息是指期望偏移、緩存地址索引和緩存偏移。
3.根據(jù)權(quán)利要求1所述的一種基于現(xiàn)場可編程門陣列的光纖通道I/O亂序幀處理方法,其特征是所述的斷點信息是期望序列計數(shù)、緩存地址索引和緩存偏移。
全文摘要
本發(fā)明是一種基于現(xiàn)場可編程門陣列的光纖I/O亂序幀處理方法,涉及一種存儲技術(shù),其特征是在FC數(shù)據(jù)幀接收過程中出現(xiàn)亂序幀時,通過在系統(tǒng)緩存反復(fù)查找地址/長度列表基礎(chǔ)上,利用FPGA內(nèi)的本地存儲資源組建一個亂序信息表項,用來在出現(xiàn)亂序幀時,存儲當(dāng)前期望數(shù)據(jù)幀的“斷點”信息。當(dāng)再次出現(xiàn)亂序幀時,首先在亂序信息表項內(nèi)查詢是否存在期望偏移等于接收幀頭部內(nèi)的偏移。若在亂序信息表項內(nèi)查詢不到結(jié)果,再從緩存中查詢地址/長度列表,查找并計算亂序幀對應(yīng)的地址信息,這樣可以減少在緩存中搜索的地址/長度列表次數(shù),提高數(shù)據(jù)交換的效率。
文檔編號H04L1/00GK102215162SQ20111007138
公開日2011年10月12日 申請日期2011年3月24日 優(yōu)先權(quán)日2011年3月24日
發(fā)明者張慶敏, 張衡, 李天仁, 胡剛 申請人:無錫眾志和達存儲技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1