[發明專利]一種獲取活動的描述符集合的方法及裝置有效
| 申請號: | 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.szxzyx.cn/pat/books/201110392530.1/2.html,轉載請聲明來源鉆瓜專利網。





