当前位置: 首页 > news >正文

PREEMPT_RT 技术实现:Threaded interrupt handler

中断线程化,使得高优先级的中断变成了普通的内核线程,和其他程序共用CPU,通过优先级来决定谁能够获取CPU的使用权。将一些不重要的中断改在线程中执行,只要RT任务优先级比中断线程优先级高,就可以优先执行,以此来提高系统的实时性能

传统主线内核默认中断行为

普通硬中断上下文:关闭硬件中断,同时隐式禁止抢占、禁止软中断,中断处理全程在硬中断上下文执行。

为了清晰描述,我用excel画了下面这张图。从图中可以看到,硬中断、软中断、特定的tasklet都不在调度器的管辖范围内,运行在interrupt context中。无论是内核线程还是用户程序,在中断发生时,都需要立刻让出CPU的使用权。在实时系统中,其实很多中断所做的并不是特别重要的工作,或者说,即使有些许延迟,也是无关紧要的。主线内核中的默认中断行为,会严重影响RT任务的执行周期及抖动。

PREEMPT_RT中的中断行为

PREEMPT_RT 默认强制开启线程化中断(threaded interrupts);除带IRQF_NO_THREAD标记的中断外,所有中断处理函数都运行在内核线程上下文,不再跑在硬中断上下文。

如下图所示,不重要的硬中断、所有软中断和tasklet都不在运行在interrupt context中,而是作为普通的内核线程,交给调度器,根据调度算法来决定是否可被抢占。换个说法就是,通过提高RT Task的优先级,在PREEMPT_RT kernel中,RT Task可以避免一些中断的干扰(传统内核中的中断,在PREEMPT_RT内核中已经变成了线程)。

不会被线程化的中断
IRQF_NO_THREAD标志的中断仍以原始硬中断方式运行、关硬件中断;

  • IPI 跨处理器中断 主动使用该标志
  • IRQF_TIMERIRQF_PER_CPU类型中断隐式自带 IRQF_NO_THREAD,不会线程化。

线程化中断的线程属性
开启后,中断交由内核线程执行,调度策略为SCHED_FIFO,默认优先级 50。

/* * Priority of a process goes from 0..MAX_PRIO-1, valid RT * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH * tasks are in the range MAX_RT_PRIO..MAX_PRIO-1. Priority * values are inverted: lower p->prio value means higher priority. */ #define MAX_RT_PRIO 100 void sched_set_fifo(struct task_struct *p) { struct sched_param sp = { .sched_priority = MAX_RT_PRIO / 2 }; WARN_ON_ONCE(sched_setscheduler_nocheck(p, SCHED_FIFO, &sp) != 0); } /* * Interrupt handler thread */ static int irq_thread(void *data) { ... sched_set_fifo(current); ... }
http://www.jsqmd.com/news/1074932/

相关文章:

  • Mikrotik RouterOS安全加固实战:从默认漏洞到防火墙配置全解析
  • VisualCppRedist AIO:Windows运行库一体化解决方案深度解析
  • 3步搭建Sunshine游戏串流服务器:告别延迟的终极解决方案
  • 环境配置记录
  • Windows文件同步终极解决方案:SyncTrayzor完整使用指南与实战技巧
  • 金融SRC漏洞挖掘实战:从业务逻辑到API安全的深度攻防指南
  • 2026年AI论文网站盘点:12款神器助你高效完成去痕改写、润色和过检
  • java--Day3-多态and包
  • 俄罗斯酒类推广实战指南:合规、文化与渠道的三重穿透
  • 3分钟搞定Rhino到Blender转换:import_3dm插件完全指南
  • 如何快速实现手机号码归属地查询:免费精准定位地图工具
  • Scikit-Learn棒球预测模型:物理特征与可解释性实战
  • Seedance 2.0 API万字解析:多模态视频生成工程实践
  • 096、NPU的模型加密:硬件解密引擎
  • Adobe-GenP:免费解锁Adobe全家桶的专业破解工具指南
  • 我对MCP偏见的转变
  • 强力指南:5步掌握Blender与Rhino 3D的无缝数据转换
  • 3步掌握NoFences:让Windows桌面告别杂乱无章的免费开源方案
  • Windows右键菜单终极管理:ContextMenuManager深度技术解析与实战指南
  • 加州大学圣地亚哥分校AI训练师:教大模型“挑食“,效率飙升三倍
  • 北大联手中科院:给机器人装上“空间记忆“,让它不再靠蒙猜方向
  • 04-性能优化与最佳实践——03. useCallback - 函数缓存
  • 树结构Steklov特征值最大化:从双蜘蛛图到广义跷跷板树
  • 原来还有这么靠谱的TPU热熔胶膜公司?究竟好在哪?
  • DonkeyCar油门校准实战指南:从PWM信号到精准扭矩控制
  • 第 31 篇:keep-alive:连接保活的真相
  • 台球辅助工具终极指南:3分钟掌握精准瞄准技巧
  • Hokuyo激光雷达与gmapping建图原理及TurtleBot实战调优
  • 终极指南:3步安装League Akari,免费英雄联盟智能助手提升你的游戏体验
  • GEO内容结构化技术是什么?如何让AI精准提取和引用品牌信息?