忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: Godbach

[实践] 【专家坐镇,16本图书大礼】熟知内核及应用态,打通Linux编程任督二脉(获奖名单已... [复制链接]

论坛徽章:
0
发表于 2016-07-08 08:46 |显示全部楼层
感谢分享,支持一下,已下单啦。希望自己能从前辈们的经验中收获到许多非常有价值的东西。向前辈们致敬。

论坛徽章:
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
发表于 2016-07-08 09:25 |显示全部楼层
回复 51# Assassin_Duv

也欢迎做分享啊。

   

论坛徽章:
0
发表于 2016-07-08 10:20 |显示全部楼层
回复 51# Assassin_Duv

感谢支持~~


   

论坛徽章:
0
发表于 2016-07-08 18:11 |显示全部楼层
2014年做的项目,当时对性能要求很苛刻,为了减少用户态数据写到磁盘的过程提高性能,写了一个用户态和内核态的零拷贝功能,性能杠杠的。还借鉴了intel的一个无锁环形队列,稳定性在特定应用上还是很不错的。
如果内核能直接提供这种零拷贝功能会好很多,对性能要求高的环境中,拷贝影响太大。

评分

参与人数 1可用积分 +6 收起 理由
Godbach + 6 赞一个!

查看全部评分

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:13:29
发表于 2016-07-08 18:32 |显示全部楼层
大学期间一直是打酱油的,连课程大作业都是老师见我想哭的样子不好意思为难了,谁知道一工作就让我搞内核,也不知道那时候的老大看中了我那一点,自己是一点自信都没有的,通知上班了,心里还一点底也没有,只能自我安慰说,没事的,既然人家都觉得你可以了,你就去吧。就这样入了内核的门,一开始也是各种状况的,各种折腾。想到什么需求就直接做,试过有一次在软中断中写文件,系统一下子就panic了。当时整个人懵了,这可怎么调试啊!完全超出了当时对调试的认知,也多亏当时的老大指导,搭好了crash+kdump的环境,学会了我的第一个内核调试工具,后面随着接触的多,也会用jprobe,dump_stack ,等函数来辅助调试,还有各种工具,内核自带的kmemleek,systemtap,kgdb,最近也学会了通过串口来进行采集信息,看netpoll的介绍的时候还发现netconsole,在中断不可用的情况下,直接调用中断处理函数来进行处理的。感觉内核好多好玩的东西。估计这也是内核的魅力所在吧,只要你了解了,可以根据自己的需求做各种各样东西,一点限制都没有。

分享一个具体的例子
有个需求是要在内核进行组播,找了个遍,网上的组播的例子,都是在应用层。正郁闷的时候,脑袋瓜子闪了一下,应用层的函数肯定最后都会调用到内核的API的,我只需要找到内核对应的函数,直接调用就好了。关键要处理的是interface加入组播组,让数据包能上ip层,只要上了ip层,一切好办,利用netfilter的框架hook一个函数根据目的ip和端口进行接收处理就ok了

找到内核加入组播组的API ,int ip_mc_join_group(struct sock *sk , struct ip_mreqn *imr)分析一下,sk和imr 这两个参数带下来了什么,就知道在内核层调用的话,需要那些参数,然后参考ip_mc_join_group的实现,实现了一个内核层加入组播组的API,思路大概就是这样,具体实现忘记了,实现过程中可能会有各种小问题,想办法死磕就行,反正到最后搞定了lol,


其实这里还遗留了一些问题,组播接收的时候是根据组播号和端口(就是数据包的目地ip和目的端口)来确定这个组播包是不是给某个进程,因为我的这个实现都是在三层以及三层以下处理的,而且没有对端口做判断,就是不管应用层有没有用到这个端口,反正如果组播号和端口符合指定的,就会先被三层的这个hook 函数拦下了。如果应用层刚好有个进程端口用一样的,interface加入的组播组也是一样的,就会接收不到数据。

当时老大是觉得反正机器上面跑什么进程都是我们控制的,人为的不要产生冲突就好。我也就懒得去折腾了。

呃,说到最后,感觉乱来了,哈哈,不太会表达

最后还是要感谢一下GFree_Wind的,面试的时候一句话解开了困惑了我很久的问题

评分

参与人数 1可用积分 +8 收起 理由
Godbach + 8 赞一个!

查看全部评分

论坛徽章:
0
发表于 2016-07-08 21:33 |显示全部楼层
希望可以中奖

论坛徽章:
0
发表于 2016-07-09 09:22 |显示全部楼层
必须顶下,后面要补内核这块,我也在看Unix系统编程,单感觉大部分是调用写好的系统函数,所以更底层一点自己理解有限

论坛徽章:
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
发表于 2016-07-09 13:33 |显示全部楼层
回复 54# toe1121

嗯,针对特定环境定制,提高性能。

   

论坛徽章:
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
发表于 2016-07-09 13:37 |显示全部楼层
回复 55# philarlala

感谢分享。简直就是技术成长历程的分享啊!赞。


   

论坛徽章:
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
发表于 2016-07-09 13:37 |显示全部楼层
回复 56# baobaofox

得有实际内容的回帖啊。可以分享一下自己的经验。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP