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