?

RISC-V 指令集架構研究綜述*

2021-02-25 12:16武延軍吳敬征
軟件學報 2021年12期
關鍵詞:指令集寄存器內存

劉 暢,武延軍,吳敬征,趙 琛

1(中國科學院 軟件研究所 智能軟件研究中心,北京 100190)

2(中國科學院大學,北京 100190)

3(計算機科學國家重點實驗室(中國科學院 軟件研究所),北京 100190)

1 前 言

現代信息系統的設計正在出現幾個新的趨勢:(1) 注重軟硬件協同的設計模式.例如,英偉達公司推出CUDA 通用并行計算架構[1],發揮GPU 的計算能力提升系統性能;Costan 等人[2]提出了硬件擴展Sanctum,協助軟件系統實現強隔離功能.(2) 面向需求的系統精準定制化.例如,近年來出現的AI 加速芯片,通過芯片架構的定制,滿足神經網絡推理或訓練的算力需求[3].在這樣的趨勢下,探究系統軟硬件的多種組合方式,設計出最合適應用場景的系統架構,具有較高的理論價值和實踐意義.與此同時,為了適應計算環境與應用環境的不斷變化,計算機軟硬件的發展也存在一種逐漸開放的趨勢.以軟件為例,從早期代碼高度集中、與機器高度耦合,到1964 年Multics 操作系統[4]推動系統的通用化進程,UNIX 操作系統[5]開放用戶任務、開啟內核時代,再到Mach 微內核的問世[6]、GNU 項目的發起以及Linux 內核的公開發布,開源軟件思想深入人心,體系結構也逐漸走向設計公開化、內容多樣化、管理多元化、研發社區化、功能可定制化的局面.在這樣的背景下,如何有效整合多種軟硬件資源,發揮開放系統的獨特優勢,精準滿足用戶任務需求,成為關注重點.指令集架構(instruction set architecture,簡稱ISA)作為軟件與硬件之間的交互規范,定義了軟硬件的組合或整合方式.在上述趨勢和背景下,迫切需要一種新的指令集,既滿足軟硬件的深度協同融合和靈活組合,又具備開放特性.

RISC-V 是一種新興的開源精簡指令集架構,由加州大學伯克利分校在2010 年首次發布[7].RISC-V 的出現和迅速發展有其必然的原因,它是建立在現有的體系結構(如x86、ARM、MIPS 等)經長期發展所暴露出的種種問題之上,順應現代信息系統設計需求和體系結構發展趨勢而生的:(1) 現有體系結構往往缺乏開放性,存在許多知識產權、政治干預等非技術性問題.例如,Intel 公司持有x86 架構的專利(1978 年開始),使用x86 指令集相關技術需要向其支付高昂的授權費用,對x86 指令集的模擬也將引發法律上的爭議[8].這種封閉的態勢與體系結構發展的開放趨勢背道而馳,抬高了系統研發與成果轉化的成本,阻礙了技術的推廣和進步.RISC-V 具有開源、免費、開放、自由的特點,其基金會總部于2020 年3 月正式遷往永久中立國瑞士[9],更是釋放了堅持服務全世界的信號,使任何組織和個人都可以不受地緣政治影響、自由平等地使用RISC-V.(2) 現有體系結構經過長期發展,多個版本的迭代,積累了許多歷史遺留問題.基于各歷史版本的技術產品在市場生態中共存,使得新版本的研發必須考慮向后兼容性,去支持一些過時的定義和其實不需要的技術特性.例如,AMD64 是對32 位x86 架構的64 位擴展,面向64 位開發與應用環境;但它同時仍要向后兼容32 位甚至16 位的x86 架構,使早期x86 架構下開發的應用同樣可以在AMD64 系統中正常運行.這種積重難返的狀態削弱了現有體系結構的可定制化能力,難以滿足現代信息系統對于多樣化的工作環境與功能表現的需求.RISC-V 作為一種從零開始設計的新體系結構,吸收了現有各體系結構優點的同時,去除了對歷史遺留問題的顧及和舊有技術的依賴;進一步地,RISC-V 采用模塊化設計,并提供大量自定義編碼空間以支持對指令集的擴展,從而允許開發者根據資源、能耗、權限、實時性等不同需求,基于部分特定的模塊和擴展指令集進行精細化的系統設計研發,體現了強大的系統可定制化能力.(3)現有主流架構的文檔資源種類繁多、內容冗長,學習與維護的成本較高,使開發者難以在短時間內掌握所需的技術,遇到問題時也不易迅速定位到相關的信息區間.例如,ARMv8-A 架構的官方手冊[10]僅一卷就多達8 538 頁;相比之下,RISC-V 官方手冊僅有兩卷329 頁,包括238 頁的指令集手冊[11]和91 頁的特權架構手冊[12],文檔精簡,學習門檻更低,更有助于研發團隊的不斷壯大和技術實力的不斷進步.

因此,對于RISC-V 的研究已成為近年來學術界和工業界的一大熱點,涌現了許多突破性成果,如西部數據公司研發的基于RISC-V 的通用架構SweRV[13]、阿里巴巴公司研發的64 位高性能嵌入式RISC-V 處理器Xuantie-910[14]、Koch 等人設計的嵌入式開源FPGA(field programmable gate array,現場可編程門陣列)框架FABulous[15]、中國科學院計算技術研究所在RISC-V 中國峰會發布的開源高性能RISC-V 處理器核“香山”[16]、上海交通大學開源的基于RISC-V 的可信執行環境安全系統“蓬萊”[17].其中也包括了對RISC-V 與不同應用領域結合方式的探索,如Kadomoto 等人[18]利用RISC-V 芯片改善了無線總線接口技術,以促進對于小型機器人的研究; Di Tucci 等人[19]將RISC-V 應用于基因組處理,提出了專用領域架構SALSA.這些系統、工具都是利用了RISC-V 在資源依賴性、低功耗性、易用性、可定制性、可擴展性等方面的優勢,因而能夠高效、迅速而低成本地完成各自領域中的系統級任務.

RISC-V 作為一種指令集架構,一方面,它規定了硬件設備在設計電路、組裝元件時應當實現的功能目標;根據指令集的內容,決定運算單元、存儲單元等元件的種類、數目、位寬及接線方式.另一方面,它是對硬件能力的一種抽象,提供了機器所能完成的操作種類、地址空間大小、數據格式、訪問權限信息;上層軟件應用可以將指令集視為硬件運行環境,而無需特別關注具體的硬件實體.圖1 直觀地解釋了RISC-V 在系統中的定位.

Fig.1 The translation and execution process of application code圖1 系統對應用程序代碼的翻譯和執行過程

對于RISC-V 的研究將至少著眼于4 個層面中的一個:對于底層RISC-V 硬件的研究、對于RISC-V 指令集自身的研究、對于上層RISC-V 系統(主要是基礎軟件)的研究,對于頂層應用的研究.而在研究內容上,普遍集中在系統或應用的功能、性能、安全這3 個方面.本文圍繞RISC-V 體系結構設計過程和主要關注點,從上述4個層面對相關研究進行了總結.這些研究工作均來源于對DBLP 文獻數據庫的檢索,共涉及126 篇論文文獻(截至2021 年7 月).從論文發表的期刊和會議看,有65 篇來自CCF-A 類期刊或會議中,占比超過50%;有104 篇發表在計算機體系結構領域的期刊或會議中,占比超過82%,其余22 篇論文分別發表在網絡與信息安全、軟件工程、系統軟件等領域的期刊或會議中.對這些RISC-V 研究工作的分布統計見表1.

本文第1 節介紹RISC-V 相關概念及其優勢,并對本文結構進行概述.第2 節回顧近年來對于RISC-V 指令集的研究,包括對于各指令集擴展現狀的分析.第3 節總結處理器、加速器等支持RISC-V 系統的硬件工作環境.第4 節討論各種RISC-V 系統的設計及其要點.第5 節介紹一些利用RISC-V 實現性能、安全提升的應用案例.第6 節展望RISC-V 架構未來可能的發展方向和研究點.最后在第7 節對本文內容進行總結.

2 RISC-V 指令集

RISC-V 的指令集包括基礎指令集和擴展指令集兩類.RISC-V 指令集架構被定義為一個基礎指令集和若干可選擴展指令集的組合,并在一種權限模式下進行工作.本節對RISC-V 各指令集的當前狀態進行了總結和分析,并簡要介紹了RISC-V 的權限規則.

Table 1 Source distribution of major research results 表1 主要研究成果來源分布

2.1 RISC-V基礎指令集

RISC-V 的基礎指令集包含了能夠為編譯器、匯編器、鏈接器、操作系統(結合額外的特權操作)等提供 必要功能實現的最小指令集合.它們是構筑ISA 和軟件工具鏈的骨架,可以圍繞它們來構建更多定制的處理器ISA.根據最新的RISC-V 規范[11],RISC-V 共有5 種基礎指令集:RVWMO、RV32I、RV64I、RV32E、RV128I,分別代表了弱內存次序指令集、32 位整數指令集、64 位整數指令集、32 位嵌入式整數指令集、128 位整數指令集.其中,RV32I 和RV64I 是最主要的兩種,分別針對32 位和64 位工作環境而設計;RV32E 是為嵌入式環境設計的一個RV32I 的簡化版本,RV128I 將用于未來的128 位環境,而RVWMO 描述了RISC-V 所使用的內存一致性模型.任何一種RISC-V 指令集架構都必須完整地實現一種基礎指令集.

2.1.1 RV32I 和RV64I 指令集

RV32I 指令集和RV64I 指令集都使用32 個通用寄存器(x 寄存器)和一個額外的非特權寄存器(pc 寄存器),如圖 2 所示[11].區別在于寄存器的位寬(XLEN),RV32I 中是 32 位(XLEN=32),而 RV64I 中是 64 位(XLEN=64).x 寄存器又稱為“整數寄存器”,可以存放XLEN 長度的數值,這些數值可以被各指令解釋為布爾值的集合、二進制有符號整數,或者二進制無符號整數的二補碼.其中,x0 寄存器的所有位都被硬布線為0 值,不可更改,因此也被稱作零寄存器(zero).pc 寄存器又稱“程序計數器”,用于保存當前指令的地址.

通用寄存器x1~x31 理論上可以用于各種用途,但是根據標準調用約定[20]的建議,這些寄存器的功能在實踐中也是相對固定的:x1~x4 用于保存程序運行相關的指針,共4 個;x5~x7 及x28~x31 用作臨時寄存器,共7個;x8~x9 及x18~x27 由被調用者使用,共12 個;x10~x17 用于保存調用的參數,共8 個.表2 列出了所有x 寄存器在標準調用約定下的含義.

Fig.2 Register status of RV32I/RV64I[11]圖2 RISC-V 整數指令集(RV32I/RV64I)的寄存器狀態[11]

Table 2 The meaning of each x register in standard calling convention 表2 標準調用約定下的各x 寄存器含義

RV32I 有4 種基礎指令格式:R/I/S/U,指令集中的任何指令都可以根據操作數的數量、種類、規模以及自身的功能需求,選用其中一種格式.所有這些指令格式都是32 位固定長度,并且必須在內存中對齊到4 字節的邊界.圖3 顯示了這4 種基礎的指令格式.

Fig.3 Four basic instruction formats of RV32I[11]圖3 RV32I 的4 種基礎指令格式[11]

RV64I 采用與RV32I 相同的指令格式,只是將整數寄存器和所支持的用戶地址空間擴展到了64 位,增加了一些操作低32 位的“*W”指令.例如,RV32I 中的ADDI 指令可以將符號擴展的12 位立即數加到寄存器中,并將計算結果的低XLEN 位(即低32 位)作為指令的執行結果,忽略計算溢出.RV64I 沿用了該指令,但寄存器和執行結果都被擴展到64 位.同時RV64I 新增了ADDIW 指令,用以產生32 位的計算結果,再將其符號擴展至64 位并忽略計算溢出.

2.1.2 RV32E 指令集

RV32E 是專為嵌入式環境設計的指令集,是對RV32I 指令集的一種簡化.根據RISC-V 規范[11]的描述,它與RV32I 唯一的區別在于,將可用的整數寄存器的數目從32 減少到16,即只使用x0~x15 和pc 完成所有的指令功能,而去除了RV32I 中的x16~x31 寄存器.RV32E 的寄存器狀態如圖4 所示.

Fig.4 Register status of RV32E[11]圖4 RV32E 的寄存器狀態[11]

由于寄存器數目不同,適用于RV32I 的標準調用約定與RV32E 并不兼容.RV32E 需要與之不同的調用約定和ABI(application binary interface,應用程序二進制接口),但目前還沒有這方面較為統一而穩定的標準.作為臨時的解決方案,RISC-V 規范提供了一種專用于RV32E 的調用約定ILP32E,它要求棧指針對齊只能到32位邊界;而在寄存器的分配上,采用與 RV32I 一致的分配方案.例如,在高性能開源 RISC-V 微控制器核心SCR1[21]中,對于RV32E 的實現便采取了這樣的處理方式.通過預處理選項的控制,使寄存器x0~x15 完全復用,不特別區分RV32I 或RV32E,而x16~x31 只有在RV32I 指令集中啟用.

2.1.3 RV128I 指令集

RV128I 是一個用于支持128 位地址空間的指令集.根據RISC-V 規范中的預測,隨著計算需求的增長和技術的不斷演進,很可能會在 2030 年之前就會需要超過 64 位的地址空間[11].因此,事先提出面向未來的RV128I 指令集便成為一項積極的應對措施.

RV128I 是對RV32I 和RV64I 的直接外擴,僅僅是把整數寄存器寬度擴展到了128 位(XLEN=128).由于大部分整數運算指令在XLEN 位上定義,所以無需變化.此外,RV128I 保留了RV64I 中用于操作低32 位的“*W”指令,只是把結果從32 位符號擴展到128 位;RV128I 還新增了用于操作低64 位的“*D”指令.

2.1.4 RVWMO 指令集

RVWMO 指令集定義了RISC-V 的內存一致性模型.內存一致性模型是一組規則的集合,指定了內存的load 操作所能返回的結果.RVWMO 內存模型屬于弱內存次序的,即在一個多線程程序有許多種不同可能的執行,而每種執行有其自己相應的全局內存次序.這里的“全局內存次序”是指所有硬件線程所產生的內存操作的總體次序.

RVWMO 指令集為加載(load)和存儲(store)等內存操作提供了一組內存模型原語,用于對相關指令進行標注.表3 列舉了這些標注的內容及其含義.

RVWMO 內存模型的定義基于依存句法(syntactic dependency)的概念,即,指令的源寄存器、目的寄存器,和指令從源寄存器到目的寄存器含有依賴的方式.對于不同的RISC-V 指令集中的不同指令,會有各自不同的依存句法.

RVWMO 對程序的執行提出了次序上的要求,即,全局內存次序需要遵循著各個硬件線程的內存次序中的一部分(但不是所有).這部分必須被遵循的次序子集被稱為“保留的程序次序”.

內存模型原語、各指令的依存句法和保留的程序次序,以及基于這些內容的3 條公理[11](加載值公理、原子性公理、進度公理),共同構成了RVWMO 內存一致性模型.

Table 3 Annotations of memory access instructions in RVWMO 表3 RVWMO 指令集對內存操作指令的標注

2.2 RISC-V擴展指令集

RISC-V 的擴展指令集用于為ISA 提供特定方面的功能操作指令.一個ISA 可以選擇加入多個擴展指令集.而為了使多個指令集能夠共存,各指令集的編碼空間均按照RISC-V 國際基金會(RVI)的編碼要求進行了劃分,以避免沖突.現有的RISC-V 擴展指令集主要有以下24 種.

(1) 乘法和除法擴展(M 擴展):用于將兩個整數寄存器中的值進行相乘或相除.具體包含了MUL、DIV、REM 等指令及對應于無符號數操作或64 位操作相關的各種變體指令.

(2) 原子指令擴展(A 擴展):用于支持相同內存空間中的多個硬件線程間的同步.主要包含了對內存進行原子性讀取、修改、寫入的指令.

(3) 單精度浮點擴展(F 擴展):用于支持單精度浮點運算.添加了兼容IEEE 754-2008 算術標準[22]的單精度浮點運算指令,以及32 個32 位寬的浮點寄存器f0~f31,和一個浮點控制與狀態寄存器fcsr.

(4) 雙精度浮點擴展(D 擴展):用于支持雙精度浮點運算.它依賴于F 擴展,需要與F 擴展共同使用.D 擴展添加了兼容IEEE 754-2008 算術標準的雙精度浮點運算指令,并把浮點寄存器f0~f31 拓寬到64位.

(5) 四精度浮點擴展(Q 擴展):用于支持四精度浮點運算.它依賴于D 擴展,需要與D 擴展和F 擴展共同使用.Q 擴展添加了兼容IEEE 754-2008 算術標準[22]的四精度浮點運算指令,并把浮點寄存器的位寬擴展到128 位.

(6) 壓縮指令擴展(C 擴展):C 擴展增加了一些16 位的短指令編碼,用于替代對應的某些32 位常見操作指令,以減少靜態和動態的代碼尺寸.它還移除了原始32 位指令上的32 位對齊限制,允許指令可以從任何16 位邊界開始,從而顯著提高了代碼密度.

(7) 計數器指令擴展(Counters 擴展):Counters 擴展提供了至多32 個64 位計數器或計時器,可以通過特定的只讀CSR 寄存器0xC00-0xC1F 進行訪問.其中,前3 個計數器為專用計數器,分別用于循環計數(CYCLE)、實時時鐘(TIME)和過時指令(INSTRET);其余的計數器可用于程序事件的計數.

(8) 十進制浮點擴展(L 擴展):用于支持IEEE 754-2008 標準[22]中定義的十進制浮點算術.它將浮點寄存器用于存儲64 位或128 位十進制浮點值.該擴展尚未進入實質性的設計階段.

(9) 位操作擴展(B 擴展):用于支持位操作.主要包括了插入、提取、測試位域的指令,以及移位、位與字節置換等操作指令.該擴展尚未進入實質性的設計階段.

(10) 動態翻譯語言擴展(J 擴展):用于支持動態翻譯語言.該擴展注意到,許多流行的語言都采用動態翻譯的方式實現,如Java 和JavaScript.因此希望引入一些指令,從ISA 層面支持這些語言的動態檢測、垃圾回收等行為,從而獲得收益.該擴展尚未進入實質性的設計階段.

(11) 事務內存擴展(T 擴展):用于支持事務內存操作.T 擴展將設立一個小型的、容量有限的事務內存緩沖區,以支持涉及多個地址的原子性操作.該擴展尚未進入實質性的設計階段.

(12) 組合單指令多數據流(packed single instruction multiple data,簡稱Packed SIMD)指令擴展(P 擴展):用于支持小型RISC-V 實現中的組合SIMD 定點操作.該擴展曾被認為可以由V 擴展上的大型浮點SIMD 操作標準化代替,而幾近廢棄;但考慮到小型RISC-V 的實際需要而得以保留,并開始設計和定義新的P 擴展.

(13) 向量操作擴展(V 擴展):用于支持32 位指令編碼空間中的數據并行執行功能.該擴展增強了處理器的SIMD 操作,引入了一組向量寄存器和向量操作指令,允許將相同的操作應用于大批量的數據元素之中,使RISC-V 系統的數據處理能力發生質變,同時保持指令代碼的精簡性.

(14) 控制和狀態寄存器擴展(Zicsr 擴展):RISC-V 定義了一個獨立的地址空間,包含與各硬件線程相關的4 096 個控制與狀態寄存器(control and status register,簡稱CSR).Zicsr 擴展即提供了在此空間中操作CSR 指令的完整集合.

(15) 屏障擴展(Zifencei 擴展):僅含有一條FENCE.I 指令,用于提供相同硬件線程上寫指令內存與指令獲取之間的顯式同步.

(16) 非對齊原子操作擴展(Zam 擴展):用于對非對齊的原子內存操作(atomic memory operation,簡稱AMO)提供標準化支持.它是對A 擴展的擴展,使AMO 只需要針對具有相同地址和相同尺寸的其他訪問(包括非原子性的加載和存儲)進行原子化執行即可.

(17) 全存儲排序擴展(Ztso 擴展):用于支持“全存儲排序”[23]的內存一致性模型.它提供了一種比RVWMO 更嚴格的內存一致性模型.

(18) 提示暫停擴展(Zihintpause 擴展):用于指示當前硬件線程應當放緩指令的失效率.目前僅包含一條PAUSE 指令,并且不會引起架構相關狀態的更改.

(19) 半精度浮點擴展(Zfh 擴展):用于支持半精度浮點運算.添加了兼容IEEE 754-2008 算術標準[22]的半精度浮點運算指令,以操作16 位浮點數據.它依賴于F 擴展,需要與F 擴展共同使用.

(20) 半精度浮點最小集擴展(Zfhmin 擴展):是Zfh 擴展的一個子集,僅包含了數據轉移轉化相關的指令,主要用于支持半精度數據的存儲、以及執行更高精度的運算.與Zfh 擴展一樣,它也依賴于F 擴展,需要與F 擴展共同使用.

(21) 整數寄存器單精度浮點擴展(Zfinx 擴展):用于支持在整數寄存器中進行單精度浮點運算.指令功能與F 擴展相似,只是操作數來自于整數寄存器而非浮點寄存器,而且不含FLW、FSW、FMV 等轉移指令.

(22) 整數寄存器雙精度浮點擴展(Zdinx 擴展):用于支持在整數寄存器中進行雙精度浮點運算.與D 擴展類似,只是操作數來自于整數寄存器而非浮點寄存器.它依賴于Zfinx 擴展,需要與Zfinx 擴展共同使用.

(23) 整數寄存器半精度浮點擴展(Zhinx 擴展):用于支持在整數寄存器中進行半精度浮點運算.與Zfh 擴展類似,只是操作數來自于整數寄存器而非浮點寄存器.它依賴于Zfinx 擴展,需要與Zfinx 擴展共同使用.

(24) 整數寄存器半精度浮點最小集擴展(Zhinxmin 擴展):是Zhinx 擴展的一個子集,與Zfhmin 擴展的功能及定位類似.與Zhinx 擴展一樣,它也依賴于Zfinx 擴展,需要與Zfinx 擴展共同使用.

此外,RISC-V 系統設計者還可以根據實際需要,制定其他自定義擴展指令集,并將其加入指令集架構中.

2.3 RISC-V指令集的狀態

RISC-V 指令集需要經過RISC-V 國際基金會下屬的技術工作組審批,成為被批準的穩定版本,才能作為一種統一的規范和標準,供軟件開發人員和硬件供應商們使用.尚未被批準的指令集可能處于“草案”或“凍結”狀態:草案狀態的指令集隨時有改動的可能,是指令集研究中最活躍的部分;凍結狀態的指令集雖然還未被批準,但在批準之前預計也不應有太顯著的改動[11].表4 總結了當前RISC-V 各指令集的審批狀態.

根據表4 可知,當前共有2 個基礎指令集(RV32E,RV128I)和10 個擴展指令集(Counters,L,B,J,T,P,V,Zam,Zfh,Zfhmin)仍處于草案狀態,另有5 個擴展指令集(Zfinx,Zdinx,Zhinx,Zhinxmin,Ztso)處于凍結狀態,它們需要在今后的實踐中繼續完善.其余12 個指令集均已被批準,可直接使用.

Table 4 The current approval status of each RISC-V instruction set 表4 各RISC-V 指令集的當前審批狀態

2.4 RISC-V權限模式

RISC-V 指令集架構必須工作在一種確定的權限模式下.根據RISC-V 權限規范[12],目前共有以下4 種權限模式:機器模式(Machine,M 模式)、用戶模式(User,U 模式)、管理模式(Supervisor,S 模式)、監視模式(Hypervisor,H 模式).其中,H 模式暫時處于草案狀態,因此通常設計時僅考慮前3 種特權模式.

RISC-V 通過CSR 來控制當前的權限模式.通過設置CSR 中特定2 位的值,可以切換到不同的模式.具體取值見表5.

Table 5 RISC-V privilege mode settings 表5 RISC-V 特權級模式設置

2.4.1 M 模式

機器模式是RISC-V 指令集架構中最高級別的權限模式,具有執行任何機器操作的權限,也是在系統設計中必須被實現的一個工作模式.相比之下,U/S/H 等其他權限模式都是可選的,不同的系統可以根據運行環境和實際需要,決定是否支持實現某一級別的權限模式.

2.4.2 U 模式

用戶模式是RISC-V 特權系統中最低級別的權限模式,又被稱作“非特權模式”.它通常用于執行來自用戶等外部環境的不可信操作,通過對其操作范圍的限制來保護系統內的各種資源不受侵害.

2.4.3 S 模式

管理模式具有比用戶級更高的操作權限,可以用于操作一臺機器中的敏感資源.RISC-V 管理模式需要與機器模式和用戶模式共同實現,因此,不能出現系統中只存在S 模式而不存在U 模式的情況.

2.4.4 H 模式

監視模式可用于管理跨機器的資源,或者將機器整體作為組件承擔更高級別的任務.如,H 模式可以協助實現一臺機器系統的虛擬化操作.

RISC-V 權限規范[12]在圖5 中直觀地說明了各權限模式的執行范圍.其中,Application 表示用戶級應用,ABI 表示應用程序二進制接口,AEE 表示應用程序執行環境;類似地,XBI 表示應用在X 模式下的二進制接口(binary interface),XEE 表示應用在X 模式下的執行環境(execution environment).

Fig.5 Execution range of different privilege modes in RISC-V[12]圖5 RISC-V 中各權限模式的執行范圍[12]

2.5 小 結

RISC-V 指令集架構正處于發展的活躍期,針對不同的應用環境提出了多種不同的指令集.RISC-V 指令集有基礎指令集與擴展指令集之分,一個RISC-V 系統需要至少完整實現一個基礎指令集,并在一種權限模式中進行工作.對于指令集本身的研究是推動RISC-V 發展的核心問題,所有指令集都需要經過批準才能成為統一而穩定的標準.目前尚有17 個指令集未被批準,其中12 個處于草案狀態,5 個處于凍結狀態.

另外,在RISC-V 指令集發展過程中,還出現了一些其他的研究和嘗試.如,2020 年,Multanen 等人[24]以RISC-V 指令集架構為例,提出了一種基于細粒度可編程字典的指令壓縮方案,通過對編譯時區域的控制流分析,可在運行時有選擇地更新字典內容,最小化更新開銷,同時最大化利用字典空間.這些以指令集為目標的研究對RISC-V 指令集的完善也起到了一定的促進作用.

3 RISC-V 硬件平臺

RISC-V 依托的硬件平臺可以含有如下組件.

(1) 帶有其他非兼容RISC-V 核心(如,IP Core)的一個或多個兼容RISC-V 的處理核心.

(2) 固定功能加速器——這里加速器是指一種不可編程的固定功能單元,或者專用于特定任務的核心.

(3) 各種物理內存結構.

(4) I/O 設備.

(5) 組件通信與交互結構.

從系統的角度看,這些硬件平臺組件可以有多種組織形式,從單核心的微控制器到包含數千個節點的集群(每個節點都是一個共享內存的多核心服務器);甚至可以在小型片上系統(system-on-a-chip,簡稱SoC)中組織成多層多處理器結構,來協助模塊化開發或者提供子系統間的安全隔離.

RISC-V 處理器是RISC-V 硬件平臺的主要研究對象,它可以提供相對全面的組件功能和真實的RISC-V 執行環境.此外,RISC-V 模擬器能夠在軟件平臺上模擬硬件執行環境,因此雖然自身屬于上層RISC-V 體系,但在研究中也應被視為RISC-V 硬件平臺的范圍.本節將對RISC-V 處理器和模擬器方面的主要研究成果進行介紹,并總結其特征和適用性.

3.1 對RISC-V處理器的研究

處理器的設計需要考慮如下問題.

(1) 所支持的指令集.這代表了該處理器能夠完成的功能范圍,并包含了對于指令執行通路的需求.

(2) 組成指令執行通路的組件.包括算術邏輯單元(arithmetic and logic unit,簡稱 ALU)、程序計數器(program counter,簡稱PC)、寄存器組、緩存和存儲單元等.

(3) 指令的處理方式.包括控制信號、時鐘周期、指令流水線等,以及由此衍生出的任務調度、中斷/陷入/異常問題的處理、數據同步等問題.

(4) 對于多核心處理器,還應考慮核心結構(同構或異構)、核間通信等方面的設計.

根據應用場景的不同,RISC-V 處理器可以劃分為通用處理器、嵌入式處理器、教學研究用處理器.通用處理器不針對特定應用場景,因此將支持最全的RISC-V 指令集和最多的功能,如SiFive 公司在2016 年推出的64位單發射五級流水線順序處理器Rocket[25].嵌入式處理器特別考慮了資源受限的嵌入式環境,往往需要支持E擴展或C 擴展以優化尺寸,權衡面積和性能需求,如Zaruba 等人[26]在2019 年實現的有序單發射64 位微核心Ariane,支持RV64GC 指令集.教學研究用處理器通常采用最精簡的設計,只包含最基本的、必要的功能,以清晰地表現處理器的工作流程,如Lowe-Power 等人[27]在2019 年設計的單周期五級流水線順序處理器DINO CPU以及計算技術研究所包云崗團隊在2020 年公布的單發射九級流水線順序處理器NutShell[28].

經RISC-V 社區統計[29],目前公開發布并已經提交到社區的RISC-V 處理器共計107 種.根據這些處理器支持指令集的情況以及功能特性,本文按上述分類方法依次總結了其中較有代表性的一些處理器,并給出了相應的評價.具體內容見表6~表8.

從表6 中可以得知,Rocket、freedom、BOOM 等處理器支持的指令集更加全面,便于對接各類系統,適用性最為廣泛;A70X 自帶工具集,開發更方便;SCR5、RiscyOO、XuanTie910 等在性能方面更有優勢;DarkRISCV、NEORV32、AX45、NEOL-V 等更專注于特定結構,可以相應地滿足各自特殊的設計需求.

嵌入式處理器的設計關鍵在于對有限資源的利用能力,或者對于資源受限環境的適應性.從表7 可以看出,僅含M 模式的SCR1 和SweRV EH2 可提供最基本的處理能力,相對適應性最強;Hummingbirdv2 E203、SHAKTI E-CLASS、Ibex 可適用于常規嵌入式環境;PicoRV32、XuanTie E906、CVA6 存在提供更多能力的可能,可以承擔有更高能力要求的環境中的數據處理任務.處理器 開發者 位數 指令集 設計語言 許可證 描述

Table 6 Twelve representative general-purpose RISC-V processors 表6 12 種典型的通用RISC-V 處理器

Table 7 Eight representative embedded RISC-V processors 表7 8 種典型的嵌入式RISC-V 處理器

Table 8 Seven representative RISC-V processors for teaching and research表8 7 種典型的教學研究用RISC-V 處理器

表8 中的7 種處理器均在其設計目標中提及了教學背景或學術研究目的,分別針對各自不同的學術需求而設計.但像Tinyriscv、Kronos 等處理器經過通用化后也可以具備常規的通用處理器的處理能力.這其中,較為值得一提的是中國科學院計算所包云崗團隊研發的“香山”處理器核.“香山”立足于中國科學院大學“一生一芯”計劃,致力于建立一個既能被工業界廣泛應用、又能支持學術界試驗創新想法的開源RISC-V 核主線[52],對于開源RISC-V 處理器的發展具有里程碑式的意義.截至目前,“香山”已經發展出了兩代微架構:第一代“雁棲湖”架構已于2021 年7 月流片,是一個11 級流水、6 發射、4 個訪存部件的亂序處理器核,基于28nm 工藝,頻率1.3GHz,性能達到ARM Cortex-A76 水平;第二代“南湖”架構自2021 年3 月開始設計,基于14nm 工藝,頻率2GHz,在前一代的基礎上加入了對位操作指令集擴展的支持,采用指令預測與取指解耦的前端架構和更優化的后端設計,帶有新L2 緩存和雙通道DDR,預計將在2021 年底完成.

盡管如此,除嵌入式RISC-V 處理器對資源管理的要求較為嚴格外,大部分處理器都可以同時勝任通用目的、教學、研究等多種場景,僅僅是在功能、性能、復雜度等不同方面有所側重,導致在不同場景中的表現有所差異;許多RISC-V 處理器還提供了配置機制,可以根據用戶的設定切換為嵌入式或其他工作模式(如Rocket、Ibex、CVA6 等),或者選用不同的指令集(如PicoRV32 等),通過有針對性的優化提升特定環境下的處理能力.

關于定制處理器的具體過程,將作為RISC-V 系統實現的一個環節,在第4.1.1 節進行詳細論述.

3.2 對RISC-V模擬器的研究

模擬器是在軟件層面對底層硬件平臺或其他軟件環境進行模擬的工具.它允許開發人員在非目標硬件設備上獲得與目標硬件設備相同或相似的體驗,簡化研發流程,并有助于提前發現開發中的問題.例如,在RISC-V平臺中使用QEMU 模擬器運行Linux 操作系統就是一種很常見的做法.

根據RISC-V 社區的統計[53],目前公開發布并已經提交到社區的RISC-V 模擬器共有24 種,服務于各類RISC-V 研發項目之中.它們的各自特性見表9.

這些模擬器中,Spike 和QEMU 是RISC-V 國際基金會推薦使用的:它們支持幾乎所有的RISC-V 指令集,功能齊全,適用范圍廣,可模擬通用和嵌入式等多種處理器環境.基于這兩種模擬器的研究成果也很豐富,如Li等人[54]在QEMU 模擬器上進行了安全機制方面的研究,并定量分析了該成果對于QEMU 模擬器的影響.此外,Ripes 和WebRISC-V 等模擬器的可視化程度較高,可以直觀了解硬件平臺的運行情況,入門較容易.Jupiter、Vulcan、EmulsiV 等以教學為目的的模擬器,內容簡化,對初學者相對友好,易于以此為基礎開展進一步的研究.

Table 9 Twenty-four RISC-V simulators 表9 24 種RISC-V 模擬器

4 RISC-V 系統設計

硬件平臺是實現RISC-V 系統的基礎和依托,而如何發揮出RISC-V 硬件平臺的優勢,使其能夠正確而高效地完成各項任務,則是RISC-V 系統的設計目標.本節將從系統功能實現、系統性能提升、系統安全策略設計3個方面,對RISC-V 系統的設計過程及其研究進展進行歸納分析.

4.1 RISC-V系統功能實現

根據所含處理器核心的數目和組織形式的不同,RISC-V 系統可以分為單處理器系統、多處理器系統、處理器集群系統3 類.單處理器系統是最基礎的系統形式,只包含一個主處理器,全權管理存儲、運算、I/O 等系統資源,遵循馮·諾依曼結構[79]、哈佛結構[80]或者改進型哈佛結構[81]等設計架構之一,主要應用于早期PC 平臺,以及一些專用設備中.多處理器系統最早應用于高性能服務器中:IBM 在 2001 年發布了雙核處理器POWER4[82],并用其實現了最初的多核服務器系統.多處理器系統通過增加系統中處理器核心的數目來提升數據處理能力,目前已普遍應用于PC、移動設備、分布式網絡、服務器等環境.處理器集群系統是多處理器系統的擴大化和進一步發展,它由多個計算處理節點組成,而每個節點都可以是一種單處理器或多處理器系統.本節討論了這3 類系統的設計與實現.

4.1.1 單處理器系統

單處理器的設計通常要經過如下環節[83].

(1) 指令集與微架構的設計與實現.

(2) 體系研究與性能建模.

(3) 高層次綜合(high level synthesis,簡稱HLS)或寄存器傳輸級(register transfer level,簡稱RTL)實現.

(4) RTL 驗證.

(5) 關鍵速度相關部件(緩存、寄存器、算數邏輯單元)電路設計.

(6) 邏輯綜合.

(7) 時序分析.

(8) 物理設計,包括布局、布線、版圖設計.

(9) 檢查RTL、邏輯門層、晶體管層及物理層表示相符.

(10) 檢查信號完整性、芯片可制造性.

在進行操作系統設計時,可以使用系統程序設計語言(system programming language,簡稱SPL)對系統功能模塊進行描述和開發.SPL 包括專用SPL 和通用SPL 兩類,前者針對特定平臺,如面向MCP 操作系統的ESPOL語言[84];后者提供跨平臺的特性,如C/C++[85,86]、Rust 語言[87].2019 年,Lin 等人[88]描述了一種在RISC-V 架構中使用Rust 流和框架的方法,該方法基于LLVM 編譯器基礎設施,適用于帶有SIMD 向量擴展的RISC-V 架構,降低了系統設計的學習成本.

在指令集與處理器架構設計層面,需要根據實際功能需求,合理安排功能組件與相關資源.在這一環節,借助已有的處理器設計框架通常能起到事半功倍的作用.例如,2018 年,Zhang 等人[89]提出了組合模塊化設計(composable modular design,簡稱CMD)框架,用于無序處理器的設計;2019 年,Liu 等人[90]設計了行為級綜合框架ASSIST,可以根據對指令集的功能描述,協助生成一系列RISC-V 處理器,滿足不同微架構設計選擇的需要; Tamimi 等人[91]則提出了一種FPGA 軟核處理器的可重構架構,用于實現基于SRAM 的FPGA 軟核處理器.此外,當具體到特定硬件組件時:Huang 等人[92]為RISC-V 處理器的設計提供了一套正式規范和高級抽象ILA,側重于加速器功能的設計;Balkind 等人[93]在2020 年提出了支持RISC-V ISA 的開源硬件框架BYOC,提供了一個可擴展的緩存一致性系統.

硬件描述語言(hardware description language,簡稱HDL)是用于描述電子元件或數字邏輯電路的結構、行為、數據流向等信息的設計語言.處理器架構的設計方案經HDL 描述后,形成對數字系統的分層模塊表示,然后將進入電子設計自動化(electronic design automation,簡稱EDA)工具逐層仿真驗證、自動綜合工具將模塊組合轉換為門級電路網表的過程,最后便可使用專用集成電路(application specific integrated circuit,簡稱ASIC)或現場可編程門陣列(FPGA)的自動布線工具,將網表轉換為具體的電路布線結構,交至硬件實現.根據第3.1 節對各種處理器的統計,RISC-V 系統多采用Chisel、Verilog、SystemVerilog、SpinalHDL[94]等作為其硬件描述語言.2018年,Taylor 還為SystemVerilog 設計了一個可用于系統合成的標準模板庫BaseJump[95].在16nm TSMC Celerity SoC、511 核 RISC-V 處理器和385M 晶體管條件下的實驗結果表明,該設計能夠將80%的模塊直接從BaseJump STL 實例化,從而有效減少數字電路設計所需的時間,提升工作效率.SpinalHDL 是一種基于Scala 的硬件描述語言,它兼容EDA 工具、學習成本低、設計時不引入額外的面積或性能開銷,在實踐中被用于基于RISC-V 的處理器開發.例如,VexRiscv 處理器[32]便是由SpinalHDL 開發而成.

由于單處理器系統與多處理器系統、處理器集群系統存在結構和功能上的發展聯系,關于單處理器系統的設計方案和研究成果同樣可以作為原型,遷移到多處理器系統和處理器集群系統之中,作為后者的研究基礎和實踐參考.

4.1.2 多處理器系統

多處理器系統的設計,在單處理器系統的基礎之上,更需要關注處理器核心增加帶來的核間管理與通信問題,關注數據的并行或并發處理能力.具體來說,多處理器系統中可能存在如下挑戰[96].

(1) 存儲一致性與緩存共享問題.

(2) RTL 電路大幅增長帶來的復雜性問題.

(3) 組件依賴性問題.

(4) 通信延遲問題.

針對上述挑戰,研究人員作出了許多有益嘗試,提出了相應的解決方案.

例如,對于存儲一致性問題與RTL 電路問題,2017 年,Manerkar 等人[97]介紹了一種用于縮小微架構/RTL 存儲一致性模型(memory consistency model,簡稱MCM)驗證差距的方法和工具RTLCheck.RTLCheck 給定了一組關于MCM 行為的微架構公理、一個用于彌補RTL 設計與用戶之間差距的的映射,并自動生成SystemVerilog斷言,來驗證其是否滿足指定測試程序的微架構規范.作者團隊在RISC-V V-scale 處理器的多核版本上評估了RTLCheck,驗證了其有效性.

對于組件依賴性問題,2020 年Kurth 等人[98]提出了一個模塊化、高效、開源的原子單元(atomic unit,簡稱ATUN)架構,它可以在不同的內存結構層次中靈活實施,使任何級別的內存層次結構都可以實現可擴展的AMO.他們在一個具有32 核RISC-V 處理器的FPGA 原型上對ATUN 進行了演示,證明了該架構的有效性.

Pulte 等人[99]則在2019 年提供了可用于RISC-V 的更抽象的操作模型Promising-ARM/RISC-V 及其交互式探索工具,以徹底檢查多種并發行為.

關于以通信延遲為代表的系統性能問題,將在第4.2 節展開討論.

4.1.3 處理器集群系統

處理器集群系統由于需要對多個節點統籌管理,因此在設計時往往需要考慮多方面因素,包括節點的高性能、容錯能力、可擴展性、穩定性、節點間耦合程度等[100].例如,2021 年,Glaser 等人[101]描述了一個輕量級的、硬件加速的同步和通信單元(synchronization and communication unit,簡稱SCU)的設計方案,并將其集成到了一個8 核心的RISC-V 處理器集群之中,使其性能平均提升了23%、能效平均提升了39%.

其中,集群各節點之間的耦合程度是處理器集群系統設計中的一個重點問題,它將影響到節點的功能劃分、節點間通信頻率、單個作業規模等多個設計問題的決策.如Shi 等人[102]在2019 年提出了一種專用架構E-LSTM,將嵌入式RISC-V CPU 與LSTM 協處理器進行緊耦合,來適應芯片面積和數據訪問帶寬有限的應用環境,最終對處理吞吐量實現了2.2 倍的提升.

4.1.4 測試與驗證

由于涉及到硬件成本問題,系統的設計方案需要經過測試和驗證,確認其功能是否正確完整、性能是否達標、是否具備足夠的安全性和穩定性后,才能大規模投入生產.系統的測試是指,在目標實驗環境中對系統的各項指標數據進行提取,探索其可達程度范圍的過程;系統的驗證則是在給定一個預期表現后,判斷系統的表現是否與之相符的過程.二者都是對系統進行評估的有效手段.

在系統設計的任何一個環節都需要有與之對應的測試或驗證方法來保障其正確性.比如,在內存問題上,2019 年,Armstrong 等人[103]為包括RISC-V 在內的3 種主流架構的大部分順序行為提供了嚴格的語義模型,并使用ISA 語義的自定義語言Sail 實現了這些模型.他們還將RISC-V 模型集成到了RMEM 工具中,可使用戶模式下的內存并發探索更加容易進行,為軟件驗證建立了穩固的基礎.

在處理器架構層面,2019 年,Deng 等人[104],提出了一個用于安全處理器架構的設計時安全驗證框架SecChisel.該框架以Chisel 語言和工具為基礎,并在設計時使用信息流分析來驗證架構的安全性.在用AES 和SHA 模塊擴展的RISC-V Rocket 芯片上對該框架進行了評估.Nelson 等人[105]也在2019 年提出了一種用于系統軟件開發自動驗證器的框架Serval,并使用Serval 為包括RISC-V 在內的4 種指令集構建了自動驗證器.

在集群網絡層面,2018 年Khamis 等人[106]提出了一種片上網絡(networks-on-chips,簡稱NoC)硬件仿真和測試臺加速的協同建??蚣?用于對各種基于網絡方案的NoC 進行驗證和評估.其中,通信量通過開源RISC-V 指令集架構注入或自行生成,來作為處理塊(processing tile).

在系統安全策略方面,2019 年Dessouky 等人[107]構建了一個基于RISC-V SoC 的、可被真實世界軟件利用的RTL 缺陷測試平臺,并基于所提出的測試平臺,分析了一些安全驗證方法的有效性,確認了一種現有方法無法檢測到的特定類型漏洞,稱為 HardFails.隨后在 2020 年,Nelson 的團隊又提出了將形式化方法應用于BPF(Berkeley packet filter)虛擬機的即時編譯器JIT(just in time compiler)方法[108],證明可以在一個大型的未驗證系統中構建一個經驗證的組件,并基于32 位RISC-V 開發了一個用于編寫JIT 并證明其正確性的框架Jitterbug.

4.2 RISC-V系統性能優化

系統優化的主要目標在于提升系統的運行效率,或者減少對資源和能源的消耗.系統運行的各個環節都可能涉及到對性能的評價,而其中最主要的優化需求集中在處理器、內存、通信、能耗4 個方面.本節即圍繞這4個方面,對RISC-V 系統性能優化的思路和有關成果進行詳述.

4.2.1 處理器利用率提升

處理器中的性能優化主要體現在其利用率的提升.處理器利用率反映了處理器有效工作時間在總運行時間中的占比,是一項描述處理器繁忙程度的指標.減少處理器空閑等待的時間,提升處理器利用率,將推動系統整體的計算能力或數據處理能力的提升,使系統能夠在更短時間內完成既定工作,或者在相同時間內完成更多工作.

“馮·諾依曼瓶頸”是影響CPU 利用率的一類典型問題.在馮·諾依曼結構[79]的計算機系統中,指令與數據被不加區分地存放在內存,使得取指令和取數據不能同時進行,否則將引起訪存混亂.CPU 在執行運算前后,都需要額外的時間等待數據完成存取,而不能一直處于工作狀態.因此,馮·諾依曼結構中的CPU 存在一個相對較低的利用率上限,無論硬件制造工藝如何提升,都無法再獲得更高的CPU 利用率.

相應地,在 2017 年,包云崗等人[109]提出一種標簽化馮·諾依曼體系結構 LvNA(labeled von neumann architecture),在經典馮·諾依曼結構上增加了一套基于標簽機制的可編程接口,允許向硬件傳遞更多軟件信息,使硬件可以根據軟件需求動態調整管理策略.2019 年,該團隊主導的“標簽化 RISC-V”開發項目[110],基于RISC-V Rocket Chip 實現了LvNA,顯示了RISC-V 在促進敏捷開發、提升編碼效率方面的優勢.在2021 年,Schuiki 等人[111]提出了一種輕量級的RISC-V 擴展“流語義寄存器(stream semantic registers,簡稱SSR)”,允許在任何指令中編碼加載和存儲操作,而不再需要依賴顯式的加載與存儲指令,從而給出了一種解決單發射處理器中存在“馮·諾依曼瓶頸”、影響CPU 利用率問題的方案.實驗結果顯示,采用SSR 擴展的處理器比起未采用的相同處理器,順序代碼單核心運行速度提升3 倍,即,集群中實現相同的性能可減少3 倍的核心數目;多核心集群的能效提高2 倍,指令獲取的數量減少3.5 倍,指令緩存功耗減少5.6 倍.

4.2.2 內存優化

內存的設計直接制約著系統整體的組織形式和工作方式,在數據存儲、通信、同步、處理效率等多方面都對系統有關鍵性的影響.因此,內存優化問題始終是系統性能研究的一大重點.

例如,多核處理器中,隨著芯片上核心數量的增加,會出現“緩存行乒乓”問題,即,當多個CPU 共享同一緩存行中的變量時,不同CPU 對該變量的頻繁讀寫會導致其他CPU 的緩存行頻繁失效.共享內存中,硬件緩存一致性范式的線程同步算法,其性能擴展問題會受到緩存行乒乓的阻礙.2019 年,Dogan 等人[112]為了解決多核處理器的緩存行乒乓問題,提出了一種針對數據的硬件內移動計算(moving computation,簡稱MC)模型,該模型將共享數據固定在專用核上,以實現數據局部性優化.研究人員還在RISC-V 上建立了多核仿真環境,評估了MC 模型在最多1024 核尺度下的性能擴展優勢.評估結果顯示,與自旋模型、原子模型等現有模型相比,對每個數據點標準化的完成時間平均分別提升了60%、27%.

擴展基全局地址空間(extended base global address space,簡稱xBGAS)是2018 年Leidel 等人[113]為了解決可擴展的高性能計算架構在操作離開單個設備域時常常遭遇不必要的延遲的問題,所提出的一種RISC-V 指令集微架構擴展.該擴展可以為常見的高性能計算操作提供緊耦合的支持.由于其提供了從基本指令訪問全局共享內存地址空間的可能性,從而開創了一條系統優化的新思路,出現了更多以xBGAS 為基礎的研究.

例如,2019 年Williams 等人在xBGAS 的基礎上,提出了一種構建集體通信庫的RISC-V 微架構擴展方 案[114],給出了它的初始API 設計和實現,以及底層算法.這項研究的目的是在分布式地址空間模型中,將更直觀的界面與更高的性能結合起來,以解決軟件開發人員很難適應并行編程方法,尤其是分布式地址空間中的并行編程問題.

2020 年Wang 等人提出了一種遠程原子擴展(remote atomic extension,簡稱RAE)的設計[115],為基于RISC-V ISA 架構的遠程原子操作提供了內在的 ISA 級指令和架構支持,以改善高性能計算(high performance computing,簡稱HPC)系統的性能.這個設計方案同樣基于xBGAS 擴展,具體內容見第5.1 節.

4.2.3 通信延遲緩解

通信是連接系統各組件、各成分之間的信息交換過程,通信延遲將推遲目標獲得所需信息的時間,從而增大其空閑等待時間,造成整體用時延長、目標利用率降低、或者能量空耗.緩解通信延遲,除了期待相關硬件制作工藝的改進外,提升系統的并行能力、掩蓋通信延遲的不利影響也是一種可行的做法.

這方面,Morais 等人[116]在2019 年提出了一種將任務調度硬件加速器與通用CPU 緊密集成的體系結構,以減少通信延遲及運行開銷,從而提高與任務調度并行的應用程序的性能.他們開發了硬件加速的輕量級任務調度運行時環境Phentos,允許任務調度軟件通過自定義指令與硬件任務調度器和CPU 直接進行交互,以最大限度減少硬件任務調度器和CPU 之間的通信開銷.Morias 等人認為,任務并行系統的性能會受到自動依賴推理和準備運行任務調度相關開銷的限制,而用于提高運行時性能的硬件加速器往往具有較高的CPU 通信開銷,因此他們希望通過這樣的設計,來解決CPU 通信的高開銷問題.

4.2.4 能耗優化

能耗優化依賴于對系統負載結構的整體設計,現有研究主要集中在功率控制、電源能效優化等方面.

關于功率控制,2019 年Zhou 等人[117]介紹了一種基于學習的架構PRIMAL,它訓練了帶有設計驗證平臺的機器學習模型.訓練后的模型可以用于生成不同工作負載下的相同塊的詳細功率剖面.該模型還評估了幾種已有機器學習模型的性能,包括:嶺回歸、梯度樹提升、多層感知器、卷積神經網絡.實驗中,基于卷積神經網絡的方法對一個RISC-V 處理器核實現了35 倍的加速和5.2%的逐周期功率估計誤差.

2020 年Bambini 等人基于RISC-V 核心的并行超低功耗微控制,提出了一種開源功率控制器系統(power controller system,簡稱PCS)設計方案[118];同時,在一個開源的實時操作系統中,實現了一種可配置的熱功率控制算法.通過對熱功率進行控制,在能耗和系統穩定性兩方面都取得了較好的收益.

在電源的能源效率提升方面,Wright 等人于2020 年設計了一種雙核RISC-V 處理器[119],實現了一個完全集成的、片上的、高密度的、由開關電容DC-DC 轉換器供電的細粒度電壓域系統.他們希望用這種方式,通過架構和電路的精心設計,抵消Dennard 定律終結之后日益顯著的功耗問題,提高能源效率.他們的實驗結果表明,在系統空閑期間,動態開關功率可以降低接近62%的理想水平,而對總體計算吞吐量幾乎沒有影響.

4.3 RISC-V系統安全策略設計

系統在工作過程中隨時會面臨安全威脅,有時是操作者自身的操作失誤,有時則是純粹的惡意攻擊和入侵.這些威脅可能導致系統異常和數據破壞,進而造成更大的損失.因此,系統需要采用一定的安全策略來應對這些威脅,維護運行的可靠性和穩定性.本文根據安全威脅發生的主要渠道,將系統可能遭受的安全威脅歸納為如下3 個方面.

(1) 硬件微架構攻擊.

這類攻擊通過侵入系統所依賴的硬件微架構并將攻擊代碼注入底層硬件,造成系統功能的偏差或失效.由于微處理器等各種集成電路的廣泛應用,即使僅針對一種型號發起攻擊,也可產生相當規模的破壞力.

(2) 內存攻擊.

這類攻擊以干擾或破壞內存功能為主要手段.內存是存儲和提供處理器運算所需信息和數據的關鍵部件,針對內存進行攻擊將嚴重威脅系統功能的正常運行.不可信代碼、軟件漏洞、系統弱點都有可能被利用,成為內存攻擊的發起點.

在眾多的內存攻擊中,程序控制流劫持攻擊是較為常見和重要的一種攻擊類型.這類攻擊通常會制造和利用內存損壞,然后將控制流重定向至攻擊者指定的內存位置,使程序脫離正常執行流程,按攻擊者的意圖執行.

(3) 側信道攻擊(side channel attack,簡稱SCA).

這類攻擊往往從外部發起,圍繞構成系統的硬件設備的物理特征或電氣特性實施,意圖通過測量、統計、物理觀察等手段推測和獲取系統敏感信息,造成信息泄露.獲得的信息更可作為其他攻擊的基礎,形成組合攻擊,進一步損害系統安全性.

針對上述安全威脅,學術界和工業界提出了許多安全策略.本文將相關方案要點梳理總結如下.

(1) 引入安全硬件,將軟件安全威脅轉移到硬件層面解決.

(2) 模糊易受攻擊的敏感信息,增大攻擊者搜索和獲取敏感信息的時間或技術成本.

(3) 保護信息流完整性,保障程序執行安全.

(4) 設置配套驗證機制,及時發現攻擊行為.

(5) 必要時采用冗余設計,增加系統容錯性,減少對特定設備的依賴.

以下是對各類有代表性的安全威脅及其應對措施的詳細介紹和分析.

4.3.1 硬件微架構攻擊的防御

(1) 威脅分析

硬件微架構是指令集體系結構在處理器中具體執行方法的體現,直接關系到指令系統實現系統功能的能力.由于硬件的生存周期相對較長,一般可達數年之久,通常需要經過多次的微代碼更新來解決安全或功能性問題,因此微架構與微代碼的設計在引入一定的靈活性的同時,也留給了惡意攻擊侵入的空間.例如,微碼木馬可以事先被注入到系統的供應鏈中,并在硬件更新時完成潛入;當滿足特定執行條件時,即可釋放和執行所載有的惡意微碼,對系統造成侵害.2021 年,Nils Albartus 等人[120]研究了嵌入式硬件環境下的微碼木馬,揭示了這一侵害方式的具體流程,并在一次攻擊實驗中成功獲取了特定于架構的AES 秘鑰.

(2) 解決方案

應對硬件微架構攻擊,可以從供應鏈安全和微架構安全兩方面著手.供應鏈安全可從源頭切斷惡意微碼的注入渠道,從而避免硬件微架構攻擊的發生;微架構安全需要在惡意微碼已經侵入時進行有效遏制,增加惡意攻擊成功實施的困難程度.通常,微碼木馬包括觸發器和有效負載兩部分,前者用于在特定條件下觸發木馬,后者包含具體的惡意攻擊代碼,并將在木馬被觸發時發動攻擊.因此,對微碼進行加密或對敏感區域進行隔離,以防止相關信息泄露達成觸發條件,是一種常見的做法.2020 年,Lee 等人[121]提出了一套可定制的可信執行環境(trusted execution environments,簡稱TEE)開放框架Keystone,通過構建可重用的TEE 核心原語,實現了對不受信任組件的可編程層的隔離.

4.3.2 程序劫持攻擊的防御

(1) 威脅分析

程序劫持攻擊是通過對程序的控制流進行干擾、誤導、破壞,使程序按攻擊者意圖執行的一種攻擊手段.制造并利用內存損壞,然后將控制流重定向至攻擊者指定的內存位置,是程序劫持攻擊中的典型做法[122].例如,緩沖區溢出攻擊[123]可以通過構造足夠長度的字符串,充滿并溢出缺乏邊界保護機制的緩沖區,將含有惡意代碼地址的數據送入保存返回地址的內存區域,覆蓋原有的程序返回地址.這樣,在當前程序塊返回時,便將自動執行惡意代碼.Cowan 等人在他們的工作[124]中描述了這個過程,如圖6(a)所示.

(2) 解決方案

控制流完整性(control-flow integrity,簡稱CFI)[125]是應對程序劫持攻擊的主要技術措施.它的核心思想是為程序構造對應的控制流圖(control flow graph,簡稱CFG),并保證程序在執行過程中嚴格遵守該控制流圖,而不會跳轉到圖以外的其他地址范圍之中.關于如何保證程序的執行嚴格遵守控制流圖,研究人員提出了許多具體的方法.例如,在上文提到的緩沖區溢出攻擊場景[123]中,基于金絲雀字(canary)的攻擊檢測技術便是一種可行的設計.金絲雀字是置于返回地址邊緣的一段特殊字符,當溢出發生時,金絲雀字將首先被改變.因此,只需核對金絲雀字是否正確,即可判斷當前是否已遭到緩沖區溢出攻擊.圖6(b)描述了利用金絲雀字技術檢測緩沖區溢出攻擊的主要過程.

為了防止攻擊者事先猜測到金絲雀字的正確內容,De 等人[126]提出了一種基于安全硬件指紋的隨機金絲雀字生成方法PUFCanary,并在RISC-V Rocket 芯片中實現了該方法.PUFCanary 隨機生成的金絲雀字無需保存在內存或寄存器中,減小了攻擊表面.在多緩沖區場景下,PUFCanary 能提供針對單一緩沖區的細粒度保護.此外,PUFCanary 還可以在編譯器的支持下,檢測源于緩沖區溢出的數據流攻擊.在Wilander 緩沖區溢出套件[127]中的測試結果表明,PUFCanary 能夠阻止所有8 個可移植到RISC-V 工具鏈中的棧溢出攻擊用例.

基于內存保護的設計也是對抗程序劫持攻擊的一種基本方法,具體可以包括邊界檢查、地址布局隨機化、返回地址驗證等內容.2020 年,Li 等人[54]為了提高消息認證碼(message authentication code,簡稱MAC)的安全機制性能,以較低開銷實現加密控制流完整性(cryptographic control flow integrity,簡稱CCFI)和ARM 指針認證(pointer authentication,簡稱PA),并提高其對于重用攻擊的防御能力,提出了一種堆棧布局,將之前的返回地址推送到當前的堆棧幀上,并在函數調用時,將當前返回地址存儲到硬件緩沖區中.設計了兩種基于錯位堆棧的驗證方法:延遲驗證和批驗證.延遲驗證直到從堆棧彈出的返回地址被返回時才進行驗證;批驗證一次驗證兩個返回地址.他們在RISC-V 架構上實現了這兩種驗證方法,并定量分析了它們對于QEMU 模擬處理器的影響.

基于安全硬件的軟硬件協作方案為實現控制流完整性、抵御程序劫持攻擊提供了另一種思路.例如,2018年Ferraiuolo 等人[128]提出了一種增強安全信息流(包括控制定時信道)的處理器HyperFlow.它使用一種類型安全的硬件描述語言實現,允許在運行時配置復雜的信息流策略,并在一個提供了完整RISC-V 指令集的處理器上對HyperFlow 架構進行了原型實現.2019 年Gallagher 等人[129]提出了一種安全硬件架構Morpheus,通過模糊攻擊者需要但普通程序不使用的信息,防止利用濫用程序和機器級語義之間的鴻溝進行的攻擊,如定位敏感指針、利用bug 覆蓋敏感數據、劫持受害者程序的執行等.他們通過一個基于RISC-V 指令集的處理器原型演示了 Morpheus,成功阻止了所設計的控制流攻擊.2020 年 Bresch 等人[130]提出了一種軟硬件系統設計框架TrustFlow-X,針對基于內存的攻擊提供了有效的細粒度控制流完整性保護.他們使用LLVM 編譯器工具鏈生成TrustFlow-X 的安全代碼,然后在擴展的RISC-V 處理器上執行這些安全代碼,達到了預期保護效果.

Fig.6 Process of buffer overflow attack (a) and detecting (b)圖6 緩沖區溢出攻擊(a)及利用金絲雀字技術檢測攻擊(b)的過程

4.3.3 其他內存攻擊的防御

(1) 威脅分析

基于內存的攻擊不僅可以作為程序劫持攻擊的基礎,還可能造成許多其他的威脅,比如面向數據編程(data-oriented programming,簡稱DOP)攻擊.這一類型的攻擊往往通過內存行為模擬操作,對數據流中的非控制數據進行攻擊.Hu 等人[131]總結了一些關于內存攻擊的具體行為類別,包括模擬算術操作、模擬賦值操作、模擬解引用(dereference)操作等.不同的內存攻擊行為需要根據其特征,有針對性地緩解和解決.

(2) 解決方案

針對基于內存的攻擊,可以有軟件和硬件兩種不同的應對方式.軟件方式如,2019 年Nyman 等人[132]提出的運行時作用域增強(run-time scope enforcement,簡稱RSE)的方法,通過增強編譯時內存安全性約束(如變量可見性規則),有效地減輕所有當前已知的DOP 攻擊.在此基礎上,給出了一種RISC-V 硬件輔助RSE 的概念實現Hardscope.硬件方式如,2017 年Menon 等人[133]提出了一個處理內存攻擊的統一硬件框架,并將之與RISC-V 微架構結合,形成了Shakti-T 原型系統.這一方案通過為系統提供額外的硬件支持,可以保護敏感應用(如電子商務交易等)的信息免受基于時間或空間的內存攻擊.

2020 年,De 等人[126]為他們所提出的硬件生成堆棧金絲雀字引擎PUFCanary,設計了一個專用的嵌入式RISC-V 安全協處理器流完整性擴展——FIXER.除緩沖區溢出攻擊外,FIXER 還可以幫助RISC-V 架構對抗代碼注入、代碼重用等類型的攻擊.

其他有代表性的研究成果還包括:Wong 等人[134]在2018 年將內存保護單元(memory protection unit,簡稱MPU)集成到RISC-V 可信SoC 中的設計,并以此實現了一個設計框架SMARTS,以實現對已知攻擊向量的輕量級但健壯的對抗.該框架可以為SoC 提供完整性和保密性,并允許根據需求進行靈活的部分加密.2020 年,Kokologiannakis 等人[135]提出了一種高效的無狀態模型檢查(Stateless model checking,簡稱SMC)算法——HMC 算法,用于在任意硬件內存模型下,以合理、完整和最優的方式驗證程序.

4.3.4 側信道攻擊的防御

(1) 威脅分析

側信道攻擊是指攻擊者從系統的物理實現出發,通過測量、統計、物理觀察等手段推測和獲取系統敏感信息的攻擊手段.側信道攻擊是密碼系統安全的主要威脅之一,因此長期受到業界關注.早在2011 年,Persial 等 人[136]便總結了可能的側信道攻擊種類,他們根據所依托介質的不同,將側信道攻擊劃分為基于時間、功率、電磁、錯誤注入、光學、流量、聲學、熱成像的八種具體的攻擊形式,并重點分析了基于功率的攻擊和基于錯誤注入的攻擊.在2017 年,Guo 等人[137]分析了針對密碼設備的側信道攻擊,討論了在面對不同加密算法(AES、DES、RSA、ECC)時的具體攻擊過程,并重點研究了應對差分能量分析(differential power analysis,簡稱DPA)的保護策略.Saxena 等人[138]在2018 年調研了基于緩存的側信道攻擊,總結了一些可以應用于云計算環境中的防御方法.Devi 等人[139]在2021 年對物聯網環境中的側信道攻擊進行了分析,將其劃分為簡單攻擊、差分攻擊、功率分析攻擊、故障攻擊、時間攻擊五類.

此外,側信道攻擊還可能與其他攻擊手段相結合,作為組合攻擊的一個環節發起其他攻擊.例如,2019 年,Van Bulck 等人[140]揭示了幾個在應用程序二進制接口(ABI)和應用程序編程接口(application programming interface,簡稱API)級別上的側信道漏洞,攻擊者可以通過這些漏洞發起對內存安全和編譯包的進一步攻擊.他們對TEE 的漏洞空間進行了分析,論證了最先進的緩解技術,如Intel 的edger8r 等,都無法完全消除這種攻擊面.2020 年,Spruyt 等人[141]也發現了現有的側信道攻擊可以直接應用于純錯誤注入(fault injection,簡稱FI)攻擊的設置,并提出了一種對故障概率軌跡執行相關功耗分析(correlation power analysis,簡稱CPA)的技術方案——故障相關性分析(fault correlation analysis,簡稱FCA).

Ahmadi 等人[142]在2020 年討論了針對RISC-V 處理器的側信道攻擊問題.他們認為,RISC-V 處理器作為一種開放式硬件,在功率、時間和溫度3 個指標上最易受到利用而泄露信息.其中,功率側信道攻擊和時間側信道攻擊是最主要的兩種可由軟件發起的攻擊方式.但是,對于如何應對這些威脅,文中并沒有給出太多的分析,僅列舉了一種已有的安全解決方案[143].

(2) 解決方案

經前文分析可知,側信道攻擊可能通過多種渠道發起,以基于功率、時間、電磁等為主.現有的解決方案,也都是適用于其中一種或幾種渠道的針對性防御方法.

例如,2019 年,De Mulder 等人[143]將側信道分析攻擊對策集成到RISC-V 中實現,發現這種做法可以防止first-order 功率或電磁攻擊,同時盡可能地降低實現成本.

同年,Deng 等人[144]針對從轉換檢測緩沖區(translation lookaside buffer,簡稱TLB)到基于時間的側信道攻擊,研究了一種自動生成測試TLB 漏洞的微安全基準方法,并提出了兩種安全TLB 的設計方案:靜態分區(static- partition,簡稱SP)TLB 和隨機填充(random-fill,簡稱RF)TLB.他們使用Rocket 開源IP 核實現的RISC-V 處理器架構評估了所提出的安全TLB.

2020 年,Sehatbakhsh 等人[145]提出了一種模擬電磁側信道信號的方法EMSim,可以使用器件架構模型對電磁側信道信號進行逐周期模擬,以定量分析側信道泄露,從而為設計對側信道攻擊具有高彈性的系統打下基礎.

4.3.5 安全策略總結

表10 總結了本節提及的各類RISC-V 系統中可用的安全策略.

5 RISC-V 應用場景分析

本節將列舉一些利用RISC-V 促進特定領域應用研究的案例,并對RISC-V 在其中所能發揮的作用以及應用要點進行簡要的分析.其中,第1 個應用[115]描述了一種對RISC-V 指令集自身的擴展場景;第2 個應用[19]介紹了利用RISC-V 實現特定領域功能的系統設計場景;第3 個應用[146]研究了一種發掘RISC-V 系統潛力、提升系統性能的方法;第4 個應用[147]圍繞系統安全主題,討論了一種利用RISC-V 實現安全批準的實施方案.

5.1 RAE:一種遠程原子擴展

5.1.1 場景描述

在圖形分析、機器學習、數據驅動的科學計算等新興的數據密集型應用的推動下,HPC 系統的結構逐漸復雜化,大量數據集被映射到離散的節點中,以實現分布式存儲和計算.這種數據分布將導致頻繁的跨節點數據事務.尤其是在全局原子操作中,跨節點的讀寫修改等操作包含了多個操作步驟和特定的原子性管理,導致了大量開銷.解決開銷問題需要一種有效的通信方法,并結合相應的軟件基礎設施來實現對離散組件的集成,減少跨設備的冗余軟件例程.為此,在2020 年,Wang 等人提出了一種RAE 的設計[115],為基于RISC-V ISA 架構的遠程原子操作提供了內在的ISA 級指令和架構支持,最終改善HPC 系統的性能.

RAE 首先引入了已有的xBGAS 擴展指令集以支持全局內存尋址功能.然后,設計了一系列原子指令,通過xBGAS 尋址來執行遠程原子操作.這些操作共有7 類:fetch-and-add、fetch-and-xor、fetch-and-or、fetch-and-and、fetch-and-max、fetch-and-min、compare-and-swap,每一類都包含一條遠程原子操作指令和一條對應的本地原子指令,均采用R 型指令格式.因此,RAE 擴展共包含了14 條R 型原子操作指令.圖7 以fetch-and-add 指令為例,描述了一次原子操作的過程.圖8 描述了RAE 所依托的xBGAS 原子設計架構.

Fig.7 Fetch-and-add atomic operation process[115]圖7 Fetch-and-add 原子操作過程[115]

Fig.8 Architecture of Atomic Design in xBGAS[115]圖8 xBGAS 中的原子設計架構[115]

在此基礎上,RAE 還引入了網絡接口控制器(network interface controller,簡稱NIC)等基礎設施來處理遠程請求,以及操作映射表(operation mapping table,簡稱OMT)將遠程請求解包并轉換為本地操作,以提供指令執行的效率.

5.1.2 場景分析

對于RISC-V 指令集自身的擴展研究需要考慮如下問題.

(1) 工作場景或功能目標

(2) 各指令的功能、格式信息

(3) 實現的可行性

在本例中,RAE 將工作場景約束在了高性能系統中的分布式數據跨節點操作環境,并以實現高效的遠程原子操作為自身的功能目標,從而確定了各指令應完成的功能.根據指令的功能,判斷其所含操作數的情況,選擇合適的指令格式進行設計.RAE 的14 條指令均帶有兩個操作數,并且需要支持xBGAS 全局尋址,因此選擇了R型格式.在指令的實現方面,RAE 設計了各指令的具體工作流程,并引入了NIC 等相應的基礎設施和OMT 等機制,給出了一套完整且效率理想的實現方案.

5.2 SALSA:一個用于序列比對的領域專用架構

5.2.1 場景描述

基因組數據正在個性化醫療和農業科技等領域發揮重要作用,而基因組序列比對是其數據分析中最重要的任務之一,目標是找到DNA 序列之間的相似性和樣式.完成該任務需要使用計算密集型算法處理大量數據.但現有的硬件設施均存在各自的劣勢,不適合直接用于序列比對:通用CPU 在處理大量數據時效率低下;GPU雖然提供優秀的性能和可編程性,但功耗較高;FPGA 具有良好的性能和功耗比,但編程難度較大.為了在性能、功耗、可編程性之間取得較好的平衡,Di Tucci 等人[19]提出了一種用于序列比對的領域專用架構(domain specific architecture,簡稱DSA)SALSA.

SALSA 在設計上主要由一個流水線組成,共分為4 個階段:取碼/解碼、調度、加載/存儲、計算,每個階段都與解決特定任務的硬件單元相關聯.

(1) 取碼/解碼階段:從主處理器獲取指令,并將其傳遞給調度器;

(2) 調度階段:可以決定將指令發送至加載/存儲階段,或直接發送至計算階段;

(3) 加載/存儲階段:直接連接內存控制器,執行單個或多個加載/存儲請求;

(4) 計算階段:與I/O 完全分離,完成具體的計算操作.

Fig.9 Top level architecture of SALSA[19]圖9 SALSA 頂層架構設計[19]

SALSA 的頂層架構設計如圖9 所示.其中,計算單元由一個PE 調度器(PE dispatcher)、一組PE 子調度器(PE subdispatcher)、一個緊耦合的PE 線性陣列、一組全局寄存器(global registers,可由所有處理單元以讀模式訪問)、一個FIFO 緩沖區,和一組與PE 采集器通信的PE 子采集器(PE subcollector)組成.系統可采用自定義的ALU 來加速計算的執行.具體地,SALSA 設計了3 個特定于應用的ALU 來執行序列比對,這些ALU 用于執行Smith- Waterman 算法、Needleman Wunsch 算法和Smith-Waterman 算法.

5.2.2 場景分析

如第4.1 節所述,RISC-V 系統的功能設計主要考慮的是工作流通路的構造問題,以及圍繞該問題所衍生出的指令集選取、內存設計、通信、負載平衡等.在本例中,SALSA 確定了其工作流為對DNA 序列數據的解碼和比對運算過程,并根據其特點選定了以流水線形式的構造方案,分四個階段依次完成了對指令的獲取、調度、內存處理、計算的過程.

為了使SALSA 具有可編程性和可擴展性,其指令建立在ROCC 接口[25]之上.ROCC 接口使用了RISC-V 規范中為非標準擴展預留的編碼空間,可以使用ROCC 指令格式來定義特定ALU 上的操作.用戶也可以利用SALSA 定義新的算法和操作指令,將其適用范圍擴展到更一般的領域中.

5.3 MAC:3D棧內存聚合單元

5.3.1 場景描述

在圖形分析、數據挖掘、機器學習、數據驅動的科學計算等新興的數據密集型應用場景中,對內存的訪問呈現出越來越不規則的模式,使得傳統的基于緩存的處理器體系結構效率低下.3D 棧存儲設備,如混合存儲立方體(hybrid memory cube,簡稱HMC)和高帶寬存儲器(high bandwidth memory,簡稱HBM)等,可以以較低的內存密度為代價,大幅增加帶寬,對于內存受限的應用有很大吸引力.但是傳統的內存接口與3D 棧存儲設備匹配性差,無法充分利用后者的帶寬優勢.為此,Wang 等人[146]提出了一種3D 棧內存聚合單元——記憶體存取整合器(memory access coalescer,簡稱MAC),以構造可擴展的多節點非統一的內存體系結構(non-uniform memory architecture,簡稱NUMA).在該結構中,每個節點都是一個獨立的處理器,并通過MAC 直接連接到3D 棧內存存儲設備,實現近內存訪問.MAC 聚合單元及NUMA 體系結構的設計架構如圖10 所示.

Fig.10 Architecture of MAC design[146]圖10 MAC 設計架構[146]

在這個設計中,MAC 共包含兩個組成部分:原始請求聚合器和請求構建器.原始請求聚合器負責根據請求類型和物理地址對原始請求進行分組,然后將落入同一行的原始請求合并,分派到請求構建器.請求構建器根據體系結構提供的可擴展內存操作量和延遲,確定聚合請求的數據包尺寸,并組裝生成具體的3D 棧內存請求,將其發送到3D 棧內存.

在本地節點接收到來自本地3D 棧內存的響應之后,會先將數據存儲到緩沖區中;響應路由器對緩沖器中的數據進行分析,根據每個請求的目標(TID、事務ID 等)將實際數據定向到其目的地.此時,若原始請求是遠程的,數據會經互連路由送入相應的遠程節點;否則,數據將直接發往本地節點的處理器核.

5.3.2 場景分析

對于RISC-V 系統性能的優化,可以從處理器、內存、通信、能耗等方面入手,本例即是針對內存結構的優化.而在具體的設計和實施過程中,RISC-V 構成了MAC 的工作基礎,體現了在架構設計、資源管理、工具鏈等方面的優勢.

MAC 基于RISC-V 核心及RV64IMAFDC 指令集架構實現,在處理器、內存、存儲設備之間構造了新的數據通路,而充分發揮了設備的帶寬優勢,提升了數據吞吐率和處理效率.

實驗驗證的環境也采用RISC-V 構建:首先利用RISC-V spike 模擬器實現了一個內存跟蹤器,可以捕獲多處理器系統生成的內存操作;然后在該模擬器中實現了處理器核心的SPM 部分,并擴展了RISC-V ISA 及相應的交叉編譯器,以實現對SPM 功能(預取、寫回等)的管理.實驗系統采用8 個RISC-V 核心,每個核心有1MB 的SPM 和8GB 的HMC 設備.

實驗結果表明,系統的合并效率(使用MAC 的合并請求數占未使用MAC 的原始請求數的百分比)平均可達到52.86%,即,MAC 合并了一半以上的原始請求.

5.4 Notary安全批準方案

5.4.1 場景描述

在一些安全敏感的操作場景(如金融、系統管理等)中會需要用戶在特定設備(如電腦、智能手機等)上進行批準.Anish Athalye 的團隊[147]研究了批準的過程,利用RISC-V 設計實現了一套軟硬件結合的安全批準體系Notary.Notary 旨在解決如下問題.

(1) 為批準過程提供強力安全保障.

(2) 在單一設備上支持多種批準,而不發生相互干擾和泄密.

Notary 假定遠程攻擊者可以完全控制用戶的計算機,并且可以創建惡意代理,誘騙用戶安裝和運行,而惡意代理能夠破壞其所在代理域的數字門抽象.但是遠程攻擊者無法與用戶進行物理上的交互,用戶也能夠正確使用Notary,只批準期望批準的操作.

基于上述威脅模型,Notary 在硬件層面被設計為一個帶有小型顯示屏和操作按鈕的專用安全設備,形狀類似于小型U 盤;在軟件層面,Notary 被劃分為3 個域:內核域、代理域、通信域,每個域都獨占一塊SoC,并通過UART 鏈路相互連接.圖11 顯示了Notary 的整體設計方案.

Fig.11 Overall design of Notary[147]圖11 Notary 整體設計[147]

5.4.2 場景分析

Notary 使用3 個獨立的SoC 構建構建其原型,并在FPGA 上實例化.其中,使用基于PicoRV32 CPU 的RISC-V SoC 實現了代理域的設計,利用了RISC-V 的特權機制對域進行管理.Notary 的代理域執行第三方提供的代理代碼,是抵御惡意代理的第1 道關口.它獨占顯示屏和操作按鈕的訪問權限,可以防止攻擊者偽造虛假的屏幕輸出,或者偽造虛假的按鈕輸入.

Notary 還需要實現多重代理之間的切換過程,為此采用了一種基于重置的交換技術:先重置SoC,清除所有內部狀態,再執行引導程序,令內核域從閃存中加載新的代理,并通過UART 線路更新其他域的數據.這個過程中,基于RISC-V 的工具簡化了重置的過程,正確清除了所有的SoC 內部狀態,并顯示出該技術應用到更復雜的SoC 的可能性.

6 未來發展方向

RISC-V 是一種很有前景的指令集架構,擁有十分廣闊的發展空間.本文認為,至少在以下一些方面,RISC-V能夠取得可以預見的進展.

6.1 硬件的新發展

隨著社會需求的不斷增長和相關技術的不斷進步,會不斷涌現出各種新類型硬件.如何適應新的工作環境,適配這些新的硬件,而繼續保證RISC-V 系統的功能完整性、性能優越性、安全穩定性,將成為隨之而來的問題.現有的一些 RISC-V 異構硬件解決方案將在解決這一問題中發揮重要的作用;而在硬件方面取得新突破后,RISC-V 架構自身是否也會隨之發生新的變化,同樣值得關注.

特別地,技術的進步和新硬件的出現也可能導致新的攻擊形式產生,使傳統的系統安全防御方法失去作用.例如,量子計算機的出現為密碼安全帶來了新的威脅,需要后量子安全方案才能加以抑制.繼續研究完善RISC-V 指令集及其系統的安全機制和防御手段,將是相當重要的工作方向.

6.2 與新技術結合

RISC-V 自身也可以與新技術結合,在功能、性能、安全等領域實現新的突破.例如,隨著神經科學和腦科學的不斷發展,通過腦機接口技術,可以實現生命體對機器的直接操控或影響;RISC-V 便可以與此技術結合,在生命醫療、自動化控制等領域發揮更大的作用.目前已有研究團隊在此方向上進行了嘗試,如Karageorgos 等人[148]設計的植入式腦機接口通用架構HALO,已在促進醫療和腦研究方面收獲了一定的經驗.

7 結束語

本文對近年來RISC-V 體系結構相關的研究進行了分析和總結.首先介紹了RISC-V 指令集的有關概念和發展現狀,總結了各基礎指令集、擴展指令集的審批狀態和RISC-V 的幾種權限模式.然后,對RISC-V 系統所依托的硬件平臺(處理器、模擬器等)進行了總結分析.接著,從功能實現、性能優化、安全策略這3 個方面討論了RISC-V 系統的設計問題,并通過一些具體的應用場景,展示了RISC-V 在促進特定領域應用研究方面所能發揮的作用.最后,我們展望了RISC-V 架構研究的未來研究和發展方向.根據本文的總結內容,RISC-V 作為一種新興的開放指令集架構,在計算機系統研究和產業發展的諸多領域都展現出了良好前景.期望通過我們的工作,能夠給今后的研究者提供有益的參考,不斷擴大RISC-V 的應用范圍和影響力,為相關技術的應用和發展做出更多貢獻.

致謝在此,我們向給予本文工作各項支持和寶貴建議的評審老師和同行們表示衷心的感謝.

猜你喜歡
指令集寄存器內存
基于Kubernetes的RISC-V異構集群云任務調度系統①
STM32和51單片機寄存器映射原理異同分析
3DNow指令集被Linux淘汰
Lite寄存器模型的設計與實現
筆記本內存已經在漲價了,但幅度不大,升級擴容無須等待
“春夏秋冬”的內存
移位寄存器及算術運算應用
基于Dais—CMX模型機的斐波那契數列指令集設計
內存搭配DDR4、DDR3L還是DDR3?
什么是AMD64
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合