天下网吧 >> 网吧天地 >> 网吧技术 >> 网吧系统 >> 正文

Linux操作系统下网络性能优化方法简析

2013-1-24不详佚名

68127">

  清单 2、NAPI 的轮询方法

  int (*poll)(struct net_device *dev, int *budget);

  这里的轮询函数用于在将网卡切换为轮询模式之后,用 poll() 方法处理接收队列中的数据包,如队列为空,则重新切换为中断模式。切换回中断模式需要先关闭轮询模式,使用的是函数 netif_rx_complete (),接着开启网卡接收中断 .。

  清单 3、退出轮询模式

  void netif_rx_complete(struct net_device *dev);

  在驱动中创建轮询函数,需要和实际的网络设备 struct net_device 关联起来,这一般在网卡的初始化时候完成,示例代码如下:

  清单 4、设置网卡支持轮询模式

  dev->poll = my_poll; dev->weight = 64;

  里面另外一个字段为权重 (weight),该值并没有一个非常严格的要求,实际上是个经验数据,一般 10Mb 的网卡,我们设置为 16,而更快的网卡,我们则设置为 64。

  NAPI 的一些相关 Interface

  下面是 NAPI 功能的一些接口,在前面都基本有涉及,我们简单看看:

  netif_rx_schedule(dev)

  在网卡的中断处理函数中调用,用于将网卡的接收模式切换为轮询

  netif_rx_schedule_prep(dev)

  在网卡是 Up 且运行状态时,将该网卡设置为准备将其加入到轮询列表的状态,可以将该函数看做是 netif_rx_schedule(dev) 的前半部分

  __netif_rx_schedule(dev)

  将设备加入轮询列表,前提是需要 netif_schedule_prep(dev) 函数已经返回了 1

  __netif_rx_schedule_prep(dev)

  与 netif_rx_schedule_prep(dev) 相似,但是没有判断网卡设备是否 Up 及运行,不建议使用

  netif_rx_complete(dev)

  用于将网卡接口从轮询列表中移除,一般在轮询函数完成之后调用该函数。

  __netif_rx_complete(dev)

  Newer newer NAPI

  其实之前的 NAPI(New API) 这样的命名已经有点让人忍俊不禁了,可见 Linux 的内核极客们对名字的掌控,比对代码的掌控差太多,于是乎,连续的两次对 NAPI 的重构,被戏称为 Newer newer NAPI 了。

  与 netif_rx_complete(dev) 类似,但是需要确保本地中断被禁止


本文来源:不详 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系email:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧·网吧天下
  • 本周热门
  • 本月热门
  • 阅读排行