[发明专利]一种获取活动的描述符集合的方法及装置有效
申请号: | 201110392530.1 | 申请日: | 2011-12-01 |
公开(公告)号: | CN102521140A | 公开(公告)日: | 2012-06-27 |
发明(设计)人: | 张强 | 申请(专利权)人: | 瑞斯康达科技发展股份有限公司 |
主分类号: | G06F12/02 | 分类号: | G06F12/02 |
代理公司: | 北京安信方达知识产权代理有限公司 11262 | 代理人: | 栗若木;王漪 |
地址: | 100085 北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 获取 活动 描述 集合 方法 装置 | ||
技术领域
本发明涉及控制领域,具体涉及一种获取活动的描述符集合的方法及装置。
背景技术
epoll是Linux内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
与传统的select模式相比,它不会复用文件描述符集合来传递结果而迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合;在获取事件的时候,无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。
epoll模型提供了3个系统接口:
(1)int epoll_create(int size) :创建一个epoll的句柄;
(2)int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event):注册要监听的描述符和事件类型;
(3)int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout):等待事件的产生,参数events用来从内核得到事件的集合,maxevents告之内核这个events有多大。
在实际应用中,epoll模式实现存在下面2个问题:
1. 为了从内核态获取被IO事件异步唤醒的描述符集合,使用者在调用epoll_wait时,必须在用户态分配空间,该空间的大小决定了一次从内核中能获取的描述符的最大数目。
在实际网络中,不同时刻被IO事件异步唤醒的描述符数量是不确定的,该数量可能会超出在用户态所能接受的最大数目,导致无法一次获取所有活动的描述符,超出最大数目的描述符得不到及时的处理。
2. 因为内存分配在用户态,为了获取活动的描述符集合,内核态需要把描述符从内核态空间拷贝到用户态空间,系统拷贝的时间复杂度为线性阶O(n),n为处理的描述符数量,降低了系统的性能。
发明内容
本发明要解决的技术问题是如何优化linux epoll模式的性能。
为了解决上述问题,本发明提供了一种获取活动的描述符集合的方法,包括:
在内核态下分配用于保存描述符的内存;
将活动链表上的描述符复制到所分配的内存中,记录所述描述符与保存该描述符的内存之间的映射信息;
将所述映射信息传递到用户态;
在用户态下根据所述映射信息找到保存描述符的内存,获取其中保存的描述符。
进一步地,所述将所述描述符与保存该描述符的内存之间的映射信息传递到用户态的步骤中还包括:
将所分配的内存的起始物理地址、长度传递到用户态。
进一步地,所述在内核态下分配用于保存描述符的内存的步骤包括:
在内核态下,确定当前处于活动链表的描述符的数量,记录到第一字段中;
根据所述第一字段记录的数量,在内核空间分配足够保存该数量的描述符的内存;
保存所分配的内存的起始物理地址和长度。
进一步地,所述在内核空间分配足够保存该数量的描述符的内存的步骤前还包括:
根据所述第一字段记录的数量判断是否重新进行内存分配;如果该数量大于所分配的内存的长度,则重新进行内存分配,设置映射标识以通知用户态需要重新进行内存映射,释放之前分配的内存,然后进行所述在内核空间分配足够保存该数量的描述符的内存的步骤;如果不大于,则进行所述将活动链表上的描述符复制到所分配的内存中的步骤。
进一步地,所述将活动链表上的描述符复制到所分配的内存中的步骤中还包括:
清空所述第一字段。
进一步地,所述在用户态下根据所述映射信息找到保存描述符的内存的步骤前还包括:
在用户态下,根据所述映射标识确定是否需要重新进行内存映射;如果需要,则通知内核态关闭内存映射,然后进行在用户态下根据所述映射信息找到保存描述符的内存的步骤;如果不需要,则直接进行在用户态下根据所述映射信息找到保存描述符的内存的步骤。
进一步地,所述的方法还包括:
在用户态下结束处理后通知内核态关闭内存映射。
进一步地,所述的方法还包括:
当在内核态下得到用户态关闭内存映射的通知后,释放所分配的用于保存描述符的内存。
本发明还提供了一种获取活动的描述符集合的装置,包括:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于瑞斯康达科技发展股份有限公司,未经瑞斯康达科技发展股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110392530.1/2.html,转载请声明来源钻瓜专利网。