修改“统一同步任务与异步任务”部分报告
完善embassy_preempt线程的测试(设置更高间隔,跑到delay,测出去掉栈分配的情况)
修改idle任务

修改idle

idle任务被抢占的时候,是不需要保存上下文的。可以直接poll新的任务执行
判断到,如果抢占的是idle,在interrupt poll那里,就不会分配栈,并且保持当前任务为thread mode,然后模拟压栈,然后在pendsv那里,会先在判断到cur prio为63的时候设置不回收原来栈

测试数据

embassy_preempt协程模式
embassy_preempt线程模式
ucosii
调度时间
10.125us
7.125us
6.625us
  • 线程模式:
    • 从调用IntCtxSw至触发PendSV中断耗时2.875us
    • PendSV执行时间为2.125us
    • 从PendSV执行结束至任务执行所花费的时间为0.375us
  • 协程模式:
    • 从调用IntCtxSw至触发PendSV中断耗时
      • 若抢占idle任务:4us
      • 若抢占普通任务:4.875us
    • PendSV执行时间为2us
    • 从PendSV执行结束至执行任务Poll_Fn所花费的时间为0.75us
    • 从Poll_Fn至任务被执行花费1.5us
结论:embassy_preempt的协程模式相较于线程模式(线程模式与ucosii的耗时几乎相同),多余的步骤为模拟压栈(额外耗时:4-2.875=1.125us),跳板函数闭包(模拟压栈时对应PC的闭包)以及poll_fn的调用(额外耗时:1.5+0.75-0.375=1.875us)。最终导致的总耗时为3us,这也就是embassy_preempt协程模式与embassy_preempt线程模式与ucosii的差距。
Loading...
liamY
liamY
Chasing Possible
最新发布
Enter AMX (Advanced Matrix Extensions)
2025-3-26
ktransformers相关内容学习
2025-2-16
sglang_benchmark
2025-2-7
SnapKV: LLM Knows What You are Looking for Before Generation
2024-12-12
数字电路复习
2024-12-11
CacheBlend: Fast Large Language Model Serving with Cached Knowledge Fusion论文学习
2024-11-23
公告
🎉Liam’s blog🎉
-- 全新上线 ---
👏欢迎comment👏
⚠️由于浏览器缓存的原因,有些内容是更新了的但是需要手动刷新3次左右,页面才会显示更新内容