netif_rx与NAPI驱动程序中的netif_receive_skb相比

时间:2014-11-04 02:35:10

标签: linux-kernel linux-device-driver

我知道这个事实 - 我们应该在我们实现NAPI poll()函数时调用netif_receive_skb()。但是,我真的不明白为什么?为什么?为什么呢?...

如果我们打电话给" netif_rx()"在napi-> poll()中,有没有"重复"排队发生了什么?或者我们不一定提出重复的softirq?

实际上,我使用带有1G千兆位以太网卡的iperf工具进行了某种性能测试,它仅显示10-30mbps的吞吐量差异。 (但是,如果我在napi-> poll中调用netif_rx(),它会使NET_RX SIRQ的数量增加一倍...)

为什么我们应该直接在napi-> poll()中调用netif_receive_skb()?在napi-> poll()上下文中尽可能多地处理数据包确实有助于提高性能??

致以最诚挚的问候,

2 个答案:

答案 0 :(得分:0)

当我们尝试查看源代码时,我们会发现,每次进入netif_rx时,它都会禁用抢占,并且在它离开时,它会再次启用抢占。过于频繁地禁用/启用抢占肯定会导致性能(系统性能)降低。

答案 1 :(得分:0)

也许与锁定有关。要从NET_RX softirq调用netif_receive_skb(),并且softirqs可以在不同的CPU上同时执行,因此应实施适当的锁定以避免竞争条件。