首页
运行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,以优化总线争用并提升实时性。