Skip to content

第十八周工作总结

概述

本周主要进行 embassy_preempt 的性能测试,重点测试了上下文切换延迟和远程函数调用(RPC)延迟。

测试环境

  • 硬件平台:VisionFive2 JH7110
  • CPU频率:1 GHz
  • 架构:RISC-V 64位
  • 特权级:Machine Mode (M态)
  • 测试方法:GPIO翻转 + 逻辑分析仪测量

核心测试结果

1. 上下文切换测试

测试结果

测试项延迟
__ContextSwitchHandler(不释放栈)~700 ns
__ContextSwitchHandler(释放栈)~900 ns
await 系列 API(调用到让权)~800 ns
完整上下文切换1253 ~ 1464 ns

测试方法

使用 GPIO 翻转标记关键时间点:

  • GPIO 39:__ContextSwitchHandler 入口
  • GPIO 40:__ContextSwitchHandler 出口

核心代码

__ContextSwitchHandler 实现:[os_cpu.rs:30-79]

rust
extern "C" fn __ContextSwitchHandler(trap_frame: *mut TrapFrame) -> *mut TrapFrame {
    // 优先级检查
    if prio_highrdy == prio_cur {
        return trap_frame;
    }
    // 栈交换
    let stk_ptr = global_executor.OSTCBHighRdy.get_mut().take_stk();
    let mut old_stk = get_program_stack().swap(stk_ptr);
    // ...
}

Trap 入口(寄存器保存):[trap/mod.rs]

2. RPC 延迟测试

测试结果

测试项延迟
IPI 中断 → 函数开始处理3.585 ~ 4.669 μs
目标指标< 5 μs

处理流程

MSIP 中断 → 汇编入口保存寄存器 → trap_handler
    → dispatch_interrupt(M_SOFT) → ipi_callback
    → IPI_WAIT_LIST.wake_all() → IntCtxSW()

性能测试报告