众所周知,Linux内核接收每个帧并使其经历四个步骤:
- 硬件接收
- 硬IRQ: NIC通过中断CPU来断言是否存在网络帧。这会导致NIC驱动程序确认中断并安排软IRQ操作。
- Soft IRQ:此阶段实现实际的帧接收过程,并在softirq上下文中运行。这意味着该阶段抢占了在指定CPU上运行的所有应用程序,但仍然允许断言硬IRQ。
- 申请表
图8.1。网络接收路径图:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Performance_Tuning_Guide/s-network-packet-reception.html
但为什么有必要两次调用中断:硬和软?
为什么CPU在获得hard-irq时会直接导致soft-irq而不是执行现在在hard-irq和soft-irq中执行的所有工作?