Linux - 驱动开发 - watchdog - SMP机制下多核确活
说明
- 理论上:不管IC是单核还是多核,只要watchdog有被循环feed,就不会触发超时重启,因此watchdog在SMP机制下的多核环境显得比较宽松,只要任意核存活(喂狗)就不会重启设备。
实际情况
- 有客户反馈,多核环境下(SMP机制管理)有核hang住了,但是设备没有重启。
- 在SMP机制管理的8核arm平台上实测现象:
- 有核crash(特意使核上跑的程序crash),SMP能检测到,并且所有核都会被stop,watchdog能重启设备。
- 有核hang住(特意使核上跑的程序hang住),设备会非常卡,smp机制中的调度会每隔一段时间打印一次timeout,但是由于主核正常,喂狗正常,不会触发watchdog重启系统,如下:
[ 433.562934] rcu: INFO: rcu_sched detected stalls on CPUs/tasks:
[ 433.568883] rcu: 1-...0: (16 ticks this GP) idle=e3a/0/0x3 softirq=98/98 fqs=10498
[ 433.576660] (detected by 0, t=21007 jiffies, g=-935, q=16)
[ 433.582255] Task dump for CPU 1:
[ 433.585495] task:swapper/1 state:R running task stack:15152 pid: 0 ppid: 1 flags:0x0000000a
[ 433.595460] Call trace:
[ 433.597917] __switch_to+0xb8/0xe8
[ 433.601332] 0xffffff8100130c00
- 根据一些测试现象推测:有核卡住,设备非常卡是因为smp调度时,调度过程是阻塞的(但是有超时),smp调度过程就会卡住很久,只有超时后,其它进程才能得到调度,将触发smp调度的操作放到wdt驱动的喂狗函数中,这样就会触发watchdog重启系统,smp调度阻塞住喂狗了。
结论
- IC生产,无法确保每个核都是一样稳定,如果多核IC中有少数核稳定性稍微差点,可能会出现部分核hang住,因此需要watchdog来检测这种情况并重启。
实现
- 同构多核使用SMP机制管理下,kenerl启动之前只有主核在运行,kernel启动过程中再由kernel bringup其它核,因此kernel运行前的固件(uboot等),不需要做检测。
SMP机制下多核确活机制(严格模式)
- 在多核SMP管理环境下,确认多核是否alive,只要任意核hang住,重启设备。
思路
- 通过SMP机制发送核间中断给每个核,每个核收到中断后,将一个全局CPU 位图变量打上标志,表示核正在运行。
- 发送核间中断,让每个核执行同一个函数:
// 每个核都会运行该函数
static void cpu_alive(void *passed_regs)
{...
}smp_call_function(cpu_alive, NULL, 0);
smp_wmb();
- 第一版做法:每次喂狗前,发送SMP调度请求,等待所有核运行完成。
static cpumask_t cpus_alive = CPU_MASK_NONE;#ifdef CONFIG_SMP
static void cpu_alive(void *passed_regs)
{int cpu = smp_processor_id();pr_debug("cpu[%d] setmask \n", cpu);cpumask_set_cpu(cpu, &cpus_alive);
}
#endif// watchdog驱动喂狗函数
static int dw_wdt_ping(struct watchdog_device *wdd)
{ struct dw_wdt *dw_wdt = to_dw_wdt(wdd);#ifdef CONFIG_SMPunsigned int msecs;unsigned int ncpus;cpus_alive = CPU_MASK_NONE;ncpus = num_online_cpus() - 1;pr_debug("Sending IPI to other cpus...\n");smp_call_function(cpu_alive, NULL, 0);smp_wmb();// 阻塞1s 等待所有核执行完成msecs = 1000; // 1swhile ((cpumask_weight(&cpus_alive) < ncpus) && (--msecs > 0)) {cpu_relax();mdelay(1);}if (cpumask_weight(&cpus_alive) >= ncpus)
#endifwritel(WDOG_COUNTER_RESTART_KICK_VALUE, dw_wdt->regs+ WDOG_COUNTER_RESTART_REG_OFFSET);return 0;
}
- 问题
- 阻塞1s,等待所有核执行完成,如果存在核执行超时了,会导致误判。
- 如果将阻塞时间拉长,喂狗时间和wdt timeout时间需要空出该时间。
- 新版本:每次喂狗前,检查上一次喂狗后发送SMP调度请求后的CPU 位图数据,喂狗,再发送一次SMP调度请求。
static cpumask_t cpus_alive = CPU_MASK_NONE;#ifdef CONFIG_SMP
static void cpu_alive(void *passed_regs)
{ int cpu = smp_processor_id();pr_debug("cpu[%d] setmask \n", cpu);cpumask_set_cpu(cpu, &cpus_alive);
}
#endifstatic int dw_wdt_ping(struct watchdog_device *wdd)
{struct dw_wdt *dw_wdt = to_dw_wdt(wdd);static int isFirst = 1;#ifdef CONFIG_SMPunsigned int ncpus;ncpus = num_online_cpus() - 1;if ((isFirst == 1) || cpumask_weight(&cpus_alive) >= ncpus) {
#endifwritel(WDOG_COUNTER_RESTART_KICK_VALUE, dw_wdt->regs +WDOG_COUNTER_RESTART_REG_OFFSET);#ifdef CONFIG_SMPisFirst = 0;cpus_alive = CPU_MASK_NONE;smp_call_function(cpu_alive, NULL, 0);smp_wmb();}
#endifreturn 0;
}
- 好处:等待所有核执行SMP请求和间隔喂狗并行起来了,不必像串行一样,多花一个等待时间。
相关文章:
Linux - 驱动开发 - watchdog - SMP机制下多核确活
说明 理论上:不管IC是单核还是多核,只要watchdog有被循环feed,就不会触发超时重启,因此watchdog在SMP机制下的多核环境显得比较宽松,只要任意核存活(喂狗)就不会重启设备。 实际情况 有客户反…...
概念解析 | LoRA:低秩矩阵分解在神经网络微调中的魔力
注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:基于低秩矩阵分解的神经网络微调方法LoRA LoRA:低秩矩阵分解在神经网络微调中的魔力 Low-Rank Adaptation of Large Language Models LoRA由如下论文提出,详细信息请参见论文原…...
量子计算和量子通信技术:引领潜力无限的未来
近年来,随着量子计算和量子通信技术的迅速发展,它们在各个领域的广泛应用前景引起了人们的极大兴趣。本文将深入探讨量子计算和量子通信技术的普遍应用,以及它们预示的未来,同时提出业内人士需要注意的事项。 介绍:量子…...
nodejs+vue+python+PHP+微信小程序-安卓- 电影在线订票系统的设计与实现-计算机毕业设计推荐
目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...
LightDB23.4支持mysql aes_encrypt/aes_decrypt/hex/unhex函数
背景介绍 为了兼容mysql数据库的功能,在LightDB23.4版本上支持hex/unhex/aes_encrypt/aes_decrypt函数。 函数原型如下: hex(data bytea) returns textunhex(data varchar) returns byteaaes_encrypt(data bytea, key bytea) returns byteaaes_encryp…...
uniapp——项目day04
购物车页面——商品列表区域 渲染购物车商品列表的标题区域 1. 定义如下的 UI 结构: 2.美化样式 渲染商品列表区域的基本结构 1. 通过 mapState 辅助函数,将 Store 中的 cart 数组映射到当前页面中使用: import badgeMix from /mixins/tab…...
7-爬虫-中间件和下载中间件(加代理,加请求头,加cookie)、scrapy集成selenium、源码去重规则(布隆过滤器)、分布式爬虫
0 持久化(pipelines.py)使用步骤 1 爬虫中间件和下载中间件 1.1 爬虫中间件(一般不用) 1.2 下载中间件(代理,加请求头,加cookie) 1.2.1 加请求头(加到请求对象中) 1.2.2 加cookie 1.2.3 加代理 2 scrapy集成selenium 3 源码去重…...
创建自己的nas服务,从远端拉取所需文件
一、前言 创建一个nas文件存储,然后需要的时候随时从远端或者其他终端拉取所需文件是不是一件很帅气的工作。 二、准备工作 一台服务器(云的更好),没了。 首先安装docker和docker-compose 此处省略docker的安装(改天更新)&…...
智慧化城市内涝的预警,万宾科技内涝积水监测仪
随着城市化进程的加速,伴随的是城市内涝问题日益凸显。频繁的暴雨和积水给市民的生活带来了诸多不便,也给城市的基础设施带来了巨大压力。如何解决这一问题,成为智慧城市建设的重要课题和政府管理的工作主题,只要内涝问题得到缓解…...
7-18 调用一个函数
分数 2 作者 Yiping 单位 广东东软学院 现有如下程序,请将注释后带??的代码补充完整: import mathdef normalize(normal):x normal[0]y normal[1]z normal[2]s math.sqrt(x**2 y**2 z**2)x / sy / sz / sreturn (x, y, z)if __name__ __mai…...
VB.net TCP服务端监听端口接收客户端RFID网络读卡器上传的读卡数据
本 示例使用设备介绍:WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) Imports System.Threading Imports System.Net Imports System.Net.Sockets Public Class Form1Dim ListenSocket As SocketDim Dict As New Dictionary(Of…...
Springboot 集成 MongoDB
在SpringBoot项目中集成MongoDB后的一些基本操作。 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 本文介绍的内容是Springboot如何集成MongoDB,以及对MongoDB进行基本的增加、查询数据的操作。 提示:以下是本篇…...
AM@定积分的定义求某些类型的极限
文章目录 定积分定义求极限步骤例 定积分表示为极限 定积分定义求极限 容易从定积分的定义: ∫ a b f ( x ) d x \int_{a}^{b}f(x)\mathrm{d}x ∫abf(x)dx lim λ → 0 ∑ i 1 n f ( ξ i ) Δ x i \lim\limits_{\lambda\to{0}}\sum_{i1}^{n}f{(\xi_{i})}\Delta{x_i} λ→…...
Perl爬虫程序的框架
Perl爬虫程序的框架,这个框架可以用来爬取任何网页的内容。 perl #!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTML::TreeBuilder; # 创建LWP::UserAgent对象 my $ua LWP::UserAgent->new; # 设置代理信息 $ua->proxy(http, ); …...
15. 机器学习——聚类
机器学习面试题汇总与解析——聚类 本章讲解知识点 什么是聚类K-means 聚类算法均值偏移聚类算法DBSCAN 聚类算法高斯混合模型(GMM)的期望最大化(EM)聚类层次聚类算法本专栏适合于Python已经入门的学生或人士,有一定的编程基础。 本专栏适合于算法工程师、机器学习、图像…...
华为笔记本电脑原装win10/win11系统恢复安装教程方法
华为电脑matebook 14原装Win11系统带F10智能还原 安装恢复教程: 1.安装方法有两种,一种是用PE安装,一种是华为工厂包安装(安装完成自带F10智能还原) 若没有原装系统文件,请在这里获取:https:…...
计算机毕业设计 基于SpringBoot的养老院管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
Python数据容器(序列操作)
序列 1.什么是序列 序列是指:内容连续、有序。可以使用下标索引的一类数据容器 列表、元组、字符串。均可以视为序列 2.序列的常用操作 - 切片 语法:序列[起始下标:结束下标:步长]起始下标表示从何处开始,可以留空,留空视作从…...
【C++】stack,queue和deque
stack的介绍 stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成…...
Linux centos系统中添加磁盘
为了学习与训练文件系统或磁盘的分区、格式化和挂载/卸载,我们需要为虚拟机添加磁盘。根据需要,可以添加多块不同大小的磁盘。具体操作讨论如下,供参考。 一、添加 1.开机前 有两个地方,可选择打开添加硬盘对话框 (1)双击左侧…...
DeEAR保姆级部署教程:适配A10/A100/V100 GPU的DeEAR镜像环境参数详解
DeEAR保姆级部署教程:适配A10/A100/V100 GPU的DeEAR镜像环境参数详解 1. 项目介绍 DeEAR(Deep Emotional Expressiveness Recognition)是一个基于wav2vec2的深度语音情感表达分析系统。它能从语音中识别三个关键情感维度:唤醒度…...
终极指南:如何用BetterGI智能辅助工具彻底解放你的原神游戏体验
终极指南:如何用BetterGI智能辅助工具彻底解放你的原神游戏体验 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连…...
【hloc】从特征提取到三维重建:视觉定位全流程解析
1. 视觉定位技术全景图 当你用手机地图导航时,有没有想过它是如何精确知道你的位置的?这背后就运用了视觉定位技术。视觉定位(Visual Localization)是指通过摄像头捕捉环境图像,然后与预先构建的三维地图进行匹配&…...
DAMO-YOLO多模态实践:视觉+文本联合分析系统
DAMO-YOLO多模态实践:视觉文本联合分析系统 你有没有遇到过这样的情况?一个智能摄像头能认出画面里是“一辆车”,但它不知道这是“一辆正在送货的快递车”。或者,一个内容审核系统能识别出图片里有“文字”,却无法判断…...
别再只盯着IOU了!手把手拆解DeepSort级联匹配,看它如何用‘优先级’解决ID跳变
别再只盯着IOU了!手把手拆解DeepSort级联匹配,看它如何用‘优先级’解决ID跳变 当你在监控视频中看到行人ID突然从"007"跳变成"1024"时,是否曾怀疑自己的多目标跟踪系统被黑客入侵?这种被称为ID跳变ÿ…...
RexUniNLU GPU推理优化教程:batch_size与max_length调优实测
RexUniNLU GPU推理优化教程:batch_size与max_length调优实测 1. 引言 如果你正在使用RexUniNLU处理大量文本数据,可能会遇到这样的问题:单条推理速度还行,但批量处理时总觉得不够快,GPU利用率也上不去。或者…...
平价头戴式耳机哪个性价比高?揭秘排名前十的平价头戴式耳机品牌
对数码发烧友和爱琢磨音乐的人来说,头戴式耳机早不只是通勤路上、宅家追剧的 “刚需品”,更是能让人一头扎进音乐细节里的 “专属入口”—— 闭上眼就能听清吉他弦的摩擦声、歌手的换气尾音,这种沉浸感没它可不行。2026 年的耳机市场更是卷得…...
PyJWT与云原生应用集成的终极指南:如何构建安全的微服务架构
PyJWT与云原生应用集成的终极指南:如何构建安全的微服务架构 【免费下载链接】pyjwt JSON Web Token implementation in Python 项目地址: https://gitcode.com/gh_mirrors/py/pyjwt PyJWT(Python JSON Web Token)是一个功能强大且易于…...
Redis专题(一)
1. 主从部署主从复制主要⽤于实现数据的冗余备份和读分担,并不是真正的高可用。一个主节点,一个或者多个从节点。同步数据的方向:单向 ,只能主节点到从节点。作用:数据冗余:除了数据持久化之外的一种数据冗…...
【无标题】作业
案例1:软件233班学生信息数据分析与可视化一、数据预处理首先读取Excel文件,处理缺失值。原始数据中存在大量空值(生源省份、城市、生日、寝室号、成绩等),需进行清洗: 性别:仅“男”“女”&…...
