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