软中断、Tasklet 与工作队列的机制分析

news2024/9/20 11:37:42

文章目录

  • 1 软中断(Softirq)
    • 1.1 概念与背景
    • 1.2 特点与执行
    • 1.3 触发与执行方式
    • 1.4 实现与使用
    • 1.5 软中断的替代机制
  • 2 Tasklet
    • 2.1 概念与特点
  • 3 Bottom Halves(BH)
    • 3.1 概念与历史
  • 4 工作队列(Workqueue)
    • 4.1 概念与特点
  • 5 软中断、Tasklet 与工作队列的区别
  • 6 延迟任务的含义与实现
    • 6.1 延迟任务的含义
    • 6.2 Softirq 和 Tasklet 的延迟任务实现
    • 6.3 延迟任务的优势
  • 7 总结
  • 参考链接
  • 封面

本文主要分析软中断、Tasklet 和工作队列的机制及其特点。

1 软中断(Softirq)

1.1 概念与背景

软中断是为解决在硬件中断处理过程中,由于长时间屏蔽中断导致中断响应延迟甚至丢失中断的问题而引入的机制。软中断本质上是一种在中断上下文中执行的延迟任务处理机制,它优先于所有任务的执行。

1.2 特点与执行

  • 中断上下文执行: 软中断在中断回调函数执行后触发,并且会在软中断执行函数 __do_softirq 中重新开启中断,允许被打断。因此,虽然软中断在中断上下文中执行,但它是可以被其他中断打断的。
  • 优先级: 软中断的优先级高于任何任务的优先级。同样,软中断比 tasklet 具有更高的优先级。
  • 多核并行: 软中断在多核系统中可以并行执行,但同一个软中断类型不会跨核迁移(即在哪个核触发的软中断就在哪个核上执行)。
  • 重入性: 由于软中断在多核上可以并行执行,因此它们的回调函数必须是可重入的,需要使用 spinlock 来保护临界区。

1.3 触发与执行方式

软中断可以在以下三个地方触发执行:

  1. 硬中断处理结束后: 在硬中断处理结束后,执行在硬中断中 raise 的软中断。
  2. local_bh_enable()/spin_unlock_bh(): 当下半部使能时执行,执行时机具有一定的随机性(不易预测)。
  3. ksoftirqd 线程: 当软中断正在执行或者执行时间过长时,软中断可能会在线程化的 ksoftirqd 中执行。启用实时补丁(RT Patch)后,软中断也会在线程化的 ksoftirqd 中执行。由于线程化执行方式受调度影响,执行时间更加不可预测。

1.4 实现与使用

  • 静态定义: 软中断在 enum 中静态定义,不能动态申请。系统中的软中断主要用于特权机制,不会随意定义新的静态软中断类型。
  • 全局数组管理: 所有软中断及其回调函数按照优先级索引,被定义在一个全局数组中。各类使用软中断的机制会在自己的中断处理函数中 raise 定义的软中断,随后在中断处理结束后执行这些软中断。
  • ksoftirqd 线程: 每个 CPU 都会创建一个 softirqd 线程,以确保未处理的软中断可以在线程中执行。软中断不会跨核触发,在哪个核 raise 的软中断,就会在哪个核执行。

1.5 软中断的替代机制

  • Tasklet: 基于软中断机制实现的 tasklet 提供了更简单的接口,便于在中断的下半部插入自定义代码。

2 Tasklet

2.1 概念与特点

Tasklet 是基于软中断的机制,用于处理需要延迟的任务。

  • 不能并行执行: 同一类型的 tasklet 只能在同一时间在一个 CPU 上运行,避免了竞争条件。
  • 适用场景: 适合处理简单的延迟执行任务。

3 Bottom Halves(BH)

3.1 概念与历史

BH(Bottom Halves)是一个历史概念,曾用于处理需要在中断上下文之外完成的任务。

  • 替代机制: 现在主要由软中断和 tasklet 取代。
  • 原本用途: 用于在中断处理程序之后执行不紧急的任务。

4 工作队列(Workqueue)

4.1 概念与特点

工作队列是一种在进程上下文中执行延迟任务的机制。

  • 上下文: 进程上下文中执行,允许睡眠和阻塞。
  • 适用场景: 适合需要长时间运行或可能阻塞的任务。
  • 并行性: 可以在多个 CPU 上并行执行。

5 软中断、Tasklet 与工作队列的区别

  • 执行上下文: 软中断和 tasklet 在中断上下文中运行,不允许睡眠;工作队列在进程上下文中运行,可以睡眠。
  • 复杂度与阻塞: 软中断和 tasklet 适合短小、非阻塞任务;工作队列适合复杂、可能阻塞的任务。
  • 并行性: 软中断支持并行执行;tasklet 不支持同类型的并行执行;工作队列根据需要可以并行执行。

6 延迟任务的含义与实现

6.1 延迟任务的含义

“延迟任务”指的是不需要在中断处理程序中立即完成的任务。这些任务可以稍后执行,以减少中断处理时间,从而提高系统的响应性。

6.2 Softirq 和 Tasklet 的延迟任务实现

  • Softirq:

    • 注册与调度: 在内核启动时注册,并在中断或其他触发条件下调度执行。
    • 执行: 在中断返回或内核调度点执行,确保不阻塞,因为它们在中断上下文中执行。
  • Tasklet:

    • 基于 Softirq: TaskletSoftirq 的一个实现,提供了更简单的接口。
    • 调度: 被提交到 tasklet 队列后,在适当的时机由内核运行。
    • 执行: 不允许同类型 tasklet 并行执行,避免竞争条件。

6.3 延迟任务的优势

  • 减少中断处理时间: 硬件中断处理程序应尽快完成,以便系统能够响应其他中断。将复杂或耗时的任务延迟到软中断或 tasklet 中执行,优化了中断响应时间。
  • 批量处理: 软中断可以批量处理多个事件,减少上下文切换和调度开销。
  • 非实时性任务: 某些任务不需要立即完成,可以稍后处理,如更新统计信息或调度其他工作。

这些机制确保了内核在处理高优先级任务时仍然保持高效和响应性。

7 总结

本文分析了软中断、Tasklet 和工作队列的机制、特点及其应用场景,阐明了它们在延迟任务处理中的重要性和相互关系。


参考链接

  • Linux Kernel Documentation

封面

由 DALL-E-3 生成
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ElasticSearch集群搭建与安全认证

文章目录 核心概念集群节点分片CAT API查看集群信息 搭建三节点ES集群安装ES安装Cerebro客户端安装kibana ES集群安全认证ES敏感信息泄露的原因免费的方案集群内部安全通信开启并配置X-Pack的认证 核心概念 集群 一个集群可以有一个或者多个节点不同的集群通过不同的集群名来…

百度百科创建收费吗

百度百科作为一个开放的网络百科全书,旨在为用户提供丰富的知识信息。根据百度百科的官方声明,创建百度百科词条是完全免费的。任何人都可以自由编辑、修改和添加条目。百度百科的创建和编辑过程是由用户自发进行的,不存在官方收费的情况。 百…

【流程引擎】springboot完美集成activiti工作流方案

前言 activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。 项目源码配套文档获取:本文末个人名片直接获取。 一、项目形式 springboot…

聊一下软件测试中沟通的原则

目录 一、沟通要清晰,简洁,准确,透明 二、沟通要尽早,及时,适应 三、既要对事,也要对人 四、保持开放心态 五、亲自验证 从事多年测试工作,一项基本功必须练会,那就是“沟通”。…

Springboot项目中使用druid实现多数据源和动态数据源,因数据库不可用导致的项目挂起的处理方案

Springboot项目中使用druid因数据库不可用导致的项目挂起的处理方案 在Spring Boot项目中使用Druid实现多数据源和动态数据源管理是一个常见的场景。通过合理的配置和错误处理机制,您可以有效地管理数据源,避免因数据库不可用而导致整个项目挂起。 1.…

npm包更新发布:从准备到发布的全面指南

引言 在Node.js的生态系统中,npm(Node Package Manager)是不可或缺的一部分,它不仅是获取和管理Node.js项目依赖的核心工具,也是分享和发布自己开发的模块或库的关键平台。 由于一些长期不更新的依赖没有原作者没有及…

精通C++ STL(五):list的介绍及使用

目录 ​编辑 list的介绍 list的使用 list的定义方式 list的插入和删除 push_front和pop_front push_back和pop_back insert erase list的迭代器使用 begin和end rbegin和rend list的元素获取 front和back list的大小控制 size resize empty clear list的操作函数 sort splic…

内部排序(插入、交换、选择)

一、排序的部分基本概念 1. 算法的稳定性 若待排序表中有两个元素 Ri 和 Rj ,其对应的关键字相同即 keyi keyj,且在排序前 Ri 在 Rj 的前面,若使用某一排序算法排序后,Ri 仍然在 Rj 的前面,则称这个排序算法是稳定的…

EMC学习笔记4——传导骚扰发射

传导骚扰发射是最基本的实验项目,主要是检测设备在工作时是否通过电源线产生过强的骚扰发射。 一、传导骚扰发射判断 可以通过两个方面来判断设备是否产生了传导发射: 1.电流的时域波形判断:电流波形与电压的波形不一样。如下图所示&#xf…

界面控件DevExpress .NET MAUI v24.1 - 发布TreeView等新组件

DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多…

探索谜题,畅享推理——海龟汤智能体来袭

本文由 ChatMoney团队出品 介绍说明 在神秘与智慧交织的世界里,有一种游戏能让您的思维飞速旋转,激发无限的想象力和推理能力,那就是海龟汤。现在,我们为您带来全新的海龟汤智能体,为您的娱乐时光增添无尽乐趣&#x…

YOLOv5改进 | 融合改进 | C3融合动态卷积模块ODConv【完整代码】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录: 《YOLOv5入门 改…

学生高性价比运动耳机有哪些?五大性价比高的运动耳机学生党分享

2024年春季,开放式蓝牙耳机就凭借“佩戴舒适、开放安全”等优势火热出圈,这让各大音频厂商更新迭代速度不断加快,新品层出不穷。而用户面对市场上琳琅满目的开放式蓝牙耳机,一时间也不知道如何选择。对于学生来说,比较…

RepQ-ViT 阅读笔记

RepQ-ViT: Scale Reparameterization for Post-Training Quantization of Vision Transformers ICCV 2023 中国科学院自动化研究所 Abstract RepQ-ViT,一种新的基于量化缩放因子(quantization scale)重参数化的PTQ框架 解耦量化和推理过程…

ios使用plist实现相册功能

第一步:照片复制到Assets文件夹再创建plist 第二步:页面设计 第三步:代码实现 // // PhotoViewController.m // study2024 // // Created by zhifei zhu on 2024/8/11. //#import "PhotoViewController.h"interface PhotoView…

JAVA打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车系统源码

🚗💨打车、顺风车、滴滴车&跑腿系统,一键解决出行生活难题! 一、出行新选择,打车从此不再难 忙碌的生活节奏,让我们常常需要快速、便捷的出行方式。打车、顺风车、滴滴车系统,正是为了满足…

通天星CMSV6代码审计

fofa指纹 body"./open/webApi.html"||body"/808gps/" /gpsweb/WEB-INF/classes/config/version.conf中可以查看版本。 框架分析 默认安装目录为C:\Program Files\CMSServerV6\ 默认账户:admin/admin 框架结构 跟进web.xml,可以看…

WebGL 入门:开启三维网页图形的新篇章(上)

一、引言 介绍 WebGL 的背景和意义 一、背景 WebGL 是一种 JavaScript API,用于在网页上呈现三维图形。 它是在 2009 年由 Khronos Group 提出的,并于 2011 年成为 W3C 的标准。 在 WebGL 出现之前,网页上的三维图形主要是通过插件&…

TEMU卖家们如何提高temu店铺排名、权重、流量、采购测评成功率?

一、什么叫做自养号测评? 自养号测评类似于国内的某宝S单,就是通过搭建海外的服务器和IP采用海外真实买家资料来注册、养号、下单。 二、自养号测评有哪些作用? 自养号快速提高产品的排名、权重和销量,可以提升订单量、点赞(rat…

Excel工作表同类数据合并工具

下载地址:https://pan.quark.cn/s/81b1aeb45e4c 在Excel表格中,把多行同类数据合并为一行是件令人无比头痛的事情:首先,你得确定哪几条记录是可合并的同类数据,人工对比多个字段难免顾此失彼挂一漏万;其次&…