网络软中断:数据包接收与传输处理详解
1. 软中断概述
在网络数据处理中,软中断(softIRQ)起着关键作用。当特定的位被置位时,意味着对应的软中断被触发,需要进行处理。我们从softirq_vec数组中调用相应的软中断处理函数,即softirq_vec[iteration].action(),其中iteration是在循环中找到该置位位的遍历次数。
注册软中断处理函数可通过调用open_softirq()实现,它会在softirq_vec[32]中为对应的软中断位创建处理函数条目。在net_dev_init()中,我们通过调用open_softirq()注册了用于接收(Rx)和发送(Tx)的网络软中断。
2. 数据包接收与延迟处理(RX SoftIRQ)
2.1 接收流程概述
当网络接口的 DMA 缓冲区完全接收到一个帧时,会触发设备的 Rx 中断。Rx 处理程序的任务是将帧从 Rx DMA 缓冲区中取出,并发送到上层进行处理。为避免处理数据包花费过多时间,Rx 处理程序仅将数据包排队到 CPU 特定的soft_net输入队列softnet_data[this_cpu] → input_pkt_queue中(通过调用netif_rx()),并通过调用netif_rx_schedu