/* 最高优先级软中断 */TIMER_SOFTIRQ,/* Timer定时器软中断 */NET_TX_SOFTIRQ,/* 发送网络数据包软中断 */NET_RX_SOFTIRQ,/* 接收网络数据包软中断 */BLOCK_SOFTIRQ,/* 块设备软中断 */IRQ_POLL_SOFTIRQ,/* 块设备软中断 */TASKLET_SOFTIRQ,/* tasklet软中断 */SCHED_SOFTIRQ,/* 进程调度及负载...
Softirq和tasklet虽然不会禁用中断,提高了系统对中断的响应性,但是softirq的执行优先级还是比进程的优先级高,有些确实不那么重要的任务其实可以放到进程里执行,和普通进程共同竞争CPU。而且软中断里不能调用会阻塞、休眠的函数,这对软中断函数的编程是很不利的,所以综合各种因素,我们需要把中断处理任务中的与硬件无关有...
工作队列通常应用在中断处理的下半部,对比softirq/tasklet这类机制: 如果被延迟的任务在执行过程中需要睡眠,选择workqueue。 如果被延迟的任务执行过程中不会睡眠,选择softirq/tasklet。 Linux内核中提供了两类工作队列的实现方式: 使用全局工作队列(静态/动态)。 创建自定义的工作队列。 2 使用全局workqueue 这种实现方...
softirq tasklet workqueue 其中, softirq 和 tasklet 依赖软中断子系统,运行在软中断上下文中; workqueue 不依赖软中断子系统,运行在进程上下文中。 softirq 前面已经看到, Linux 在每个 CPU 上会创建一个 ksoftirqd 内核线程。 softirqs 是在 Linux 内核编译时就确定好的,例外网络收包对应的 NET_RX_SOFTIRQ 软中断...
中断的Bottom-half机制,包括了softirq、tasklet、workqueue、以及前文中提到过的中断线程化处理等,其中tasklet又是基于softirq来实现的,这也是本文讨论的主题; 在中断处理过程中,离不开各种上下文的讨论,了解不同上下文的区分有助于中断处理的理解,所以,还是来一张老图吧: ...
workqueue 是除了 softirq 和 tasklet 以外最常用的下半部机制之一。workqueue 的本质是把 work 交给一个内核线程,在进程上下文调度的时候执行。因为这个特点,所以 workqueue 允许重新调度和睡眠,这种异步执行的进程上下文,能解决因为 softirq 和 tasklet 执行时间长而导致的系统实时性下降等问题。
【分析笔记】Linux tasklet 机制的理解 Tasklet 介绍 Linux 内核提供的四种中断下半部中 softirq(软中断)、tasklet(小任务)、workqueue(工作队列) 、request thread(中断线程)中的其中一种,其效率仅次于软中断,但远高于request thread 和 workqueue。 软中断(softirq) 之所以性能高的原因,在 SMP 系统下多个 cpu 同时...
tasklet对应 softirq_vec[TASKLET_SOFTIRQ]; hi-tasklet对应 softirq_vec[HI_SOFTIRQ]。只是后者排在softirq_vec[]的第一个,所以更早被执行; /proc/softirqs 提供了软中断的运行情况 # cat/proc/softirqsCPU0HI:1//高优先级TASKLET软中断TIMER:12571001//定时器软中断NET_TX:826165//网卡发送软中断NET_RX:6263...
中断的Bottom-half机制,包括了softirq、tasklet、workqueue、以及前文中提到过的中断线程化处理等,其中tasklet又是基于softirq来实现的,这也是本文讨论的主题; 在中断处理过程中,离不开各种上下文的讨论,了解不同上下文的区分有助于中断处理的理解,所以,还是来一张老图吧: ...
workqueue是普通的工作队列。 1、softirq 软中断支持SMP,同一个softirq可以在不同的CPU上同时运行,softirq必须是可重入的。软中断是在编译期间静态分配的,它不像tasklet那样能被动态的注册或去除。kernel/softirq.c中定义了一个包含32个softirq_action结构体的数组。每个被注册的软中断都占据该数组的一项。因此最多可能...