0731-84728105
15116127200
FAST入門(8)FAST平台軟件實現原理之一(yī)
發布時間:2018-08-10
     軟硬件協同是FAST平台分(fēn)組處理的特色。FAST平台軟件主要實現FAST硬件流水線與FAST用戶應用(UA)間數據通路和控制通路的信息交互,爲UA編程提供函數庫,是支撐UA運行的基礎。FAST平台軟件主要由Linux内核中(zhōng)的FAST驅動和FAST内核以及用戶空間的FAST編程庫組成。
一(yī)、FAST UA的通信模式
     FAST UA運行時與FPGA以及網絡接口有多種通信需求,包括FAST分(fēn)組收發、對FPGA的配置管理以及與遠端主機進行标準的Socket通信等。
   (1)FAST分(fēn)組收發
     UA從FAST流水線接收FAST分(fēn)組以及向FAST流水線發出自己産生(shēng)或者轉發的FAST分(fēn)組。當UA實現middlebox處理功能時,如防火(huǒ)牆功能,使用FAST分(fēn)組收發的方式與底層FPGA進行通信。這些分(fēn)組遵循元數據加以太網幀的FAST分(fēn)組格式定義。FAST分(fēn)組格式定義将在FAST編程 API介紹時給出。
   (2)對FPGA的配置管理
     UA對FPGA的配置管理包括對FAST流水線的配置管理以及對FPGA OS的配置管理。典型的對FAST流水線配置管理操作包括配置GAC模塊中(zhōng)的Action表,讀取GOE模塊中(zhōng)的計數器等;典型的對FPGA OS的配置管理包括讀取端口接收發送計數器,配置FPGA OS提供的匹配協處理器得流表項等。
   (3)與遠程設備的Socket通信
     FAST UA還可使用标準Socket()機制通過内核協議棧與遠程的網絡設備進行通信。根據目的IP地址,内核協議棧确定該通信是通過挂接到CPU上标準以太網接口進行,還是通過挂接到FPGA上的網絡接口進行。如果是前者,協議棧将會以sk_buff的格式與标準以太網驅動交換收發的分(fēn)組;如果是後者,協議棧将會把分(fēn)組送FAST内核,由FAST内核将分(fēn)組封裝成FAST格式,通過FAST驅動向FPGA中(zhōng)的流水線發出。
     需要注意的是,FAST UA可能同時使用多種通信模式。例如OpenFlow通道代理(OXFP)UA既要通過Socket機制與遠端的SDN控制器通信,實現packet-in/packet-out/flowmod等OpenFlow消息的交互,又(yòu)要與FAST流水線進行FAST分(fēn)組的交互。由于上述通過Linux内核的通信都是阻塞式的,因此需要爲不同的通信創建不同的線程。
二、FAST平台軟件的實現
     FAST平台軟件實現示意如下(xià)圖所示,其中(zhōng)包含FAST驅動、FAST内核、FAST編程庫以及兩個UA、UAx和UAy。FAST内核維護的Netlink端口映射表NPMT(Netlink Port Mapping Table)是FAST平台軟件中(zhōng)的核心數據結構,主要存放(fàng)UA的MID與NetLink端口号之間的映射關系。
     FAST平台軟件實現時在用戶空間并不存在一(yī)個集中(zhōng)的UA管理程序。每個UA在啓動時都獨立地通過FAST庫函數向FAST内核注冊,獲取MID以及與NetLink端口号的映射關系。NPMT中(zhōng)也保存了各種用于管理維護的各種計數器信息,例如某個UA接收和發送分(fēn)組的個數等。
     FAST編程庫爲UA設計提供FAST分(fēn)組收發的API函數,這些函數通過Netlink機制與Linux内核中(zhōng)的FAST内核通信。Netlink是一(yī)種基于Socket緩存隊列的,内核與用戶态應用之間傳遞的消息的異步通信機制。FAST編程庫會在UA實現時編譯到UA地址空間中(zhōng),爲防止不同UA訪問FAST内核中(zhōng)共享數據結構存在競争,FAST編程庫在設計時考慮了對NetLink映射表等共享資(zī)源訪問的互斥機制。
      FAST内核維護NPMT數據結構。每個UA啓動時,會通過FAST編程庫提供的初始化函數向FAST内核注冊,由用戶顯式地爲UA分(fēn)配一(yī)個唯一(yī)的MID編号。FAST内核對分(fēn)組處理的操作如下(xià)表所示。
     因此FAST内核根據FAST分(fēn)組的DMID實現了FAST流水線,多個FAST UA以及協議棧之間的分(fēn)組交換。從協議棧角度看,FAST内核是一(yī)個特殊的網絡接口,在内核中(zhōng)的地位與标準的網絡接口驅動基本一(yī)緻。由于協議棧發出的分(fēn)組無分(fēn)組的輸出接口信息,該分(fēn)組進入FAST流水線後需要通過正常的轉發獲取輸出接口的信息。
     FAST驅動負責控制與FPGA的DMA通信,FAST驅動與硬件平台密切相關,針對不同實現平台,DMA可以是輪詢方式,也可以是中(zhōng)斷方式。不同平台中(zhōng)硬件DMA寄存器的地址也有所差異,因此FAST驅動移植是FAST平台軟件移植的關鍵。由于FAST UA編程基于FAST編程API和Linux标準系統調用,因此不同的硬件平台對UA編程是完全透明的。