國產(chǎn) RISC-V 處理器“香山”已成功運(yùn)行 Linux
作者 | 包云崗
責(zé)編 | 歐陽姝黎
22號下午關(guān)于香山的報(bào)告,因?yàn)閆oom直播出現(xiàn)了技術(shù)故障,導(dǎo)致大家未能聽到完整的報(bào)告,稍有些遺憾。考慮了一下,這里就把報(bào)告PPT直接貼出來,再加上我們在香山開發(fā)過程中的一些考慮和想法,跟大家分享。

這個(gè)報(bào)告主要回答四個(gè)問題:
一、為什么要做香山?
二、香山什么水平?
三、香山怎么做的?
四、香山未來如何發(fā)展?
一、為什么要做香山?
2010年RISC-V誕生,迄今已有11年。如今,在RISC-V國際基金會網(wǎng)站上登記的各類商業(yè)或開源的RISC-V處理器核就有上百個(gè)(如下鏈接),為什么還要做一個(gè)開源的高性能RISC-V核?
RISC-V Exchange: Cores & SoCs - RISC-V International
對于這個(gè)問題,我們和很多業(yè)界企業(yè)交流過,也做了很多調(diào)研與分析,這都讓我們判斷認(rèn)為業(yè)界需要一個(gè)開源的高性能RISC-V核。另一方面,我們也在思考一個(gè)問題——為什么CPU領(lǐng)域還沒有一個(gè)像Linux那樣的開源主線?1991年開源的Linux誕生,到今天正好30年。如今,Linux不僅被工業(yè)界廣泛應(yīng)用,也成為學(xué)術(shù)界開展操作系統(tǒng)研究的創(chuàng)新平臺。
RISC-V是開放開源的指令集,允許全世界任何人免費(fèi)實(shí)現(xiàn)一個(gè)RISC-V處理器,可以是商用,也可以開源,這是和公司私有的X86/ARM指令集相比最大的區(qū)別之一。但是,十年過去了,到現(xiàn)在還未能形成一個(gè)像Linux那樣的開源主線。Berkeley的BOOM目標(biāo)是一個(gè)高性能開源RISC-V核,但是BOOM代碼倉庫相對不開放,官方建議其他人實(shí)現(xiàn)任何功能都要事先和他們溝通,以確保不要與他們的計(jì)劃產(chǎn)生沖突。根據(jù)GitHub官方的統(tǒng)計(jì)頁面顯示,從2014年1月至今,為BOOM提交過超過100行代碼修改的僅有8人。由此可見,一定程度上因?yàn)锽OOM嚴(yán)格的外部貢獻(xiàn)政策,開源社區(qū)對BOOM的參與度并不高。
所以,團(tuán)隊(duì)的唐丹博士和我一直認(rèn)為要建立一個(gè)像Linux那樣的開源RISC-V核主線,既能被工業(yè)界廣泛應(yīng)用,又能支持學(xué)術(shù)界試驗(yàn)創(chuàng)新想法。最關(guān)鍵的是,一定要讓它像Linux那樣至少存活30年!
于是,“香山”誕生了。

我們做了一年多的準(zhǔn)備工作——申請經(jīng)費(fèi),啟動“一生一芯”計(jì)劃培養(yǎng)人才,建立團(tuán)隊(duì),尋找合作伙伴……這期間得到了太多太多人的支持和幫助:計(jì)算所孫凝暉院士幫我們多處找經(jīng)費(fèi),國科大全力支持“一生一芯”計(jì)劃,鵬城實(shí)驗(yàn)室支持我們建立起后端物理設(shè)計(jì)團(tuán)隊(duì),多位計(jì)算所老所友毅然決定參與開源主線等等,就不一一列舉了。
終于,香山正式啟動了——2020年6月11日,香山在GitHub上建立了代碼倉庫。
短短的的一年時(shí)間里,25位同學(xué)和老師參與了香山的開發(fā)。821次主分支代碼合并,3296次代碼提交(commit),5萬余行代碼,400多個(gè)文檔,記錄了香山的成長過程。我們的理念是代碼開源、流程開放、文檔公開。這期間,有企業(yè)直接參與開發(fā),也有企業(yè)表達(dá)參與意向,都因?yàn)檎J(rèn)同開源理念,愿意一起來共建開源的香山。這些來自工業(yè)界的積極反饋,給予我們極大的鼓舞和信心,讓我們更堅(jiān)定地去踐行“科研重工業(yè)模式”。
“科研重工業(yè)模式”,是 2020年1月我為《中國計(jì)算機(jī)學(xué)會通訊(CCCF)》寫了一篇卷首語《伯克利科研模式的啟發(fā)》中提出的:
袁嵐峰:CCCF卷首語 :伯克利科研模式的啟發(fā) | 包云崗
回顧伯克利的科研歷程,可以發(fā)現(xiàn)他們在過去幾十年研制了大量的原型系統(tǒng),不僅推動了技術(shù)進(jìn)步甚至顛覆產(chǎn)業(yè),也培養(yǎng)了一代代杰出人才(其中多位獲得圖靈獎):1950年代CALDIC系統(tǒng)(Doug Englebart),1960年代Project Genie系統(tǒng)(Butler Lampson與Chuck Thacker),1970年代BSD Unix操作系統(tǒng)與INGRES數(shù)據(jù)庫系統(tǒng)(Michael Stonebraker),1980年代RISC處理器(David Patterson),1990年代RAID存儲系統(tǒng)與NOW機(jī)群系統(tǒng)……如果用一句話來總結(jié)伯克利的科研模式,那就是——熱衷于研制真正能改變現(xiàn)狀的原型系統(tǒng),哪怕需要大量工程投入。國重主任孫凝暉院士稱之為“科研重工業(yè)模式”。
“科研重工業(yè)模式”,我們不想紙上談兵,我們要用行動去實(shí)踐。

二、香山什么水平?
香山是一款開源RISC-V處理器核,它的架構(gòu)代號以湖命名。第一版架構(gòu)代號是“雁棲湖”,這是帶有濃重國科大情節(jié)的同學(xué)們起的名字,因?yàn)樗麄冄幸欢荚趹讶嵫銞艘荒??!把銞盧TL代碼于2021年4月完成,計(jì)劃于7月基于TSMC 28nm工藝流片,目前頻率為1.3GHz。
第二版架構(gòu)代號是“南湖”,這是向建黨100周年致敬?!澳虾庇?jì)劃在今年年底流片,將采用中芯國際14nm工藝,目標(biāo)頻率是2GHz。
香山選擇什么開源許可證?這個(gè)問題糾結(jié)了我們好一陣子。后來,我們專門向北京大學(xué)周明輝教授請教,小伙伴們制定了4種開源許可證方案。在反復(fù)對比權(quán)衡后,最終選擇了如下表格中的方案①——木蘭寬松版許可證(MulanPSLv2)。在此,特別感謝北大周明輝老師的專業(yè)指導(dǎo)!

“雁棲湖”架構(gòu)是一個(gè)11級流水、6發(fā)射、4個(gè)訪存部件的亂序處理器核。在發(fā)射寬度上已經(jīng)可以和一些ARM高端處理器核相當(dāng),但還未進(jìn)行充分優(yōu)化,因此實(shí)際性能還有不小的差距。我們希望未來通過持續(xù)迭代優(yōu)化(“南湖”-->"X湖"-->"Y湖"-->……),性能達(dá)到ARM A76的水平。

我們基于GitHub CI構(gòu)建了一套流程化的自動回歸測試框架,并在過去大半年不斷增加測試負(fù)載,從cputest,risc-tests到Linux,到SPECCPU workload。這套自動回歸測試框架在保障和驗(yàn)證芯片的正確性。

每個(gè)大項(xiàng)目總會有一些激動人心的時(shí)刻,這段30秒的小視頻記錄了香山在FPGA上啟動Linux/Debian的時(shí)刻,略帶喜感。
視頻鏈接:香山在FPGA上啟動Linux/Debian
(https://www.zhihu.com/zvideo/1390842319982120960)
三、香山怎么做的?
香山開發(fā)初期速度非??欤?strong>6月11日建立代碼倉庫,7月6日亂序流水線便已完成,能正確運(yùn)行CoreMark,不到一個(gè)月時(shí)間;9月12日,Linux正確啟動;10月22日,Debian正確啟動。
接下來便是大半年的結(jié)構(gòu)優(yōu)化、性能調(diào)優(yōu)、時(shí)序優(yōu)化工作,香山架構(gòu)幾乎相當(dāng)于重構(gòu)了一遍。一個(gè)典型的例子,香山的第一版分支預(yù)測器(BPU)參考了BOOM的BPU,但后端評估頻率只能達(dá)到800MHz(TSMC 28nm)。于是負(fù)責(zé)BPU設(shè)計(jì)的勾凌睿在幾位老師的指導(dǎo)下,不斷優(yōu)化BPU結(jié)構(gòu),最終將頻率提升到了1.4GHz。
這期間,小伙伴們紛紛自己動手,開發(fā)了各種各樣的優(yōu)化和調(diào)試工具,大大地加速了優(yōu)化和驗(yàn)證環(huán)節(jié)。這讓我真心佩服這批90后——他們真是充滿了創(chuàng)造力,從工作到生活,而主要驅(qū)動力之一就是“?。╰ou)時(shí)(lan)”。比如寧可自己寫個(gè)程序自動點(diǎn)外賣,也懶得打開手機(jī)看菜單點(diǎn)。

香山的開發(fā)至少有兩個(gè)重要的決策,第一個(gè)便是選擇敏捷設(shè)計(jì)語言Chisel。很多人質(zhì)疑Chisel,排斥Chisel,但是我們在充分評估后,還是決定使用Chisel。
我們團(tuán)隊(duì)是在2016年開始使用Chisel,一開始組里也充滿質(zhì)疑。2018年,我們設(shè)計(jì)了兩組定量的對比實(shí)驗(yàn),找了2位同學(xué)用Chisel、1位工程師用Verilog分別設(shè)計(jì)一個(gè)L2 Cache模塊。通過一系列量化對比,得出了如下三個(gè)結(jié)論:
Chisel開發(fā)效率遠(yuǎn)高于Verilog;
實(shí)現(xiàn)相同的功能,Chisel代碼量僅為Verilog的1/5(因此香山的5萬行Chisel代碼相當(dāng)于25萬行Verilog代碼);
Chisel的開發(fā)質(zhì)量不比Verilog差。
后來將實(shí)驗(yàn)結(jié)果發(fā)表在2019年1月的《計(jì)算機(jī)研究與發(fā)展》。最近去華為交流,才知道這些對比結(jié)果也推動了華為內(nèi)部組建了Chisel開發(fā)團(tuán)隊(duì),如今華為也是Chisel的支持者。
2020年,我們又基于Chisel完成了一款8核標(biāo)簽化RISC-V處理器的流片,這是基于Rocket處理器核進(jìn)行了標(biāo)簽化體系結(jié)構(gòu)改造,采用TSMC 28nm工藝流片。雖然因?yàn)闀r(shí)間緊張,并沒有進(jìn)行細(xì)致的后端優(yōu)化,但芯片返回后也還能正常運(yùn)行在1.2GHz。這是一顆有一定復(fù)雜度的8核SoC芯片,但Chisel能應(yīng)對。所以,我們相信Chisel可用來開發(fā)復(fù)雜芯片。

在開發(fā)香山的過程中,我們團(tuán)隊(duì)積累了豐富Chisel開發(fā)經(jīng)驗(yàn)。小伙伴們(徐易難、王凱帆、藺嘉煒、余子濠、金越)準(zhǔn)備了6個(gè)報(bào)告,將會在6月25日的CCC Workshop上和大家分享。

另一個(gè)重要決策就是高度重視構(gòu)建支持敏捷設(shè)計(jì)的流程與工具。

我們在開發(fā)香山的過程中,一直在強(qiáng)調(diào)流程、平臺、基礎(chǔ)設(shè)施的重要性。我更多是扮演了啦啦隊(duì)隊(duì)長的角色,而小伙伴們則真正將理念落實(shí)到了具體行動。

為了更好地支持Chisel開發(fā)與調(diào)試,為了更快地捕捉、復(fù)現(xiàn)和定位bug,為了更準(zhǔn)確地評估優(yōu)化技術(shù)的性能收益,小伙伴們開發(fā)十余種各具特色的工具。這些工具支撐起了一套處理器芯片敏捷開發(fā)的流程。當(dāng)然,這套流程還比較初級,尚不系統(tǒng)化。我們也期待更多的開源開發(fā)者加入,一起完善這套敏捷設(shè)計(jì)流程。

下面舉幾個(gè)工具的例子。NEMU是由余子濠在南大本科時(shí)便開始開發(fā)的一款教學(xué)模擬器。在計(jì)算所讀博期間,他憑借一人之力一直在持續(xù)改進(jìn)和優(yōu)化NEMU,使NEMU成為一個(gè)效率接近QEMU的高性能解釋器——啟動Debian甚至比QEMU還要快18.2%(9.87s vs. 12.07s)。
更重要的是NEMU是指令解釋器,可以針對每一條指令進(jìn)行動態(tài)分析;相比而言,QEMU的翻譯粒度是基本塊,無法跟蹤每一條指令。事實(shí)上,NEMU的這種指令解釋器機(jī)制,成為了香山開發(fā)中正確性驗(yàn)證框架Difftest的基礎(chǔ)。(余子濠將會在6月23日下午介紹NEMU)

Cache是處理器中非常核心的模塊,尤其是要支持一致性協(xié)議的Cache更為復(fù)雜。為此,小伙伴們開發(fā)了一套專門驗(yàn)證支持TileLink一致性協(xié)議的Cache模塊測試框架Agent Faker,發(fā)現(xiàn)了好幾個(gè)Cache模塊的bug。(張傳奇將會在6月25日上午介紹這個(gè)工作)

Difftest是一個(gè)基于NEMU的指令集在線差分驗(yàn)證框架。它的一端是模擬器,提供處理器執(zhí)行的黃金標(biāo)準(zhǔn);另一端是運(yùn)行RTL的仿真器,在仿真過程中會將指令數(shù)、中斷、MMIO、微結(jié)構(gòu)狀態(tài)等信息發(fā)送給NEMU進(jìn)行比對,從而判斷RTL實(shí)現(xiàn)的正確性。
Difftest最早是由余子濠實(shí)現(xiàn),后來王凱帆進(jìn)行優(yōu)化,其中一個(gè)最重要的改進(jìn)就是SMP-Difftest,支持多核SMP的全系統(tǒng)仿真,并且支持Cache一致性、內(nèi)存一致性等需要軟硬件協(xié)同的問題。(王凱帆將會在6月24日下午介紹Difftest)

如何快速捕捉、復(fù)現(xiàn)、定位bug是調(diào)試過程中非常關(guān)鍵的步驟,很多時(shí)間都是消耗在這個(gè)階段。小伙伴們提出了一種創(chuàng)新的輕量級仿真快照技術(shù)——把整個(gè)仿真程序看成是一個(gè)進(jìn)程,利用fork機(jī)制創(chuàng)建子進(jìn)程。然后父進(jìn)程繼續(xù)執(zhí)行,子進(jìn)程暫停。當(dāng)父進(jìn)程出錯時(shí),則可以恢復(fù)到子進(jìn)程進(jìn)行調(diào)試。LightSSS這個(gè)機(jī)制和Verilator仿真器自帶的Savable機(jī)制相比,單次快照時(shí)間縮短了近7000倍!(余子濠將會在6月23日下午介紹LightSSS)

很多人質(zhì)疑Chisel不方便調(diào)試。小伙伴們則充分利用了Chisel的可以自定義Firrtl Transform的特點(diǎn),設(shè)計(jì)了一套新型的硬件敏捷調(diào)試棧,可將基于波形的調(diào)試轉(zhuǎn)換為基于事件的調(diào)試。我們設(shè)計(jì)了一套工具,可以直接將高層語義新型從波形中提取出來,并進(jìn)行可視化。為此,還專門設(shè)計(jì)了一個(gè)Xiang語言。(藺嘉煒將在6月23日下午介紹該工作)

處理器性能優(yōu)化環(huán)節(jié)最關(guān)鍵是要快速準(zhǔn)確地評估優(yōu)化技術(shù)帶來的性能收益。如果評估過程需要幾天時(shí)間,那將會嚴(yán)重影響迭代優(yōu)化效率。小伙伴們設(shè)計(jì)了一個(gè)敏捷性能評估框架BetaPoint,它利用了三個(gè)機(jī)制——Sampling機(jī)制、Generic Full System Checkpoint機(jī)制和Functional Warmup機(jī)制,實(shí)現(xiàn)了可以在10個(gè)小時(shí)內(nèi)估算出處理器的SPEC分?jǐn)?shù)。(周耀陽將會在6月23日傍晚介紹BetaPoint)

整個(gè)香山開發(fā)團(tuán)隊(duì)將在這次峰會上和大家分享22個(gè)技術(shù)報(bào)告。這些報(bào)告都是清一色的90后,很多都是95后:勾凌睿、胡博涵、金越、李昕、劉志剛、藺嘉煒、王華強(qiáng)、王誨喆、王凱帆、徐易難、余子濠、張傳奇、張發(fā)旺、張林雋、張紫飛、張梓悅、周耀陽、周意可、鄒江瑞;此外還有多位參與香山開發(fā)的同學(xué)這次并沒有投稿。這些小伙伴們在香山的開發(fā)過程中做出了不可替代的貢獻(xiàn)。

四、香山未來如何發(fā)展?
目前香山正在進(jìn)行下一代架構(gòu)“南湖”的開發(fā),目標(biāo)是今年年底流片,基于中芯國際的14nm工藝頻率達(dá)到2GHz,SPECCPU分值達(dá)到10分/GHz。這是一個(gè)很有挑戰(zhàn)的目標(biāo),需要對架構(gòu)進(jìn)行大幅度的優(yōu)化改進(jìn)。
前幾天,小伙伴們專門去了一趟嘉興南湖,研討香山未來的發(fā)展。除了技術(shù),我們再一次聚焦到流程與平臺。此前構(gòu)建的敏捷設(shè)計(jì)流程與平臺支撐了20多人的開發(fā)團(tuán)隊(duì),這遠(yuǎn)遠(yuǎn)不夠。現(xiàn)在我們需要考慮的是該如何構(gòu)建一套開源、開放、規(guī)范的開放流程,能支撐2000人的開源社區(qū)一起開發(fā)。
支持成千上萬人一起開發(fā)開源軟件,這已經(jīng)有成功的經(jīng)驗(yàn)。但是如何支持?jǐn)?shù)千人一起開發(fā)開源處理器,目前還沒有可以參考的案例,只能靠我們自己摸索。也期待各界專家給我們更多的指導(dǎo)和建議。


