李 拓,鄒曉峰,林寧亞,張 璐,劉同強,周玉龍,李仁剛
1(高效能服務器和存儲技術國家重點實驗室,濟南 250013)
2(浪潮電子信息產業(yè)股份有限公司,濟南 250013)
指令集,是在CPU 設計初期規(guī)定,用于控制處理器內部運行的一系列指令的集合.指令集設計的優(yōu)劣,對CPU的性能有重要影響.RISC-V 指令集[1]是2014年發(fā)布的一套完全開源的精簡指令集(RISC),始于加州大學伯克利分校的相關項目.憑借前瞻性的設計與后發(fā)優(yōu)勢,RISC-V 成為了開放指令集架構領域的佼佼者.
圖靈獎得主John Hennessy 曾經就未來的芯片設計提出了一種DSA (Domain Specific Architecture)的概念,即針對應用領域做優(yōu)化的處理器架構.ARM 作為一種通用且固化的指令集架構,設計靈活性有限,而RISCV 架構不僅僅開源,同時還具有模塊化、可擴展的特點,支持用戶自定義指令.
服務器管理控制器是應用于服務器等數(shù)據(jù)中心基礎設施的一種專用SoC,主要功能包括對系統(tǒng)設備進行信息監(jiān)測、記錄以及恢復等,它以獨立系統(tǒng)運行,通過網(wǎng)絡還可以實現(xiàn)對服務器的遠程訪問、遠程監(jiān)控和管理[2].目前,服務器管理控制器主要基于ARM 架構處理器進行設計,尚未有公開的基于RISC-V 設計方案.本文從SoC 設計底層入手,基于RISC-V 架構處理器進行服務器管理控制器的設計和測試,探究方案可行性并與ARM 架構進行對比.
本文首先介紹了RISC-V 及開源亂序執(zhí)行處理器BOOM[3,4],然后詳細描述了基于該處理器實現(xiàn)服務器管理控制器FPGA 原型系統(tǒng)的過程.該原型系統(tǒng)移植了OpenBMC 開源組件,實現(xiàn)了智能平臺管理接口規(guī)范(Intelligent Platform Management Interface,IPMI)協(xié)議的基本功能,同時還介紹了LXDE 等定制化組件.本文主要工作是驗證了RISC-V 替代ARM 設計服務器管理控制器的可行性和性能水平.
自RISC-V 發(fā)布以來,RISC-V的工具鏈與產品越發(fā)多樣,生態(tài)逐步完善.2015年,非盈利組織RISCV 基金會(RISC-V Foundation)成立,著手構建開放、合作的軟硬件交流平臺,推動RISC-V 生態(tài)的快速完善與發(fā)展.很快就有幾百家加入了基金會,其中包括谷歌、IBM、英偉達、浪潮等國際企業(yè)以及加州大學伯克利分校、麻省理工學院、普林斯頓大學、中科院計算所等學術機構.
在國內,芯來科技于2017年10月開源了其“蜂鳥”低功耗處理器,這是國內由企業(yè)開源的第一款基于RISC-V 架構的處理器.目前在中國已經有多家成熟的RISC-V CPU 企業(yè),如睿思芯科、平頭哥等.在物聯(lián)網(wǎng)、智能家電等領域,RISC-V 相關產品已經有大量應用案例.目前,基于RISC-V 架構的開源處理器已經涵蓋嵌入式、AI、5G 射頻、硬盤控制器等多種應用場景.處理器核心也由最初的低功耗標量處理器逐漸向亂序超標量的復雜架構演進[5].產業(yè)環(huán)節(jié)中的各種相關工具如GCC/LLVM 編譯器、Linux內核支持、高層次設計語言、總線通訊協(xié)議等也在不斷完善.
在2015年,伯克利分校的研究團隊推出了基于RISC-V 架構的亂序執(zhí)行核心BOOM (Berkeley Out-of-Order Machine),并將其完全開源.這款CPU 使用Chisel語言編寫,指令集為RISC-V中的RV64G 指令和特權指令,該核心是一款64 位RISC-V 超標量Berkeley 亂序機的源存儲庫,計算性能與ARM中高端處理器相當,經過多次流片,實際性能表現(xiàn)優(yōu)異.
BOOM的流水線結構主要分為6個階段:取指、譯碼/重命名/指令調度、發(fā)射/讀寄存器、執(zhí)行、訪存以及寫回.由于Chisel是一種面向硬件的高層次設計語言,BOOM 處理器可以實現(xiàn)參數(shù)的靈活配置,包括:取指寬度、譯碼寬度、指令發(fā)射寬度、物理寄存器堆的大小、有序發(fā)射或無序發(fā)射;L1 Cache 及L2 Cache的路數(shù)等參數(shù).BOOM 流水線結構[3]如圖1所示.
圖1 BOOM 處理器流水線結構
常見的服務器管理控制器的基本架構如圖2所示.本文依托RISC-V 開源生態(tài)環(huán)境,設計實現(xiàn)了管理控制器基本的外設和接口模塊,包括:
圖2 通用RISC-V 原型系統(tǒng)架構
1)I2C/SMBus:用于實現(xiàn)與CPLD的通信和獲取溫度、電壓等傳感器回傳的數(shù)據(jù);
2)LPC:BIOS 與監(jiān)控管理系統(tǒng)之間通信,BIOS 向監(jiān)控管理系統(tǒng)上報啟動信息;
3)KVM:視頻、鼠標和鍵盤的控制信息重定向到監(jiān)控管理系統(tǒng);
4)SPI:BIOS 固件的升級更新接口;
5)JTAG:CPLD的固件更新接口;
6)IPMB:ME (Management Engine)與監(jiān)控管理系統(tǒng)之間的通信;
7)Ethernet:監(jiān)控管理系統(tǒng)接入網(wǎng)絡接口;
8)VGA:實現(xiàn)視頻流的顯示;
9)PWM:實現(xiàn)風扇轉速的控制和監(jiān)控;
10)USB:鼠標、鍵盤等USB 設備接口;
11)Timer、RTC、WDT 等基礎模塊:實現(xiàn)復位、實時時鐘等.
RISC-V 控制器FPGA 原型平臺處理器選型工作中,我們對比了開源的Rocket[6]、BOOM、PULPino[7]等,通過公開的性能數(shù)據(jù)分析,選用性能最優(yōu),并經流片驗證的BOOM V2 核心,并基于BOOM V2 SoC 開發(fā)環(huán)境進行開發(fā).將上述外設、接口模塊與處理器核心進行集成后,對系統(tǒng)地址空間進行了劃分,同時,利用RISCV的工具鏈對OpenBMC 系統(tǒng)進行重新編譯和文件系統(tǒng)移植.
本文主要從4個方面對FPGA 原型平臺進行了功能擴展和優(yōu)化:
1)原型系統(tǒng)主處理器實現(xiàn)了BOOM 雙核,嵌入L2 Cache和一致性協(xié)議總線,實現(xiàn)核間Cache 一致性.實際應用可以對核數(shù)配置,滿足不同場景性能需求.
2)針對BOOM 總線進行了擴展優(yōu)化,增加對AXI總線的擴展支持,并基于該總線擴展了DDR 等外設接口.
3)鑒于RISC-V 指令集的靈活性,對指令集進行了向量指令擴展[8]的探索.RVGC64 指令集目前已經滿足SoC 設計需求,擴展的向量指令主要目的是探究RISC-V 擴展指令集開發(fā)流程,為其他高性能應用場景提供支持.
4)DRAM 容量達到8 GB,系統(tǒng)啟動時,通過DDR將固件直接加載到DRAM中,加快固件加載和系統(tǒng)啟動速度.
服務器管理控制器主要利用傳感器監(jiān)控計算機或服務器的運行狀態(tài)[9],具有本地和遠程診斷、控制臺支持,配置管理,硬件管理和故障排除等功能.
我們結合服務器管理控制器實際應用場景,進行了RISC-V SoC的定向設計與優(yōu)化,控制器結構如圖3所示.SoC 采用雙核BOOM 作為主處理器,集成服務器管理控制器所需IIC、LPC、QSPI 等外設接口,并支持服務器監(jiān)控管理協(xié)議(IPMI),實現(xiàn)與控制器上層接口的完全兼容.
圖3 特定場景優(yōu)化后架構
BOOM SoC 使用的是TileLink 總線協(xié)議,該總線是加州大學伯克利分校設計的一種高速片上總線協(xié)議[10],我們根據(jù)需求配置設計了TileLink 轉AXI4 協(xié)議轉換模塊,其總線互連和轉換功能集中在SystemBus 模塊中,詳細功能模塊劃分如圖4所示.
圖4 總線設計架構框圖
TileLink 設計之初,考慮了滿足支持緩存一致性(cache coherence)協(xié)議,并針對現(xiàn)有的多種一致性協(xié)議,其將總線設計與協(xié)議設計相分離,提高了TileLink 總線的適應性.
TileLink 總線的有向無環(huán)圖結構主要是作為處理器的BoomTile,可外接測控模塊的FrontBus 接口與MMIO_AXI4的外設接口、PeripheryBus 外設接口、TLError和TLBroadcast的數(shù)據(jù)和控制交互.其中主要包含了兩部分功能:
1)TileLink 網(wǎng)絡拓撲實現(xiàn),包含了多主多從接口的Crossbar Agent、一從多主的Crossbar Agent和主從轉換接口的Cache Agent 實現(xiàn).
2)TileLink 協(xié)議轉AXI4 協(xié)議功能實現(xiàn).
根據(jù)服務器管理控制器外設需求,我們對內部地址空間進行了劃分,如表1所示.
表1 地址空間劃分
RISC-V內核啟動過程中分為4 部分:ZSBL、FSBL、BBL和Linux Core.在啟動過程中,我們利用了Register 存儲空間的劃分,通過配置參數(shù)指定了各自的起始存儲位置和大小,啟動程序可以讀取并分析Register 存儲空間的配置參數(shù),獲得FSBL、BBL和Linux Core 在SD 卡的存儲位置和大小,然后將其搬運到指定的DDR中運行.
基于改進的RISC-V內核啟動流程,我們實現(xiàn)了對SD 卡的壞塊進行管理的設計.通過Register 配置空間可以任意指定ZSBL、FSBL、BBL和Linux Core的存儲起始位置和大小,如果SD 卡某一塊出現(xiàn)壞塊,可以通過配置Register 配置空間的參數(shù)修改存儲位置,跳過壞塊部分,后期可以將Register 配置空間的參數(shù)通過寄存器的方式存儲在RISC-V 處理器中,可以在RISC-V 處理器啟動前通過外部進行配置啟動參數(shù).上述壞塊管理操作可以大大提高SD 卡的可用性.
針對服務器管理控制器在人機交互上的便捷性需求,我們移植了LXDE 作為簡潔易用的交互界面.LXDE是一款面向低功耗的輕量級桌面環(huán)境,支持GTK 特性,用戶界面更貼近Microsoft Windows的菜單.其在設計之初就考慮到了用戶體驗性與較低的資源占用,注重模塊化設計,組件可以靈活增刪,滿足了定制化需求,也實現(xiàn)了以極低的內存與CPU 負載承擔功能豐富的桌面環(huán)境.以上優(yōu)點同時使其更容易移植在服務器管理控制器的系統(tǒng)上,而且在低運行頻率的FPGA 原型平臺上就可以進行安裝調試.
在應用層,我們集成了OpenBMC.OpenBMC 由微軟,英特爾,IBM,谷歌和Facebook 發(fā)起,是一個開源的軟件架構,其功能是用于打造一個完整可用的負責基板管理控制的Linux 代碼庫.OpenBMC 使用Yocto Project 作為發(fā)布框架,為移植提供了便利.
移植后使用浪潮自有的UI 界面管理,如圖5所示.
圖5 服務器管理界面圖
隨著對OpenBMC的持續(xù)優(yōu)化,其已經能夠實現(xiàn)帶外的在線升級,在不占用服務器網(wǎng)絡帶寬的情況下,通過Web UI 界面和軟件包實現(xiàn)固件的刷新和維護工作.通過提升OpenBMC的模塊化、規(guī)范化程度,將來可以為各類數(shù)據(jù)中心,尤其是大規(guī)模、超大規(guī)模數(shù)據(jù)中心,提供下一代開放技術管理方案.
Boom-template 工程集成了Verilator 仿真環(huán)境.在versim 目錄下執(zhí)行make 命令,可以生成有關BOOM的simulator,該simulator為一可執(zhí)行文件,名稱為simulator-boom-system-BoomConfig,可以執(zhí)行任何RV64G的ISA 測試,包括單一測試用例以及整個測試集.
仿真環(huán)境的組成如圖6,其中MMIO AXI4和MEM AXI4 接口分別接兩塊mem,DMI_debug port 接SimDTM 模塊,該模塊負責產生仿真時的激勵.
圖6 邏輯仿真示意圖
SimDTM 模塊提供了C++與Verilog的接口,由C++產生激勵,并通過驅動DMI_debug bus 上的信號來驅動DUT,從而完成仿真.
該系統(tǒng)基于Xilinx的Virtex Ultra Scale 440 FPGA進行了原型構建,然后將整套系統(tǒng)從VU440 移植到使用了Kintex-7 系列的FPGA 定制板卡上.Kintex-7 系列FPGA 實現(xiàn)了最佳成本/性能/功耗平衡,芯片功能強大,資源豐富.其480T 型號FPGA 支持8 通道PCIE接口,提供了478K 邏輯單元,高達400個I/O 口,完全滿足原型驗證需求.測試使用SD 卡啟動的方式實現(xiàn)邏輯代碼的加載.
我們?yōu)镕PGA 原型系統(tǒng)開發(fā)了服務器管理控制器相關的外設模塊,如UART、Timer、SPI、外部存儲、調試邏輯等,結構如圖7所示.
圖7 外圍模塊示意圖
服務器管理控制器場景下RISC-V SoC的實現(xiàn)分兩步:(1)基于BOOM 多核的原型平臺,針對服務器管理控制器的各項需求進行擴展和優(yōu)化,集成外設接口,進行穩(wěn)定性和功能測試,作為硬件研究和軟件開發(fā)的基礎平臺.(2)將整套系統(tǒng)從VU440 移植到FPGA 定制板卡上,如圖8所示.該定制板卡使用了Kintex-7 系列XC7K480T 芯片,集成網(wǎng)口、串口等用于通信、調試的接口,可通過PCIE 接口連接服務器主板,借此可以順利進行上層移植以及功能性能測試.
圖8 測試板卡
當設計從模擬實現(xiàn)到硬件實現(xiàn)時,用戶對系統(tǒng)當前狀態(tài)的控制和理解會急劇下降.為了幫助啟動和調試低級軟件和硬件,在硬件中內置良好的調試支持至關重要.當core 運行操作系統(tǒng)時,軟件可以處理許多調試任務.但是,在許多情況下,硬件支持至關重要.我們重新制作了根文件系統(tǒng)以及相關組件,增加了更多便于調試的命令,啟動界面如圖9所示.
圖9 系統(tǒng)啟動圖
Debug 系統(tǒng)debug host和RISC-V 平臺組成,其中debug host 包括運行調試器的調試主機(如筆記本電腦),調試器經常使用的如GDB 工具,調試器通過調試轉換器與調試傳輸硬件進行通信,調試轉換器模塊可以使用OpenOCD,其可以包括硬件驅動器,DTM為調試傳輸硬件,即USB-JTAG 適配器調試傳輸硬件將調試主機連接到平臺的調試傳輸模塊(DTM).DTM 使用調試模塊接口(DMI)提供對一個或多個調試模塊(DM)的訪問.
平臺中的每個硬件線程都由一個DM 控制.硬件線程可能是異質的.對硬件線程與DM 之間的映射沒有限制,但通常單個core中的所有硬件線程都由相同的DM 控制.在大多數(shù)平臺上,只有一個DM 可以控制平臺中的所有硬件線程.
Program Buffer 允許調試器在硬件線程上執(zhí)行任意指令.這種機制也可用于訪問內存.可選的系統(tǒng)總線訪問塊允許在不使用RISC-V Hart來執(zhí)行訪問的情況下進行存儲器訪問.
每個RISC-V 可以實現(xiàn)觸發(fā)模塊(Trigger Module,TM).當滿足觸發(fā)條件時,硬件線程將停止并通知調試模塊它們已停止.
DMI 連接調試模塊DM和DTM,其中DTM是master,DM 作為slave.調試模塊接口可以是具有一個主設備和一個從設備的普通總線,或者是更全功能的總線,如TileLink 或AMBA 高級外設總線.DMI 使用7 到32個地址位,支持讀寫操作.地址空間的開始段用于第一個DM,額外空間可用于自定義調試設備、其他內核、附加DM 等.如果此DMI 上有其他DM,則DMI 地址空間中下一個DM的基址將在nextdm中給出.調試模塊通過對其DMI 地址空間的寄存器訪問來進行操作.
在使用RISC-V BOOM 搭建的服務器管理控制器FPGA 原型系統(tǒng)上,應用層的程序均可正常運行,與上一代ARM 架構原型系統(tǒng)相比,該系統(tǒng)啟動時間縮短15%.
我們對服務器管理控制器FPGA 原型系統(tǒng)進行了軟硬件測試和上層應用適配,包括軟件兼容性、系統(tǒng)穩(wěn)定性、IO 時延等參數(shù),優(yōu)化后的系統(tǒng)可滿足產品化的各項指標.在進行各方面的適配后,經Benchmarks基準測試,系統(tǒng)性能測試分數(shù)超過ARM Cortex-A9,具體性能如表2所示.
表2 RISC-V Core 與ARM Cortex-A9 跑分對照
本文首先對RISC-V的BOOM 處理器進行了相關的擴展和優(yōu)化,并集成了服務器管理控制器所需外設,移植了開源的上層應用框架,構建了一套基于RISC-V處理器核的服務器管理控制器原型系統(tǒng),并進行了Benchmarks 測試.測試結果顯示,該系統(tǒng)處理性能優(yōu)于ARM Cortex-A9 處理器26%.結果證明了RISC-V在面向具體應用場景上對ARM 替代可行性.