免费注册 查看新帖 |

Chinaunix

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

请教内核中的延迟技巧 [复制链接]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
11 [报告]
发表于 2007-01-30 15:38 |只看该作者
原帖由 独孤九贱 于 2007-1-30 15:07 发表于 10楼  


问题是核心是“循环工作体”,如何让出CPU,如果不让出,下一个包又如何能够来到,又如何触发呢?




为什么不让出cpu, 下一个包就不会来到?  我不懂协议栈, 瞎掰几句, 收包不是用中断的吗? cpu一直在mdelay/udelay, 也是可以接收中断的啊。


如果一定是需要用re schedule的方式让出CPU, 这才中断上下文肯定不能做, 就要更改需求了

论坛徽章:
0
12 [报告]
发表于 2007-01-30 15:47 |只看该作者
在中断上下文中是不能睡眠的。你可以用内核线程来做。

论坛徽章:
0
13 [报告]
发表于 2007-01-30 17:03 |只看该作者
我觉得可以用多线程来做,主线程负责控制各个线程对分组的操作,但这样效率似乎有问题

论坛徽章:
0
14 [报告]
发表于 2007-01-30 17:17 |只看该作者
原帖由 snow_insky 于 2007-1-30 11:57 发表于 7楼  
我觉得这根本不是一个延时的问题,而是一个触发的问题,只要你收到一个包后,先保留这个包,然后发送一个你应该发送的包,也就是一个循环工作体,以后一个包来触发前一个包的发送.而不是用什么延时来解决这个问题.

...

我觉得这个比较靠谱。

论坛徽章:
0
15 [报告]
发表于 2007-01-30 17:38 |只看该作者
将第一个包存入缓冲区,收到第二个包时调度tasklet来处理第一个包所在的缓冲区就行了。
原帖由 独孤九贱 于 2007-1-29 17:28 发表于 1楼  
版本:2.4.21

偶在Netfilter上Hook了一个函数,其需要实现的功能是:“捕获数据包,暂时拦截第一个,当第二个数据包被转发时,再放行第一个”,也就是说,对于第一个数据包的处理,需要延迟执行。

不知道 ...

论坛徽章:
0
16 [报告]
发表于 2007-01-30 17:39 |只看该作者
netfilter 支持把包截获,交给用户,最后处理完,由用户返回给内核的这种方式。

可以参考 无线路由协议之一 kaodv 的方法实现之。

论坛徽章:
0
17 [报告]
发表于 2007-02-26 16:24 |只看该作者
原帖由 zu_xf 于 2007-1-30 17:38 发表于 15楼  
将第一个包存入缓冲区,收到第二个包时调度tasklet来处理第一个包所在的缓冲区就行了。

同意,我在内核里做过相类似的数据处理.

论坛徽章:
0
18 [报告]
发表于 2007-02-27 11:17 |只看该作者
原帖由 sithui 于 2007-2-26 16:24 发表于 17楼  

同意,我在内核里做过相类似的数据处理.


但是,如果需要处理的流量较大,这样,势必占用的缓冲区就多,也就是内存将很快被用光……

论坛徽章:
0
19 [报告]
发表于 2007-02-28 18:49 |只看该作者

回复 #1 独孤九贱 的帖子

首先,在netfilter hook中是不能sleep和wake_up的。

解决的办法是,自己维护一个链表,然后,
在netfilter hook中,收到第一个skb时,将其加入此链表,
并返回NF_STOLEN,这样hook返回后,内核将不再处理此skb。

第二个skb到达后,将该第2个skb也加入链表,并取下第一个skb,
替换第2个skb的位置,返回NF_ACCEPT,
这样,退出hook后,内核将继续处理第1个skb。

以此类推。

[ 本帖最后由 wheelz 于 2007-2-28 18:51 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2007-03-01 08:53 |只看该作者
原帖由 wheelz 于 2007-2-28 18:49 发表于 19楼  
首先,在netfilter hook中是不能sleep和wake_up的。

解决的办法是,自己维护一个链表,然后,
在netfilter hook中,收到第一个skb时,将其加入此链表,
并返回NF_STOLEN,这样hook返回后,内核将不再处理此 ...


对呀,使用NF_STOLEN,呵呵,楼上的兄弟解我之惑了,只是缓存skb,要内存够大才行……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP