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

8.4通过延迟补偿来提高实时性

8.4 通过延迟补偿来提高实时性

延迟补偿的基本原理,不是改变时钟本身的精度,而是主动地、提前地设置定时器的到期时间,以“预支”(anticipate)掉已知的、系统固有的响应延迟。

在实时系统中,从定时器到期(Timer Shot)到目标代码(中断处理程序 IRQ、内核任务 Kernel 或用户空间线程 User)实际开始执行之间存在不可避免的延迟。

延迟来源包括硬件因素(如硬件定时器重编程所需的时间、总线传输、缓存未命中)和软件因素(如关中断代码执行、调度延迟、内核态用户态切换等)。

Gravity (重力值) 是一个静态调整值(以纳秒为单位)。它的作用是将定时器的触发时间点提前(Anticipate)Gravity (重力值) 所表示的时间量。

例如,如果一个用户空间线程需要在绝对时间点 T 被唤醒,但系统从定时器到期到唤醒该线程通常需要 G 纳秒(用户重力),那么定时器会被设置为在T - G时刻到期。这样,尽管有延迟 G,线程实际被唤醒的时间点会更接近预期的 T。

Xenomai 3三个独立的重力值,分别对应定时器触发后激活的不同执行上下文:

  • irq重力值: 中断发生到执行实时中断处理程序 (Real-time IRQ handler)的固有延迟
  • kernel重力值: 从中断处理程序执行结束,到开始执行内核态 RTDM 线程 (Kernel task)的固有延迟
  • user重力值: 从中断处理程序执行结束,到开始执行用户态用户空间 Xenomai 实时线程 (User-space thread)的固有延迟
# cat /proc/xenomai/clock/coreclk gravity: irq=0 kernel=5000 user=5000 devices: timer=arch_sys_timer, clock=<Linux clocksource> watchdog: on ticks: 19251279868217 (1182 49b2b139)

如何修改 Gravity (重力值)?

  • 编译时设置默认值

默认情况下,Gravity (重力值) 的值是 0,表示系统没有对定时器进行补偿。

--- Xenomai/cobalt Latency settings ---> (0) User scheduling latency (ns) (0) Intra-kernel scheduling latency (ns) (0) Interrupt latency (ns)
  • 运行时手动修改 Gravity (重力值)

通过写入/proc/xenomai/clock/coreclk文件(使用后缀i,k,u或组合)来动态调整不同上下文的重力值,以优化系统实时性能。

/* change the user gravity (default) */ # echo 3000 > /proc/xenomai/clock/coreclk /* change the IRQ gravity */ # echo 1000i > /proc/xenomai/clock/coreclk /* change the user and kernel gravities */ # echo "2000u 1000k" > /proc/xenomai/clock/coreclk
  • 运行时自动调整 Gravity (重力值)

通过 autotune 工具,可以自动调整 Gravity (重力值),以优化系统实时性能。

编译内核时,需打开 Auto-tuning 选项:

--- Xenomai/cobalt Core features ---> <*> Auto-tuning

值得注意的是,调整了 Gravity (重力值) 后,如果提前触发量设置的过大,可以能导致延迟出现负数的情况。因此,需要根据系统的实际情况,合理设置 Gravity (重力值)。

参考:https://doc.xenomai.org/v3/html/MIGRATION/index.html

http://www.jsqmd.com/news/495195/

相关文章:

  • 选 PyQt6 还是 PySide6?这可能是 Python GUI 开发中最“纠结”的问题
  • 3分钟搞定!OpenClaw 龙虾 + Kimi 联网搜索,小白也能上手
  • PHP搭建开发环境(Windows系统)
  • 2026年无锡碳纤维废气焚烧炉选购指南,源头厂家宜业环保分析 - mypinpai
  • 工厂生产 PLC ip 的都是一样的怎么才能避免冲突进行组网呢?
  • 全栈vue/react+node.js,云服务器windows部署全流程
  • 2026年实力强的聚氨酯瓦壳源头厂家排名,哪家更靠谱 - 工业推荐榜
  • 赛博朋克2077弹窗vcruntime140_1.dll丢失怎么办?安全修复步骤详解
  • 校园外卖软件
  • 代差级突破|2026 女性经期新选择:专属特殊膳食饮品深度评测
  • 收藏!2026春招AI风口爆发:岗位暴涨12倍、月薪超6万,程序员/小白必看学习指南
  • Java 网络爬虫笔记
  • 2026盘点重庆家具采购优质公司,源点宜联购优势突出 - 工业品网
  • Axure RP 9的初使用
  • 互联网大厂Java面试实战:以智慧物流场景为例深入探讨Spring Boot、微服务与Redis缓存
  • 2026年环氧防火涂料价格多少,怎么选靠谱品牌 - 工业品牌热点
  • BG3启动报错dll缺失终极修复指南:从平台验证到运行库安装
  • 用Web Components原生技术构建可复用的UI组件
  • 拿下36K的AI产品经理offer,他是如何实现职业转型的?
  • 霍尼韦尔 40-0001-99 DC-DC 转换器:工业高压供电的核心模块
  • 性价比高的防火堵料生产企业,省钱又好用的之选 - myqiye
  • 鸿蒙DevEvo Studio运行React Native生成的bundle文件遇到的一个问题
  • AI识别外星岩石成分:测试驱动下的天体化学革命
  • AI 之Tool Calling:让大模型像程序员一样“动手”解决问题
  • 新手必看:瑞祥卡线上回收注意事项与常见问题解答 - 团团收购物卡回收
  • Steam版博德之门3 dll错误解决方法:不重装、不中招的实操方案
  • OpenClaw(小龙虾) 多模型深度测评:效果、费用与场景全解析
  • 写论文最好用的ai?实测5款AI论文生成工具教程,写作速度全面提升! - 掌桥科研-AI论文写作
  • PicoClaw vs OpenClaw:“皮皮虾”遇上“小龙虾”,谁才是轻量级 AI 助手的最优解
  • 教师的幸福感,藏在学生不经意的一句“谢谢”里