2、软中断事件的 handler 提前注册到 softirq 子系统, 注册方式open_softirq(softirq_id, handler) 例如,注册网卡收发包(RX/TX)软中断处理函数: // net/core/dev.c open_softirq(NET_TX_SOFTIRQ, net_tx_action); open_softirq(NET_RX_SOFTIRQ, net_rx_action); 3、软中断占 CPU 的总开销:可以用top查看...
2、软中断事件的 handler 提前注册到 softirq 子系统, 注册方式open_softirq(softirq_id, handler) 例如,注册网卡收发包(RX/TX)软中断处理函数: // net/core/dev.c open_softirq(NET_TX_SOFTIRQ, net_tx_action); open_softirq(NET_RX_SOFTIRQ, net_rx_action); 3、软中断占 CPU 的总开销:可以用top查看...
TIMER_SOFTIRQ是for software timer的(所谓software timer就是说该timer是基于系统tick的)。NET_TX_SOFTIRQ和NET_RX_SOFTIRQ是用于网卡数据收发的。BLOCK_SOFTIRQ和BLOCK_IOPOLL_SOFTIRQ是用于block device的。SCHED_SOFTIRQ用于多CPU之间的负载均衡的。HRTIMER_SOFTIRQ用于高精度timer的。RCU_SOFTIRQ是处理RCU的。这些具体...
net_dev_init函数(定义在net/core/dev.c),最注册软中断,如下: open_softirq(NET_TX_SOFTIRQ, net_tx_action); open_softirq(NET_RX_SOFTIRQ, net_rx_action); 定义在:kernel/softirq.c文件中 voidopen_softirq(intnr,void(*action)(structsoftirq_action *)) { softirq_vec[nr].action = action; } 这...
NET_TX_SOFTIRQ,/* 将数据包传送到网卡 */ NET_RX_SOFTIRQ,/* 从网卡接收数据包 */ BLOCK_SOFTIRQ,/* 块设备的软中断 */ BLOCK_IOPOLL_SOFTIRQ,/* 支持IO轮询的块设备软中断 */ TASKLET_SOFTIRQ,/* 常规tasklet */ SCHED_SOFTIRQ,/* 调度程序软中断 */ ...
raise_softirq(NET_TX_SOFTIRQ); This raises the NET_TX_SOFTIRQ softirq. Its handler, net_tx_action(), runs the next time the kernel executes softirqs. This function disables interrupts prior to actually raising the softirq, and then restores them to their previous state. If interrupts are alr...
open_softirq(NET_TX_SOFTIRQ, net_tx_action); open_softirq(NET_RX_SOFTIRQ, net_rx_action); 代码语言:javascript 代码运行次数:0 复制Cloud Studio 代码运行 static int __init net_dev_init(void) { int i, rc = -ENOMEM; BUG_ON(!dev_boot_phase); if (dev_proc_init()) goto out; if (ne...
其中HI_SOFTIRQ和TASKLET_SOFTIRQ用来实现tasklet,NET_TX_SOFTIRQ和NET_RX_SOFTIRQ用于网络的发送和接受操作,TIMER_SOFTIRQ和HRTIMER_SOFTIRQ用于定时器,前者是低精度的定时器,后者是高精度的定时器。BLOCK_SOFTIRQ和BLOCK_IOPOLL_SOFTIRQ用于块设置操作,SCHED_SOFTIRQ用于调度方面的操作,RCU_SOFTIRQ用于rcu方面的操作。这些...
系统中有哪些软中断(softirq队列里有什么),也是固定的,Linux Kernel中定义的软中断的定义如下:(linux/include/linux/interrupt.h)enum{HI_SOFTIRQ=0,TIMER_SOFTIRQ,NET_TX_SOFTIRQ,NET_RX_SOFTIRQ,BLOCK_SOFTIRQ,IRQ_POLL_SOFTIRQ,TASKLET_SOFTIRQ,SCHED_SOFTIRQ,HRTIMER_SOFTIRQ,RCU_SOFTIRQ, /* Preferable RCU...
NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, BLOCK_SOFTIRQ, IRQ_POLL_SOFTIRQ, TASKLET_SOFTIRQ, SCHED_SOFTIRQ, HRTIMER_SOFTIRQ, RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */ NR_SOFTIRQS }; (linux/kernel/softirq.c) 74 static void wakeup_softirqd(void) ...