免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1835 | 回复: 5
打印 上一主题 下一主题

skb分配方式的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-26 21:28 |只看该作者 |倒序浏览
请问一下内核里面为skb结构体的分配方法,除了alloc_skb以外还有其他的方式吗?
因为我修改了alloc_skb的分配方式,把skb->data的分配区域指定在了一个内存区域里面,但是为什么还会有很多skb->data的地址在这个地址范围以外呢?
而且是系统启动的那段时间里面比较集中

论坛徽章:
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
2 [报告]
发表于 2009-04-26 22:05 |只看该作者
原帖由 ppb0320 于 2009-4-26 21:28 发表
请问一下内核里面为skb结构体的分配方法,除了alloc_skb以外还有其他的方式吗?
因为我修改了alloc_skb的分配方式,把skb->data的分配区域指定在了一个内存区域里面,但是为什么还会有很多skb->data的地址在这 ...

本身系统在实现的时候,会根据数据报文进入不同的层,去调整skb->data指针的。虽然你分配的时候固定了,但是随后从链路层进入网络层,或者从网络层进入传输层的时候,skb->data会变化的。

论坛徽章:
0
3 [报告]
发表于 2009-04-26 22:40 |只看该作者
我明白Godbach版主的意思呵呵,在不同层之间传递网络数据的时候,因为要剥掉IP包头或者TCP/UDP包头的信息,这是用移动skb->data指针来实现,这个我知道,
我现在的情况是把网络数据包分配的内存区域定死了,alloc_skb只能从这段内存区域里面为网络数据包分配区域
比方说这段内存区域是0xd0000000到0xdf000000,这样的话alloc_skb的时候skb->head和skb->tail的指向只能在这个区域范围里面,自然skb->data也在这个范围里面
但和我想的有点出入的是,居然有很多网络数据包在分配的时候地址是小于0xd0000000,是以0xc开头的,所以我才感到奇怪,难道还有另外的途径来为数据包分配空间吗?

论坛徽章:
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
4 [报告]
发表于 2009-04-26 23:17 |只看该作者
原帖由 ppb0320 于 2009-4-26 22:40 发表
我明白Godbach版主的意思呵呵,在不同层之间传递网络数据的时候,因为要剥掉IP包头或者TCP/UDP包头的信息,这是用移动skb->data指针来实现,这个我知道,
我现在的情况是把网络数据包分配的内存区域定死了,al ...

那这里你就要检查一下是否所有所有网卡驱动接受的报文都走你这个流程了。你是修改了alloc_skb的内部实现

论坛徽章:
0
5 [报告]
发表于 2009-04-27 13:19 |只看该作者
可能在处理的时候有些包直接调用kmalloc给data赋值也有可能啊

论坛徽章:
0
6 [报告]
发表于 2009-06-20 16:26 |只看该作者
呃,这个问题搁置了好久一直没有时间去处理,现在BUG出来了不解决不行了

是这样,我们的设备有3个网络接口,其中eth2是网管口,为了需求修改了alloc_skb和kfree_skb函数,使skb->data的内存分配集中在一块区域内,但是这样的话网管口就出现问题了,用ftp传送文件到设备上面的时候,文件传到中途的时候系统就死掉了,经验证是修改了alloc_skb和kfree_skb函数后产生的问题,网管口上进行正常的网络通信的话系统会慢慢死掉。现在一直找不到原因所在

我感觉也是哪个地方的内存一直在分配但是没有得到释放,所以才会造成这种慢性死的现象
像emmoblin 所说,如果有些地方直接调用kmalloc给data赋值,但是如果用kmalloc的话我觉得应该也会用kfree来释放这段内存


有人遇见类似问题吗?指点迷津下呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP