Skip to content

DULI确定性用户级中断

把中断处理程序放进不受信任的用户进程,却仍然获得硬件级延迟: 从中断触发到处理程序第一条指令只需 15 个周期——无论目标进程正在运行, 还是早已休眠。

▶了解它如何工作 从断言中断到执行处理程序的第一条指令只需 15 个周期—— 无论目标进程正在运行还是已经休眠。
DULI 徽标

让这对矛盾消失 ​

微内核把每个组件隔离为非特权进程,这正是现代安全嵌入式软件的基础。但对 中断处理程序来说,麻烦恰恰从这里开始:处理程序属于组件,可内核转发一次中断 的开销,比内核级中断高一个数量级。把处理程序搬回内核能恢复延迟,却丢掉了 隔离。

现状

安全但慢

用户级处理程序必须等内核切换保护域、保存上下文、转发中断。实测超过 800 个周期。

快路径

快,但有条件

UINTR 式方案只在目标进程已经被调度时跳过内核。目标休眠时仍要回到慢路径, 形成双峰、不可预测的延迟分布。

DULI

快且有界

硬件把处理程序连同它的保护域一起激活。15 个周期,与当前进程无关, 隔离仍由硬件强制执行。

工作原理 ​

中断交付,动起来看

同一个中断,四种交付模型。注意时间花在哪里——以及为什么 DULI 的进度条最早停下。

HW硬件阶段SW软件阶段
内核转发陷入 → 保存 → 调度 → 切换 → 恢复
HW中断设备触发 IRQ
HW陷入内核特权级切换
SW保存上下文寄存器 → 栈
SW调度目标选中目标进程
SW切换保护域PMP + 栈
SW恢复上下文目标寄存器
SW处理程序内核态交付
0…
UINTR 式只在目标被调度时快,否则走内核路径
HW中断设备触发 IRQ
HW门控通过目标正在运行
SW处理程序用户级快路径
快路径…
软件快路径薄内核序言,不经过调度器
HW中断设备触发 IRQ
SW内核序言最小入口
SW保存上下文寄存器 → 栈
SW派发不切 PMP
SW处理程序内核态运行
0…
eBPF(AoT)安全执行——3.27 倍原生时间,不是交付路径
HW中断设备触发 IRQ
SWeBPF 入口进入运行时
SWeBPF 程序3.27 倍原生执行
SW返回回到调用者
3.27×…
DULI硬件同时激活处理程序与保护域
HW中断设备触发 IRQ
HWIID 查询CAM,在应答周期内
HW并行准备PMP · 预算 · 上下文
SW处理程序非特权、受约束
0…

内核路径:两个硬件阶段,随后是五个串行的软件阶段。UINTR 在目标休眠时回退到同一条软件链路。DULI:三个硬件阶段,随后进入用户处理程序。eBPF 是安全执行模型——平均执行时间是原生代码的 3.27 倍——不是中断交付机制。

动画为示意时序,不是按周期等比缩放;右侧周期数为实测值。

DULI 的交付路径上没有内核代码:硬件完成域识别、装入 PMP 与预算、备份被中断的 上下文。其它模型慢在结构上:内核路径把陷入、保存、调度、域切换、恢复串行化; UINTR 只在目标已被调度时省掉这些步骤;软件路径仍要保存上下文,目标休眠时还要 重新配置 PMP。

一条延迟,而不是两条 ​

中断延迟:目标进程运行中 vs. 已休眠(周期,越低越好)目标运行中目标已休眠0200400600800内核转发>800>800纯软件快路径80120DULI · V51515UINTR 式方案只有在目标进程被调度时才走快路径;目标休眠时退回内核路径,最坏情况与内核相同。
方案目标运行中目标已休眠
内核转发>800>800
纯软件快路径80120
DULI · V51515

大多数用户级中断方案优化的是平均情况。DULI 优化的是最坏情况:无论所属进程 正在运行,还是已经被换出很久,处理程序的激活速度完全一样。

在曲线上选择你的点 ​

面积与延迟的权衡(核心面积开销 vs. 中断延迟)0102030400%20%40%60%核心面积开销(%)中断延迟(周期)BaseV1V2V3V4V5
变体面积开销延迟(周期)
Base0%5
V1+23%37
V2+27%29
V3+48%17
V4+51%14
V5+66%11
V1–V5 延迟为硬件模型值;V5 在 FPGA 上端到端实测为 15 个周期。

五个变体逐个消除瓶颈:表查询、上下文压栈、总线竞争,最后是 IID 查询本身。 设计空间页给出全部五个变体的面积、功耗与延迟数据。

为不能错过截止时间的系统而设计 ​

运动控制

脉冲串输出

PLC 与伺服驱动至少需要 20 kHz。DULI 可稳定输出接近 300 kHz,并在另一个 进程持续穿插时把 100 kHz 的抖动保持在 5% 以下。

业务整合

实时 + 尽力而为

2 Mbps 的 Modbus-RTU 前台与图像识别后台共存:1 Mbps 时 DULI 的 FPS 损失 不到 17%,而内核转发方案已经崩溃。

安全

不受信任的处理程序

读取他人内存或死循环的处理程序,会被交付它的同一套硬件终止。故障被 限制在组件内部。

查看应用场景 →

面向确定性用户级中断的硬件研究扩展。

DULI·确定性用户级中断硬件扩展·开源工件