一種基于fpga高速讀取磁盤陣列中文件的方法
【技術領域】
[0001]本發明涉及云計算領域,尤其涉及一種基于FPGA高速讀取磁盤陣列中文件的方法。
【背景技術】
[0002]隨著云計算以及大數據處理的發展需求,現場可編程邏輯陣列(FPGA)由于其靈活性、可編程性以及豐富的高速通信接口在這些領域得到了越來越多的應用。同時,由于以太網交換機技術較為成熟,成本也比較低廉,因而成為了 FPGA與磁盤陣列進行通信的首選。然而隨著規模的擴展,FPGA與磁盤陣列的文件高速通信成為了云計算領域的瓶頸之一。
[0003]在現有的操作系統及網絡環境下,大多數應用程序均需要可靠的通信,而TCP/IP協議成為當代網絡應用實現可靠通信的主要選擇。然而,當應用于磁盤陣列與FPGA構建的高速局域網絡時,TCP/IP協議存在三個主要的問題:(I)在有損網絡中吞吐量嚴重降低,當出現瞬時網絡擁塞、轉發錯誤或者光纖問題時,TCP/IP無法區分短暫的網絡損壞,并且TCP/IP恢復時間也較長;(2)TCP/IP的緩沖區大小固定,并且發送方窗口大小受限于接收方緩沖區的大小,動態的數據包一旦有未收到應答的情況會對整個網絡的傳輸有極強的影響;(3) TCP/IP協議的設計較為復雜。除了 TCP/IP協議外,UDP協議是一種常用的無連接的通信協議,然而其提供的傳送服務不可靠,相應的協議開銷也較大。
【發明內容】
[0004]針對現有技術存在的缺陷,本發明的目的在于提供一種基于FPGA高速讀取磁盤陣列中文件的方法,以提高傳輸速度及傳輸可靠性。
[0005]為了實現上述目的,本發明采用如下技術方案:
[0006]—種基于FPGA高速讀取磁盤陣列中文件的方法,包括以下步驟:
[0007]SI,通過一 FPGA處理單元向一磁盤陣列發送包含有待讀取文件的文件名的讀文件請求;所述磁盤陣列接收到所述讀文件請求后查找所述待讀取文件并反饋回相應的讀文件請求應答,所述讀文件請求應答包括所述待讀取文件的文件大小,其中當所述待讀取文件在所述磁盤陣列中不存在時,所述文件大小為O ;
[0008]S2,所述FPGA處理單元根據反饋回的所述讀文件請求應答獲取所述文件大小,然后申請與所述文件大小相應的存儲空間,并獲取所述存儲空間的起始存儲地址,再利用該起始存儲地址構建FPGA存儲地址通知發送到所述磁盤陣列;所述磁盤陣列接收到所述FPGA存儲地址通知后,向所述FPGA處理單元發送FPGA存儲地址通知應答;
[0009]S3,所述磁盤陣列按照預定格式對所述待讀取文件進行分包處理以構建若干文件內容幀發送給所述FPGA處理單元,所述文件內容幀包括對應的發送序號及所述待讀取文件的相應數據,其中最后一幀所述文件內容幀以及其余的部分所述文件內容幀設置為需要應答;所述FPGA處理單元接收到所述文件內容幀后將其中所述待讀取文件的相應數據寫入對應的存儲空間并對其進行保序處理,以記錄相應的保序序號,同時丟棄發送序號與保序序號不一致的所述文件內容幀,并且當接收到的所述文件內容幀需要應答時,向所述磁盤陣列反饋相應的文件內容應答幀,所述文件內容應答幀包括對應文件內容幀的保序序號及其發送序號;
[0010]S4,所述磁盤陣列接收到所述文件內容應答幀后,判斷所述文件內容應答幀中的所述保序序號與所述發送序號是否一致,如果不一致,則重新發送對應的所述文件內容幀至所述FPGA處理單元;
[0011]S5,所述磁盤陣列接收到最后一幀所述文件內容應答幀后,向所述FPGA處理單元發送相應的文件內容完成幀;所述FPGA處理單元接收到所述文件內容完成幀后,向所述磁盤陣列發送文件內容完成應答幀,文件讀取操作結束。
[0012]進一步地,所述步驟SI還包括:如果所述FPGA處理單元在預定時間內未收到所述讀文件請求應答,則重新發送對應的所述讀文件請求,如果超過預定次數仍未接收到所述讀文件請求應答,則終止發送所述讀文件請求,并輸出一讀文件請求錯誤報警。
[0013]進一步地,如果所述FPGA處理單元在預定時間內未收到所述FPGA存儲地址通知應答,則重新發送對應的所述FPGA存儲地址通知,如果超過預定次數仍未接收到所述FPGA存儲地址通知應答,則終止發送所述FPGA存儲地址通知,并輸出一存儲地址通知錯誤報塾目ο
[0014]優選地,所述FPGA處理單元與所述磁盤陣列采用IP通信協議進行通信。
[0015]優選地,所述FPGA處理單元通過DMA的方式將所述待讀取文件的相應數據寫入對應的存儲空間。
[0016]與現有技術相比較,本發明具有如下優點:針對文件請求、FPGA存儲地址通知以及文件內容完成幀請求采用了簡單的應答式可靠傳輸,從而減小了 FPGA設計復雜度;針對待讀取文件內容傳輸采用了主動觸發式的可靠傳輸,磁盤陣列能夠依據其盤陣服務器的處理器性能、網絡傳輸狀況以及網絡傳輸距離控制主動觸發的頻率,提供系統通信的靈活性以及環境適應性,極大減少FPGA端的可靠協議開發復雜度。
【附圖說明】
[0017]圖1是本發明實施例中FPGA處理單元與外圍應用服務器的隊列接口示意圖;
[0018]圖2是本發明實施例中采用的可靠通信幀的幀結構示意圖;
[0019]圖3是本發明實施例中可靠通信幀首部的結構示意圖;
[0020]圖4是本發明的基于FPGA高速讀取磁盤陣列中文件的方法的通信流程示意圖。
【具體實施方式】
[0021]為使本發明的目的、技術方案及優點更加清楚明白,以下參照附圖并舉優選實施例進行說明。
[0022]圖1示出了 FPGA處理單元與外圍應用服務器(例如WEB協議加速器)的隊列接口示意圖。如圖所示,外圍應用服務器與FPGA處理單元通過磁盤文件打開接口、DDR (雙倍速率同步動態隨機存儲器)存儲位置接口和文件內容接口通信;FPGA處理單元與磁盤陣列通過萬兆以太網通信,如圖2所示,本發明的以太網幀格式是建立在IP協議基礎之上的,因此協議的開銷小于TCP以及UDP協議。其中,以太網幀的可靠通信幀首部的定義如圖3所示,其中端口號占用2字節,用來區分FPGA處理單元發起的是哪一個文件的請求(實現文件名與本地隊列維護的映射表),因此該協議能夠同時支持最多65536個文件并發傳送;操作碼占用I字節,用來區分可靠通信幀的類型(0x23表示讀文件請求,0x24表示讀文件請求應答,0x25表示FPGA存儲地址通知,0x26表示FPGA存儲地址通知應答,0x27表示文件內容幀,0x28表示文件內容應答幀,0x30表示文件內容完成幀,0x31表示文件內容完成應答幀);數據內容大小占用2字節,表示本次傳輸的數據內容長度(支持以太網的巨型幀傳輸,最大支持65535字節);序列號占用I字節,表示本次數據傳輸的發送序號(利用該序號維護收發通信的可靠傳輸);文件名占用6字節,表示本次傳輸的文件名稱;DDR位置/文件按大小占用8字節,表示本次數據內容在DDR存儲的位置或者文件大小;數據域為本次傳輸的文件數據內容。
[0023]本發明的基于FPGA高速讀取磁盤陣列中文件的方法的通信流程如圖4所示,從圖中可以看出,針對文件請求、FPGA存儲地址通知以及文件內容完成幀請求采用了簡單的應答式可靠傳輸,從而減少了 FPGA設計復雜度;針對待讀取文件內容傳輸采用了主動觸發式的可靠傳輸,磁盤陣列能夠依據其盤陣服務器的處理器性能、網絡傳輸狀況以及網絡傳輸距離控制主動觸發的頻率,提供系統通信的靈活性以及環境適應性,極大減少FPGA端的可靠協議開發復雜度,下面結合圖4介紹該方法的流程:
[0024]當外圍應用服務器需要通過FPGA處理單元從磁盤陣列中獲取文件時,首先將待讀取文件的文件名寫入到磁盤文件打開接口中的讀文件請求隊列raid_create_request_fifo隊列中去,FPGA處理單元一旦檢測到該隊列為非空,貝Ij通過構建讀文件請求信號向磁盤陣列發起讀取文件請求(操作碼0x23)。磁盤陣列通過以太網口獲取該讀文件請求,并根據可靠通信幀首部獲取待讀取文件的文件名稱以及相應的端口號,并在本地磁盤陣列查找文件,如果文件存在則獲取文件大小,如果不存在,則將文件大小設置為0,然后構建包含文件大小的讀文件請求應答(操作碼0x24),并將該讀文件請求應答通過以太網傳到FPGA處理單元。FPGA處理單元接收到該讀文件請求應答后,根據其中的文件大小能夠獲知該文件是否存在以及文件大小,然后將上述文件信息寫入到磁盤文件打開接口的讀文件響應隊列Raid_create_request_status_fifo中。在上述的傳輸通信過程中,