免费注册 查看新帖 |

Chinaunix

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

Receive packet steering patch详解 [复制链接]

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
21 [报告]
发表于 2010-07-29 16:41 |只看该作者
NAPI的话,你没办法保证软中断平衡的,它会关闭中断并在软中断轮询收包,此时等于说你就相当于无视其他的cpu了,这个时候就只有当前的cpu在处理数据了

那就是说如果非NAPI的话,硬中断的平衡,理论上可以带来软中断的平衡。
如果NAPI的话,当前的模式只能在其中一个CPU上处理软中断。而这个patch就是为了实现NAPI的软中断处理均衡在多核CPU上。

论坛徽章:
0
22 [报告]
发表于 2010-07-29 17:03 |只看该作者
楼主,还是那个问题。作者为了提升性能,引入了硬件hash的支持,你了解哪些网卡具备这种能力吗??
我了解的只有Intel的高端RSS的网卡,但是跑RSS的网卡,又用不着这个补丁了,直接硬件就处理了。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
23 [报告]
发表于 2010-07-29 17:08 |只看该作者
楼主,还是那个问题。作者为了提升性能,引入了硬件hash的支持,你了解哪些网卡具备这种能力吗??
我了解的只有Intel的高端RSS的网卡,但是跑RSS的网卡,又用不着这个补丁了,直接硬件就处理了。

上面提到软件计算hash的话,可能存在命不中的情况,为什么会命不中呢?

论坛徽章:
0
24 [报告]
发表于 2010-07-29 17:19 |只看该作者
因为正常情况下,来的数据包是不同的,CPU二级缓存需要改变,导致CPU二级缓存不命中,发生抖动,要产生一定的性能开销。作者专门提到过这个问题。
1、有开销,总比有CPU闲置睡觉的好;
2、如果引入硬件计算hash,这个问题就解决了。

论坛徽章:
0
25 [报告]
发表于 2010-07-29 17:35 |只看该作者
那里的代码有spin_lock和spin_unlock_bh配合使用的?能贴出来看下吗?spin_lock和spin_unlock_bh应该是 ...
simohayha_cu 发表于 2010-07-29 16:24


不是说 spin_lock 与 spin_unlock_bh 配套用
而是针对同一个 lock,有时 spin_lock/spin_unlock,有时 spin_lock_bh/spin_unlock_bh,这样正常吗?

比如下面 net/netfilter/nf_conntrack_core.c 中的一段代码(2.6.34),nf_conntrack_lock 就是被这样处理的

  1. void nf_ct_delete_from_lists(struct nf_conn *ct)
  2. {
  3.         struct net *net = nf_ct_net(ct);

  4.         nf_ct_helper_destroy(ct);
  5.         spin_lock_bh(&nf_conntrack_lock);
  6.         /* Inside lock so preempt is disabled on module removal path.
  7.          * Otherwise we can get spurious warnings. */
  8.         NF_CT_STAT_INC(net, delete_list);
  9.         clean_from_lists(ct);
  10.         spin_unlock_bh(&nf_conntrack_lock);
  11. }
  12. EXPORT_SYMBOL_GPL(nf_ct_delete_from_lists);

  13. static void death_by_event(unsigned long ul_conntrack)
  14. {
  15.         struct nf_conn *ct = (void *)ul_conntrack;
  16.         struct net *net = nf_ct_net(ct);

  17.         if (nf_conntrack_event(IPCT_DESTROY, ct) < 0) {
  18.                 /* bad luck, let's retry again */
  19.                 ct->timeout.expires = jiffies +
  20.                         (random32() % net->ct.sysctl_events_retry_timeout);
  21.                 add_timer(&ct->timeout);
  22.                 return;
  23.         }
  24.         /* we've got the event delivered, now it's dying */
  25.         set_bit(IPS_DYING_BIT, &ct->status);
  26.         spin_lock(&nf_conntrack_lock);
  27.         hlist_nulls_del(&ct->tuplehash[IP_CT_DIR_ORIGINAL].hnnode);
  28.         spin_unlock(&nf_conntrack_lock);
  29.         nf_ct_put(ct);
  30. }
复制代码

论坛徽章:
0
26 [报告]
发表于 2010-07-29 20:30 |只看该作者
不是说 spin_lock 与 spin_unlock_bh 配套用
而是针对同一个 lock,有时 spin_lock/spin_unlock,有时 ...
platinum 发表于 2010-07-29 17:35


不好意思,前面是我理解错了。

这个是没关系的,不同的上下文呀,有时只需要关闭下半部,那么自然用spin_lock_bh。

论坛徽章:
0
27 [报告]
发表于 2010-07-29 20:39 |只看该作者
楼主,还是那个问题。作者为了提升性能,引入了硬件hash的支持,你了解哪些网卡具备这种能力吗??
我了解 ...
独孤九贱 发表于 2010-07-29 17:03


不好意思,这个我倒是不知道。

论坛徽章:
0
28 [报告]
发表于 2010-07-29 21:06 |只看该作者
这个是没关系的,不同的上下文呀,有时只需要关闭下半部,那么自然用 ...
simohayha_cu 发表于 2010-07-29 20:30


不好意思,有点跑题了,但我还想请教一下
如果对于同一个 lock,比如对一个 hash 操作,在中断上下文使用 spin_lock 插入,而进程上下文使用 spin_lock_bh 读取,这种设计本身是不是就不合理啊?

论坛徽章:
0
29 [报告]
发表于 2010-07-29 21:33 |只看该作者
不好意思,有点跑题了,但我还想请教一下
如果对于同一个 lock,比如对一个 hash 操作,在中断上下文使 ...
platinum 发表于 2010-07-29 21:06



你这个插入和读取什么意思?

我的理解在进程上下文的话,自然需要使用spin_lock_bh,因为进程上下文一般来说是和下半部有竞争的,所以这里需要关闭掉下半部。你可以看到在tcp_recvmsg,tcp_sendmsg中都是调用spin_lock_bh的。而在中断上下文的话不需要关闭下半部,所以就使用spin_lock了。。

论坛徽章:
0
30 [报告]
发表于 2010-07-29 23:04 |只看该作者
你这个插入和读取什么意思?

我的理解在进程上下文的话,自然需要使用spin_lock_bh,因为进程上下 ...
simohayha_cu 发表于 2010-07-29 21:33


可能是我没说清楚
我说的插入和读取是指针对 hash 表的操作,加入插入在中断上下文实现,而读取(遍历)hash 表在进程上下文实现,可以分别用 spin_lock 和 spin_lock_bh 对同一个 hash_lock 操作吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP