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