版权声明:本文为本文为博主原创文章,转载请注明出处 https://www.cnblogs.com/wsg1100。如有错误,欢迎指正。

本文介绍xenomai watchdog,有什么用?它是如何工作的?

一、前言

介绍xenomai watchdog之前,有必要先介绍操作系统对实时任务的调度,实时任务的调度是指在满足实时任务时间约束的情况下,对任务进行排队和执行的策略。两种常见的实时任务调度算法是RR调度(Round Robin,轮转调度)和FIFO调度(First In First Out,先进先出调度)。

正常情况下,高优先级实时任务对CPU时间绝对的优先权。如果此时最高优先级任务存在bug,出错或进入一个不存在主动和被动让出CPU资源的逻辑时,系统中的鼠标、键盘、屏幕等非实时任务将会因为得不到CPU运行时间饿死,导致系统失去响应。

为此PREEMPT-RT和xenomai给出了不同的解决方案。

PREEMPT-RT(RT Throttling)

对于PREEMPT-RT,PREEMPT-RT提供了一个机制,确保非实时任务能在某个时间点执行,该机制也被称为RT限流(RT Throttling),它由两个值决定:

  • /proc/sys/kernel/sched_rt_period_us 定义了微秒级别的窗口,在这个窗口里调度器会在实时和非实时任务之间共享资源,默认1 s。

  • /proc/sys/kernel/sched_rt_runtime_us 则规定了在上述窗口中为实时任务分配的时长比例。默认值950000us,即95%。意味着实时任务在每 1 秒内最多可以使用 950 毫秒的 CPU 时间,剩余的 50 毫秒留给其他非实时任务。

可以通过以下方式修改这些值:

echo 950000 > /proc/sys/kernel/sched_rt_runtime_us
echo 1000000 > /proc/sys/kernel/sched_rt_period_us

需要注意的是,修改这些值需要超级用户(root)权限。

RT Throttling保证了即使实时任务出现错误或者无限循环,也会为非实时任务预留一定的CPU运行时间,方便我们定位和debug。

xenomai也有实时任务的限制措施xenomai watchdog,但与PREEMPT-RT的RT Throttling不同。

一、xenomai watchdog介绍

xenomai watchdog是xenomai内核提供的一个检测xenomai实时任务是否长期占用CPU机制,内核编译时通过以下配置启用该功能。

[*] Xenomai/cobalt  --->
[*] Debug support --->
[*] Watchdog support
(4) Watchdog timeout

其中Watchdog timeout是看门狗动作的超时时间,时间单位是秒,允许配置的默认最大时间为60秒。内核启用后,看门狗超时时间还可通过内核参数watchdog_timeout在启动时修改,单位:秒,值不受限制。

当xenomai watchdog触发时,watchdog会向当前cpu运行的线程发送SIGDEBUG signal,该信号会使实时任务结束,同时内核会输出信息,实时任务结束后系统恢复响应,通过demsg命令可以看到。

[Xenomai] watchdog triggered on CPU #0 -- runaway thread 'RT_Thread' signaled

那xenomai watchdog是如何工作的?有什么局限?不使用会发生什么?

二、xenomai watchdog工作原理

我们知道Xenomai 是一个双调度核操作系统,它在内核态添加了一个高优先级的实时调度核 Cobalt 来管理实时任务。Cobalt 调度核与 Linux 调度核共存,通过 Ipipeline 机制将两个调度上下文分为实时域和非实时域,Ipipeline 确保了 Cobalt 内核(实时域)的优先级高于 Linux 内核(非实时域,也称root domain),linux内核退化为成为 Cobalt 内核的idle任务,从而保障实时任务的实时性;(有关该部分,请查阅本博客其他文章)。

实时域和非实时域会随着任务的运行情况而来回切换。当没有实时任务需要运行释放CPU资源给linux非实时任务,或者实时任务调用了linux提供的系统资源的实时,会切换到非实时域。

看门狗的触发逻辑是这样的,当进入实时任务调度上下文的时候,看门狗启动开始定时,离开实时上下文(实时任务调用了非实时服务或者主动睡眠让出 cpu) 停止,只要看门狗超时说明实时任务在这段时间内一直在运行,看门狗看管的是整个实时任务集合,不是某个特定任务,看门狗超时触发的时候会把当前 cpu 运行的任务 kill 掉,任何一个实时任务都有可能在watchdog触发这个时间点上

具体代码如下:

static inline void enter_root(struct xnthread *root)
{
struct xnarchtcb *rootcb __maybe_unused = xnthread_archtcb(root); #ifdef CONFIG_XENO_OPT_WATCHDOG
xntimer_stop(&root->sched->wdtimer);
#endif
/*...*/
} static inline void leave_root(struct xnthread *root)
{
struct xnarchtcb *rootcb = xnthread_archtcb(root);
struct task_struct *p = current; /*...*/ #ifdef CONFIG_XENO_OPT_WATCHDOG
xntimer_start(&root->sched->wdtimer, get_watchdog_timeout(),
XN_INFINITE, XN_RELATIVE);
#endif
}

而看门狗处理逻辑也很简单,如果当前处于是root域,不处理;若当前是用户态实时任务,则直接发送信号;若当前运行的内核态实时任务,则将当前任务状态设置为XNKICKED并取消运行。

static void watchdog_handler(struct xntimer *timer)
{
struct xnsched *sched = xnsched_current();
struct xnthread *curr = sched->curr; if (likely(xnthread_test_state(curr, XNROOT))) {/*当前处于root域*/
xnsched_reset_watchdog(sched);
return;
} if (likely(++sched->wdcount < wd_timeout_arg))
return; trace_cobalt_watchdog_signal(curr); if (xnthread_test_state(curr, XNUSER)) { /*用户态实时任务*/
printk(XENO_WARNING "watchdog triggered on CPU #%d -- runaway thread "
"'%s' signaled\n", xnsched_cpu(sched), curr->name);
xnthread_call_mayday(curr, SIGDEBUG_WATCHDOG);
} else { /*内核态实时任务*/
printk(XENO_WARNING "watchdog triggered on CPU #%d -- runaway thread "
"'%s' canceled\n", xnsched_cpu(sched), curr->name);
/*
* On behalf on an IRQ handler, xnthread_cancel()
* would go half way cancelling the preempted
* thread. Therefore we manually raise XNKICKED to
* cause the next call to xnthread_suspend() to return
* early in XNBREAK condition, and XNCANCELD so that
* @thread exits next time it invokes
* xnthread_test_cancel().
*/
xnthread_set_info(curr, XNKICKED|XNCANCELD);
} xnsched_reset_watchdog(sched);
}

三、使用场景

xenomai watchdog会导致出问题的实时任务退出,所以一般在实时软件开发阶段,开启watchdog可以尽早暴露实时应用潜在的出错或无限循环问题,避免软件发布后产生严重后果。

如果实时应用发布后,在特定场景下出现系统无响应问题,可用启用watchdog来排查定位。

下一篇文章,我将给大家介绍一个真实生产环境中遇到的问题,一个外部条件触发低优先级实时任务进入无限循环逻辑后,导致整个系统实时任务调度异常的问题,敬请期待。

【原创】linux实时操作系统xenomai看门狗(watchdog)机制及作用介绍的更多相关文章

  1. 【原创】linux实时操作系统xenomai x86平台基准测试(benchmark)

    一.前言 benchmark 即基准测试.通常操作系统主要服务于应用程序,其运行也是需要一定cpu资源的,一般来说操作系统提供服务一定要快,否则会影响应用程序的运行效率,尤其是实时操作系统.所以本文针 ...

  2. linux内核中断之看门狗

    一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog ...

  3. 【原创】xenomai3.1+linux构建linux实时操作系统-基于X86_64和arm

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有问题,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 一.概要 二.环境准备 1.1 安装内核编译工 ...

  4. Linux 软件看门狗 watchdog 喂狗

    Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog程序.内核 watchdog 模块通过 /dev/ ...

  5. Linux编程之《看门狗进程》

    Intro 当我们编写服务器代码时,为了让自己的服务器在意外崩溃时能够及时的重启,软件看门狗就显示出它的作用了,该看门狗进程是通过fork一个子进程(业务进程),父进程一旦捕获到了子进程的结束信号就重 ...

  6. Linux 下如何使用看门狗

      Linux内核有集成WD的选项.将其使能后,系统里就会有watchdog的设备驱动:/dev/watchdog.这样,在应用程序里只需打开这个设备使用即可:#include <fcntl.h ...

  7. 【分享】iTOP-iMX6UL开发板驱动看门狗 watchdog 以及 Linux-c 测试例程

    iTOP-iMX6UL开发板看门狗测试例程,iTOP-iMX6UL 开发板的看门狗驱动默认已经配置,可以直接使用测试例程. 版本 V1.1:1.格式修改:2.例程修改完善,其中增加喂狗代码.1 看门狗 ...

  8. 在多任务(RTOS)环境中使用看门狗

    最近在SEGGER的博客上看到一篇有关在实时操作系统使用看门狗的文章.从一个失败的太空项目出发,分析了看门狗的作用及使用,自我感觉很有启发,特此翻译此文并推荐给各位同仁.为了阅读方便,有些航天领域名词 ...

  9. 【原创】linux实时应用如何printf输出不影响实时性?

    版权声明:本文为本文为博主原创文章,转载请注明出处 https://www.cnblogs.com/wsg1100.如有错误,欢迎指正. @ 目录 1. 前言 2. linux终端输出 3. 常见的N ...

  10. 软件看门狗--别让你地程序无响应(使用未公开API函数IsHungAppWindow,知识点较全)

    正文一.概述一些重要的程序,必须让它一直跑着:而且还要时时关心它的状态——不能让它出现死锁现象.当然,如果一个主程序会出现死锁,肯定是设计或者编程上的失误.我们首要做的事是,把这个Bug揪出来.但如果 ...

随机推荐

  1. [Udemy] AWS Certified Data Analytics Specialty - 6.Security

    S3 加密 SSE-S3 SSE-KMS SSE-C Client Side Encryption SSL/TLS S3 支持http/https 两种协议 KMS KMS最大能加密4KB的数据,再大 ...

  2. Falcon Mamba: 首个高效的无注意力机制 7B 模型

    Falcon Mamba 是由阿布扎比的 Technology Innovation Institute (TII) 开发并基于 TII Falcon Mamba 7B License 1.0 的开放 ...

  3. CCIA数安委等组织发布PIA星级标识名单,合合信息再次通过数据安全领域权威评估

    CCIA数安委等组织发布PIA星级标识名单,合合信息再次通过数据安全领域权威评估   近期,"中国网络安全产业联盟(CCIA)数据安全工作委员会"."数据安全共同体计划( ...

  4. 使用 Performance API 实现前端资源监控

    1. Performance API 的用处 Performance API 是浏览器中内置的一组工具,用于测量和记录页面加载和执行过程中的各类性能指标.它的主要用处包括: 监控页面资源加载:跟踪页面 ...

  5. EditPlus各个版本的注册码,可用

    原文链接:https://www.cnblogs.com/shihaiming/p/6422441.html 工具: editplus注册码生成链接: http://www.jb51.net/tool ...

  6. 使用 fabric.js 开发移动端 H5 图片编辑器

    大家好,我是开源图片编辑器的 https://github.com/ikuaitu/vue-fabric-editor 的作者,它是一款基于 PC 版本的开源图片编辑器. 最近很多开发者咨询,是否可以 ...

  7. 信创环境经典版SuperMap iManager监控外部SuperMap iServer资源失败,无法监控目标GIS服务器CPU与内存使用情况

    一.问题环境 操作系统:银河麒麟kylin V10 CPU:鲲鹏920 SuperMap iServer 10.2.0 SuperMap iManager 10.2.1 二.现象 部署完经典版Supe ...

  8. Windows 笔记本 WiFi 功能消失问题解决

    背景说明 许多 Windows 笔记本用户可能会遇到 WiFi 功能突然消失的问题.虽然网上有各种说法,但实际上,这个问题通常并非由病毒引起.大多数情况下,问题的根源是驱动程序丢失或笔记本静电干扰导致 ...

  9. Salesforce AI Specialist篇之 Prompt Builder

    本篇参考: https://salesforce.vidyard.com/watch/UUAxcUfHYGAxH3D9wV1RxJ https://help.salesforce.com/s/arti ...

  10. CSP模拟10--总结

    今天是我第一次给模拟赛写正规总结--因为今天的题真的受不了了 四道数学题,一点都不拖泥带水的纯血数学题! T1.黑暗型高松灯 shit 本来是一道放在T4防AK的题,结果学长为了 恶心 锻炼一下我们, ...