近距離了解木蘭開源社區項目——Labeled-RISC-V

項目背景

當下,越來越多類型各異的應用部署在雲計算平臺上,雲計算平臺通過共享硬件資源、複用網絡線路,降低了應用服務的部署門檻、維護和優化成本,提高了資源分配的靈活性。雲計算平臺提高核心競爭力的一種主要方式是提高資源利用率以降低成本,但資源利用率往往和用戶體驗存在矛盾:在一些場景下,若CPU利用率從30%提升到70%,用戶請求響應時間尾延遲將增長10倍。而用戶體驗對於應用服務商來說至關重要,如在搜索服務中,如果用戶搜索的響應時間增加0.5秒,則廣告收入下降20%。因此,為了保證基本的服務質量,雲計算平臺的資源利用率仍然保持在較低水平,如CPU利用率基本不足20%。

資源利用率與用戶體驗的矛盾,主要來源於計算機系統中,資源共享帶來的無序競爭所導致的系統行為不確定性及性能波動。計算機系統中的硬件資源,如CPU、高速緩存、內存、網絡和磁盤IO,都會被不同的應用所爭搶,導致部分應用出現飢餓以及局部性被破環的現象,從而降低應用的性能,影響用戶體驗。

為了解決硬件資源共享帶來的無序競爭問題,硬件廠商針對各個部件提供了調控手段,如Intel處理器的資源指導技術(Resource Director Technology)提供了軟件接口,允許軟件管理底層硬件的資源分配策略,具體包括高速緩存監控、高速緩存容量分配、內存帶寬監控等。

本項目提出一種新型的體系結構,標籤化體系結構,通過提供新型軟硬件接口的方式,藉助軟硬件協同控制的機制,以實現硬件資源的合理分配。與其他方案不同,標籤化體系結構將計算機系統內部視為一個通信網絡,硬件間的請求視為通信數據包,則資源共享的調控問題與分組交換網絡有一定的相似之處。受分組交換網絡中軟件定義網絡(Software Defined Network, SDN)思想的啟發,標籤化體系結構在硬件的通信消息中引入標籤,將硬件資源的具體調控部件定義為數據平面,將中心化的參數表項和調控策略定義為控制平面,通過統一的編程接口,來實現以處理器核心或進程為對象的資源調控。下圖是將計算機部件拓撲視為網絡、通信協議視為數據包的一個示例。

近距離了解木蘭開源社區項目——Labeled-RISC-V

標籤的思想早在二十世紀六七十年代便由萊斯大學(Rice University)提出,但當時的設計將數據作為標籤的描述對象,需要將標籤存儲在內存中,佔據大量空間且有額外的校驗運算開銷,實現難度較大,現在主要應用在安全領域。標籤化體系結構結合實際情況,將標籤的描述對象限定在請求發生源(CPU、進程),通過通信協議進行傳輸,專注於資源調控,從而降低標籤的存儲和CPU運算開銷。

項目功能

Labeled RISC-V是標籤化體系結構的一個具體實現案例,其功能包括標籤設置、L1訪存帶寬調控、共享cache容量劃分和核心物理內存劃分。

標籤設置

標籤分為核心標籤和進程標籤兩類。核心標籤存儲在控制平面中,每個核心有各自的核心標籤。進程標籤通過 Linux 的 Cgroups 機制進行配置。為一個 Cgroups 設定標籤後,添加到該組的進程都對應此標籤。在上下文切換時,內核將進程標籤從進程控制塊寫入專門的體系結構寄存器中。

每當核心發送訪存請求時,核心標籤和進程標籤會拼接成完整標籤,並附著在訪存請求上。藉助這一標籤,硬件資源的控制部件可以感知到請求的來源。

L1訪存帶寬調控

為了調控核心的訪存帶寬,本項目在核心與系統總線之間添加了令牌桶模塊。令牌桶有三個參數,分別是令牌容量,恢復週期和恢復量,它們均存儲在控制平面中。每個令牌對應一次訪存請求,訪存粒度的單位是一個cache block。通過上述三個參數,即可控制每個核心的平均帶寬和瞬時帶寬。

共享cache容量劃分

為了實現共享cache容量分配,本項目為每個標籤維護相應的可用路掩碼(waymask)。可用路掩碼在替換時與替換結果掩碼進行按位與操作,以限制相應標籤可以替換掉的路,從而實現cache容量分配的效果。亦有查詢接口可以查看每個標籤佔用的具體cache容量。

若只通過cache容量分配來調節性能,則容易造成cache容量分配較少的應用由於cache缺失率上升而頻繁訪問內存的現象,從而增大關鍵應用的訪存延遲,因此,往往需要將共享cache和L1訪存帶寬聯合進行調控。

下圖對比了Redis服務獨佔硬件資源運行與共享硬件資源運行時的各百分位尾延遲,可以看到,若只將cache儘可能多地分配給Redis服務(12:4以及15:1-A),反而造成性能下降,甚至性能弱於無序共享(16:16)時的表現,而15:1-D在cache劃分的基礎上添加嚴格的L1帶寬調控,則可以使得Redis服務的性能回升到獨佔時(Baseline)的表現,但此時其它應用依然在運行,從而提升系統整體的資源利用率。

近距離了解木蘭開源社區項目——Labeled-RISC-V

物理內存劃分

本項目為每個核心記錄了可用物理內存區域的BASE和MASK,實現了簡單的分段機制。每個核心在流水線裡訪問相同的地址空間,請求離開核心後則會被映射到不同且隔離的內存區域。互斥的任意核心集合均可獨立地運行各自的 Linux 系統,從而實現片內核心的細粒度劃分和隔離。

項目特點

標籤化體系結構以標籤機制和控制平面為核心,可在不同的硬件系統中實現。最初,項目嘗試過在開源OpenSparc T1處理器上實現,但未成功;然後項目嘗試在Xilinx 維護的Microblaze處理器和AXI4總線上成功實現標籤及相應的控制平面,但由於Microblaze等IP核並非開源模塊,一些創新性質的工作仍然無法開展。之後,項目選擇了基於開放指令集架構RISC-V的開源Rocketchip平臺,在TileLink總線上添加標籤,實現相應的控制平面,並進一步將控制平面的統一編程接口與RISC-V的調試接口進行整合,從而可以通過Openocd和JTAG接口進行統一的編程操作,無需使用自定義驅動程序,使得項目更具可維護性。目前,項目已適配到 ZCU102, Sidewinder, Zedboard 等FPGA開發板,並且通過Python腳本封裝了控制平面的讀寫命令,藉由Openocd和JTAG連接設備,可方便高效地進行資源的調控。




木蘭開源社區(https://mulanos.cn/)是2018年國家重點研發計劃“雲計算和大數據開源社區生態系統”項目重點成果,由中國電子技術標準化研究院牽頭,聯合北京大學、國防科大、聯想、騰訊雲,以及開源中國、北航、中科院軟件所、西南大學、華為、阿里雲、浪潮、新華三、中電標協、中科院東莞育成中心、湖南酷得共16家單位共同承擔。木蘭開源社區立足中國,面向國際,聯合匯聚國內開源生態圈相關方,共同打造國內開源生態,推動本土開源項目孵化,在推動培育開源貢獻文化的同時,與國內外各開源社區融合發展。


分享到:


相關文章: