免费注册 查看新帖 |

Chinaunix

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

用户空间映射到内核空间 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-15 09:24 |只看该作者 |倒序浏览
      小弟在内核空间通过__get_free_page申请内存,然后在用户空间通过mmap函数把内核空间申请的内存映射到了用户空间。
      但是在用户空间调用mmap需要取消CONFIG_STRICT_DEVMEM和CONFIG_X86_PAT的设置,重新编译内核,且考虑到内核内存有限。
      我想能否在用户空间申请内存,然后在内核进行映射呢?且需要申请较大内存,50MB左右。
      才接触linux,希望各位帮忙解答,不胜感激!能有详细的资料更好)

论坛徽章:
0
2 [报告]
发表于 2012-05-15 09:48 |只看该作者
说明你的原始需求,也就是应用一级的直接需求。

论坛徽章:
0
3 [报告]
发表于 2012-05-15 10:59 |只看该作者
需求是用于高速网络环境中,由于收到的数据流量大,需要先把设备上的数据拷贝到内核,然后再拷贝到用户空间,现在是在内核申请内存,用户空间进行映射,减少了一次拷贝。但是有两个缺点:1.用户空间调用mmap函数和使用/dev/mem进行映射,需要更改内核配置,重新编译内核,若用于多台设备则很麻烦并耗时。2.由于是在内核空间申请内存(较多),所以会占用内核内存。我想在用户空间申请内存,然后在内核进行映射。这样可能就不需要重新编译内核,而且不占用内核内存。不知道行否?回复 2# 灌水菜鸟


   

论坛徽章:
0
4 [报告]
发表于 2012-05-16 16:08 |只看该作者
回复 3# xiao_cai_cai


    设备上的数据拷贝到内核是怎么回事?是网卡收包么?这个应该是DMA啊,不占用CPU什么资源啊!至于内核到用户空间的拷贝,这个还真是没办法,不过你可以看看你的BSP是不是支持NET_DMA,这个对于tcp多多少少还是有点好处的。

至于你说的用户空间映射的方法,我有些困惑:网络协议栈谁来解析,如果依旧是kernel来做,用户态应用程序如何处理解析之后的网络数据?比如,最简单的情况,两个连续的TCP包,用户应用程序映射好了地址了,这两个包收到之后如果直接放到相应的地址空间里面的话,协议解析之后的用户层数据可就不是连续的了。更别提乱序了。

论坛徽章:
0
5 [报告]
发表于 2012-05-17 09:55 |只看该作者
设备上的数据拷贝到内核是怎么回事:我是利用netfilter挂一个钩子,然后利用钩子把网络数据报复制一份到我在内核中申请的内存,因为这些数据报是复制的,所以不会对网络协议栈解析有影响。相当于应用程序只想看网络上的数据,然后只是对这份复制过来的数据报进行分析。
我现在就想知道用户空间怎么映射到内核空间,且需要的内存较多。不知道有办法否?回复 4# 灌水菜鸟


   

论坛徽章:
0
6 [报告]
发表于 2012-05-17 17:08 |只看该作者
回复 6# xiao_cai_cai


    不知道该怎么实现。不过,必须这么做么?你这个功能听起来包括实现怎么和tcpdump这么像呢?只不过它直接先照单全收没有先行过滤,是不是你们嫌它太慢太影响系统运行调试?

论坛徽章:
0
7 [报告]
发表于 2012-05-18 13:33 |只看该作者
不是,这只是我们的一个项目需求,很感谢你的回答,呵呵!回复 7# 灌水菜鸟


   

论坛徽章:
0
8 [报告]
发表于 2013-04-25 16:52 |只看该作者
你为什么拷贝到内核空间,直接拷贝到用户空间不就完了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP