2024年4月30日发(作者:)
(19)中华人民共和国国家知识产权局
(12)发明专利说明书
(21)申请号 CN2.4
(22)申请日 2014.07.21
(71)申请人 上海斐讯数据通信技术有限公司
地址 201616 上海市松江区思贤路3666号
(72)发明人 乐义华
(74)专利代理机构 上海光华专利事务所
代理人 余明伟
(51)
G06F12/02
G06F9/44
(10)申请公布号 CN 104123229 A
(43)申请公布日 2014.10.29
权利要求说明书 说明书 幅图
(54)发明名称
能使报文高效地从内核态提交到用
户态的方法及系统
(57)摘要
本发明提供一种能使报文高效地从
内核态提交到用户态的方法及系统。根据
本发明的方法,在处理系统中添加使能信
息,使所述处理系统在内核态模式通过文
件系统注册设备驱动,以提供操控文件系
统的接口,从而所述处理系统在用户态模
式能通过所提供的接口来访问所述文件系
统,并在所述处理系统的用户态线程中添
加维护信息,以维护协议模块向用户态线
程注册的回调函数;由此,当文件系统创
建后,由于文件系统所映射到内存区对于
用户态程序是可见的,因此,用户态程序
可以直接进行读取,不需要进行拷贝,如
此不依赖硬件即可实现一种高效的内核态
到用户态的通信机制,与现有技术相比
较,本发明的报文提交效率高,而且内核
安全。
法律状态
法律状态公告日
法律状态信息
2021-12-03
专利权的转移
2020-12-22
专利权的转移
2017-10-24
授权
2015-09-02
实质审查的生效
2014-10-29
公开
法律状态
专利权的转移
专利权的转移
授权
实质审查的生效
公开
专利权质押合同登记的生效
IPC(主分类):G06F12/02专利
号:ZL2登记
号:Y2登记生效
日:20230111出质人:湖州帷幄知
专利权质押合同登记
2023-01-31
识产权运营有限公司质权人:湖州
吴兴农村商业银行股份有限公司
高新区绿色支行发明名称:能使报
文高效地从内核态提交到用户态
的方法及系统申请日:20140721
授权公告日:20171024
的生效、变更及注销
权 利 要 求 说 明 书
1.一种能使报文高效地从内核态提交到用户态的方法,其特征在于,所述能使报文
高效地从
在处理系统中添加使能信息,使所述处理系统在内核态模式通过文件系统注册设备
驱动,以提供操控文件系统的接口,从而所述处理系统在用户
来访问所述文件系统;
内核态提交到用户态的方法至少包括:
态模式能通过所提供的接口
在所述处理系统的用户态线程中添加维护信息,以维护协议模块向用户态线程注册
2.根据权利要求1所述的能使报文高效地从内核态提交到用户态的方法,其特征在
于:在处 理系统中添加的使能信息满足如下条件:基于信号量来
的回调函数。
实现内核态和用户态的数据同步。
3.根据权利要求1所述的能使报文高效地从内核态提交到用户态的方法,其特征在
于:在处 理系统中添加的使能信息满足如下条件:基于自旋锁来
间中的空闲空间与使用空间。保护分配给所述文件系统的内存空
4.根据权利要求1所述的能使报文高效地从内核态提交到用户态的方法,其特征在
于:所述 接口包括:打开接口、关闭接口、控制接口及内存映射
接口。
5.根据权利要求1所述的能使报文高效地从内核态提交到用户态的方法,其特征在
于:所述
6.一种能使报文高效地从内核态提交到用户态的使能系统,其特征在于,所述能使
报文高效
第一添加模块,用于在处理系统中添加使能信息,使所述处理系统在内核态模式通
过文件系统注册设备驱动,以提供操控文件系统的接口,从而
能通过所提供的接口来访问所述文
地从内核态提交到用户态的使能系统至少包括:
维护信息包括协议模块注册和解注册接口信息。
所述处理系统在用户态模式
件系统;
第二添加模块,用于在所述处理系统的用户态线程中添加维护信息,以维护协议模
7.根据权利要求6所述的能使报文高效地从内核态提交到用户态的使能系统,其特
征在于: 在处理系统中添加的使能信息满足如下条件:基于信号
步。
块向用户态线程注册的回调函数。
量来实现内核态和用户态的数据同
8.根据权利要求6所述的能使报文高效地从内核态提交到用户态的使能系统,其特
征在于: 在处理系统中添加的使能信息满足如下条件:基于自旋
存空间中的空闲空间与使用锁来保护分配给所述文件系统的内
空间。
9.根据权利要求6所述的能使报文高效地从内核态提交到用户态的使能系统,其特
征在于:
所述接口包括:打开接口、关闭接口、控制接口及内存
映射接口。
10.根据权利要求6所述的能使报文高效地从内核态提交到用户态的使能系统,其
特征在
于:所述维护信息包括协议模块注册和解注册接口信息。
说 明 书
技术领域
本发明涉及报文处理领域,特别是涉及一种能使报文高效地从内核态提交到用户态
的方
背景技术
现代通信设备中,尤其是大型机架、机框式的通信设备,往往是采用CPU+ASIC
的硬件 设计方案。ASIC通信芯片负责硬件转发(包括switch和route
处理,这个处理过程主要依赖于ASIC芯
法及系统。
等),而CPU负责协议层面的
片传向CPU的报文来完成。
CPU上运行的应用程序或协议模块,需要对ASIC芯片发往CPU的报文进行处理,
包括 很多复杂的协议报文,例如RSTP、DHCP、IGMP等协议报文,还
的IP层报文等等。 包括需要送往协议栈处理
在一般LINUX系统的设计中,往往有两种方案:
方案一:直接修改LINUX内核协议栈,加入对RSTP、DHCP以及IGMP等协议
报文的
1、修改LINUX内核,会造成不安全因素:因为Linux内核协议栈有很高的安全处
理机 制和异常处理机制,修改内核破坏了内核的平衡,也就带来了不安全
处理,这种处理方式的弊端在于:
不稳定的因素。
2、难以维护和调试。调试内核比调试应用程序的难度不是一个级别,较难把握。
方案二:由应用程序处理协议报文,内核和应用程序通过PROXY机制来提交报文,
也 就是通过在LINUX用户态起一个Proxy服务,内核通过该服务提供
态,这种方式的弊端在于:报文需要经过多次拷
到用户态采用了两个队列来
取报文,
的接口将报文提交到用户
贝,效率较低。因为Proxy机制在提交报文
缓存报文,内核向发送队列里写报文,应用程序通过ioctl接口读
至少需要经过4次拷贝才能将报文提交到用户程序,报文量较大时,性能会受到影
因此,需要对现有报文由内核态提交到用户态的方式进行改进。
发明内容
鉴于以上所述现有技术的缺点,本发明的目的在于提供一种能使报文高效地从内核
态提
为实现上述目的及其他相关目的,本发明提供一种能使报文高效地从内核态提交到
用户 态的方法,其至少包括:在处理系统中添
件系统注册设备驱动,
交到用户态的方法及系统,以实现报文的高效提交。
响,甚至可能会导致中断级别异常。
加使能信息,使所述处理系统在内核态模式通过文
以提供操控文件系统的接口,从而所述处理系统在用户态模式能通过
所提供的接口来访问所述文件系统;以及在所述处理系统的用户态线程中添
维护协议模块向用户态线程注册的回调函数。 加维护信息,以
本发明还提供一种能使报文高效地从内核态提交到用户态的使能系统,其至少包括:
第 一添加模块,用于在处理系统中添加使能信息,使所述处理系统在内
注册设备驱动,以提供操控文件系统的接口,从
的接口来访问所述文件系统;
维护信
核态模式通过文件系统
而所述处理系统在用户态模式能通过所提供
以及第二添加模块,用于在所述处理系统的用户态线程中添加
息,以维护协议模块向用户态线程注册的回调函数。
优选地,在处理系统中添加的使能信息满足如下条件:基于信号量来实现内核态和
用户
优选地,在处理系统中添加的使能信息满足如下条件:基于自旋锁来保护分配给所
述文
优选地,所述接口包括:打开接口、关闭接口、控制接口、及内存映射接口。
优选地,所述维护信息包括协议模块注册和解注册接口信息。
如上所述,本发明的能使报文高效地从内核态提交到用户态的方法及系统,具有以
下有 益效果:长时间大量报文提交,处理器的占用率也较低,而且也没有
一种高效的内核态到用户态的通信机制。
件系统的内存空间中的空闲空间与使用空间。
态的数据同步。
出现任何异常;实现了
附图说明
图1显示为本发明的能使报文高效地从内核态提交到用户态的方法的流程图。
图2显示为本发明的能使报文高效地从内核态提交到用户态的使能系统示意图。
元件标号说明
1 使能系统
11 第一添加模块
12 第二添加模块
S1~S2 步骤
具体实施方式
以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所
揭露 的内容轻易地了解本发明的其他优点与功
以实施或应用,本说
效。本发明还可以通过另外不同的具体实施方式加
明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精
请参阅图1至图2。需要说明的是,本实施例中所提供的图示仅以示意方式说明本
发明 的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实
及尺寸绘制,其实际实施时各组件的型态、数量
型态也可能更为复杂。
神下进行各种修饰或改变。
施时的组件数目、形状
及比例可为一种随意的改变,且其组件布局
如图1所示,本发明提供一种能使报文高效地从内核态提交到用户态的方法。其中,
根 据本发明的方法主要通过使能系统来完成,该使能系统包括但不限于
中且能够实现本发明方案的诸如应用模块、操作系统、
设备设置有能运行在用户态模式及内核态
安装在计算机设备
处理控制器等。其中,该计算机
模式的处理系统。
其中,本发明的方法至少包括步骤S1及S2。
在步骤S1中,所述使能系统在处理系统中添加使能信息,使所述处理系统在内核
态模 式通过文件系统注册设备驱动,以提供操控文件系统的接口,从而所
式能通过所提供的接口来访问所述文件系统。 述处理系统在用户态模
其中,所述接口包括任何能用于操控文件系统的接口,优选地,包括但不限于:打
开(open)
接口等。
具体地,所述使能系统在处理系统中添加如下使能信息:
上述模块结构中,_init和_cleanup进行模块的注册和卸载,_mmap_open、
_mmap_ioctl、 _mmap_close和_mmap_mmap分别进行文件系统的打开、
接口、关闭(close)接口、控制(ioctl)接口、及内存映射(mmap)
控制、关闭和映射操作。
其中,文件系统结构定义如下:
由此,通过标准的字符设备驱动注册接口将文件系统注册到内核。
其中,报文节点采用链表来实现,其具体定义如下:
处理系统初始化的时候,将映射的内存按节点逐一链接到空闲队列free_list,当有
数据报 文到达处理系统(即CPU)时,CPU从空闲队列中取一个节点,
填充好length和data后,将 该节点添加到使用队列used_list,index
进行读的时候会使用为内存映射好后给该区块分配的索引,当用户态程序
到。
内核态和用户态的数据同步则采用了信号量来实现。当用户态程序对该内存块进行
读的 时候,先要通过ioctl获取使用队列的信号量,如果获取到,根据内
问,读取该区块的内容。 核中该区块的索引进行访
内核中对空闲队列free_list和使用队列used_list采用自旋锁来保护。当有报文需要
发送时, 需要从free_list中取出一个内存节点,用于driver填充报文到
当用户态程序读取了used_list中的一个
free_list链表中。
该内存块,然后加入到used_list。
内存节点中的数据报文后,将该内存节点归还到
在步骤S2中,所述使能系统在所述处理系统的用户态线程中添加维护信息,以维
护协议
具体地,所述使能系统在所述处理系统的用户态线程中添加如下协议模块注册和解
注册
int user_pkt_register(PKT_NODE*node);
int user_pkt_unregister(PKT_NODE*node);
其中,PKT_NODE定义如下:
通过该注册和解注册接口来挂接协议模块的回调处理函数,由此,当接受到的报文
接口信息等维护信息:
模块向用户态线程注册的回调函数。
是协
议模块需要的,则进行回调,将报文分发给协议模块来处理。
可见,当前述使能系统在处理系统中添加了使能信息及维护信息后,当处理系统初
始化 时,通过标准的字符设备驱动注册接口将文件系统注册到内核,并将
链接到空闲队列free_list;当有数据报文到达
好length和data后,将该
用来读
映射的内存按节点逐一
CPU时,CPU从空闲队列中取一个节点,填充
节点添加到使用队列used_list;用户态程序的接收线程通过ioctl调
取信号量状态,一旦获取到信号量,表明可以从使用队列中获取到节点,然后根据
返 回的index值来读取相应内存块中的内容;当接收到的报文是协议模
将报文分发给协议模块来处理;同时提供给协议
特定字段(MAC、IP、以太
程序处
块需要的,则进行回调,
栈统一的报文调试接口;否则,根据报文的
网类型、VLAN、优先级等)将读取的报文进行调试;当用户态
理完毕后,再次通过ioctl调用来释放信号量,从而释放该节点,在内核中将该节
点添
需要说明的是,本领域技术人员应该理解,上述所示仅仅只是列示,而非对本发明
的限 制,事实上,各步骤的顺序并非以所示为限,例如,步骤S2可在步
S2可同时执行等等。
加到空闲队列中。
骤S1之前执行、步骤S1、
如图2所示,本发明提供一种能使报文高效地从内核态提交到用户态的使能系统。
所述
所述第一添加模块11在处理系统2中添加使能信息,使所述处理系统2在内核态
模式通 过文件系统注册设备驱动,以提供操控文件系统的接口,从而
通过所提供的接口来访问所述文件系统。
使能系统1至少包括第一添加模块11及第二添加模块12。
所述处理系统在用户态模式能
其中,所述接口包括任何能用于操控文件系统的接口,优选地,包括但不限于:打
开(open)
接口、关闭(close)接口、控制(ioctl)
接口、及内存映射(mmap)接口等。
具体地,所述第一添加模块11在处理系统中添加如下使能信息:
上述模块结构中,_init和_cleanup进行模块的注册和卸载,_mmap_open、
_mmap_ioctl、 _mmap_close和_mmap_mmap分别进行文件系统的打开、
控制、关闭和映射操作。
其中,文件系统结构定义如下:
由此,通过标准的字符设备驱动注册接口将文件系统注册到内核。
其中,报文节点采用链表来实现,其具体定义如下:
处理系统初始化的时候,将映射的内存按节点逐一链接到空闲队列free_list,当有
数据报 文到达处理系统(即CPU)时,CPU从空闲队列中取一个节点,
该节点添加到使用队列used_list,index
进行读的时候会使用
填充好length和data后,将
为内存映射好后给该区块分配的索引,当用户态程序
到。
内核态和用户态的数据同步则采用了信号量来实现。当用户态程序对该内存块进行
读的 时候,先要通过ioctl获取使用队列的信号量,如果获取到,根据内
问,读取该区块的内容。 核中该区块的索引进行访
内核中对空闲队列free_list和使用队列used_list采用自旋锁来保护。当有报文需要
发送时, 需要从free_list中取出一个内存节点,用于driver填充报文到
当用户态程序读取了used_list中的一个
free_list链表中。
该内存块,然后加入到used_list。
内存节点中的数据报文后,将该内存节点归还到
所述第二添加模块12在所述处理系统2的用户态线程中添加维护信息,以维护协
议模块
具体地,所述第二添加模块12在所述处理系统的用户态线程中添加如下协议模块
注册和
int user_pkt_register(PKT_NODE*node);
int user_pkt_unregister(PKT_NODE*node);
其中,PKT_NODE定义如下:
通过该注册和解注册接口来挂接协议模块的回调处理函数,由此,当接受到的报文
是协
议模块需要的,则进行回调,将报文分发给协议模块来处理。
解注册接口信息等维护信息:
向用户态线程注册的回调函数。
可见,当前述使能系统1在处理系统中添加了使能信息及维护信息后,当处理系统
初始 化时,通过标准的字符设备驱动注册接口将文件系统注册到内核,并
一链接到空闲队列free_list;当有数据报文到达
充好length和data后,将
调用来
将映射的内存按节点逐
CPU时,CPU从空闲队列中取一个节点,填
该节点添加到使用队列used_list;用户态程序的接收线程通过ioctl
读取信号量状态,一旦获取到信号量,表明可以从使用队列中获取到节点,然后根
据 返回的index值来读取相应内存块中的内
调,将报文分发给协容;当接收到的报文是协议模块需要的,则进行回
议模块来处理;同时提供给协议栈统一的报文调试接口;否则,根据报
文的特定字段(MAC、IP、以太网类型、VLAN、优先级等)将读取的报文进
户态程序处理完毕后,再次通过ioctl调用来释放信号
点添加到空闲队列中。
行调试;当用
量,从而释放该节点,在内核中将该节
需要说明的是,本领域技术人员应该理解,上述所示仅仅只是列示,而非对本发明
的限 制,事实上,第一添加模块11、第二添加模块12各自执行各自的操
限,例如,第二添加模块12所执行的操作可在
第一添加模块11所执行的
作的顺序并非以所示为
第一添加模块11所执行的操作之前;又例如,
操作与第二添加模块12所执行的操作同时执行等等。
综上所述,本发明的能使报文高效地从内核态提交到用户态的方法及系统在
LINUX系统 中不修改内核协议栈,仅通过在内核态模式下使文件系统建立
拷贝即可将报文由内核态直接提交到用户
用户态的通信机制,
一段共享内存,由此,不经过
态,如此不依赖硬件即可实现一种高效的内核态到
与现有技术相比较,本发明的报文提交效率高,而且内核安全。所以,
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉
此技 术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修
本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。
饰或改变。因此,举凡 所属技术领域中具有通常知识者在未脱离本发明
效修饰或改变,仍应由本发所揭示的精神与技术思想下所完成的一切等
明的权利要求所涵盖。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1714451309a2449009.html
评论列表(0条)