999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

香山開源高性能RISC-V 處理器設計與實現

2023-03-27 13:39:06王凱帆徐易難余子濠陳國凱勾凌睿李乾若藺嘉煒劉志剛王華強王誨喆張傳奇張發旺張林雋張紫飛張梓悅趙陽洋周耀陽鄒江瑞郇丹丹李祖松趙繼業孫凝暉包云崗
計算機研究與發展 2023年3期
關鍵詞:指令設計

王凱帆 徐易難 余子濠 唐 丹,3 陳國凱 陳 熙 勾凌睿 胡 軒 金 越 李乾若 李 昕 藺嘉煒 劉 彤 劉志剛 王華強 王誨喆 張傳奇 張發旺 張林雋 張紫飛 張梓悅 趙陽洋 周耀陽 鄒江瑞 蔡 曄 郇丹丹 李祖松 趙繼業 何 偉 孫凝暉,3 包云崗

1(處理器芯片全國重點實驗室(中國科學院計算技術研究所)北京 100190)

2(中國科學院大學計算機科學與技術學院 北京 100049)

3(北京開源芯片研究院 北京 100080)

4(鵬城實驗室 廣東深圳 518055)

5(深圳大學計算機與軟件學院 廣東深圳 518060)

6(北京微核芯技術有限公司 北京 100190)

處理器芯片是驅動信息時代發展的核心引擎.隨著大數據和物聯網時代的來臨,各行業對數據處理的需求越來越高.然而,近年來摩爾定律瀕臨終結[1],先進制造工藝節點研發成本上升,昂貴的流片費用使得芯片開發成本也相應提升,投入風險越來越高.如今,研發一款通用處理器芯片往往需要投入上百人年,耗費上億元研發經費,只有少數大企業才有能力開發處理器芯片.因此,業界正在尋求降低芯片開發門檻的方案.

開源芯片為上述問題提供了一個方向,成為近年來業界關注的新熱點.基于開源模式,多方可聯合開發共性技術,構建支持芯片開發的基礎設施,從而降低開發門檻.2011 年,由加州大學伯克利分校發布的新型指令集RISC-V[2]首先實現了指令集層面的開源.區別于常見的x86 和ARM 等指令集,RISC-V 的特點是開放和自由,由非營利的RISC-V 國際基金會維護,任何人無需獲得授權即可免費使用.近年來,基于RISC-V 指令集的開源硬件不斷涌現,包括加州大學伯克利分校的Rocket-Chip[3]和BOOM[4]、中國科學院大學和中國科學院計算技術研究所的NutShell[5]等.然而,不少學者和企業反映,國內外現有的開源RISC-V 處理器項目尚未滿足學術界和工業界的高性能需求.

香山處理器項目于2020 年6 月啟動.香山是一款開源高性能RISC-V 處理器,以Linux 在操作系統領域的影響力為目標,期望建立一個在學術界和工業界廣泛應用的體系結構創新開源平臺.2021 年6月22 日,香山處理器在第一屆RISC-V 中國峰會首次公開亮相,引起各界廣泛關注.隨后香山穩步發展,第一代“雁棲湖”微架構成功流片,性能達到預期,SPEC CPU2006 實測分值為7.01 分/GHz,同頻性能達到ARM Cortex A73 水平.第二代“南湖”微架構正在進行最后的迭代優化,即將流片.仿真評估結果顯示,“南湖”微架構SPEC CPU2006 分值約為10.42 分/GHz,同頻性能達到ARM Cortex A76 水平,單核性能為當前開源處理器之最,目前已在企業支持下開展產品化改造工作.第三代“昆明湖”微架構將持續優化性能,目前得到眾多企業的支持,已建立聯合開發團隊啟動架構設計工作.

香山項目采用新的開源模式,開源內容不僅包括所有源代碼和設計文檔,還包括支持香山開發的各類基礎設施和工具.因此,香山項目能夠成為聯合企業開發的基礎平臺,賦能多方合作.

本文主要介紹香山處理器前兩代微架構的實現細節與設計演進,并系統闡述實現開源高性能處理器過程中面臨的各種挑戰和汲取的經驗,內容包括微架構性能調優、功能驗證、物理實現和多方協同開發等.其中,第1 節介紹香山處理器的微架構總覽;第2~5 節分別介紹香山處理器前端供指單元、亂序執行單元、訪存子系統和緩存子系統的設計考量與微結構細節;第6 節介紹香山處理器的敏捷開發驗證方法與性能評估結果;第7 節介紹香山處理器的后端物理實現;第8 節介紹香山聯合開發模式與下一代展望.

1 香山設計總覽

香山是一款超標量亂序執行的RISC-V 通用處理器,最新版架構支持RV64GCBK 指令集,兼容RISC-V 軟件工具鏈與生態.作為一款開源處理器,香山使用Chisel[6]硬件描述語言實現,設計代碼約6 萬行,驗證代碼約3 萬行.香山的微架構設計經歷了兩代,分別為“雁棲湖”微架構和“南湖”微架構.兩者的參數如表1 所示.香山實現了靈活可配的參數系統,可以根據給定的時序、面積和功耗約束配置大多數設計參數.

Table 1 Tape-out Parameters Comparison of the Two Generations of XiangShan Processor表1 兩代香山處理器流片參數對比

2021 年7 月,“雁棲湖”微架構首次以28 nm 工藝投片,于次年1 月回片并成功點亮,最高工作頻率為1.3GHz.性能測試負載采用基準程序集SPEC CPU2006,以每GHz 分數為性能指標,該指標與處理器的IPC(instruction per cycle)成正比.實測數據表明,第一代芯片運行 SPECint 2006 達到 7.03 分/GHz,運行 SPECfp 2006 達到 7.00 分/GHz,符合設計預期.圖1為香山第一代芯片與配套板卡.

Fig.1 Chip and board of the first generation of XiangShan processor圖1 香山處理器第一代芯片與板卡

香山第一代“雁棲湖”微架構如圖2(a)所示.前端供指單元采用4 級流水線緊耦合設計,每周期最多可以供給8×4B 的指令流.分支預測采用多級前向覆蓋機制,實現了簡化版的TAGE-SC-L 分支預測器.指令從指令緩沖部件取出后分別流經譯碼級、重命名級和分派級,每級均可并行處理最多6 條指令.香山實現了分離的通用寄存器堆和浮點寄存器堆,在進入保留站之前讀取數據.保留站是完全分布式的,單個容量為16 項,支持高效的亂序發射與執行.在訪存子系統中,香山包含2 條load 流水線和2 條store流水線,配備高性能內存管理單元,支持亂序訪存.流片版本采用單核設計,配置L2 緩存,并通過L1+緩存緩解L1 指令緩存容量小導致的性能損失.

香山第二代“南湖”微架構如圖2(b)所示,它相比第一代“雁棲湖”微架構的主要變化包括:1)前端設計采用解耦的取指單元和分支預測架構,提高指令供給吞吐和分支預測準確率;2)功能部件新增RISC-V 位操作(RVB)和標量加密運算(RVK)指令集擴展,并實現了兼容IEEE-754 標準的高性能浮點運算部件;3)訪存子系統新增RISC-V 物理內存保護和自定義的可配置物理內存屬性,并優化了訪存流水線結構;4)緩存子系統實現了非包含式的高性能L2/L3 緩存,提升并發度并降低延遲.流片版本采用雙核、配備3 級緩存.

在兩代微架構的設計迭代中,香山團隊深刻體會到高性能處理器的設計是一門平衡的藝術,具體體現在2 個維度:

1)宏觀上.微架構設計需要平衡前端指令供給、后端亂序執行與訪存數據供給3 個方面,任何一方的性能短板都會因木桶效應導致整體性能下降,因此盲目增大配置參數是不可取的,需要針對性能瓶頸優化才能提升整體性能.

Fig.2 Micro-architecture of the two generations of XiangShan processor圖2 香山處理器兩代微架構

2)微觀上.流水線設計需要平衡每一級的功能和時序.處理器性能由IPC 和頻率共同決定,流水級設計不平衡會導致頻率下降從而影響整體性能.因此需要預先評估設計復雜度,規劃各級邏輯功能并與后端團隊緊密協作調整時序.

實踐表明,高性能處理器的微架構性能優化過程復雜而漫長,可總結為2 條原則:一是挖掘硬件結構的并行度,包括指令級并行、訪存級并行等;二是優化設計和算法以降低串行任務的延遲,例如設計更流暢的數據通路、采用投機與推測等.上述2 條原則均在香山的設計與演進中得以體現.

2 前端供指單元

前端供指單元由取指單元和分支預測器2 部分組成,負責從內存中取指令以供給后端執行,并基于分支預測結果實現指令流跳轉.超標量處理器每周期可提交多條指令,故要求前端供指單元具備并行的高吞吐取指和分支預測能力.為此,第一代“雁棲湖”微架構采用緊耦合前端設計.

2.1 緊耦合前端設計

“雁棲湖”微架構的流水線以前端供指單元為起點,每周期最多能取8 條4B 的普通指令或16 條2B 的壓縮指令.前端供指單元分為4 個流水級(F1~F4):

1)F1 級.選擇下一個新取指PC(next-PC)的來源,包括指令序順序的下一行、前端沖刷請求和后端沖刷請求.同時并行訪問L1 指令緩存和多級分支預測器.

2)F2 級.單周期延遲預測器返回預測結果,包括跳轉方向和目標地址.

3)F3 級.L1 指令緩存返回32B 指令行,將其拆分為指令并進行預譯碼;2 周期延遲預測器返回預測結果.

4)F4 級.根據F3鎖存的預譯碼信息計算jal 指令和條件分支指令(如bne 指令)的目標地址,判斷預測結果是否正確;3 周期延遲預測器返回預測結果,并選出第一條預測結果為“跳轉”的指令,將其目標地址作為后續取指PC.

前端供指單元的F4 級會將打包的指令發送給指令緩沖部件.指令緩沖部件用于解決處理器前端指令供給和后端執行速度的不平衡問題.由于前端最大取指寬度大于譯碼寬度,大多時候指令緩沖部件中的指令是充盈的,因此在L1 指令緩存發生缺失或因前端沖刷而產生氣泡時,指令緩沖部件仍可向后端供給一定數量的指令.

分支預測器是前端的重要部件.處理器在執行過程中,分支預測錯誤需要沖刷流水線,清除錯誤路徑上的指令,故分支預測準確率對性能影響很大.然而,分支預測存在延遲和準確率之間的矛盾,越準確的預測器往往越復雜,產生預測結果需要耗費越多的周期數,從而引入額外的前端氣泡,降低供指效率.為解決該問題,香山采用前向覆蓋方法來預測分支方向和跳轉目標,其思想是部署簡單和復雜的子預測器進行并行預測,先投機采用前者的預測結果,再在后續流水級中使用后者的結果矯正前者.僅當簡單子預測器預測錯誤時,該方法才會暴露復雜子預測器的實際延遲,且有效降低了需要流水線后端發起沖刷的次數.“雁棲湖”微架構的分支預測器分為3 級,如圖3 所示.每一級的預測結果都會與前一級進行對比,若不一致,則采用后級的預測結果,并沖刷前幾級流水級,同時更新PC.

Fig.3 Branch predictor in Yanqihu micro-architecture圖3 “雁棲湖”微架構分支預測器

“雁棲湖”微架構的分支預測器主要包含5 個子預測器:

1)uBTB.uBTB 是一個使用寄存器實現、單周期產生預測結果的小容量分支目標緩沖器(branch target buffer,BTB),可提供無氣泡的預測流.uBTB 采用全相聯結構,通過 PC 的低位索引,所得結果與PC的高位拼接得到目標地址.此外,uBTB 通過兩位飽和計數器來預測條件分支指令的跳轉方向.

2)BTB+BIM.BTB 和BIM 分別是容量更大的分支目標緩沖器和更準確的跳轉方向預測器,均使用SRAM實現,2周期產生預測結果.BTB 和BIM 采用2路組相聯結構,存儲內容與 uBTB 類似.

3)TAGE-SC-L.TAGE[7]是目前準確率最高的分支預測算法之一.“雁棲湖”微架構實現了該算法的簡化版,延遲為3 周期.預測器使用64 b 分支歷史和指令PC 索引,利用6 個歷史表獲取預測分支方向的初步結果,該結果經由統計糾正器(statistical corrector,SC)部件糾正.此外,內部還設有循環預測器(loop predictor)部件預測循環退出條件,最終綜合產生方向預測結果.

4)RAS.返回地址堆棧(return address stack,RAS)會在執行函數調用指令時將PC 壓棧,然后使用棧頂結果預測函數返回指令的跳轉PC.RAS 單周期即可返回預測結果,但需要得到預譯碼信息后才能預測.

2.2 “南湖”微架構解耦前端設計

緊耦合前端設計雖然實現了超標量取指與多級分支預測的結合,但前端沖刷將給流水線引入大量氣泡,降低供指吞吐.為解決該問題,“南湖”微架構的最大改變是采用解耦前端(decoupled frontend)設計,即從流水線邏輯的角度將分支預測器與取指單元解耦,將兩者組織為生產者-消費者關系,如圖4 所示.該設計允許分支預測器在取指單元阻塞時繼續工作,預測更超前的指令流,從而隱藏更多取指氣泡,有效提升取指帶寬,對“南湖”微架構的性能提升貢獻很大.

Fig.4 Structure of decoupled frontend圖4 解耦前端結構

基于解耦前端設計,“南湖”微架構引入新模塊取指目標隊列(fetch target queue,FTQ),作為分支預測器與取指單元之間的緩沖.取指單元會從FTQ 中讀出待取指令塊的信息,向指令緩存發送讀取請求.緩存返回結果后,會根據指令塊范圍進行指令切分和預譯碼.預譯碼能檢查一些簡單的分支預測結果,例如是否將無條件跳轉指令預測為不跳轉等,相關信息會提早反饋給FTQ 用于更新PC.同時,FTQ 中的指令流信息還可以用于指導指令緩存的預取,從而降低取指延遲.

此外,“南湖”微架構還全面優化了分支預測器,包括提升部件規模、降低預測器延遲,以及優化預測機制.BTB 部件被替換為以預測塊為處理單位的取指目標緩沖(fetch target buffer,FTB),此處預測塊指長度不超過32B 且最多包含2 條分支指令的指令塊.FTB 不僅記錄了預測塊中的分支預測信息和起始地址預測信息,同時還預測該預測塊的結束地址.新增的間接跳轉預測器采用了目前已知最先進的ITTAGE 算法[7],使每千條指令中間接跳轉指令預測錯誤次數大幅降低.更多變化細節如表2 所示.實驗結果顯示,針對SPEC CPU2006,解耦前端設計使取指氣泡平均降低約50%,每千條指令中條件分支指令預測錯誤次數降低20%以上.

Table 2 Frontend Feature Evolution of the Two Generations of XiangShan Processor表2 兩代香山處理器前端特性演進

3 亂序執行單元

亂序執行單元是處理器執行指令的核心,主要包含調度和運算兩方面.高性能處理器通過寄存器重命名技術消除“讀后寫”和“寫后寫”兩種偽依賴,并允許在指令窗口中動態亂序調度,避免執行時間長的老指令阻塞處理器,從而提升指令執行的吞吐.這部分的設計難點是如何在滿足面積與時序約束的條件下盡可能提升指令執行的并行度,同時降低計算延遲.

3.1 “雁棲湖”微架構基礎設計

基于物理實現的考量,香山將亂序執行單元劃分為3 個模塊,包括控制模塊、整型模塊和浮點模塊.控制模塊包含譯碼、重命名和分派等邏輯,如圖5 所示.

首先,譯碼階段接收前端指令緩沖發出的指令,將其譯碼為結構化信息并送入重命名階段.香山采用統一物理寄存器堆重命名方式,通過映射表維護體系結構寄存器堆和物理寄存器堆之間的關系,每周期可分別分配和釋放最多6 個物理寄存器.此外,還可以通過改變寄存器映射關系來消除move 指令,實現零延遲執行.

分派階段分2 個流水級:第1 級將重命名后的指令按照類型分別送入整型、浮點和訪存分派隊列中;第2 級將指令按照具體操作類型分發到各個保留站中.此外,分派階段也會進行部分重命名工作,以緩解重命名階段的時序壓力.

Fig.5 Control module of out-of-order execution unit圖5 亂序執行單元控制模塊

“雁棲湖”微架構采用發射前讀寄存器堆和完全分布式的保留站,以降低設計復雜度.考慮物理寄存器堆最大讀寫口數量的限制,整型模塊中包含7 個保留站,與功能部件一一對應.功能部件包含4 個ALU、2 個MDU 和1 個Misc 部件.ALU 部件負責指令基本算術和邏輯運算,可提前喚醒其他保留站,實現背靠背的指令執行;MDU 部件負責執行乘除法運算,其中乘法采用3 級流水的華萊士樹實現,除法采用SRT4 算法;Misc 部件負責執行跳轉指令和CSR指令.考慮到面積和時序約束,每個保留站有16 項.

浮點模塊的保留站組織結構與整型模塊類似,包含6 個保留站,分別對應4 個FMAC 和2 個FMISC部件.其中FMAC 部件負責執行浮點乘法、加法和乘累加,延遲為固定4 周期;FMISC 部件負責執行除法、開方等運算,均采用SRT4 算法.“雁棲湖”微架構的浮點功能部件基于Hardfloat[8]開源實現進行了少量改進和時序優化,浮點寄存器堆均采用Recode 格式存儲浮點數.Recode 格式將浮點數的指數擴展1 位,從而簡化浮點部件的運算和舍入邏輯.但該格式擴展位數的做法不利于向量部件的添加,因此“南湖”微架構不再采用.

為實現指令按序提交以支持精確異常,所有指令會在分派階段并行送入重排序緩沖(re-order buffer,ROB)部件以按程序順序記錄指令流.當指令經由保留站發射進入功能部件并執行完畢后,運算結果經過寫回模塊的仲裁器寫回ROB,并標記指令執行完成等待提交.ROB 每周期可接收來自分派階段最多6 條指令,并提交最多6 條指令.當分支預測錯誤或觸發異常中斷時,ROB 會標記出錯指令,然后沖刷流水線,并通知前端供指單元根據新PC 重新取指.同時,ROB 從尾部開始回滾狀態,并根據其中記錄的重命名信息恢復重命名映射表.

3.2 “南湖”微架構的演進

“南湖”微架構整體沿用“雁棲湖”微架構中的亂序執行單元框架,同時通過若干優化提升整體性能.

首先,“南湖”微架構通過新增指令集擴展和指令融合特性來降低處理器的動態指令數,從而減少相同程序的執行時間.“南湖”微架構實現了RISC-V規范的RVB 擴展和RVK 擴展,不僅使部分程序的動態指令數降低10%以上,還能減少分支指令數量,降低誤預測造成的整體性能損失.此外,“南湖”微架構根據大量運算負載中總結出的常見指令組合添加了指令融合特性,提升了各個隊列的存儲效率,增大了亂序執行的指令窗口.

其次,“南湖”微架構優化了功能部件的運算延遲.“南湖”微架構實現了兼容IEEE 754 標準的高性能浮點計算單元,使用雙通路浮點加法器和級聯式浮點乘加單元,降低了浮點乘法和加法的延遲.此外,“南湖”微架構將整型和浮點的除法算法升級為SRT16,除法運算的延遲大多時候可降低一半.

最后,“南湖”微架構還優化了發射單元的時序,使用最老優先的發射策略,同時合并了部分保留站,提升其利用率.這些改進在滿足指令背靠背執行的前提下有效提升了亂序執行單元的效率與時序表現.

4 訪存子系統

訪存子系統負責處理保留站發出的load 和store請求,與亂序執行單元耦合,對緩解處理器訪存瓶頸、提高數據供給效率十分關鍵.訪存子系統的設計挑戰包括如何提升訪存并行度、如何設計平衡的訪存流水線等.

香山訪存子系統支持亂序訪存,符合RVWMO(RISC-V weak memory ordering)內存一致性模型,包含2 條load 流水線和2 條store 流水線,可支持最多4 條訪存指令并行執行.

4.1 亂序訪存機制

亂序訪存機制指盡早發射沒有依賴的訪存指令,從而提升訪存并行度,但仍要求訪存指令按序提交.為實現該機制,現代處理器大都通過專用訪存隊列,包括讀取隊列(load queue)和存儲隊列(store queue),記錄訪存指令的順序,同時檢查訪存指令之間的數據依賴關系,若違背內存一致性,則回滾處理器狀態.為正確實現RVWMO 一致性模型,需要檢查訪存違例,即確認訪存地址相同的load-load 指令對和storeload 指令對必須按序執行,訪存地址不同的訪存指令對則可亂序執行.香山處理器借助訪存隊列檢查訪存違例,通過流水級沖刷機制讓處理器從違背依賴關系的訪存指令開始重新執行.

訪存隊列大小決定了訪存并行度的上限.“雁棲湖”微架構的load queue 為一個64 項的循環隊列.每周期從分派階段接收最多6 條load 指令,從2 條load流水線接收指令的執行結果,每周期最多寫回2 條發生緩存缺失并重填后的指令,寫回操作會與正常的訪存流水線共享寫回端口.當數據緩存發生重填時,會將重填的整個緩存行廣播到load queue 的所有項,從而喚醒等待該緩存行數據的訪存指令.類似地,store queue 共48 項,每周期接收最多6 條store 指令,從2 條store 流水線中接收指令的執行結果,并最后寫回.

store 指令的最后一步是將數據寫回數據緩存.但若每次提交store 指令時均占用數據緩存的寫端口,則會嚴重阻塞后端執行.為緩解該問題,香山設計了committed store buffer 部件,用于記錄已提交但未寫回數據緩存的信息,作用類似L0 緩存,并以緩存行粒度合并store queue 傳來的數據.緩沖項數超過閾值后,會使用PLRU 替換算法選出一項進行換出,每周期至多向數據緩存寫入1 個緩存行.這一設計符合RVWMO一致性模型,將數據核間同步的需求轉移給軟件同步指令以提升訪存性能.

為減少訪存違例導致的流水線沖刷與回滾,提升亂序訪存性能,“雁棲湖”微架構添加了基于load wait table[9]的訪存違例預測器,當預測到一條load 指令可能違背依賴關系時,保留站將阻塞該load 指令的發射,直到比它年老的所有store 指令都發射后才能解除阻塞.

4.2 訪存流水線

當訪存指令從保留站發射后,就會進入load 或store 流水線執行,如圖6 所示.

Fig.6 load/store pipe of Yanqihu micro-architecture圖6 “雁棲湖”微架構訪存流水線

為平衡各級時序,“雁棲湖”微架構load 流水線分為3 級,并通過前遞機制解決依賴:1)第1 級計算虛擬地址,訪問TLB 進行虛實地址轉換,同時用虛擬地址索引數據緩存;2)第2 級收到TLB 翻譯后的物理地址,將其送入數據緩存比較標簽,同時送入store queue,查詢是否需要將store 結果前遞到load,此外還會產生數據緩存的命中信息,反饋至保留站喚醒后續指令;3)第3 級根據數據緩存的讀取結果和store queue 的前遞結果選擇實際讀取的數據,將其寫回到公共數據總線或者浮點模塊,同時更新load queue 中對應項的狀態.

store 流水線略有不同,它分為4 級流水:第1 級與load 流水線類似,計算地址并訪問TLB 和數據緩存;第2 級則會將物理地址寫入store queue,同時檢查訪存違例;檢查操作持續第3 級和第4 級流水,并將檢查結果通知ROB.

4.3 內存管理單元

內存管理單元(memory management unit,MMU)是訪存子系統的重要部分,負責將虛擬地址翻譯到物理地址并檢查頁權限,以支撐現代操作系統的頁式內存管理.香山處理器使用硬件遍歷頁表,實現了RISC-V 規范的Sv39 分頁機制,支持3 種不同大?。?KB,2MB,1GB)的頁.此外,香山還實現了物理內存屬性(physical memory attribution,PMA),用于檢查訪存操作的權限.

地址翻譯位于訪存的數據通路中.為了提升地址翻譯效率,香山利用訪存局部性原理,使用多級TLB 緩存頁表項.“雁棲湖”微架構的L1 TLB 包括ITLB 和DTLB,分別與指令緩存和數據緩存的流水線耦合,均采用全相聯結構,包含32 項4 KB 頁和4項2 MB/1 GB 頁.L1 TLB 缺失時,會向L2 TLB 發送請求.L2 TLB 是更大的頁表項緩存,由 ITLB 和 DTLB共享,緩存了Sv39 機制中三級頁表的頁表項.L2 TLB缺失時,將觸發頁表遍歷器(page table walker,PTW)訪問內存中的頁表項.由于兩級TLB 之間的物理布局距離較遠,故在兩者中間新增了repeater 部件,用于緩沖請求并過濾重復請求,避免L1 TLB 中出現重復項而降低命中率.

4.4 “南湖”微架構的改進

除增大訪存隊列外,“南湖”微架構對訪存子系統的改進還包括增強MMU 和優化訪存流水線.

對于MMU,“南湖”微架構首先優化性能關鍵的DTLB,采用16 項全相聯和64 項直接映射并行查詢的設計,增大了有效容量,替換算法也從隨機升級為PLRU.考慮面積和時序,“南湖”微架構縮減了L2 TLB 的容量.為彌補容量縮減帶來的性能影響并提升PTW 訪存效率,“南湖”微架構將PTW 部件拆分為2 個狀態機,一個負責訪問前2 級頁表,另一個負責訪問末級頁表,并將后者的訪存并行度從1 提升至8.此外,“南湖”微架構還增強了PMA 部件的可編程性,新增兼容RISC-V 規范的物理內存保護(physical memory protection,PMP)部件,為軟件提供內存保護的抽象,使操作系統可與硬件協同提升香山的安全性.

對于訪存流水線,“南湖”微架構將store 指令的地址與數據計算分離,將“雁棲湖”微架構中2 條4級store 流水線拆分為2 條2 級存儲地址流水線和2條2 級存儲數據流水線.該設計使保留站不必等待store 指令的地址和數據皆就緒才發射,提升了指令執行并行度,同時更有效地規避訪存違例.“南湖”微架構的訪存違例預測算法采用store set[10],提升了預測準確率.

“雁棲湖”微架構中的load 流水線是時序瓶頸之一,為提升主頻,“南湖”微架構將load 流水線的長度從3 級調整為4 級,并通過若干優化彌補由此帶來的性能損失,其中有2 個關鍵優化點:

1)load to load 優化.指針追逐是程序中常見的訪存模式,在指令中表現為將前一條load 指令的讀出結果作為后一條load 指令的訪存地址.為優化該場景,經觀察,一段時間內load 指令的有效地址通常對應相同的緩存索引,因此“南湖”微架構推測訪問數據緩存的標簽.若推測成功,則load to load 的延遲可從4 周期降為3 周期.

2)load 前遞機制優化.“南湖”微架構推測地使用虛擬地址比較前遞時的地址,再使用物理地址判斷前遞結果是否正確.該機制可在地址比較的數據通路中排除DTLB 地址轉換帶來的延遲,優化關鍵路徑的時序.若物理地址檢查失敗,則清空訪存流水線并重新執行.統計結果顯示,虛實地址前遞結果不匹配的概率很低.

5 緩存子系統

香山處理器充分挖掘訪存的時間與空間局部性,設計多級緩存以提升訪存效率.

5.1 香山緩存結構

考慮面積約束,“雁棲湖”微架構采用單核2 級緩存結構.L1 指令緩存和L1 數據緩存均采用虛擬索引物理標簽(virtual index physical tag,VIPT)模式,兩者共享L2 緩存.L1 指令緩存大小為16 KB,4 路組相聯;L1 數據緩存大小為32 KB,8 路組相聯.為彌補指令緩存容量偏小帶來的性能影響,“雁棲湖”微架構額外設計了一個L1+緩存,位于L1 指令緩存與L2 緩存之間,大小為128 KB.

“雁棲湖”微架構L2 緩存大小為1 MB,8 路組相聯,采用包含關系,硬件不維護指令緩存的一致性,由軟件顯式執行Fence.i 指令來維護.“雁棲湖”微架構的L2 緩存基于InclusiveCache 開源項目[11]進行若干功能增強和時序調整,以滿足時序約束.

“南湖”微架構采用雙核3 級緩存結構.每個核心的L1 指令緩存與L1 數據緩存共享其私有的1 MB L2 緩存,雙核共享一個6 MB、6 路組相聯的L3 緩存,硬件維護核間數據一致性.此外,“南湖”微架構還支持指令緩存和數據緩存之間的一致性,軟件執行Fence.i 指令后無需沖刷指令緩存.“南湖”微架構重新設計了L2 緩存和L3 緩存的內部結構,這也是“南湖”微架構的緩存子系統相對“雁棲湖”微架構改動最大之處.

5.2 “南湖”微架構HuanCun 緩存設計

“雁棲湖”微架構使用的InclusiveCache 雖然設計精巧,但存在若干缺陷:1) 不支持下一級緩存的一致性,即無法處理下游發送的snoop 請求;2) 頻率難以提升,受其結構限制較大;3) 配置不夠靈活,僅支持包含式的緩存結構,在處理器核較多、緩存結構復雜的場景下,采用包含式會損失較多有效容量.為提升緩存性能和緩解香山處理器的訪存瓶頸,“南湖”微架構開發了代號為HuanCun 的緩存模塊.

HuanCun 基于TileLink 總線開發,使用目錄維護一致性,支持包含式和非包含式,以及多種替換策略.在流片版本中,“南湖”微架構的L2 和L3 緩存均采用非包含式和PLRU 替換策略,以最大化有效容量.

HuanCun 總體結構分為目錄、數據存儲、未命中狀態處理寄存器(miss-status handling registers,MSHR)、通道控制器和預取引擎5 部分,如圖7 所示.目錄模塊負責維護緩存元數據,同時保存上層數據與本層數據的元數據,包括權限、臟位等.數據存儲模塊負責存儲具體數據,可通過參數配置 bank 數量從而提升讀寫并行度.MSHR 是非阻塞緩存的核心部件,負責處理具體的請求控制邏輯,包含多組狀態機以維護一致性.MSHR 的項數決定了緩存最大的處理并行度;通道控制模塊負責與標準 TileLink 總線接口交互,包括將外部請求轉換為緩存內部信號,以及將緩存內部請求轉換為 TileLink 請求向外發送.“南湖”微架構的預取引擎實現了高性能的BOP 算法和SMS算法,有效提升緩存命中率.此外,HuanCun 可將請求地址的低位作為索引分片(slice)以提升并行度,每個分片的邏輯相互獨立,負責具體的任務管理.

Fig.7 Micro-architecture of HuanCun圖7 HuanCun 微結構

HuanCun 的總體工作流程為:1)通道控制模塊接受 TileLink 請求,將其轉換為緩存內部請求;2) 仲裁和分配邏輯為內部請求分配1 個MSHR;3) MSHR根據不同請求類型發起各類任務,包括數據讀寫、向上下層緩存發送新請求或返回響應、更新預取器狀態等;4) 當MSHR 完成一個請求的全部操作時,MSHR 將被釋放,等待接收新請求.HuanCun 的設計存在不少挑戰:

1)死鎖問題

由于請求獨占MSHR 且MSHR 資源有限,故在復雜的多級緩存子系統中,總線請求間容易造成循環等待,導致死鎖.為規避死鎖,HuanCun 采取的設計包括更改請求分配策略,引入僅處理嵌套請求的MSHR,以及引入請求的打斷和跨層處理機制.

2)狀態爆炸問題

非包含式緩存的狀態空間很大,需處理多種異步的總線請求,以及請求打斷與跨層處理等機制.為此,HuanCun 擯棄了傳統的狀態機建模方式,而是采用若干標志寄存器聯合表示狀態.同時,構造合理的抽象,盡可能將請求處理的狀態機解耦.

3)緩存別名問題

由于“南湖”微架構的L1 緩存(指令緩存和數據緩存)使用VIPT 索引方式,且索引位與行內偏移的總位寬超過了頁內偏移(4KB,12b),這導致同一個緩存塊可能在L1 緩存中存在2 個以不同虛擬地址索引的副本,造成別名問題.“南湖”微架構采用硬件抗別名(anti-alias)機制,在L2 緩存的目錄中存放L1 緩存塊的虛擬地址別名位;若L2 緩存檢測到潛在的別名問題,則向L1 緩存發送命令使舊數據塊無效,保證L1 緩存只存放一個副本.

HuanCun 還采取了若干降低訪問延遲和增大訪存并行度的設計.在延遲優化方面,HuanCun 重點優化了通道控制模塊的流水線,以盡早釋放資源;新增的重填緩沖(refill buffer)部件負責將重填數據旁路傳輸給上級緩存.在并行度優化方面,HuanCun 增加了請求緩沖(request buffer)部件,緩解總線的阻塞情況;同時重點優化了MSHR 向通道控制器的仲裁策略,使得所有的通道控制器大多時候均可并行工作.實驗結果表明,針對部分敏感程序片斷,HuanCun 與InclusiveCache 相比性能提升約30%.

6 敏捷設計驗證方法與性能評估

6.1 基于Chisel 語言的敏捷設計

香山項目啟動時,團隊選擇使用硬件描述語言Chisel.Chisel[6]由加州大學伯克利分校團隊在2012年發布,相比于傳統的Verilog 語言,Chisel 能夠充分運用現代軟件工程中面向對象編程、函數式編程和元編程等技術對硬件進行抽象,提高編碼效率和代碼可讀性,使得硬件敏捷開發成為可能.筆者所在團隊曾對比兩者的編碼效率和代碼質量[12],結論是Chisel 不僅在開發效率上遠高于Verilog,生成的硬件電路也具有更小的面積和更低的延遲.此外,筆者所在團隊在2020 年研發了基于Chisel 語言的標簽化體系結構原型系統并成功投片,打通了Chisel 語言和后端物理實現的全流程,給香山項目的開發語言選擇提供了重要參考.

目前,“南湖”微架構的Chisel 代碼超過6 萬行.據分析,Verilog 的代碼密度約為Chisel 的1/5[12]因此“南湖”微架構的設計規模約為30 萬行Verilog 代碼量.此外,香山項目積累的驗證代碼超過3 萬行.

圖8 展示了自2020 年6 月至2022 年10 月兩代香山研發過程的4 個角度:1)截止到“南湖”微架構代碼凍結,代碼提交共7498 次,高峰期達到每周169 次;2)香山在微結構特性的驅動下持續演進,在主體框架搭建完成后逐步添加各類優化特性,關鍵性能優化點在圖8 中列出;3)香山采用時序優化與微架構迭代并行前進的開發流程,在設計早期就通過時序評估流程指導微結構設計;4)香山研制了各類基礎設施與開發工具,并不斷完善其功能性和易用性.這些設施與工具有效支撐香山的設計、驗證和性能評估全流程,是香山快速迭代的關鍵因素.

Fig.8 Development timeline of XiangShan圖8 香山開發時間軸

基于Chisel 語言優秀的建模和描述能力,香山構建了靈活的參數化系統,成為一個“處理器生成器”,可根據用戶指定的性能、面積、功耗需求進行定制,滿足開發者的各類需求.例如,香山只需改動一個參數,即可由6 發射修改為4 發射,并成功通過各種測試.此外,處理器的核數、各種隊列的大小均可配置.

6.2 敏捷驗證方法

處理器的設計效率提升后,驗證成為開發流程的新瓶頸.高性能處理器結構復雜、狀態繁多,驗證工作是一個公認的難題.即使香山“雁棲湖”微架構在3 個月內成功在仿真環境下啟動Linux 操作系統,卻仍需額外投入8 個月和大量人力才完成更全面的驗證工作.為緩解驗證瓶頸,香山團隊積極探索敏捷驗證的新方法和新工具,于2022 年的體系結構國際頂會MICRO 上發表相關成果[13].敏捷驗證方法重點聚焦在仿真驗證環節,將處理器驗證問題看作一個循環,循環體包括發現錯誤、保存出錯現場、定位并解決問題.敏捷驗證的思想是加快每一輪驗證循環的過程,從而提升驗證效率.以下從3 個方面介紹敏捷驗證的工具和方法.

1)高效發現錯誤

傳統的驗證方法通常對比待測設計(DUT,通常是RTL 實現的硬件電路)與參考模型(REF,通常是C/SystemVerilog 實現的行為模型)輸出結果的一致性.然而,這需要耗費大量人力搭建參考模型,且一旦待測設計迭代更新,參考模型也需同步更新.為提高驗證效率,香山團隊提出基于合法規則匹配的指令級在線差分驗證框架Difftest.Difftest 框架定義了一套精簡通用的API,捕捉處理器仿真時的指令提交和其他狀態更新,驅動指令集模擬器執行相同的指令,在線對比兩者狀態,并基于自定義的規則判斷處理器仿真狀態是否正常.該框架還支持多核系統驗證,可檢測緩存一致性、內存一致性的違例錯誤.

2)低成本保存出錯現場

仿真出錯后,開發者需要抓取出錯現場信息以分析和定位問題.傳統驗證方法要么在調試模式下全程仿真,產生大量的無用調試信息占用磁盤帶寬和空間;要么出錯后重新仿真復現錯誤,時間開銷較大.香山團隊受軟件容錯技術的啟發,提出定期快照和出錯回滾結合的方式來保存和復現出錯現場.為解決大量快照占用磁盤空間的問題,香山團隊提出LightSSS 工具,利用操作系統的寫時復制機制,定期通過Fork 系統調用保存仿真過程的進程狀態,實現仿真快照的輕量生成與便捷恢復.

3)快速定位并解決問題

恢復出錯現場后,傳統的錯誤定位方法通常是基于波形調試.然而,波形信息密度較低,調試費時費力.特別地,復雜隊列和緩存相關的錯誤因狀態更新間隔長,難以通過出錯現場附近的波形直接定位問題.為解決上述挑戰,敏捷驗證方法提出一套調試框架ChiselDB,可獲取設計代碼中指定的數據結構,然后在仿真過程自動收集調試信息并導入數據庫,后續可通過數據庫API 查看和分析,從而提升調試效率.

6.3 性能評估

香山實現了一套基于仿真的快速性能評估方法,通過大規模并行仿真具有代表性的程序檢查點來評估架構設計的性能.具體流程為:1) 使用高速的指令集模擬器對程序負載進行切片和采樣,生成可在其他模擬和仿真環境中恢復的檢查點;2) 使用機器學習聚類方法SimPoint[14]分析檢查點,選出具有代表性的檢查點并計算對應權重;3) 讓香山處理器在多臺服務器上并行仿真運行選取的檢查點;4) 根據仿真結果和權重綜合計算出香山處理器的性能評估數據.

通過該性能評估方法,可在3~5 天內評估“雁棲湖”微架構的SPEC 分值,評估結果與硅后的性能測試的對比如圖9 所示.實踐表明,該方法平均誤差為5%~10%,部分誤差來源于芯片DRAM 與仿真模型的不一致.

“南湖”微架構目前尚未投片,其單核仿真性能評估如圖10 所示.“南湖”微架構的仿真評估分值達到了SPECint 9.550 分/GHz、SPECfp 11.085 分/GHz,在2 GHz 下的總分為20.844 分.截至目前,該性能在開源處理器中排名第一,同頻性能還超過了Sifive P550 等商業處理器,達到ARM Cortex A76 水平.

此外,該性能評估方法有助于快速探索設計空間.例如,RVB 擴展的相關實驗結果顯示,基于GCC 10.2.0 版本工具鏈,默認配置下開啟RVB 擴展使SPECint 性能提升10.8%,SPECfp 則基本保持不變.性能提升的原因是RVB 指令可替代部分分支指令,從而減少分支預測錯誤導致的回滾開銷.因此,優秀的指令集擴展對于處理器性能提升十分關鍵.

7 物理實現

香山兩代微架構均采用前后端緊密協作的開發流程,迭代優化處理器主頻,表3 為“雁棲湖”微架構最終流片的參數列表.

“南湖”微架構目前已進入后端物理實現階段.“南湖”微架構的目標主頻是14 nm 工藝下達到2 GHz,考慮到設計通用性,未采用定制電路.后端團隊根據物理評估結果多次調整布局布線方式,從開始的粗放式模塊擺放演進到后期的細節調優,不斷平衡時序與布線之間的沖突.“南湖”微架構后端物理實現已迭代優化40 余次,最新一版如圖11 所示.此外,前端團隊也針對后端難以處理的時序關鍵路徑改動了大量相關邏輯.

Fig.9 Performance comparison of Yanqihu micro-architecture between simulation and real chip圖9 “雁棲湖”微架構仿真與真實芯片性能對比

除香山外,目前暫未有開源高性能處理器達到2 GHz,后端團隊在相同條件下評估BOOM 處理器[4],其主頻約1 GHz.大量開源處理器存在前端架構設計與后端時序優化割裂的問題,往往表現為:1) 寄存器扇入過大,邏輯級數過長;2) 寄存器扇出過大,需要插入驅動電路影響延遲;3) 模塊間邏輯耦合過深,信號布線距離過長.經過“雁棲湖”微架構的流片實踐后,香山團隊深刻認識到前后端協同優化需盡早開展,在設計規模大、設計功能復雜、不同功能的模塊數量多的情況下,如何通過協同優化芯片的功耗、性能和面積尤為關鍵,這也是業界常說的“左移”.在“南湖”微架構開發中,前后端團隊積極溝通,主要優化措施為:

1)重新組織時序緊張模塊的流水線結構,對一些關鍵部件,例如大容量隊列,可通過數據預讀取等通用策略優化時序.

2)在設計階段分離控制流和數據流,規避大驅動邏輯.另外可通過復制寄存器、切分扇出等方法解決部分大扇出問題.

3)降低模塊間功能耦合程度,結合芯片布局情況進行跨模塊優化.設計處理器要有全局視野,而不能僅關注單個模塊.

無論是前端設計和驗證,還是后端物理實現,抑或是前后端協同優化,香山遇到的挑戰在開源處理器項目中都是前所未有的.香山團隊希望在開發過程中嘗試解決難點問題,并將成果開源開放,降低行業門檻.未來規劃包括3 方面.

1) 在大規模復雜處理器芯片設計流程中,建立前后端協同優化迭代機制并積累設計經驗,在此基礎上開放流程并分享方法論.

2) 在開發過程中探索構建前后端緊密結合的芯片開發工具鏈,形成一系列支持高性能處理器芯片開發的基礎工具,并開放前后端開發流程,開源基礎設施.

3) 建立跨層優化能力體系之后,將提升流程的自動化程度,實現自動跨層優化的目標.

Fig.10 Performance evaluation of Nanhu micro-architecture圖10 “南湖”微架構性能評估

Table 3 Tape-out Details of Yanqihu Micro-architecture表3 “雁棲湖”微架構流片指標

8 聯合開發模式與下一代展望

香山項目自2021 年6 月發布以來,截至目前在開源項目托管平臺GitHub 上已有超過3200 星標(Star)和400 分支(Fork),成為國際上最活躍的開源芯片項目之一[15].國內外企業界和學術界開始使用香山,有的參與產品化工作,有的開展前沿研究.在北京市和中國科學院的支持下,18 家企業聯合發起了北京開源芯片研究院,圍繞香山開展產品化改造和后續架構探索工作,和企業共同建立了聯合開發團隊.

Fig.11 Latest floorplan design of Nanhu micro-architecture圖11 “南湖”微架構最新版圖設計

代碼開源、平臺開放的開源理念是香山聯合開發模式的基石.香山處理器的主線設計,從“雁棲湖”“南湖”到后續的“昆明湖”等微架構,都是開源開放的,開放模式與現有模式不同.以x86 為代表的封閉模式只出售芯片產品,數家核心公司壟斷x86 生態,不利于多方協作與創新;而以ARM 為代表的授權模式雖然允許IP 授權,企業可付費獲得設計代碼,但其開發平臺仍是封閉的.香山不僅開源設計代碼和文檔,還開源各類開發基礎設施,實現開發平臺的開放.基于該平臺,企業可實現“競爭前合作”,聯合開發處理器高性能架構和基礎設施,亦可基于香山的設計代碼和開發工具做二次開發,滿足各類定制化需求,一定程度上解決芯片的碎片化難題.

香山有望成為連接工業界和學術界的橋梁.首先由研究人員提出創新想法,在香山代碼上實現,每年1~2 次機會進行流片驗證;此后,聯合開發團隊將會對初步驗證的架構開展產品化改造工作,最終形成穩定的高質量工業級IP.

香山在2022 年8 月24 日迎來了發展歷程中的一個里程碑——中國科學院計算技術研究所、北京開源芯片研究院、騰訊科技、阿里巴巴集團、中興通訊、中科創達、奕斯偉科技集團、算能科技等單位和企業共同建立了聯合研發團隊,聯合開發第三代香山——“昆明湖”微架構,標志著香山及其開源模式得到了產業界的初步認可.“昆明湖”微架構將會以更高的性能為目標,并增加向量、虛擬化等擴展.

9 總結

本文首先介紹香山開源高性能RISC-V 處理器項目的總體情況,深入分析了前兩代代號分別為“雁棲湖”和“南湖”的微架構設計,分別從前端供指單元、亂序執行單元、訪存子系統和緩存子系統4 個方面系統地介紹香山團隊遇到的設計挑戰和開發經驗.同時,本文還介紹了香山團隊在敏捷設計和驗證方向的探索成果,通過一系列基礎設施高效實現香山處理器的快速迭代和演進.

如今,香山團隊正在探索處理器開發多方協作模式,歡迎各界企業與專家參與指導.香山開源社區的GitHub 網址為https://github.com/OpenXiangShan.項目在Gitee,GitLink,iHub 等開源托管平臺上均有鏡像.

作者貢獻聲明:王凱帆完成部分實驗開發任務、數據整理分析并撰寫論文;徐易難和余子濠完成部分實驗開發任務、數據整理分析并提供論文修改意見;唐丹負責實驗技術路線指導;第5 作者陳國凱到第24 作者鄒江瑞均完成部分實驗開發任務和數據整理分析;蔡曄、郇丹丹、李祖松、趙繼業、何偉、孫凝暉、包云崗提供實驗開發思路,給予工作支持和指導意見.

猜你喜歡
指令設計
聽我指令:大催眠術
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
瞞天過?!律O計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
殺毒軟件中指令虛擬機的脆弱性分析
電信科學(2016年10期)2016-11-23 05:11:56
一種基于滑窗的余度指令判別算法
主站蜘蛛池模板: 不卡的在线视频免费观看| 日本少妇又色又爽又高潮| 99九九成人免费视频精品 | 成人午夜免费视频| 天天躁夜夜躁狠狠躁图片| 九九这里只有精品视频| 67194在线午夜亚洲 | 免费国产无遮挡又黄又爽| 亚洲精品动漫在线观看| 国产91成人| 国产精品lululu在线观看| 亚洲欧美人成电影在线观看| 伊人精品成人久久综合| 日韩欧美色综合| 手机精品福利在线观看| 国产农村妇女精品一二区| 无码AV高清毛片中国一级毛片| m男亚洲一区中文字幕| 青青青国产视频| 欧美在线天堂| 波多野结衣久久高清免费| 欧美不卡二区| 国产亚洲精久久久久久无码AV| 亚洲天堂网视频| 国产高潮视频在线观看| 国产精品成人久久| 久久99热66这里只有精品一| 久久大香香蕉国产免费网站| 在线毛片免费| 538国产视频| 国产永久在线视频| 丁香六月激情综合| 玖玖精品在线| 日本一区高清| 暴力调教一区二区三区| 国产三级精品三级在线观看| 成人中文字幕在线| 国产福利不卡视频| 欧美日韩国产综合视频在线观看| 国产成人调教在线视频| 久久 午夜福利 张柏芝| 国产人妖视频一区在线观看| 色综合激情网| 凹凸精品免费精品视频| 毛片免费在线视频| 国产视频 第一页| 亚洲美女久久| 亚洲一区二区三区国产精品 | 国产精品自在拍首页视频8| 高清乱码精品福利在线视频| 亚洲国产精品日韩专区AV| 国产成人精品一区二区免费看京| 国产视频欧美| 国产性生交xxxxx免费| 自拍偷拍欧美日韩| 亚洲欧美另类中文字幕| 久久精品女人天堂aaa| 香蕉久人久人青草青草| 欧美午夜视频| 国产成人永久免费视频| 国产微拍一区| 国产91导航| 亚洲日韩高清在线亚洲专区| 伊人激情综合| 国产激情无码一区二区三区免费| 亚洲天堂首页| 国产91在线|日本| 久久毛片网| 国产永久免费视频m3u8| 在线观看国产精美视频| 午夜福利视频一区| 久久久久国产精品熟女影院| 永久在线精品免费视频观看| 亚洲成人网在线播放| 天天色综网| 五月天综合网亚洲综合天堂网| 亚洲最大综合网| 亚洲欧美综合精品久久成人网| 国产毛片高清一级国语| 丁香婷婷激情网| 国产在线日本| 国产手机在线ΑⅤ片无码观看|