中断线程化简述

linux irq balance and RT linux(中断线程化) 前段时间一个交换机项目遇到了所有网卡中断都跑在一个核上,造成负载不均衡的问题,解决思路如下: 1. 首先查看一下 irqbalance service是否正常运行,自动平衡irq负载的service 2. 可以用下面命令绑定不同irq到不同的cpu上,smp_affinity为cpu的位掩码,3(0x11)代表0号和1号cpu # service irqbalance stop 阅读详情

在linux里,中断处理分为顶半(top half),底半(bottom half),在顶半里处理优先级比较高的事情,要求占用中断时间尽量的短,在处理完成后,就激活底半,有底半处理其余任务。底半的处理方式主要有soft_irq, tasklet, workqueue三种,他们在使用方式和适用情况上各有不同。soft_irq用在对底半执行时间要求比较紧急或者非常重要的场合,主要为一些subsystem用,一般driver基本上用不上。 tasklet和work queue在普通的driver里用的相对较多,主要区别是tasklet是在中断上下文执行,而work queue是在process上下文,因此可以执行可能sleep的操作。

int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long irqflags, const char *devname, void *dev_id) ;

request_threaded_irq() 是Linux kernel 2.6.30 之后新加的irq handler API,Linux kernel config 需要定义CONFIG_GENERIC_HARDIQS,kernel config 才有支援threaded irq 。

优点:

    1 减少 kernel 延迟时间
    2 避免处理中断时要分辨是在硬体中断或软体中断?
    3 更容易为kernel 中断处理除错,可能可完全取代tasklet 

原本的中断处理分上半部(硬体中断处理,必须关闭中断无法处理新的中断)跟下半部(软体中断处理),因此上半部的硬体中断处理必须尽可能简短,让系统反应速度更快。
request_threaded_irq 是在将上半部的硬件中断处理缩短为只确定硬体中断来自我们要处理的装置,唤醒kernel thread 执行后续中断任务。

分析request_threaded_irq()函数中的各个参数

1 irq:表示申请的中断号

2 handler:表示中断服务例程

3 thread_fn:中断线程化,此处传递的是NULL。NULL表示没有中断线程化。

此参数是最新版本中才出现的。为什么要提出中断线程化?
在 Linux 中,中断具有最高的优先级。不论在任何时刻,只要产生中断事件,内核将立即执行相应的中断处理程序,等到所有挂起的中断和软中断处理完毕后才能执行正常的任务,因此有可能造成实时任务得不到及时的处理。中断线程化之后,中断将作为内核线程运行而且被赋予不同的实时优先级,实时任务可以有比中断线程更高的优先级。这样,具有最高优先级的实时任务就能得到优先处理,即使在严重负载下仍有实时性保证。but,并不是所有的中断都可以被线程化,比如时钟中断,主要用来维护系统时间以及定时器等,其中定时器是操作系统的脉搏,一旦被线程化,就有可能被挂起,这样后果将不堪设想,所以不应当被线程化。

4 irqflags:表示中断标志位。

5 devname:表示请求中断的设备的名称。

6 dev_id: 对应于request_irq()函数中所传递的第五个参数,可取任意值,但必须唯一能够代表发出中断请求的设备,通常取描述该设备的结构体。 共享中断时所用。

linux中断线程化分析 最近在为3.8版本的Linux内核打RT_PREEMPT补丁,并且优化系统实时性, 阅读详情

相关推荐

中断线程化

中断线程化以后中断将作为内核线程运行,而且也可以被赋予不同的优先级,任务的优先级可能比中断线程的优先级高,这样做的目的就是保证高优先级的任务能被优先处理。要注意,并不是所有的中断都可以被线程化,重要的中断就不能这么操作。

badbayyj的博客 846

Linux驱动开发基础__中断的线程化处理

Linux驱动开发基础__中断的线程化处理

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 3640

如何处理NC数据?(Python和IDL语言实现)

如何处理NC数据?(Python和IDL语言实现) NetCDF(network Common Data Form)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。(参考自:https://zhuanlan.zhihu.com/p/129351199) 在我看来,nc和hdf有异曲同工之妙,我用的数据以hdf结构为主(HDF:层次文件格式,相当于

zhanglingfeng1的博客 4636

关于内核中断线程化

很久没看内核代码,才发现RT中的中断线程早已合并到主线中,而且远在2009年2.6.29就已经合并了。 Moving interrupts to threads By Jake Edge October 8, 2008 Processing interrupts from the hardware is a major source of latency in the

奋斗中拥有 3421

300个fpga练手项目推荐

• 按键设置BPM,LED和蜂鸣器同步打拍(支持4/4、3/4拍)• 例:先实现DDR3控制器(基础),再构建视频处理流水线(集成)◦ 驱动小型e-Paper显示日期/时间(SPI接口,静态刷新)◦ 音频输入经FFT后,用LED柱状显示频率能量(8频段简化)◦ 通过HC-05模块接收手机指令,控制电机方向(前进/后退)• 随机点亮LED,用按钮响应,数码管显示反应时间(毫秒级)• 8个LED旋转闪烁,按钮停止后显示中奖编号(带减速动画)• 用4方向按键输入手势(如→→←↑),正确后点亮绿色LED。

qq_62784677的博客 7640

【QCA6174】QCA6174 DFS认证的时候会有概率信道不会跳转的情况,通常跳转成功概率只有25%问题分析及解决方案

Master设备需要测试的项目。

wgl307293845的博客 752

中断线程化,洞悉万象-从理论抽象级到代码实现级

尽管存在这些问题,中断线程化在很多实时和嵌入式系统领域已经变得非常普遍。许多驱动程序和系统已经成功地采用了线程化中断处理程序,从而改善了系统的实时性能和响应性。为了充分利用中断线程化的优势并减少潜在问题,驱动开发人员和系统设计者需要考虑以下因素:仅对需要实时性能和响应性的中断使用线程化处理程序。对于不需要实时性能的中断,可以继续使用传统的硬件中断处理程序。仔细权衡线程化中断处理程序的优先级,以确保高优先级任务可以及时抢占执行。在选择使用线程化中断处理程序时,注意避免不必要的上下文切换和调度开销。

weixin_43965970的博客 1472

Altium Designer应用技巧1: 功能模块的复用方法

Altium Designer应用技巧1: 功能模块的复用方法      我们在使用Altium Designer进行电路图设计时,常会遇到功能模块的复用问题,例如我们经常需要将12V以DC-DC的方式转换成5V,这在很多线路板上都会应用到。现在我们普通的做法是,每个板子都重新绘制一遍,像这样DC-DC的电路,很浪费时间。那么如何采用提高工作效率呢?我们可以采取Altium Desi

snmplink的博客 1万+

linux 中断线程化

为什么要进行中断线程化? 在 Linux 中,中断具有最高的优先级。不论在任何时刻,只要产生中断事件,内核将立即执行相应的中断处理程序,等到所有挂起的中断和软中断处理完毕后才能执行正常的任务,因此有可能造成实时任务得不到及时的处理。中断线程化之后,中断将作为内核线程运行而且被赋予不同的实时优先级,实时任务可以有比中断线程更高的优先级。这样,具有最高优先级的实时任务就能得到优先处理,即使在严重负载下

viewsky11的专栏 7546

《手把手教你修复过期K8s集群证书:记一次K8s集群起死回生实录》

今天本想打开半年前部署的K8s测试集群跑个Demo,结果`kubectl`直接报错`certificate has expired`!作为一名云原生老司机,我决定把这次'抢救'过程记录下来,手把手带大家解决这个运维常见问题。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 3778

BMD101传感器协议解析与STM32实现(LCD显示波形)

1 前言 BMD101传感器是神念科技开发的心电传感器。目前有一些商家开发了BMD101传感器模块,基本上都是利用蓝牙直接传输数据到PC或手机端。而本文介绍通过串口将数据传送给单片机,并在单片机上完成数据解析和心电波形LCD显示的功能。 2 通信协议解读 BMD101 通过 UART 接口通信。这是一个标准的 UART 接口,定义为 1 个起始位,8 个数据位,1 停止位格式,波特率 57600。 串口输出的数据包格式如下: 包括Header(帧头)、data payload(数据有效载荷)、CRC校验

weixin_44509533的博客 9288

PREEMPT-RT中断线程化原理与中断线程优先级设置

本文介绍实时linux方案PREEMPT-RT提升系统实时性的机制之一--中断线程化,以及中断线程优先级如何配置,希望能对你有所帮助。

wsg1100 2263

【开源电机驱动】位置环控制

这是三闭环里的最后一个:位置闭环控制。如果你认真的阅读并推导了前章节,那么这一节将会很好理解。一如既往,我会使用简练的语言来描述复杂的问题。本章节主要涉及位置环的一些概念,以及控制框图。文章不会涉及具体的代码。

BadBoyHolly的博客 6095

linux中断线程化(转载)

linux中断线程化(转载)   2012-06-02 20:28:34|  分类: linux内核开发 |  标签: |字号大中小 订阅 摘自:http://www.eeworld.com.cn/qrs/2012/0326/article_9459_2.html 中断线程化是实现Linux实时性的一个重要步骤,在Linux标准内核中,中断是最高优先级的执行单元,不管

WINGCREATE的专栏 2742

在 SAP S/4HANA Public Cloud 中做产品扩展:从 Key User 到 ABAP Cloud 与 BTP 的三轨实践指南

摘要:SAP S/4HANA Public Cloud 提供三种扩展方式(key user、developer extensibility 和 side-by-side),遵循 clean core 原则确保升级稳定。key user 扩展适合无代码轻量改良,developer extensibility 用于受控 ABAP 开发,side-by-side 则适用于云原生独立应用。文章通过销售订单优先级字段、退货审批微服务和采购校验等案例,说明不同扩展路径的适用场景与实现方法,帮助开发者在三系统景观中合理选

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 294

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【系列文章】Linux系统中断的应用06-中断线程化

中断线程化是一种优化技术,用于提高多线程程序的性能。想象一下,你正在做一项任务,但是总是被别人的打扰所中断,每次都要停下手头的工作去处理别人的事情。这样频繁的中断会让你的工作效率变低,因为你需要反复切换任务,无法专心做好自己的工作。在多线程程序中,也存在类似的问题。有时硬件或其他事件会发出中断信号,打断正在执行的线程,需要切换到中断处理程序去处理这些事件。这种频繁的中断切换会导致额外的开销和延迟,影响程序的性能。为了解决这个问题,中断线程化提出了一种优化方案。

qq_56861680的博客 859

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

中断下半部---中断线程化和共享工作队列的使用

本文介绍了Linux内核中的中断线程化与工作队列机制。中断线程化通过request_thread_irq函数将中断处理分为上下两部分,提升多核CPU利用率。工作队列作为中断下半部实现机制,分为自定义和共享队列,允许任务休眠是其与tasklet的关键区别。文章详细阐述了相关API函数的使用方法,并通过GPIO按键驱动实验演示了两种技术的具体实现。这些机制有效改善了系统实时性,减少了中断延迟,是Linux内核重要的并发处理技术。

2302_80889267的博客 1207

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【Linux 中断机制:工作队列与中断线程化详解】

特性工作队列(Workqueue)中断线程化(Threaded IRQ)上下文类型内核线程(进程上下文)内核线程(中断线程)是否可阻塞✅ 可以✅ 可以是否响应中断❌ 不能直接处理中断✅ 响应中断手动调度✅ 需要❌ 否,自动在线程中处理延迟能力✅ 可以延迟❌ 不支持延迟中断响应速度✅ 快(中断函数快速返回)⚠ 稍慢(线程调度有延迟)推荐应用场景异步处理、非实时任务中断后需等待或复杂逻辑处理中断线程化与工作队列都是解决中断上下文不能阻塞的经典方法。

qq_52503627的博客 953

Linux中断子系统---中断申请request_irq()与中断线程化request_threaded_irq()

一、申请中断request_irq() Linux中使用中断需要先进行申请,申请中断的API函数如下: int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) irq:要申请中断的中断号。 handler:中断处理函数。 name:中断名字,设置以后可以在/proc/interrupts 文件中看到对应的中断名字。

lihuan680680的博客 1万+

【原创】PREEMPT-RT中断线程化原理与中断线程优先级设置

目录一、什么是中断线程化1. 普通Linux中断处理2. 实时性的不足3. 中断线程化二、中断线程优先级配置使用chrt修改中断线程优先级使用rtirq修改中断线程优先级安装rtirqrtirq使用说明rtirq配置三、总结 本文介绍实时linux方案PREEMPT-RT提升系统实时性的机制之一--中断线程化,以及中断线程优先级配置,希望能为感兴趣的读者提供些许参考。 什么是实时 实时的分类 为...

weixin_41184918的博客 531

Linux 中断线程化

Linux,中断线程化

JiMoKuangXiangQu的专栏 181

linux中断线程化

<br />引用网址:<br />http://edu.codepub.com/2010/0209/20378.php   linux的中断线程化实现<br />http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/index.html    <br />Linux 内核中断内幕<br /><br /><br /><br /><br /><br />中断线程化介绍(Interrupt Threads)<br />在嵌入式领域,业界对 L

zgolee的专栏 3383

中断下半部-中断线程化

中断下半部

qq_42693685的博客 611
上一篇: hrtimer简单使用
下一篇: Camera启动过程简述(MTK)
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值