免费注册 查看新帖 |

Chinaunix

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

[内核模块] 在内核态创建一个队列并将该队列的句柄返回给用户态的调用者 [复制链接]

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
11 [报告]
发表于 2014-03-19 19:30 |只看该作者
本帖最后由 liklstar 于 2014-03-19 19:40 编辑
humjb_1983 发表于 2014-03-19 16:53
你说的方案在linux中应该是有问题的,“给用户进程一个系统提供的函数库,内有函数创建内核队列后将句柄返回 ...


可能是我说得不太清楚。准确地说是:由系统内核提供一个系统调用函数库给用户进程使用,以便用户进程创建并利用内核队列直接与网卡交互。

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
12 [报告]
发表于 2014-03-19 19:35 |只看该作者
本帖最后由 liklstar 于 2014-03-20 10:28 编辑
asuka2001 发表于 2014-03-19 17:08
回复 9# humjb_1983

他的意思就是类似于内核提供一个 buffer list,进程通过某种方式往上面塞 buffer d ...


是的,你确实准确理解了我的意思!

不错,进程分配的缓存在物理上并不连续,但这没关系。因为描述符中记载了每个缓冲区单元(比如:一页)的虚拟地址和物理地址。网卡只要读出描述符即可操纵缓存(用户态)。而这种虚/实地址转换可以在缓冲区分配时一次做完。

当然,如果非要分配物理上连续的缓冲区的话,也是可以做到的,但一般不建议这样做。

另外,我的这个方案虽然是从“零拷贝”引出来的,但它完全不是“零拷贝”了,而是“用户级通信”。

论坛徽章:
0
13 [报告]
发表于 2014-03-19 22:16 |只看该作者
user mode想要read/write到kernel mode的資料

建議以下面這幾個為主
syscall
/proc
sysfs
netlink

這些都是已經定好了interface

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
14 [报告]
发表于 2014-03-20 10:18 |只看该作者
wth0722 发表于 2014-03-19 22:16
user mode想要read/write到kernel mode的資料

建議以下面這幾個為主


谢谢!我会仔细看看这方面的内容的。

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
15 [报告]
发表于 2014-03-20 11:14 |只看该作者
wth0722 发表于 2014-03-19 22:16
user mode想要read/write到kernel mode的資料

建議以下面這幾個為主


不好意思,我还需要你的进一步帮助。
你能再告诉我你说的这些内容都在哪本书上有介绍吗?我翻阅了《Linux Device Driver》、《Understanding the Linux Kernel》、《Linux Kernel Development》和《Essential Linux Device Driver》这几本书,上面似乎没有/proc等的介绍。而我希望能够阅读你说的这几项内容的正式叙述。你能再进一步提示我吗?

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
16 [报告]
发表于 2014-03-20 11:27 |只看该作者
liklstar 发表于 2014-03-19 19:30
可能是我说得不太清楚。准确地说是:由系统内核提供一个系统调用函数库给用户进程使用,以便用户进程创 ...

这样说就对了,你需要的其实就是一种内核和用户态通信的方式,有很多,通用的如共享内存、netlink、proc等,都可选择。

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
17 [报告]
发表于 2014-03-20 11:29 |只看该作者
asuka2001 发表于 2014-03-19 17:08
回复 9# humjb_1983

他的意思就是类似于内核提供一个 buffer list,进程通过某种方式往上面塞 buffer d ...

物理地址不一定要连续吧,比如网卡SG特性就能直接操作不连续的内存段。
我主要是纠结他说的用户态和内核的交互方式~~呵呵

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
18 [报告]
发表于 2014-03-20 12:10 |只看该作者
回复 17# humjb_1983

sg的确是可以,不过我只是觉得麻烦而已。。。

毕竟作为用户空间的页面,我们还得 mlock,然后还得做 va->pa转换。

直接内核分配页面不更好,循环使用。用户进程 mmap,借鉴 vring的设计。

或者说其实人家 netmap早就做了,参考下人家的设计思路或者实现!

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
19 [报告]
发表于 2014-03-20 13:01 |只看该作者
humjb_1983 发表于 2014-03-20 11:27
这样说就对了,你需要的其实就是一种内核和用户态通信的方式,有很多,通用的如共享内存、netlink、proc等 ...


谢谢你的建议!据我所知:共享内存是用于进程与进程之间通信的方法,如何实现进程通过内核队列与智能网卡之间交互呢?而proc,我刚刚看了,只能查看和调整一些进程、系统、设备等的参数和状态,如何能实现我所要求的呢?

论坛徽章:
6
季节之章:冬
日期:2015-01-20 17:18:002015年辞旧岁徽章
日期:2015-03-03 16:54:15数据库技术版块每日发帖之星
日期:2015-12-20 06:20:00程序设计版块每日发帖之星
日期:2016-06-09 06:20:00每日论坛发贴之星
日期:2016-06-09 06:20:002016科比退役纪念章
日期:2017-01-12 14:08:57
20 [报告]
发表于 2014-03-20 13:05 |只看该作者
本帖最后由 liklstar 于 2014-03-20 13:10 编辑
asuka2001 发表于 2014-03-20 12:10
回复 17# humjb_1983

sg的确是可以,不过我只是觉得麻烦而已。。。


谢谢指点!不过,我个人印象:mmap主要是用于将设备寄存器或设备内存映射到用户空间,以便进程使用和操作。这还是不能实现用户进程通过内核队列与网卡交互啊?
至于你提到的netmap,这个我也看了看。我觉得它并不符合我的要求,顶多是可以借鉴借鉴。

你能详细说说你的想法吗?关键是mmap只能将设备映射到用户空间,在逻辑上“好用”,但实际上并没有绕过内核让进程直接操纵网卡!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP