在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

技術科普 | Rust-Shyper 架構簡介及對 RISC-V 的支持

RISCV國際人才培養認證中心 ? 2024-10-29 08:07 ? 次閱讀

背景

在現代嵌入式應用場景中,嵌入式系統正進行著向通用系統和混合關鍵系統的方向發展的演變。越來越多的功能被集成,這些任務往往有著不同的可靠性、實時性的要求,同時又有著將不同關鍵任務進行相互隔離的需求。一個典型的例子是車載系統必須確保那些影響汽車安全行駛的組件,不會受到車載娛樂系統崩潰的影響,而這兩者也有著不同的要求與驗證等級。近年來,伴隨著具有多核處理器架構的嵌入式計算平臺的產生與發展,在單一片上系統(SoC)上部署多個復雜任務成為可能。但受限于多核處理器硬件設計的特殊性,傳統操作系統很難做到在將多任務進行隔離的前提下,還能充分利用片上系統多核優勢的要求。同時考慮到嵌入式應用領域需求的多樣性,單一的軟件系統可能很難進行多場景下的需求適配。一種可行的解決方案是,由不同的操作系統各自負責其擅長的領域,并執行相應的關鍵任務,而由一個虛擬機監控程序來對這些客戶操作系統(Guest OS)進行監管。虛擬化技術給這種技術設計提供了便利。使用硬件平臺提供的虛擬化技術(如 x86 的(非)根模式 [(Non-)Root Mode] 與 VMX 指令集),可以做到為不同的 Guest OS 分配不同的虛擬設備資源(如 CPU 與內存等),它們與實際物理設備構成映射關系,但彼此之間相互隔離。此項目面向支持 H 拓展的 64 位 RISC-V 指令集平臺,基于 Rust 語言實現了一個 Type-1 型虛擬機監控平臺,其具備運行并管理多個相互隔離的 Guest OS 的能力。

Rust-Shyper (RISC-V) 框架設計

此項目從 Rust-Shyper (Armv8) 移植,并針對 RISC-V 所支持的虛擬化拓展指令進行特化。項目還包含了管理虛擬機(MVM)中用戶態的 CLI 工具、用戶態守護進程(Daemon)以及內核模塊,整體框架如下圖所示。Rust-Shyper 提供了下列功能:

  • 對系統所有關鍵資源和狀態進行統一管理和隔離
  • 提供一套完整的核間通信機制
  • 提供多種設備模擬策略,能夠為 VM 提供虛擬磁盤、虛擬網卡等 Virt I/O 模擬設備
  • 為 VM 模擬 SBI 接口,使之能夠使用原有 M 模式下的底層接口
d5c33f30-9589-11ef-8084-92fbcf53809c.png

設備模擬與 Virt I/O 虛擬化

Rust-Shyper 提供的設備模擬策略包括全直通、全模擬、半模擬三種:全直通的物理設備由某個虛擬機獨占,全模擬由 Rust-Shyper 捕獲并模擬對設備的一切操作,半模擬由 Rust-Shyper 捕獲設備操作,并借助物理設備進行訪問行為的模擬。對于被模擬的設備,客戶機按照傳輸協議,讀寫設備的特定地址,此時會觸發客戶頁缺失異常(Load / Store guest-page fault),Rust-Shyper 捕獲并解析這些異常,并根據設備種類進行不同方式的設備模擬,流程如下圖所示。Rust-Shyper 中的半模擬設備以磁盤模擬為例,為了充分利用 Linux 中較為成熟的原生驅動,并提高 Rust-Shyper 的性能與可移植性,Rust-Shyper 可以將 GVM 中的 IO 請求轉發給 MVM 中的內核模塊,并利用 MVM 中的原生驅動完成設備的讀寫。

d5d1f7aa-9589-11ef-8084-92fbcf53809c.png

Rust-Shyper 同時實現了一個虛擬交換機,客戶操作系統所裝載的 virtio-net 虛擬網卡將連接到 Rust-Shyper 中的虛擬交換機,后者將按照規則將網絡包轉發到物理網卡中。對于模擬設備,我們會為 VM 創建模擬設備的設備樹項目,使其能夠感知到模擬設備的存在。

AIA 拓展與 APLIC 模擬

在不使用 AIA 拓展時,RISC-V 的中斷分發需要設置在發生中斷時陷入到 Rust-Shyper 中,從 PLIC 中獲取外部中斷號,然后將中斷分發給對應虛擬機,下圖黑色實線展示了外部中斷發生時的一般流程。但頻繁的 VM-Exit 會帶來一定的性能問題,尤其是應對 PCI 高速設備的中斷時。在引入 AIA 拓展后,可以由 APLIC 以寫 Interrupt File 的形式向對應的特權級或者 VM 注入中斷,直通設備的中斷可以直達 VM 而無需陷入 Rust-Shyper,由此提高了 VM 的中斷處理性能。如下圖彩色實線所示。

d5e0014c-9589-11ef-8084-92fbcf53809c.png

此外,除了 APLIC 可以往 Interrupt File 中直接注入中斷外,未來的實現會允許 PCI 設備通過 MSI 信號直接注入中斷,避免其陷入 Hypervisor。

[!NOTE] Rust-Shyper 對 Sstc 與 Svnapot 拓展的支持 RISC-V Sstc 拓展提供了 VS 模式下的計時器,使得 GVM 不需要陷入更高特權級或者進行 SBI 調用也可以設置計時器并產生中斷;Svnapot 拓展使得頁表可以支持高達 64 KiB 的頁面,從而降低高內存負載下 TLB 的壓力。Rust-Shyper 已經實現了對這兩個拓展的支持,但尚未進行完備的測試。

Rust-Shyper 使用指南

從倉庫^1中下載源碼后,安裝下列軟件依賴:

Rust Nightly

riscv64-linux-gnu-gcc 交叉編譯工具鏈

cargo-binutils (Optional)

qemu-system-riscv64 >= 8.2.0

然后進入 cli 目錄編譯用戶態運行的 Rust-Shyper CLI,并從 tools 目錄中獲取編譯好的內核模塊。它們均需要打包進 MVM 的鏡像中。

MVM 的配置

MVM 是用于對其他虛擬機進行管理的管理 VM,運行 Linux,可以通過內核模塊和用戶態命令行工具(CLI)與 Rust-Shyper 通信,以此完成管理 VM 的任務。

倉庫中提供了 5.15 版本內核的鏡像:image/Image_5.15.100-riscv-starfive,具有較為完整的功能(開啟了大部分常用的內核選項)和兼容性。

可以Ubuntu base image為基礎,構建本項目使用的 Linux rootfs,或者可以使用已經配置好的鏡像 [^2]。該鏡像的用戶名與密碼均為 root.

[!NOTE] 關于 Ubuntu 對 RISC-V 的支持與鏡像構建 要了解更多關于 Ubuntu 對 RISC-V 的支持,參見https://ubuntu.com/download/risc-v;Ubuntu base image 是一個很小的 Linux rootfs,支持 apt 安裝程序,并自帶基本的 gnu 命令行工具,可供用戶從零構建包含完整軟件包 rootfs,可參見Ubuntu Base官方。

對 MVM 的配置詳見倉庫 src/config/qemu_riscv64_def.rs,該文件配置了 MVM 的模擬設備、直通設備、中間物理內存(IPA)起始地址與大小、內核啟動參數、內核加載地址、CPU 數目等等。這部分并非完全固定,可以根據自己的需求在一定范圍內做動態的更改。

Rust-Shyper 的啟動

使用下列命令編譯并連接 RISC-V 版本的 Rust-Shyper:

ARCH=riscv64 make

使用下列命令運行:

ARCH=riscv64 make run

GVM 的啟動與配置Step.1 安裝內核模塊

insmod shyper_riscv64.ko

Step.2 啟動 Rust-Shyper 守護進程

chmod +x shyper./shyper system daemon [mediated-cfg.json] &

mediated-cfg.json(本目錄下存在的 shypercli-config.json 就是一個參考)用于配置其他 Guest VM 的 Virt I/O 中介磁盤,示例如下:

{ "mediated": [ "/root/vm0_ubuntu.img", // 此處配置第1個GVM的中介磁盤 "/root/vm0_ubuntu_2.img", // 此處配置第2個VM的中介磁盤 "/root/vm0_busybox.img" // 此處配置第3個VM的中介磁盤 ]}

其中列表每一項既可以寫分區名(如/dev/sda1),又可以寫磁盤鏡像名。

Step.3 通過配置文件來配置GVM

./shyper vm config

本目錄下(./vm1_config_riscv.json)提供了配置文件的示例(鏈接中的 Step 3)。

Step.4 啟動客戶虛擬機

./shyper vm boot

按照啟動的順序排序。MVM 的 VMID 為 0,第一個啟動的 GVM 的 VMID 為 1,可以通過./shyper vm list 查看當前配置的各個VM的信息

Step.5 與客戶虛擬機交互

首先從外部連接到 MVM:

ssh root@localhost -p 5555

然后通過 minicom 連接 hvc1,監控 GVM 的串口輸出:

minicom -D /dev/hvc1 -b 115200

這樣便可以與 GVM 交互了:

d5e3e852-9589-11ef-8084-92fbcf53809c.png

本項目鏡像中帶有的GVM鏡像vm0_ubuntu.img,其用戶名為root,密碼為vm1.

通過 AIA 啟動 Rust-Shyper

需要將 qemu-system-riscv64 升級到 9.0.2,并使用支持 AIA 的內核版本(如 6.10)。并使用配置好的支持 AIA 啟動的鏡像 [^3]。

使用如下命令編譯使用 AIA 的 RISC-V 版本的 Rust-Shyper:

ARCH=riscv64 IRQ=aia AIA_GUESTS=3 make

并使用如下命令運行:

ARCH=riscv64 IRQ=aia AIA_GUESTS=3 make run

IRQ=[plic|aia]:選擇中斷的方式,當沒有輸入該參數時,默認是plic AIA_GUESTS=nnn:需要為每個 HART 模擬的 interrupt file 的數量,也是將要運行 VM 的數量,當沒有輸入該參數時,默認是 3

啟動GVM時的配置

鏡像中提供的配置示例(./vm1_config_riscv_aia.json),相較于 PLIC,需要將模擬中斷的設備替換為APLIC:

{ "name": "aplic@d000000", "base_ipa": "0xd000000", "length": "0x8000", "cfg_num": 2, "cfg_list": [ 0, 0 ], "type": "EMU_DEVICE_T_APLIC"},

VM 多核啟動時,關于 IMSIC 的地址映射

由于在多核啟動時,會向不同的 Hart 中寫 IPI 中斷號,但由于 GuestOS 不認為自己處于虛擬化模式下,會訪問每個 Hart 的 S-mode 的 Interrupt File,所以需要建立地址映射,以便可以找到正確的 Guest Interrupt File.

若當前hart的分配情況為:

MVM:Hart0

GVM:Hart1、2、3

GVM:Hart2、3

由于 MVM 是單核啟動,所以無需建立地址映射。GVM1 應建立以下映射:

由于使用的是 Hart1、2、3,其正確的 Guest Interrupt File 地址應為0x28006000、0x2800a000、0x2800e000,但 VM 會認為自己的所用的是 Hart0、1、2,他會訪問的地址是0x28000000、0x28004000、0x28008000,所以應建立以下映射關系,VM 才會正確訪問到對應的 Interrupt File

"passthrough_device": { "passthrough_device_list": [ { "base_ipa": "0x28000000", "base_pa": "0x28006000", "length": "0x1000" }, { "base_ipa": "0x28004000", "base_pa": "0x2800a000", "length": "0x1000" }, { "base_ipa": "0x28008000", "base_pa": "0x2800e000", "length": "0x1000" } ]},

相應的,GVM2 應該映射如下:

"passthrough_device": { "passthrough_device_list": [ { "base_ipa": "0x28000000", "base_pa": "0x28006000", "length": "0x1000" }, { "base_ipa": "0x28004000", "base_pa": "0x2800a000", "length": "0x1000" }, { "base_ipa": "0x28008000", "base_pa": "0x2800e000", "length": "0x1000" } ]},

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5082

    文章

    19122

    瀏覽量

    305107
  • 操作系統
    +關注

    關注

    37

    文章

    6819

    瀏覽量

    123327
  • RISC-V
    +關注

    關注

    45

    文章

    2277

    瀏覽量

    46157
收藏 人收藏

    評論

    相關推薦

    RISC-V架構及MRS開發環境回顧

    —— CH32V103系列MCU。作為長久以來對RISC-V架構關注和研究的成果, RISC-V3A處理器,支持IMAC指令子集,內嵌了PF
    發表于 12-16 23:08

    RISC-V 與 ARM 架構的區別 RISC-V與機器學習的關系

    在現代計算機架構中,RISC-V和ARM是兩種流行的處理器架構。它們各自具有獨特的特點和優勢,適用于不同的應用場景。 1. RISC-V架構
    的頭像 發表于 12-11 17:50 ?816次閱讀

    基于risc-v架構的芯片與linux系統兼容性討論

    的硬件接口兼容。 平臺特性支持RISC-V架構的芯片可能具備一些特定的功能特性,如特定的節能模式、硬件加速器等。 Linux內核需要為這些特性提供支持并編寫相應的代碼,以確保在
    發表于 11-30 17:20

    關于RISC-V學習路線圖推薦

    架構(ISA)、流水線、內存層次結構等。 編程語言 : 熟悉C/C++或Rust等編程語言,這些是RISC-V架構下常用的編程語言。C語言必須好好學習,這是基礎哦。 二、
    發表于 11-30 15:21

    技術科普 | 芯片設計中的LEF文件淺析

    技術科普 | 芯片設計中的LEF文件淺析
    的頭像 發表于 11-13 01:03 ?251次閱讀
    <b class='flag-5'>技術科普</b> | 芯片設計中的LEF文件淺析

    risc-v與esp32架構對比分析

    擴展,從而滿足各種應用的需求。 多語言支持RISC-V架構支持多種編程語言,如C、C++、Rust等,為開發者提供了更多的選擇。 ESP
    發表于 09-26 08:40

    risc-v的發展歷史

    Foundation),旨在促進RISC-V架構的發展和推廣。該基金會由大量的企業和機構支持,包括英特爾、Nvidia、谷歌、華為、IBM、紅帽、西部數據等。 2015年:RISC-V
    發表于 07-29 17:20

    rIsc-v的缺的是什么?

    支持和合作。 綜上所述,RISC-V架構在性能、生態系統支持、市場份額和技術挑戰等方面仍存在一定的不足之處。然而,隨著
    發表于 07-29 17:18

    RISC--V架構的特點

    RISC--V架構的特點 RISC-V架構RISC-V 架構
    發表于 05-24 08:01

    Linux 6.10集成RISC-V更新,支持Rust編程語言

    本次補丁升級中,Linux內核進一步擴展了對應于RISC-V架構Rust編程語言支持。在此之前,Rust已可應用在x86_64、龍芯Loo
    的頭像 發表于 05-23 17:16 ?960次閱讀

    RISC-V有哪些優點和缺點

    RISC-V作為一種開源的指令集架構(ISA),具有一系列顯著的優點和潛在的缺點。以下是RISC-V的主要優點和缺點概述: 優點: 開源與開放性:RISC-V是開源的,這意味著任何人都
    發表于 04-28 09:03

    RISC-V有哪些優缺點?是堅持ARM方向還是投入risc-V的懷抱?

    架構,而不是嘗試新的、尚未被廣泛驗證的技術。 需要注意的是,隨著RISC-V技術的不斷發展和生態系統的逐步完善,其缺點可能會逐漸被克服。同時,RI
    發表于 04-28 08:51

    RISC-V開放架構設計之道|閱讀體驗】+ 閱讀深體驗

    和編程語言,適用于目前所有芯片設計實現技術,能用于高效實現所有微體系結構,支持高度定制化,基礎指令集架構不會改變。 所以RISC-V在誕生前舊決定了它必然更得到普遍應用,一切只是時間問
    發表于 03-05 22:01

    RISC-V開放架構設計之道|閱讀體驗】一本別出心裁的RISC-V架構之書(第一章)

    RISC-V開放架構設計之道|閱讀體驗】一本別出心裁的RISC-V架構之書(第一章) 申請這本書的時候就看到了書評中有幾點吸引我,讓我希望拜讀一下: 本書的作者是
    發表于 01-24 19:06

    RISC-V開放架構設計之道|閱讀體驗】 RISC-V設計必備之案頭小冊

    有幸參加發燒友電子的論壇評測,這兩天收到了這本需要評測的書籍《RISC-V開放架構設計之道》,全書簡單講了RISC-V指令集中目前已經完善的幾個指令集部分,并展望了未來可能會在指令集
    發表于 01-22 16:24
    主站蜘蛛池模板: 女人张开腿给人桶免费视频| 国产亚洲高清在线精品不卡| 欧美成人观看免费全部完小说| 欧美黄色片 一级片| 又大又粗又爽黄毛片| 国产―笫一页―浮力影院xyz| 黄色大片网站| julia一区二区三区中文字幕| 四虎在线成人免费网站| 伊人久久大香线蕉观看| 色综合天天色综合| 精品国产一区二区三区国产馆| 波多野结衣在线视频观看| 三级黄色免费网站| 黄黄的网站在线观看| 四虎精品影院永久在线播放| 黄色大全片| 天天干成人网| sese亚洲| 婷婷色香| 久久黄色毛片| 天天舔天天爱| 男人搡女人视频免费看| 亚洲综合第一区| 老色批视频| 天天插天天搞| 91麻豆麻豆| 国产成人黄网址在线视频| 久久天天躁夜夜躁狠狠85麻豆 | 九九精品在线| 一本大道一卡二卡| 色视频在线免费看| 成年人电影黄色| 国产成人啪午夜精品网站男同| 日本最新免费网站| 在线观看886影院成人影院| 国产h视频在线观看网站免费| 日本高清午夜色wwwσ | 4虎影视国产在线观看精品| 国产午夜在线观看视频播放| 亚洲成人在线网|