一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

技術(shù)科普 | Rust-Shyper 架構(gòu)簡(jiǎn)介及對(duì) RISC-V 的支持

RISCV國(guó)際人才培養(yǎng)認(rèn)證中心 ? 2024-10-29 08:07 ? 次閱讀

背景

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

Rust-Shyper (RISC-V) 框架設(shè)計(jì)

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

  • 對(duì)系統(tǒng)所有關(guān)鍵資源和狀態(tài)進(jìn)行統(tǒng)一管理和隔離
  • 提供一套完整的核間通信機(jī)制
  • 提供多種設(shè)備模擬策略,能夠?yàn)?VM 提供虛擬磁盤、虛擬網(wǎng)卡等 Virt I/O 模擬設(shè)備
  • 為 VM 模擬 SBI 接口,使之能夠使用原有 M 模式下的底層接口
d5c33f30-9589-11ef-8084-92fbcf53809c.png

設(shè)備模擬與 Virt I/O 虛擬化

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

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

Rust-Shyper 同時(shí)實(shí)現(xiàn)了一個(gè)虛擬交換機(jī),客戶操作系統(tǒng)所裝載的 virtio-net 虛擬網(wǎng)卡將連接到 Rust-Shyper 中的虛擬交換機(jī),后者將按照規(guī)則將網(wǎng)絡(luò)包轉(zhuǎn)發(fā)到物理網(wǎng)卡中。對(duì)于模擬設(shè)備,我們會(huì)為 VM 創(chuàng)建模擬設(shè)備的設(shè)備樹項(xiàng)目,使其能夠感知到模擬設(shè)備的存在。

AIA 拓展與 APLIC 模擬

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

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

此外,除了 APLIC 可以往 Interrupt File 中直接注入中斷外,未來的實(shí)現(xiàn)會(huì)允許 PCI 設(shè)備通過 MSI 信號(hào)直接注入中斷,避免其陷入 Hypervisor。

[!NOTE] Rust-Shyper 對(duì) Sstc 與 Svnapot 拓展的支持 RISC-V Sstc 拓展提供了 VS 模式下的計(jì)時(shí)器,使得 GVM 不需要陷入更高特權(quán)級(jí)或者進(jìn)行 SBI 調(diào)用也可以設(shè)置計(jì)時(shí)器并產(chǎn)生中斷;Svnapot 拓展使得頁表可以支持高達(dá) 64 KiB 的頁面,從而降低高內(nèi)存負(fù)載下 TLB 的壓力。Rust-Shyper 已經(jīng)實(shí)現(xiàn)了對(duì)這兩個(gè)拓展的支持,但尚未進(jìn)行完備的測(cè)試。

Rust-Shyper 使用指南

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

Rust Nightly

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

cargo-binutils (Optional)

qemu-system-riscv64 >= 8.2.0

然后進(jìn)入 cli 目錄編譯用戶態(tài)運(yùn)行的 Rust-Shyper CLI,并從 tools 目錄中獲取編譯好的內(nèi)核模塊。它們均需要打包進(jìn) MVM 的鏡像中。

MVM 的配置

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

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

可以Ubuntu base image為基礎(chǔ),構(gòu)建本項(xiàng)目使用的 Linux rootfs,或者可以使用已經(jīng)配置好的鏡像 [^2]。該鏡像的用戶名與密碼均為 root.

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

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

Rust-Shyper 的啟動(dòng)

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

ARCH=riscv64 make

使用下列命令運(yùn)行:

ARCH=riscv64 make run

GVM 的啟動(dòng)與配置Step.1 安裝內(nèi)核模塊

insmod shyper_riscv64.ko

Step.2 啟動(dòng) Rust-Shyper 守護(hù)進(jìn)程

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

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

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

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

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

./shyper vm config

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

Step.4 啟動(dòng)客戶虛擬機(jī)

./shyper vm boot

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

Step.5 與客戶虛擬機(jī)交互

首先從外部連接到 MVM:

ssh root@localhost -p 5555

然后通過 minicom 連接 hvc1,監(jiān)控 GVM 的串口輸出:

minicom -D /dev/hvc1 -b 115200

這樣便可以與 GVM 交互了:

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

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

通過 AIA 啟動(dòng) Rust-Shyper

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

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

ARCH=riscv64 IRQ=aia AIA_GUESTS=3 make

并使用如下命令運(yùn)行:

ARCH=riscv64 IRQ=aia AIA_GUESTS=3 make run

IRQ=[plic|aia]:選擇中斷的方式,當(dāng)沒有輸入該參數(shù)時(shí),默認(rèn)是plic AIA_GUESTS=nnn:需要為每個(gè) HART 模擬的 interrupt file 的數(shù)量,也是將要運(yùn)行 VM 的數(shù)量,當(dāng)沒有輸入該參數(shù)時(shí),默認(rèn)是 3

啟動(dòng)GVM時(shí)的配置

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

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

VM 多核啟動(dòng)時(shí),關(guān)于 IMSIC 的地址映射

由于在多核啟動(dòng)時(shí),會(huì)向不同的 Hart 中寫 IPI 中斷號(hào),但由于 GuestOS 不認(rèn)為自己處于虛擬化模式下,會(huì)訪問每個(gè) Hart 的 S-mode 的 Interrupt File,所以需要建立地址映射,以便可以找到正確的 Guest Interrupt File.

若當(dāng)前hart的分配情況為:

MVM:Hart0

GVM:Hart1、2、3

GVM:Hart2、3

由于 MVM 是單核啟動(dòng),所以無需建立地址映射。GVM1 應(yīng)建立以下映射:

由于使用的是 Hart1、2、3,其正確的 Guest Interrupt File 地址應(yīng)為0x28006000、0x2800a000、0x2800e000,但 VM 會(huì)認(rèn)為自己的所用的是 Hart0、1、2,他會(huì)訪問的地址是0x28000000、0x28004000、0x28008000,所以應(yīng)建立以下映射關(guān)系,VM 才會(huì)正確訪問到對(duì)應(yīng)的 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" } ]},

相應(yīng)的,GVM2 應(yīng)該映射如下:

"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" } ]},

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5125

    文章

    19438

    瀏覽量

    313047
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    7025

    瀏覽量

    124700
  • RISC-V
    +關(guān)注

    關(guān)注

    46

    文章

    2461

    瀏覽量

    48000
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Arm與RISC-V架構(gòu)的優(yōu)劣勢(shì)比較

    關(guān)于Arm與RISC-V的討論涉及多個(gè)層面。雖然多種因素共同作用于這些架構(gòu)的整體性能,但每種架構(gòu)都有其最適合的幾類主要應(yīng)用場(chǎng)景。 Arm 長(zhǎng)期以來,專有技術(shù)往往意味著高昂的許可費(fèi)用,A
    發(fā)表于 02-01 22:30

    RISC-V MCU技術(shù)

    嘿,咱來聊聊RISC-V MCU技術(shù)哈。 這RISC-V MCU技術(shù)呢,簡(jiǎn)單來說就是基于一個(gè)叫RISC-V的指令集
    發(fā)表于 01-19 11:50

    RISC-V架構(gòu)及MRS開發(fā)環(huán)境回顧

    —— CH32V103系列MCU。作為長(zhǎng)久以來對(duì)RISC-V架構(gòu)關(guān)注和研究的成果, RISC-V3A處理器,支持IMAC指令子集,內(nèi)嵌了PF
    發(fā)表于 12-16 23:08

    RISC-V 與 ARM 架構(gòu)的區(qū)別 RISC-V與機(jī)器學(xué)習(xí)的關(guān)系

    在現(xiàn)代計(jì)算機(jī)架構(gòu)中,RISC-V和ARM是兩種流行的處理器架構(gòu)。它們各自具有獨(dú)特的特點(diǎn)和優(yōu)勢(shì),適用于不同的應(yīng)用場(chǎng)景。 1. RISC-V架構(gòu)
    的頭像 發(fā)表于 12-11 17:50 ?2336次閱讀

    基于risc-v架構(gòu)的芯片與linux系統(tǒng)兼容性討論

    的硬件接口兼容。 平臺(tái)特性支持RISC-V架構(gòu)的芯片可能具備一些特定的功能特性,如特定的節(jié)能模式、硬件加速器等。 Linux內(nèi)核需要為這些特性提供支持并編寫相應(yīng)的代碼,以確保在
    發(fā)表于 11-30 17:20

    關(guān)于RISC-V學(xué)習(xí)路線圖推薦

    架構(gòu)(ISA)、流水線、內(nèi)存層次結(jié)構(gòu)等。 編程語言 : 熟悉C/C++或Rust等編程語言,這些是RISC-V架構(gòu)下常用的編程語言。C語言必須好好學(xué)習(xí),這是基礎(chǔ)哦。 二、
    發(fā)表于 11-30 15:21

    什么是RISC-V?以及RISC-V和ARM、X86的區(qū)別

    不同的應(yīng)用需求進(jìn)行裁剪和擴(kuò)展,而ARM指令集則有多個(gè)版本,在不同的應(yīng)用場(chǎng)景中使用。 許可和生態(tài)系統(tǒng):RISC-V架構(gòu)沒有知識(shí)產(chǎn)權(quán)費(fèi)用,使用和實(shí)現(xiàn)都是自由的,因此在學(xué)術(shù)界和開源社區(qū)中獲得了廣泛的支持
    發(fā)表于 11-16 16:14

    技術(shù)科普 | 芯片設(shè)計(jì)中的LEF文件淺析

    技術(shù)科普 | 芯片設(shè)計(jì)中的LEF文件淺析
    的頭像 發(fā)表于 11-13 01:03 ?604次閱讀
    <b class='flag-5'>技術(shù)科普</b> | 芯片設(shè)計(jì)中的LEF文件淺析

    risc-v與esp32架構(gòu)對(duì)比分析

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

    RISC-V Summit China 2024 | 青稞RISC-V+接口PHY,賦能RISC-V高效落地

    量產(chǎn)芯片的關(guān)鍵技術(shù);公司籌備了第二屆RISC-V中國(guó)峰會(huì)的南京會(huì)場(chǎng);青稞RISC-V的單雙線調(diào)試技術(shù),在第三屆峰會(huì)上入選RISC-V
    發(fā)表于 08-30 17:37

    risc-v的發(fā)展歷史

    Foundation),旨在促進(jìn)RISC-V架構(gòu)的發(fā)展和推廣。該基金會(huì)由大量的企業(yè)和機(jī)構(gòu)支持,包括英特爾、Nvidia、谷歌、華為、IBM、紅帽、西部數(shù)據(jù)等。 2015年:RISC-V
    發(fā)表于 07-29 17:20

    rIsc-v的缺的是什么?

    支持和合作。 綜上所述,RISC-V架構(gòu)在性能、生態(tài)系統(tǒng)支持、市場(chǎng)份額和技術(shù)挑戰(zhàn)等方面仍存在一定的不足之處。然而,隨著
    發(fā)表于 07-29 17:18

    RISC-V的MCU與ARM對(duì)比

    或許可費(fèi)。這確保了ARM的穩(wěn)定性和可靠性,以及高質(zhì)量的技術(shù)支持和生態(tài)系統(tǒng)。 指令集與實(shí)現(xiàn) RISC-VRISC-V是一種模塊化的架構(gòu),由一個(gè)基本指令集和多個(gè)可選指令集擴(kuò)展組成。這允
    發(fā)表于 05-27 15:58

    RISC--V架構(gòu)的特點(diǎn)

    RISC--V架構(gòu)的特點(diǎn) RISC-V架構(gòu)RISC-V 架構(gòu)
    發(fā)表于 05-24 08:01

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

    本次補(bǔ)丁升級(jí)中,Linux內(nèi)核進(jìn)一步擴(kuò)展了對(duì)應(yīng)于RISC-V架構(gòu)Rust編程語言支持。在此之前,Rust已可應(yīng)用在x86_64、龍芯Loo
    的頭像 發(fā)表于 05-23 17:16 ?1161次閱讀