Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

首页

运行RME

K3 运行 RME

以下步骤以 Debian 13 为例。日期:2026/10/24。

1. 安装依赖

sudo apt update
sudo apt install curl build-essential pkg-config libudev-dev git gcc-riscv64-unknown-elf

各包用途:

  • curl:安装 rustup 需要
  • build-essential:编译安装 ostool 需要
  • pkg-config:编译安装 ostool 需要
  • libudev-dev:编译安装 ostool 需要
  • git:克隆 git 仓库需要
  • gcc-riscv64-unknown-elf:编译内核需要

2. 安装 rustup

用于管理rust组件

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source $HOME/.cargo/env

3. 安装 riscv64gc 目标支持

编译 init 用户程序需要。

rustup target add riscv64gc-unknown-none-elf

4. 安装 llvm-objcopy 命令

ostool 需要。

rustup component add llvm-tools

5. 安装 ostool

cargo install ostool

6. 登录 ostool

参考 ostool-guide 登录 ostool。

mkdir -p ~/.ostool
cat > ~/.ostool/config.toml << EOF
[board]
server = "https://ostool.muxai.net:14321/"
auth_mode = "required"
EOF
ostool login

7. 克隆 git 仓库

包括内核和 init 用户程序。

git clone https://github.com/M7OS-Dev/M7M01_Eukaron
git clone https://github.com/M7OS-Dev/M7M03_Anomalocaris

8. 进入 SPACEMIT K3 项目目录

cd M7M01_Eukaron/Project/GCC-SPACEMIT-K3/

9. 编译内核和 init 用户程序

make

10. 运行 K3

./run_k3.sh

注意事项

  • RME内核不是rust项目,但是ostool(当前版本为0.31.1)会检查Cargo.toml和src/lib.rs,因此需要创建这两个文件来满足ostool要求

报告

20261104会议报告:RME移植方案研讨

主题摘要:本次会议围绕实时操作系统在K3平台的移植展开,探讨了核间通信机制。

一、RME移植现状与性能排查

1. 当前移植进展

  • 大核运行RME:目前已在K3大核上成功运行RME,并通过QEMU模拟了8核虚拟机环境进行初步测试。
  • 初步基准测试结果异常:当前测试显示线程切换耗时高达1万多周期,远超预期的1000至2000周期,性能表现异常。

2. 性能异常归因与修复

  • TLB刷新机制导致开销过大:排查发现,当前未开启ASID功能,导致每次切换页表(SATP)时触发了TLB刷新,这是导致切换耗时激增的核心原因。
  • 修复方案:计划通过启用ASID功能,从而避免不必要的全量TLB刷新,将切换开销降至正常水平。

3. 硬件FENCE指令性能瓶颈

  • FENCE指令耗时极高:硬件测试数据显示,单次FENCE指令耗时高达2.2微秒,导致原子读写(read acquire/write release)等同步操作性能极差。
  • 架构设计缺陷:该处理器的FENCE指令实现效率低下,跨核数据可见性开销巨大,严重制约了多核场景下的实时性表现。

二、系统架构与部署方案优化

1. 核心部署策略调整

  • 考虑放弃多核部署:鉴于FENCE指令性能瓶颈及缓存同步问题,考虑放弃在实时核内部构建多核系统的方案,改为在每个实时核上独立部署单核系统。
  • 单核部署优势:在单核架构下,读写操作可直接映射为普通内存写入,无需携带acquire/release语义,彻底规避了FENCE指令带来的性能损耗。

2. 存储架构优化

  • 迁移至片上SRAM:为减少总线争用并提升确定性,计划将实时系统运行在片上SRAM中,而非外部DRAM。
  • 性能提升预期:全走SRAM后,系统切换开销可稳定在1000周期左右,波动控制在30%以内,大幅提升实时性。

3. 核间通信机制设计

  • Rust语言重写通信模块:计划将核间通信模块全部使用Rust语言重写,以提升并发处理的安全性和代码优雅度。
  • 底层交互采用unsafe封装:由于通信模块涉及底层硬件操作,将使用Rust的unsafe特性进行封装,并通过ABI与C语言内核进行数据交换。

三、后续目标

  • 完成全量基准测试:后续需补充信号端点发送、中断接收及同步通信等全量API的基准测试,确保系统功能与性能达标。
  • 大核和实时核同时运行:大核运行Linux/StarryOS,实时核运行RME,两者可通信。

四、待办事项

  • 排查并修复TLB刷新导致的性能异常,通过启用ASID功能优化页表管理。
  • 补充执行所有API的基准测试,包括信号端点发送、接收及同步通信等。
  • 将核间通信模块全部使用Rust语言重写,底层交互采用unsafe封装。
  • 将系统运行环境迁移至实时核和片上SRAM,以优化总线争用并提升实时性。