劉思遠, 任敏華, 谷航平
(華東計算技術研究所,先進集成電路研究院, 上海 201808)
提高網絡處理器性能的方法有很多種,最直接高效的就是并行處理技術[1-2],利用多個結構相同的微引擎能夠提高處理并行度,在一個微引擎中采用多個線程同樣能夠提高處理并行度[3]。路由器往往需要同時處理成百上千用戶的信息接受和轉發[4],微引擎在接收到數據包后,開始對其進行解析處理,而在程序指令訪問外部存儲器時,微引擎只能處于等待狀態,造成性能資源的浪費[5]。由于網絡交換中的各數據包相關性很低,因此可以將軟件中常用的多線程調度機制引入微引擎的硬件設計中[6-7]。本文設計了一種8線程微引擎,相較于傳統的4線程或單線程微引擎,它能夠實現微引擎各線程的高速切換,大大提升微引擎的執行效率,并采用了專用的線程切換指令、信號機制和指令切換存儲器,以此來實現一整套微引擎硬件體系結構,并在仿真平臺上驗證了該設計的高效性。
該款網絡處理器共有40個微引擎,分為5組,每組8個微引擎核,支持硬件8線程,工作頻率500 MHz,可同時做320個數據處理,GPR(General Purpose Registers)為32 bit,其硬件結構示意圖如圖1所示。

圖1 網絡處理器結構示意圖
這些微引擎組分別執行數據包的主要處理任務,如接收、解析、分類、轉發等任務,微引擎之間的通信參數由Scratchpad存儲,支持原子操作和環操作,不會被線程調度所打斷。以IPv4路由轉發為例,該網絡處理器各微引擎的工作流程如圖2所示。

圖2 IPv4路由轉發中微引擎之間的數據通路
本設計中的微引擎內核為五級單發射的流水MIPS架構,從二級譯碼級收到切換指令到線程完成切換需要4個時鐘周期。微引擎在處理報文中的數據時,會通過外設命令調用協處理器如Hash加速器或外部存儲器如DDR控制器來處理數據[8-9]。
對于每個微引擎的單個線程,一共有4種狀態,分別為未激活態、運行態、就緒態和睡眠態,本設計為其配置了專用的硬件系統模塊來存放處理切換狀態,其中包括:信號事件寄存器SIG_EVT_REG、程序指針寄存器PGM_PTR_REG、狀態控制寄存器STA_CTL_REG,其結構如圖3所示。

圖3 多線程模塊結構示意圖
本設計通過Round-Robin算法來調度8個線程,與硬件中斷機制不同,這是一種非搶占式機制。在微引擎收到線程切換指令Context_ARB時,信號事件寄存器和程序指針寄存器會記錄所有睡眠線程,而狀態控制寄存器則根據即時的各線程狀態來維護線程切換狀態機,線程仲裁器則從就緒線程中,以和睡眠線程等待信號量匹配為原則,選出就緒狀態線程,準備激活運行,同時將此線程的程序指針寄存器中的值作為微引擎的程序指針,等收到切換線程指令后立即執行指令存儲器中的指令,從而實現流水線指令的快速對接,且不因線程切換導致微引擎指令的停止[10]。圖4為多線程狀態機示意圖。

圖4 多線程狀態機示意圖
本設計中的8線程微引擎,相較于單線程,理論上能夠提升8倍的微引擎處理速度,在實際的應用中也能獲得非常可觀的效率提升[11]。圖5為8線程切換示意圖。

圖5 8線程切換示意圖
微引擎在運行態擁有微引擎的執行權,線程在執行完切換指令后隨即進入睡眠態,被仲裁出來的就緒線程則獲得執行權,激活態線程的狀態寄存器則會記錄下目前處于運行態的線程,保證同一時刻只有一個線程在運行。
本設計中的每個微引擎的硬件線程都有自己的L1數據緩存,每個微引擎中的8個線程共享一個L1指令緩存,40個微引擎共享一個L2指令緩存,因為所有線程都擁有單獨的硬件資源,所以狀態切換不需要用更多的時間去保存當前的線程狀態,仲裁模塊提前選出就緒進程,在微引擎執行完外設命令之后隨即執行線程切換指令,在執行此線程命令的時間里,對應的其他某一線程會被喚醒并執行相應的指令,這樣可有效節約存儲空間和處理時間。
本設計通過Mentor ModelSim軟件進行了功能驗證和時序驗證,Microengine_top為一個微引擎組,采用測試激勵testbench作為輸入,仿真的部分用例如圖6所示。

圖6 仿真部分用例文件
如圖7所示,跳轉匯編指令轉換為32位機器碼,指令寄存器在一個時鐘周期后準確收到輸入指令,仿真結果符合設計預期與實驗預期。
經過一系列的模塊驗證之后,搭建了FPGA以太網測試平臺(圖8),并在測試平臺上完成了性能測試,測試時間約為800萬個時鐘周期。

圖7 功能驗證截圖

圖8 FPGA以太網測試平臺
首先,對單線程處理器進行了各存儲器的延遲測試,測試結果如表1所示,除了Local Memory之外,微引擎和存儲器之間的訪存時間開銷是非常大的,有很大的效率提升空間。

表1 存儲器訪問延遲測試結果 單位:CLK周期
隨后,又對單線程、4線程以及本設計中的8線程處理器進行了IPv4路由轉發測試,測試結果如表2所示,可以看出,8線程網絡處理器的效率有了很大的提升且非常可觀,完全能夠滿足高速網絡場景中的使用需求。

表2 IPv4路由轉發測試結果 單位:CLK周期
本文提出了一種8線程網絡處理器微引擎的設計方案,通過實驗仿真驗證可以得知,本設計中的微引擎執行效率相較于單線程和4線程網絡處理器有了很大的提升。目前,本設計已經完成了全芯片代碼的集成、軟仿以及FPGA板級驗證,未來還將進行協同驗證,在流片封裝并進行硬件測試之后會應用在工業以太網等對即時性要求很高的使用場景中。隨著網絡速率和帶寬需求的不斷提升,網絡處理器在架構方面以及分組處理優化方面還有很大的發展潛力,這將是日后研究的重要方向。