Skip to content

第十三周工作总结

第一部分:JH7110 平台时钟驱动中断处理优化

本周首先完成了 JH7110 平台的时钟驱动中断处理的重要修复工作,为后续的性能测试奠定了基础。

问题描述

在之前的实现中,JH7110 平台存在两个问题:

  1. 中断管理重置问题:riscv_rt的中断管理不能很好兼容embassy_preempt上下文切换的方式
  2. 时钟驱动中断处理缺失:没有正确实现机器时钟中断的处理逻辑

为了能够完整测试embassy_preempt在jh7110上的性能,修复了这个两个问题

解决方案

1. 中断管理初始化

platform.rs 中添加了 RISC-V 中断管理初始化:

rust
unsafe {
    riscv::register::mstatus::set_mie();  // 启用机器中断

    extern "C" {
        fn __trap_entry();
    }
    riscv::register::mtvec::write(
        Mtvec::new(__trap_entry as usize, TrapMode::Direct)
    );
}

然后用汇编实现了零栈开销的ecall处理路径,覆盖了riscv_rt的中断管理策略

2. 机器时钟中断处理

timer_driver.rs 中实现了完整的时钟中断处理:

中断处理函数

rust
unsafe fn on_interrupt(&self) {
    critical_section::with(|cs| {
        if mip::read().mtimer() {  // 检查机器定时器中断
            self.set_mtimecmp(u64::MAX);  // 清除中断

            // 触发 alarm 回调
            for n in 0..ALARM_COUNT {
                let alarm = &self.alarms.borrow(cs)[n];
                let timestamp = alarm.timestamp.get();
                let current_time = self.now();

                if timestamp <= current_time && timestamp != u64::MAX {
                    self.trigger_alarm(n, cs);  // 触发超时回调
                }
            }
        }
    });
}

第二部分:Embassy Preempt RTOS 性能基准测试

本周完成了 Embassy Preempt RTOS 在 StarFive JH7110 平台上的性能基准测试

工作目的

为了量化 Embassy Preempt RTOS 的实时性能,需要设计并实现性能基准测试程序,测量:

  1. 任务创建延迟
  2. 任务切换延迟
  3. 中断响应延迟

这些指标是评估 RTOS 实时性能的关键参数。


测试结果

测试环境

项目规格
硬件平台StarFive JH7110 (VisionFive2)
CPURISC-V U74 @ 1 GHz
定时器CLINT mtime @ 4 MHz
测量方法CPU 指令计数

性能指标

1. 任务创建延迟

指标数值
CPU 循环次数400 - 500 条指令
执行时间400 - 500 ns
平均延迟457 ns

SyncOSTaskCreate() 调用到任务首次执行的时间开销。

2. 中断响应延迟

指标数值
CPU 循环次数400 - 800 条指令
执行时间400 - 800 ns
平均延迟633 ns

从硬件中断触发到最高优先级中断处理程序开始执行的时间。

测量方法说明

测量原理

  • 通过观察 CPU 执行的循环次数(CPU cycles)来计算延迟
  • 使用 CPU 频率(1 GHz = 1,000,000,000 Hz)将循环次数转换为时间
  • 公式:执行时间(ns) = CPU 循环次数 / CPU 频率(Hz) × 10^9

示例计算

  • 450 条指令 @ 1GHz CPU = 450 / 1,000,000,000 × 10^9 = 450 ns

数据可靠性

  • ✅ Embassy Preempt 数据:实际测试获得,高度可靠
  • ⚠️ 对比系统数据:来源于公开文档和学术资源,仅供参考
  • ⚠️ 跨架构比较:RISC-V vs ARM,不同 CPU 微架构会影响实际性能

📈 性能对比

说明:以下数据来源于公开文档、学术资源和实际测试,不同 CPU 架构和频率会影响实际性能,对比仅供参考。

RTOS / 系统平台CPU 频率任务创建/调度延迟中断响应延迟数据来源
Embassy PreemptRISC-V JH71101 GHz457 ns633 ns实际测试
Embassy PreemptARM STM32F401RE84 MHz10.13 μs-实际测试
FreeRTOSARM Cortex-M372 MHz~12 μs-FreeRTOS FAQ
FreeRTOSRISC-V HiFive1320 MHz~1.8 μs-SiFive HiFive1 Benchmark
ZephyrARM Cortex-M64 MHz~8 μs-Zephyr Benchmark Docs
ThreadXARM Cortex-M4120 MHz~3 μs-Microsoft Azure RTOS
Linux (PREEMPT_RT)x86_643 GHz-7-50 μsRealtime Linux Wiki