若FPGA處理單元發送完讀文件請求以后超過一定的時間沒有接收到磁盤陣列發起的讀文件請求應答,則重新發起本次讀文件請求,如果連續一定次數(例如三次)都沒有應答,則終止本次讀文件請求,并輸出一讀文件請求錯誤報警信息至讀文件響應隊列Raid_create_request_status_
f ifoo
[0025]FPGA處理單元獲取需要讀取的文件大小以后,則通過DDR存儲位置接口的內存空間分配請求隊列向外圍應用服務器申請存儲空間的起始地址。外圍應用服務器接收到該信息后,向本地內存管理模塊申請連續存儲空間,并將存儲空間的首地址傳輸到DDR存儲位置接口的內存空間地址FIFO中。FPGA處理單元一旦檢測到內存空間地址FIFO非空,則從該FIFO中獲取DDR起始存儲地址并構建以太幀格式(操作碼0x25)的FPGA存儲地址通知,接著向磁盤陣列發起FPGA存儲地址通知。磁盤陣列接收到所述FPGA存儲地址通知以后,向FPGA處理單元發送FPGA存儲地址通知應答,表示接收到了對方發送的FPGA存儲地址通知。如果FPGA處理單元沒有接收到FPGA存儲地址通知應答,則在預設的超時時間內重新發起FPGA存儲地址通知。如果超過一定次數(例如三次)仍然沒有接收到FPGA存儲地址通知應答,則終止發送本次FPGA存儲地址通知,并輸出一存儲地址通知錯誤報警信息至讀文件響應隊列 Raid_create_request_status_fifo0
[0026]完成上述操作以后,表示FPGA處理單元已經準備好了存儲空間,可以進行文件內容的傳輸。磁盤陣列接著根據文件的大小以及構建的云服務器能支持的以太網每幀能夠傳輸的最大長度(支持以太網的Jumbo幀),將文件內容切分為多個包封裝放入發送隊列中,并在這些發送數據隊列中增加可靠通信幀首部,以構建文件內容幀(操作碼0x27)。考慮到磁盤陣列上的Linux或者其它操作系統對發送與接收模式的切換需要較長的時間,因此上述基于簡單應答的可靠傳輸通信將會極大降低磁盤陣列與FPGA處理單元之間的吞吐帶寬。考慮到云計算平臺應用的場景位于局域網內,網絡環境相對可靠,因此磁盤陣列通過流水線的方式向FPGA處理單元發送一定數目內容幀后,再通過主動觸發的方式讓FPGA處理單元匯報沒有接收到的幀(通過序列號的方法進行維護),其實現方法可以通過將序列號的最高位設為I (低7位用作收發雙方保序,最高位用來控制是否產生文件內容應答幀)使得FPGA處理單元能夠產生文件內容應答幀(如圖4所示,一般每隔一定文件內容幀產生一次文件內容應答幀,最后一幀文件內容幀必須產生文件內容應答幀)。
[0027]對于FPGA處理單元,其每發送一次讀文件請求,將該文件對應的當前保序序號設置為0,每接收到一個對應的文件按內容幀后通過DMA(直接內存存取)的方式將其中待讀取文件的相應數據寫入對應的存儲空間,并進行保序處理,即,獲取該文件內容幀的發送序號并與FPGA處理單元的當前保序序號進行比較,如果兩個序號相等,則將當前保序序號進行加I操作,并將接收到的文件內容幀的可靠通信幀首部剝離出來,將其中需要傳輸的地址、長度以及傳輸內容寫入到文件內容接口的Mem_file_content_fifo中。如果接收到文件內容幀的發送序號與FPGA處理單元當前保序序號不一致,則丟棄接收到的文件內容幀。如果接收到的文件內容幀的發送序號最高位為1,則將當前保序序號以及文件內容幀的發送序號寫入到文件內容應答幀,并發送給磁盤陣列。磁盤陣列接收到文件內容應答幀后,通過對比文件內容應答幀中的FPGA處理單元保序序號與磁盤陣列的發送序號是否一致來判斷發送過程中是否出現丟包,如果所述保序序號與磁盤陣列的發送序號相同,則表示傳送完成;如果保序序號與磁盤陣列的發送序號不同,則保序序號與發送序號之間序號對應的發送數據未能正確到達FPGA處理單元,并重新傳輸上述丟失的文件內容幀。
[0028]當磁盤陣列收到所傳文件最后一幀的文件內容應答幀后,向FPGA處理單元發送該文件的文件內容完成幀(操作碼0x30)。FPGA接收到文件內容完成幀后,將會發送文件內容完成應答幀給磁盤陣列,并關閉此文件的讀操作,釋放對應的端口資源。
[0029]以上所述為本發明的較佳實施方式,并非用于限制本發明的范圍,凡在本發明精神和原則之內所做的任何修改、等同替換和改進等,均含于本發明的保護范圍之內。本發明的保護范圍以本發明的權利要求為準。
【主權項】
1.一種基于FPGA高速讀取磁盤陣列中文件的方法,其特征在于,包括以下步驟: SI,通過一 FPGA處理單元向一磁盤陣列發送包含有待讀取文件的文件名的讀文件請求;所述磁盤陣列接收到所述讀文件請求后查找所述待讀取文件并反饋回相應的讀文件請求應答,所述讀文件請求應答包括所述待讀取文件的文件大小,其中當所述待讀取文件在所述磁盤陣列中不存在時,所述文件大小為O ; S2,所述FPGA處理單元根據反饋回的所述讀文件請求應答獲取所述文件大小,然后申請與所述文件大小相應的存儲空間,并獲取所述存儲空間的起始存儲地址,再利用該起始存儲地址構建FPGA存儲地址通知發送到所述磁盤陣列;所述磁盤陣列接收到所述FPGA存儲地址通知后,向所述FPGA處理單元發送FPGA存儲地址通知應答; S3,所述磁盤陣列按照預定格式對所述待讀取文件進行分包處理以構建若干文件內容幀發送給所述FPGA處理單元,所述文件內容幀包括對應的發送序號及所述待讀取文件的相應數據,其中最后一幀所述文件內容幀以及其余的部分所述文件內容幀設置為需要應答;所述FPGA處理單元接收到所述文件內容幀后將其中所述待讀取文件的相應數據寫入對應的存儲空間并對其進行保序處理,以記錄相應的保序序號,同時丟棄發送序號與保序序號不一致的所述文件內容幀,并且當接收到的所述文件內容幀需要應答時,向所述磁盤陣列反饋相應的文件內容應答幀,所述文件內容應答幀包括對應文件內容幀的保序序號及其發送序號; S4,所述磁盤陣列接收到所述文件內容應答幀后,判斷所述文件內容應答幀中的所述保序序號與所述發送序號是否一致,如果不一致,則重新發送對應的所述文件內容幀至所述FPGA處理單元; S5,所述磁盤陣列接收到最后一幀所述文件內容應答幀后,向所述FPGA處理單元發送相應的文件內容完成幀;所述FPGA處理單元接收到所述文件內容完成幀后,向所述磁盤陣列發送文件內容完成應答幀,文件讀取操作結束。2.根據權利要求1所述的基于FPGA高速讀取磁盤陣列中文件的方法,其特征在于,所述步驟SI還包括:如果所述FPGA處理單元在預定時間內未收到所述讀文件請求應答,則重新發送對應的所述讀文件請求,如果超過預定次數仍未接收到所述讀文件請求應答,則終止發送所述讀文件請求,并輸出一讀文件請求錯誤報警。3.根據權利要求1所述的基于FPGA高速讀取磁盤陣列中文件的方法,其特征在于,所述步驟S2還包括:如果所述FPGA處理單元在預定時間內未收到所述FPGA存儲地址通知應答,則重新發送對應的所述FPGA存儲地址通知,如果超過預定次數仍未接收到所述FPGA存儲地址通知應答,則終止發送所述FPGA存儲地址通知,并輸出一存儲地址通知錯誤報警。4.根據權利要求1所述的基于FPGA高速讀取磁盤陣列中文件的方法,其特征在于,所述FPGA處理單元與所述磁盤陣列采用IP通信協議進行通信。5.根據權利要求1所述的基于FPGA高速讀取磁盤陣列中文件的方法,其特征在于,所述FPGA處理單元通過DMA的方式將所述待讀取文件的相應數據寫入對應的存儲空間。
【專利摘要】本發明提供一種基于FPGA高速讀取磁盤陣列中文件的方法,包括:FPGA向磁盤陣列發送讀文件請求;磁盤陣列反饋讀文件請求應答;FPGA獲取文件大小并申請相應的存儲空間,構建FPGA存儲地址通知發送到磁盤陣列;磁盤陣列向FPGA發送FPGA存儲地址通知應答;磁盤陣列對待讀取文件進行分包處理以構建文件內容幀發送給FPGA;FPGA對其進行保序處理,當文件內容幀需應答時,反饋文件內容應答幀;磁盤陣列接收到文件內容應答幀后,判斷保序序號與發送序號是否一致,若不一致則重新發送對應的文件內容幀至FPGA;磁盤陣列接收到最后一幀文件內容應答幀后,向FPGA發送文件內容完成幀;FPGA向磁盤陣列發送文件內容完成應答幀。本發明可以提高傳輸速度及傳輸可靠性,減小FPGA設計復雜度。
【IPC分類】G06F3/06
【公開號】CN105068766
【申請號】CN201510500763
【發明人】張俊杰, 唐澤華, 尹杰, 袁文燕
【申請人】上海紅神信息技術有限公司
【公開日】2015年11月18日
【申請日】2015年8月14日