ksoftirq内核线程

国产!全志T113-i 双核Cortex-A7@1.2GHz 工业开发板—IgH EtherCAT主站开发案例 本文档主要演示TLT113-EVM评估板基于IgH EtherCAT控制伺服电机。 阅读详情

From:http://hi.baidu.com/cbeast/blog/item/61663ad1312394329b5027fc.html

2009年09月28日 星期一 上午 10:08

 

每个处理器都有一组辅助处理器软中断(和tasklet)的内核线程。当内核中出现大量软中断的时候,这些内核进程就会辅助处理它们。

 

引入ksoftirq内核线程的原因:

      对于软中断,内核会选择在几个特殊时机进行处理。而在中断处理程序返回时处理是最常见的。软中断被触发的频率有时可能很高,更不利的是,处理函数有时还会 字形重复触发,那么就会导致用户空间进程无法获得足够的处理时间,因而处于饥饿状态。单纯的对重新触发的软中断采取不立即处理的策略,也无法让人接受。

 

     最初的解决方案:

      1)只要还有被触发并等待处理的软中断,本次执行就要负责处理,重新触发的软中断也在本次执行返回前被处理。这样做可以保证对内核的软中断采取即时处理的 方式,关键在于,对重新触发的软中断也会立即处理。当负载很高的时候,此时若有大量被触发的软中断,而它们本身又会重复触发。系统可能会一直处理软中断根 本不能完成其他任务。

     2)不处理重新触发的软中断。在从中断返回的时候,内核和平常一样,也会检查所有挂起的软中断并处理他们。但是,任何自行重新触发的软中断不会马上处理, 它们被放到下一个软中断执行时机去处理。而这个时机通常也就是下一次中断返回的时候。可是,在比较空闲的系统中,立即处理软中断才是比较好的做法。尽管它 能保证用户空间不处于饥饿状态,但它却让软中断忍受饥饿的痛苦,而根本没有好好利用闲置的系统资源。

 

   改进:

     最终在内核中实现的方案是不会立即处理处理重新触发的软中断。而作为改进,当大量软中断出现的时候,内核会唤醒一组内核线程来处理这些负载。这些线程在最 低的优先级上运行(nice值是19),这能避免它们跟其他重要的任务抢夺资源。但它们最终肯定会被执行,所以这个折中方案能够保证在软中断负担很中的时 候用户程序不会因为得不到处理时间处于饥饿状态。相应的,也能保证”过量“的软中断终究会得到处理。

     每个处理器都有一个这样的线程。所有线程的名字都叫做ksoftirq/n,区别在于n,它对应的是处理器的编号。在一个双CPU的机器上就有两个这样的 线程,分别叫做ksoftirqd/0和ksoftirqd/1。为了保证只要有空闲的处理器,它们就会处理软中断,所以给每个处理器都分配一个这样的线 程。一旦该线程被初始化,它就会执行类似下面这样的死循环:

 

只要有待处理的软中断(由softirq_pending()函数负责发现),ksoftirq就会调用do_softirq去处理它们。通过重复执行这 样的操作,重新触发的软中断也会被执行。如果有必要,每次迭代后都会调用schedule()以便让更重要的进程得到处理机会。当所有需要执行的操作都完 成以后,该内核线程将自己设置为TASK_INTERRUPTIBLE状态,唤起调度程序选择其他可执行进程投入运行。

    只要do_softirq()函数发现已经执行过的内核线程重新触发了它自己,软中断内核线程就会被唤醒。

Kernel: ksoftirq与pthread_cond_wait 之间的联系 ksoftirq与pthread_cond_wait之间的联系 阅读详情

相关推荐

Kernel: pipe_read:fread:解释:读取的实际长度与参数里带有的参数的区别。

pipe_read & fread pipe

mzhan017的博客 382

LINUX软中断-ksoftirqd

ksoftirqd

human!的专栏 6511

量化回测系统实战指南:从VectorBT到自研框架的深度解析

本文深入解析量化回测系统实战,从VectorBT和Backtesting.py的对比到自研框架miniQuant的设计与优化。探讨如何平衡速度与灵活性,解决实盘适配性问题,并提供性能调优技巧和可视化分析工具,帮助开发者构建高效可靠的量化交易系统。

weixin_28308325的博客 276

Linux网络开始收发包之前需要做的事情——创建ksoftirqd内核进程

linux内核收发数据报之前的准备工作

weixin_45506125的博客 1315

0欧电阻、电感、磁珠单点接地时有什么区别?

0欧电阻、电感、磁珠单点接地时有什么区别? #电阻,#电感,#磁珠 一、0欧姆电阻 重点介绍:模拟地和数字地单点接地。 只要是地,最终都要接到一起,然后入大地。如果不接在一起就是“浮地”,存在压差,容易积累电荷,造成静电。地是参考0电位,所有电压都是参考地得出的,地的标准要一致,故各种地应短接在一起。 人们认为大地能够吸收所有电荷,始终维持稳定,是最终的地参考点。虽然有些板子没有接大地,但发电厂是接大地的,板子上的电源最终还是会返回发电厂入地。如果把模拟地和数字地大面积直...

FAguangdeer的博客 445

深度学习模型轻量化方法之【量化】

量化虽然有着硬件友好和功效提升的特点,但它也引入了模型性能的折衷。因此,设计有效的量化策略需要在模型大小、性能以及运算速度之间做出平衡。随着深度学习算法和硬件加速技术的快速发展,量化方法在使深度网络轻量化和提高部署效率方面持续发挥着重要作用。

m0_73916791的博客 2846

ksoftirqd内核线程-处理软中断

软中断

hhcs 1205

保姆级教程:用Python+OpenCV实现相移法与格雷码三维重建(从生成条纹到点云生成)

本文详细介绍了使用Python和OpenCV实现相移法与格雷码三维重建的全流程,从条纹生成到点云计算。通过结构光技术,结合相移法和格雷码,实现高精度的三维重建,适用于无纹理物体表面的密集对应点生成。教程包含环境搭建、条纹生成、相位计算、三维点云重建及常见问题排查,适合计算机视觉开发者和研究人员。

weixin_33443333的博客 349

ksoftirqid进程CPU100%排查

1、打开网页发现cpu使用率100% 2、后台top,查看了一下,发现原来cpu被ksoftird吃了, 3、使用perf top命令查看: 4、发现ksoftirqd是被e1000_clean与e1000_xmit_frame占用了, 由于e1000_clean与e1000_xmit_frame代表的是网卡, 其中e1000_clean_rx_irq()和e1000_xmit_...

白清羽的博客 9431

华为eNSP与VMware虚拟机联动实战:从零搭建仿真网络环境

本文详细介绍了如何从零开始搭建华为eNSP与VMware虚拟机的联动仿真网络环境。通过环境准备、网络适配器配置、eNSP与VMware网络集成、安全策略与NAT配置等步骤,帮助读者掌握构建企业级网络实验场景的关键技术。这种组合特别适合网络工程师进阶训练和华为认证考试准备,实现低成本、高灵活性的网络仿真实验。

weixin_30415113的博客 502

【Unity引擎技术整合】 Unity学习路线 | 知识汇总 | 持续更新 | 保持乐趣 | 共同成长

本文对Unity引擎的知识进行了一个整理总结,基本包含了Unity中大部分的知识介绍。 网上也有很多Unity相关的学习资料,但大多数都不成体系,学起来的时候难免会东奔西走的摸不着头脑。 本文整理的多数文章都是有对应的系列性文章专栏,可以更方便的进行系统学习相关知识体系。

努力前行,总会成为自己心中的那道光 15万+

网络报文收发——前期准备阶段

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

Jingjingjng0504的博客 607

PLC凸轮开关指令编程应用——控制算法

凸轮开关指令的作用是在PLC程序中根据凸轮开关(Cam Switch)的状态执行不同的操作。凸轮开关通常是机械式的开关装置,它的位置会随着机械运动的变化而改变。凸轮开关的状态可以用来检测机器的位置、角度或其他相关信息,从而触发相应的控制动作。总结起来,凸轮开关指令是PLC编程中常用的一种控制算法,通过检测凸轮开关的状态来触发相应的操作。本文将介绍凸轮开关指令的应用和相应的控制算法,并提供相关的源代码示例。在这个示例中,凸轮开关状态的值代表不同的位置,根据凸轮开关状态的不同,执行相应的动作。

LiJavascript的博客 1034

ksoftirqd内核线程

每个处理器都有一组辅助处理器软中断(和tasklet)的内核线程。当内核中出现大量软中断的时候,这些内核进程就会辅助处理它们。       引入ksoftirq内核线程的原因:       对于软中断,内核会选择在几个特殊时机进行处理。而在中断处理程序返回时处理是最常见的。软中断被触发的频率有时可能很高,更不利的是,处理函数有时还会字形重复触发,那么就会导致用户空间进程无法获得足够的处理时间,

suncess1985的专栏 1万+

双目摄像头全景解析:从几何光学到深度智能

双目视觉系统基于仿生学原理,通过水平排列的双摄像头模拟人眼视差机制实现三维感知。其核心是通过标定、校正、匹配等算法流程,将视差转换为深度信息,最终生成三维点云。该系统在自动驾驶、机器人导航、工业检测等领域有广泛应用,但面临弱纹理、重复图案等挑战。未来发展趋势包括与事件相机、深度学习等技术的融合,进一步提升精度和动态性能。

reset2021的博客 120

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Linux Network: Receive side notes

At kernel init, each logical core has a thread called ksoftirq/%d running. These threads are brought up by the initial function net_dev_init(). While probing newly installed device (nic) (also at ke...

weixin_34029680的博客 103

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux内核:工作队列

1. 什么是workqueue Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程. 工作队列(workqueue)是另外一种将工作推后执行的形式...

jinchengzhou的专栏 442

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

《Linux性能优化实战》笔记(23)—— 内核线程 CPU 利用率过高,perf 与 火焰图

在排查网络问题时,我们还经常碰到的一个问题,就是内核线程的 CPU 使用率很 高。比如,在高并发的场景中,内核线程 ksoftirqd 的 CPU 使用率通常就会比较高。回顾 一下前面学过的 CPU 和网络模块,你应该知道,这是网络收发的软中断导致的。 而要分析 ksoftirqd 这类 CPU 使用率比较高的内核线程,如果用我前面介绍过的那些分析 方法,你一般需要借助于其他性能工具,进行辅助分析。 比如,还是以 ksoftirqd 为例,如果你怀疑是网络问题,就可以用 sar、tcpdump 等分析 网络

Hehuyi_In的博客 4081

操作系统和语言,进程和线程

操作系统就像一个高度组织化的公司(内核是管理层),而程序就像公司里的各种项目和工作。

网络安全研究 1231

软中断、tasklet、工作队列

软中断可以在不同CPU上同时运行,即使是同类型的软中断。它适合需要快速响应的处理函数,比如网络收发。 tasklet不可以在不同CPU上同时运行(同类型,不同类型可以同时运行)。实现方法:在该tasklet上有个变量state,调度时,如果该state不是运行状态,将运行,并且将state设置为running状态,这样其它CPU不能同时运行该类型tasklet。避免了全局变量的锁要求。 工作队...

weixin_34283445的博客 251

Linux深入学习内核 - 中断与异常(下)

定义分有静态定义和动态定义两种方式:// 动态定义:// 静态定义:

charlie114514191的博客 1228

《Linux内核设计与实现》读书笔记(八)- 中断下半部的处理

在前一章也提到过,之所以中断会分成上下两部分,是由于中断对时限的要求非常高,需要尽快的响应硬件。 主要内容: 中断下半部处理 实现中断下半部的机制 总结中断下半部的实现 中断实现示例 1. 中断下半部处理 那么对于一个中断,如何划分上下两部分呢?哪些处理放在上半部,哪些处理放在下半部? 这里有一些经验可供借鉴: 如果一个任务对时间十分敏感,将其放在上半部 如果一个任务和硬件有关,将其放在上半部 如果一个任务要保证不被其他中断打断,将其放在上半部 其他所有任务,考虑放在下半部 ..

hhd1988的专栏 177

Linux的ksoftirqd/0是干什么的?底层原理是什么?

当一个软中断任务需要被处理时,ksoftirqd/0 会从队列中取出该任务,并调用相应的软中断处理函数来执行实际的任务。软中断是一种由内核使用的机制,用于处理一些高优先级的任务,例如网络数据包的接收和处理、定时器的处理、任务调度等。与硬中断不同,软中断在中断上下文中执行,但它是以线程的形式运行在内核空间中,不与特定的硬件设备相关。ksoftirqd/0 的运行是周期性的,它会在每个 CPU 核心上进行调度,并根据软中断的优先级进行任务处理。它的目标是尽可能快地处理软中断任务,以确保系统的响应性和性能。

长风破浪会有时的博客 2866

进程的软中断通信_Linux内核浅析-软中断

前面谈到了硬中断,都是通过int指令发出,基本上都会关中断,更不可能存进程调度,如果ISR运行时间过长,则会造成明显的卡顿,所以规定中断中不能存在sleep、阻塞,也会尽量减少资源占用,但这还不够,linux将中断中的一部分逻辑推后执行,这就是软中断,软中断分多钟类型,执行时允许被中断,甚至有些软中断(work queue)可以允许被用户进程抢占。软中断类型软中断的实现难机制很多,比如bottom...

weixin_39610631的博客 305

Linux-2.6 内核软中断(softirq)执行分析

<br />        今天无意中看了眼 2.6 内核的软中断实现,发现和以前我看到的大不相同(以前也是走马观花,不大仔细),能说改动非常大。连 softirq 的调用点都不相同了,以前是三个调用点,今天搜索了一下原始码,发目前多出了ksoftirqd 这个东西后,softirq 在系统中的调用点仅是在 ISR 返回时和使用了 local_bh_enable() 函数后被调用了。网卡部分的显示调用,我觉得应该不算是系统中的调用点。ksoftirqd 返回去调用 do_softirq() 函数应该也只能算

Tonynono的专栏 2313

Linux2.6--中断机制中的 ksoftirqd

Linux中的中断机制被分为两个部分,回应硬件的中断请求的部分成为上半部(一般都是这样),而真正在做处理工作(耗时工作)的部分成为下半部,实现下半部在Linux2.6内核中存在三种方法:软中断,tasklet和工作队列,如下图所示。      中断下半部处理的时机一般是在中断处理程序返回时。那么现在,我们考虑一种情况,中断下半部程序的执行时又再次触发它自己,这时,内核该怎么去处理这种情况呢?

张勤一 6449
上一篇: 图象颜色格式相关文章汇总
下一篇: Android之 BatteryService
CodeJoker
博客等级 码龄18年 50粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值