0

我正在阅读Understanding linux networking Internal book and the pdf Network packet capture in Linux kernelspace on the link networkkernel.pdf

主题 9.2.2 下的理解 linux 网络内部 ,给出了

处理输入帧的代码分为两部分:首先驱动程序将帧复制到内核可访问的输入队列中,然后内核对其进行处理(通常将其传递给专用于相关协议的处理程序,例如知识产权)。第一部分在中断上下文中执行,可以抢占第二部分的执行。

现在查询的是第二部分何时安排?谁安排他们?调用是否在中断处理程序中给出?在Linux 内核空间的网络数据包捕获中,数据包输入流被描述为:-

When working in interrupt driven model, the nic registers an
interrupt handler;
• This interrupt handler will be called when a frame is received;
• Typically in the handler, we allocate sk buff by calling

    dev alloc skb();

• Copies data from nic’s buffer to this struct just created;
• nic call generic reception routine `netif_rx();`
• `netif rx()` put frame in per cpu queue;
• if queue is full, drop!
• net rx action() decision based on skb->protocol;
• This function basically dequeues the frame and delivery a copy
for every protocol handler;
• ptype all and ptype base queues

我想知道 netif rx(); 和 net rx action() 被调用?谁给他们打电话我的意思是谁安排他们。

请指导。

4

1 回答 1

0

这种调度是由NAPI结构完成的。数据包是通过所描述的方法来捕获的。当存在“活锁”问题或数据包泛滥时,此软中断会出现;这些都处理好了

数据包出口比数据包入口复杂得多,队列管理和 QOS(甚至可能是数据包整形)正在实施。“队列规则”用于实现用户可指定的QOS 策略


NAPI 结构调度:

对于 NAPI 结构定义为;它的驱动程序设计和硬件架构

Linux 使用 ksoftirqd 作为通用解决方案来安排 softirq 在下一次中断之前运行并将它们置于调度程序控制之下。这也防止了连续的软中断独占 CPU。这也有这样的效果,即在运行 CPU 密集型应用程序和网络时需要考虑 ksoftirq 的优先级,以获得软中断/用户平衡的适当平衡。据报道,将 ksoftirq 优先级增加到 0(最终更高)可以解决高 CPU 负载下网络性能低的问题。

还有一篇关于NAPI Scheduling的研究论文。

于 2013-04-05T07:41:01.433 回答