实测结果
以下数字全部来自可运行的平台:V1、V2、V5 在 50 MHz 的 XC7K480T FPGA 上, 128 KiB 零等待 SRAM,256 KiB Flash 由 SRAM 模拟。程序使用 GCC 15.2.0 -O3 编译,每项测量重复 10 000 次。基线包括纯内核路径(KERNEL)、只在目标活跃时 绕过内核的 Intel UINTR 式方案(UINTR),以及最小软件序言方案(SOFTWARE)。
一个保守的测试平台
零等待 SRAM 近似理想 cache 行为。在真实 SoC 上,外部或较慢内存会让内核路径 更长,而扩展本身可以放在 TCM 里——所以这里报告的提升是保守值。
原始延迟
| 方案 | 目标运行中 | 目标已休眠 |
|---|---|---|
| 内核转发 | >800 | >800 |
| 纯软件快路径 | 80 | 120 |
| DULI · V5 | 15 | 15 |
最关键的结果不是平均值,而是那根柱子不动:V1 与 V2 在两种进程状态下都低于 50 周期,V5 始终是 15 周期。所有扩展变体在“目标活跃”与“目标休眠”之间的方差 都接近于零,而任何基线都做不到——UINTR 只在目标被调度时快,否则退回完整的 内核路径。
隔离在攻击下依然成立
我们注册恶意处理程序,让它们读取他人内存或无限循环。三种关键场景都会终止 处理程序并返回被抢占的上下文:
- 恶意处理程序抢占用户线程;
- 恶意处理程序抢占内核;
- 恶意处理程序抢占另一个用户级处理程序,包括 V5 寄存器组耗尽后的深层嵌套。
空间违规由 PMP 捕获,时间违规由预算计数器捕获。在第三种场景中,V5 退化为 V2 的延迟而不是失败——时间隔离仍然成立。
运动控制:脉冲串输出
脉冲串输出(PTO)是 PLC/伺服的基本原语:中断处理程序计算下一个脉冲周期并 翻转输出引脚。它是确定性抖动的标准测试。
| 方案 | 最高可持续频率 | 抖动 |
|---|---|---|
| KERNEL | 最低;约 15 kHz 以上不可用 | 15 kHz 附近 >40% |
| UINTR | 目标休眠时等同内核 | 混合场景下灾难性劣化 |
| SOFTWARE | 中等 | 100 kHz 时无法接受 |
| DULI V1/V2 | 接近 300 kHz | 100 kHz 时 <5% |
| DULI V5 | >250 kHz | 250 kHz 以上 8% |
在常见的 10 kHz 工作点,所有 DULI 变体的抖动都低于 0.5%——比内核转发好约 60 倍。工业驱动要求的 20 kHz 下限被远远满足,而另一个进程仍在持续穿插。
单核上的实时与尽力而为
Modbus-RTU 前台(每字节一次中断)与图像识别后台并发运行。这就是业务整合场景: 实时任务要低最坏延迟,后台任务要吞吐。
| 方案 | 115.2 kbps | 1 Mbps | 最高波特率 |
|---|---|---|---|
| KERNEL | 143 → 92 FPS(−36%) | 失败 | <300 kbps |
| UINTR | 与 KERNEL 相同(目标休眠) | 失败 | <300 kbps |
| SOFTWARE | 轻微损失 | 68 FPS(−52%) | >1 Mbps |
| DULI V1 | ≤5 FPS 损失 | 108 FPS(−24%) | 2 Mbps |
| DULI V5 | ≤5 FPS 损失 | 120 FPS(−17%) | 2 Mbps |
在无处不在的 115.2 kbps 下,DULI 的吞吐损失比内核转发小约 10 倍,比最佳软件 路径小 2 倍。到 1 Mbps 时,内核类基线已经出局。
面积与集成工作量
扩展的核心面积开销从 +23%(V1)到 +66%(V5),但核心在真实裸片中只占很小 一部分:在四颗去封装的 SoC 上,额外面积只占总裸片面积的 0.03%–0.91%。 完整表格见设计空间页。
接入现有微内核所需的新增源码:
| 变体 | 新增源码行 | 占内核 + HAL 比例 |
|---|---|---|
| V1 / V2 | +216 | +2.14% |
| V5 | +270 | +2.67% |
在 5 856 + 4 249 行的内核与 HAL 上,这是一个小且可审查的改动——中断路径上 没有新增代码,只有注册、预算补充和新的用户级返回指令。
这些数字没有覆盖什么
- 单核。 全局中断路由与仲裁属于未来工作。
- 原型没有 cache。 扩展受影响很小,因为它的表可以放在 TCM;内核路径会 受到更大影响。
- 没有 FPU 上下文。 FPU 寄存器不在范围内;基线中的 FPU 仅用于面积统计。
- 平均情况不是重点。 以上结果全部关于最坏情况。尾链(tail-chaining)等 平均情况优化被刻意省略。