免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234567
最近访问板块 发新帖
楼主: Godbach

内核和用户空间共享内存的实现例程-proc和mmap [复制链接]

论坛徽章:
0
发表于 2013-11-15 18:10 |显示全部楼层
内核版本没有这个函数create_proc_info_entry,有没有替代的函数呢,一直都没找到

论坛徽章:
7
IT运维版块每日发帖之星
日期:2016-05-27 06:20:00IT运维版块每日发帖之星
日期:2016-06-09 06:20:00操作系统版块每日发帖之星
日期:2016-06-12 06:20:00程序设计版块每日发帖之星
日期:2016-06-12 06:20:00操作系统版块每日发帖之星
日期:2016-06-13 06:20:00IT运维版块每日发帖之星
日期:2016-06-17 06:20:002015-2016NBA季后赛纪念章
日期:2016-06-28 17:42:27
发表于 2014-05-04 23:07 |显示全部楼层
我靠,楼主都是大神,我等小弟,很迷茫,不知道楼主都是从事什么工作的,为何研究的如此深入透彻?

论坛徽章:
0
发表于 2015-08-21 14:09 |显示全部楼层
我也开始研究了。刚研究完uc/os.uc/os-iii玩过,还没透。

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-27 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-23 18:32:41
发表于 2017-04-19 17:57 |显示全部楼层
回复 25# vatican

挖个坑mmap超过4M问题解决,新问题又出现
感谢斑竹和dreamice 的支持,这个问题解决了。
需要对每个4k的页面执行:SetPageReserved(virt_to_page(kernel_memaddr));

申请大内存的目的是驱动的要求,我有个字符型设备,上层应用和它之间会有大量的消息收发,
我想直接通过共享内存的方式解决,避免消息的copy。

现在算下来我需要在内核中申请64M的内存,__get_free_pages()又解决不了了。

请斑竹和各位网友支持,谢谢



我现在也碰到这个问题、内核需要有大量的数据传到应用层。但是每个页是4KB、满足不了。内存需要20M左右。那你这块最后是怎么解决的呢 求指教。

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-27 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-23 18:32:41
发表于 2017-04-19 18:00 |显示全部楼层
回复 30# Godbach

版主 那对于内核有大量的数据需要传送到应用层有什么好的解决办法么?

论坛徽章:
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
发表于 2017-04-20 14:13 |显示全部楼层
回复 64# HazeC

你是什么场景下。我用过 netfilter 下通过 sockopt 可以传输比较大的数据量。

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-27 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-23 18:32:41
发表于 2017-04-21 14:15 |显示全部楼层
回复 65# Godbach

我这块主要是在sys_open sys_read等几个文件读写点,抓取所有触发的进程。日志量大、频率高。netlink处理的话处理不多过来,当然如果应用层接收那块先不处理只是单纯的从内核的接收数据的话效果还好点,但是并不能改善会丢日志的情况。

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-27 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-23 18:32:41
发表于 2017-04-21 17:59 |显示全部楼层
回复 65# Godbach

God大神 我试了下,在内核里面用链表存储审计、每个节点大小为PAGE_SIZE。然后使用nopage_fault的方式映射到内存。不过需要内核通知应用层每次mmap的长度。

至于效率还不清楚。


论坛徽章:
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
发表于 2017-04-21 19:48 |显示全部楼层
回复 67# HazeC

对了,proc 下的 seqfile 能满足你的需求吗。这个就不用和用户空间共享内存了。内存大小也不受限制了,你用虚拟内存都 OK的,内部数据随便转换传给用户态。

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-07-27 06:20:0015-16赛季CBA联赛之福建
日期:2017-03-23 18:32:41
发表于 2017-04-22 00:30 |显示全部楼层
回复 68# Godbach

proc这个试过了 不过需要应用层定时轮询之前采用的模式是当内核的日志量满足一定条件之后,通过netlink告诉应用层日志量有多大
然后应用层去读取proc系统。
netlink做命令控制,proc做数据。。。
算是满足需求,只是最近看了PF_Ring的,感觉mmap的方式很赞。

另外一次缺页中断的损耗相比一个系统调用的损耗哪个大呢?这个怎么测比呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP