+ -
当前位置:首页 → 问答吧 → NAPI也用process_backlog?

NAPI也用process_backlog?

时间:2010-04-19

来源:互联网

本帖最后由 cs_student 于 2010-04-19 20:10 编辑

今天我在跟踪e1000驱动的NAPI流程时,无意中发现在系统启动的过程中,虽然采用NAPI方式,但还是会使用process_backlog进行软中断的处理,并且这个过程很短,只出现了一瞬间。不理解是为什么!
    我在关键流程的函数里都加入了调试信息,在系统启动时,刚开始显示的net_rx_action后的函数都是e1000_clean(也就是NAPI的poll函数),这个是正确的,可是,在后面的一个很短的时间,屏幕打印出现在在process_backlog函数中,这个是非NAPI的poll函数啊,为什么在NAPI模式下也会调用呢?这个只是在启动过程中一闪而现,之后就没再有了。而且,在进行这个软中断处理之前,并没有出发硬中断,而是直接进入的__netif_rx_schedule函数,然后调用的软中断处理函数net_rx_action和poll函数process_backlog。
    截图如下,请高手给小弟解释下,谢谢!

    正确的NAPI流程,先触发硬中断,然后进行软中断的处理,poll函数为e1000_clean
下载 (82.04 KB)
2010-04-19 20:08

      在正常的NAPI流程中突然出现的process_backlog。请注意,这里没有先触发硬中断,而直接进行了软中断处理。
下载 (80.5 KB)
2010-04-19 20:09

作者: cs_student   发布时间: 2010-04-19

回复 cs_student

一种更高层面的抽像,普通中断被抽像成NAPI的一种而已……和谐的统一。

作者: 独孤九贱   发布时间: 2010-04-19

回复 独孤九贱


    没有明白九贱兄的意思,如果是抽象成NAPI的话,应该是即使用process_backlog的时候也使用NAPI的整体机制,这个我能理解。不过我现在面对的问题,是在使用NAPI的时候,出现了process_backlog函数,是该用NAPI的地方,却用了非NAPI的机制,这个我就不理解了,而且只有这一瞬间,并且没有硬中断的触发。请九贱兄再解释一下,谢谢!

作者: cs_student   发布时间: 2010-04-19

看不懂。。。。

作者: fan11xy   发布时间: 2010-04-20

回复 cs_student


   
有 些 通过NAPI交给 IP的 skb也 会 被 netif_rx(skb)重新交回给 rx_softirq吧, 比 如 tunnel之类 的 .

作者: Arthur_   发布时间: 2010-04-20

回复 Arthur_


    但是我跟踪的过程中,发现如果走NAPI流程的话,在__netif_rx_schedule()中能得到net_dev,能打印出名字,如eth0。但是如果通过__netif_rx_schedule()调用了process_backlog的话,就没有任何dev的名字了,那这个process_backlog到底在做些什么呢?

作者: cs_student   发布时间: 2010-04-20

是这样的,兄弟。NAPI驱动存在两种方式,其实大同小异,比如8139C就不适用网络层提供给的process——backlog,而e1000一类的卡就会使用Pb这种网络层poll方法并且向上提交数据。

作者: neyshule   发布时间: 2010-08-24