免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 瀚海书香
打印 上一主题 下一主题

2.6内核数据包接收流程分析 [复制链接]

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
21 [报告]
发表于 2011-10-20 17:00 |只看该作者
但是在napi_schedule(&queue->backlog); 网卡的napi_struct是什么时候注册到queue->backlog的?

回复 20# kgatheko

napi_struct是在有数据包到达的时候,由网卡驱动注册到softnet_data的poll_list上的。

论坛徽章:
0
22 [报告]
发表于 2011-10-21 09:02 |只看该作者
回复 21# 瀚海书香

netif_rx(struct sk_buff *skb)------> napi_schedule(&queue->backlog); --->list_add_tail(&n->poll_list, &__get_cpu_var(softnet_data).poll_list);

我不明白的是,quque->backlog 或者说 n->poll_list 在调用list_add_tail之前是从哪里来的?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
23 [报告]
发表于 2011-10-21 09:10 |只看该作者
netif_rx(struct sk_buff *skb)------> napi_schedule(&queue->backlog); --->list_add_tail(&n->poll_list, &__get_cpu_var(softnet_data).poll_list);

我不明白的是,quque->backlog 或者说 n->poll_list 在调用list_add_tail之前是从哪里来的?
回复 22# kgatheko

queue->backlog是在网络初始化net_dev_init函数中,静态初始化的。
  1. for_each_possible_cpu(i) {
  2.                 struct softnet_data *queue;

  3.                 queue = &per_cpu(softnet_data, i);
  4.                 skb_queue_head_init(&queue->input_pkt_queue);
  5.                 queue->completion_queue = NULL;
  6.                 INIT_LIST_HEAD(&queue->poll_list);

  7.                 queue->backlog.poll = process_backlog;
  8.                 queue->backlog.weight = weight_p;
  9.         }
复制代码

论坛徽章:
0
24 [报告]
发表于 2011-10-21 09:13 |只看该作者
本帖最后由 wangzhen11aaa 于 2011-10-21 09:14 编辑

后面有时间我整理比较老的版本的网络堆栈。。。。。。
老的0.0
我看着架构和我看的那个差不多啊,感觉这些函数好亲切。
细节上可能有点变化。

论坛徽章:
0
25 [报告]
发表于 2011-10-21 09:20 |只看该作者
回复 23# 瀚海书香


    这个不是非NAPI的初始化吗?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
26 [报告]
发表于 2011-10-22 07:45 |只看该作者
回复 25# kgatheko
backlog的作用是:在开启NAPI的模式下,如果网卡不支持NAPI,那么就是要系统默认的napi_struct,也就是backlog了。

论坛徽章:
0
27 [报告]
发表于 2011-10-22 08:54 |只看该作者
回复 26# 瀚海书香

backlog的作用是:在开启NAPI的模式下,如果网卡不支持NAPI,那么就是要系统默认的napi_struct,也就是backlog了。


开启NAPI的源码在哪里,它是怎么把网卡的napi_struct  映射到默认的napi_struct ?
我不明白这个backlog 怎么跟对应的网卡联系上,当添加到poll_list后 ,在遍历poll_list 调用
poll时,它怎么知道是调用哪个网卡注册的poll (或者调用的是默认的 process_backlog)

论坛徽章:
0
28 [报告]
发表于 2012-02-02 17:06 |只看该作者
本帖最后由 iceyes342 于 2012-02-02 19:10 编辑

有一点不明白的是net_rx_action是软中断对应的处理函数,net_rx_action中又间接调用后面一系列的函数,那知道在内核态,整个数据报的处理流程都是在软中断中进行的吗

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
29 [报告]
发表于 2012-02-06 09:26 |只看该作者
回复 28# iceyes342
有一点不明白的是net_rx_action是软中断对应的处理函数,net_rx_action中又间接调用后面一系列的函数,那知道在内核态,整个数据报的处理流程都是在软中断中进行的吗


在数据流量比较小的时候(这个概念有点模糊 )可以认为大部分数据都是在软中断中处理的,如果数据流较大的情况下,有一部分数据包会在内核线程ksoftirqd中处理。

论坛徽章:
0
30 [报告]
发表于 2013-01-31 14:16 |只看该作者
很不错的文章,赞一个。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP