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