CN103514275A - 一种基于用户空间事件过滤的提高网络程序处理速度的方法 - Google Patents
一种基于用户空间事件过滤的提高网络程序处理速度的方法 Download PDFInfo
- Publication number
- CN103514275A CN103514275A CN201310431657.9A CN201310431657A CN103514275A CN 103514275 A CN103514275 A CN 103514275A CN 201310431657 A CN201310431657 A CN 201310431657A CN 103514275 A CN103514275 A CN 103514275A
- Authority
- CN
- China
- Prior art keywords
- readable
- write
- message
- data
- mapping
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明是一种基于用户空间事件过滤的提高网络程序处理速度的方法。本方法所述的事件包括“可读”和“可写”。本方法在用户空间建立一个从文件描述符到IO监听状态的映射,用于保存当前的文件描述符正在监听的IO事件类型(“可读”和、或“可写”)。而在内核中,所有的连接都被设置为“可读”和“可写”。在接收到内核发送到用户空间的IO事件之后,按照映射中设置的事件类型进行过滤。本方法对网络IO的处理消耗较少的系统调用,提高了网络数据的处理频率,在处理大量并发连接的网络服务程序中,能提高系统吞吐量,尤其对于请求和回复长度较小的负载样式,效果显著。
Description
技术领域
本文涉及一种基于用户空间事件过滤的提高网络程序处理速度的方法。
背景技术
网络是大数据和云计算时代提供大规模计算服务的一种基础设施,计算资源和数据资源分布在以网络连接的集群环境中,为其他节点提供服务在这种环境中是最常见的存在形式。NoSQL数据库是现在流行的数据存储与提供方法,其中,Key-Value存储是一种具有代表性的服务类型。Key-Value存储具有最简单的数据模型,即键-值一一对应存在,通过GET、SET等非常简单的访问方法提供服务,这类服务在NoSQL数据存储中具有速度快的代表特征,也反应了当今时代对数据访问性能的日益增高的需求。比较典型的NoSQL数据存储有:Dynamo、Voldermort、Cassandra、Memcached、Redis。在这类存储中,每次访问的数据传输量很小,常见的每个Key-Value对仅有几百字节,而每次访问都要进行多次的网络读写,频繁的网络IO的操作往往会成为性能瓶颈。
网络IO的效率可以通过IO复用技术来提高,通过IO复用技术,单一的线程能够同时处理多个网络连接,使得多个连接的处理流程流水线化,单一线程能够达到很高的吞吐量。但是在这种情况下,IO操作的频率也同比增高,单一时间内需要进行更多次的IO操作,在Linux操作系统中这一开销对应大量的系统调用。在实践中,效率最高的IO复用依赖Linux内核提供的epoll系统调用集合实现,主要API包括epoll_wait()、epoll_ctl()、read()、write()。epoll_ctl()调用的功能是调整应用程序对IO事件的兴趣类型,本身并不实际进行IO操作。在系统负载较高的情况下epoll_ctl()系统调用的次数能占所有系统调用的一半,而耗时也超过10%,这意味着,这10%的时间没有被花费在IO操作上,限制了系统能发挥的最大性能。
发明内容
本发明是一种基于用户空间事件过滤的提高网络程序处理速度的方法。本方法对网络IO的处理消耗较少的系统调用,提高了网络数据的处理频率,在处理大量并发连接的网络服务程序中,能提高系统吞吐量,尤其对于请求和回复都很小的负载样式,效果显著。处理过程如图1所示。
附图说明
图1为对一个连接进行处理的状态转换图。
具体实施方式
本发明在进行IO操作时的步骤如下:
使用Linux的Socket监听新的连接请求,一旦接到新的连接请求,就建立连接,并将Socket连接封装为文件描述符,后续的操作通过标准的文件描述符操作进行。新的连接都要被设置为非阻塞的IO模式。
使用epoll_create()系统调用创建一个epoll文件描述符,这个文件描述符将会关联所有已经建立的连接,为这些连接的IO时间产生通知事件。
在用户空间建立一个文件描述符到当前状态的映射数据结构,用于保存当前的文见描述符正在监听的IO事件(“可读”,“可写”)。
一旦新的连接建立好,就调用epoll_ctl()系统调用将这个连接的文件描述符关联到epoll文件描述符上。新建立的连接将IO事件设置为“可读”以及“可写”状态(READABLE)。设置完“可读”和“可写”状态后,在应用程序中记录相应的文件描述符和当前状态(“可读”)。
当映射中一个连接表示为“可读”的时候,当获取到一个表示“可读”的消息后,可以对相应的文件描述符进行读操作,通过read()系统调用读取数据,然后对读取的数据进行相应的处理。
当映射中一个连接表示为“可读”的时候,当应用程序获取到一个表示“可写”的消息后,根据应用程序中当前记录的状态,将“可写”消息忽略。继续处理新的消息。
当应用程序要向连接另一端发送通知或者数据,发送的消息要保存到一个消息暂存区内,每个连接对应一个独立的消息缓存区。
当消息缓存区中存在数据,应用程序将这个连接对应的文件描述符标记为“可读”并且“可写”的。
当消息缓存区中不存在数据,应用程序将这个连接对应的文件描述符标记为“可读”的。
当映射中一个连接表示为“可读”并且“可写”的时候,当获取到一个表示“可读”的消息后,可以对相应的文件描述符进行读操作,通过read()系统调用读取数据,然后对读取的数据进行相应的处理。
当映射中一个连接表示为“可读”并且“可写”的时候,当应用程序获取到一个表示“可写”的消息后,检查这个连接对应的写缓冲区是否有等待发送的数据,如果有数据在缓冲区中,那么调用write()系统调用将暂存的消息通过相应的fd发送出去。如果缓冲区中的数据过多,则一次只发送网络允许的最大长度的消息,然后更新缓冲区,保留未发送的消息,等待下次“可写”事件再发送剩下的数据。
Claims (5)
1.一旦新的连接建立好,就调用epoll_ctl()系统调用将这个连接的文件描述符关联到epoll文件描述符上。新建立的连接将IO事件设置为“可读”以及“可写”状态(READABLE)。设置完“可读”和“可写”状态后,在应用程序中记录相应的文件描述符和当前状态(“可读”)。
2.当映射中一个连接表示为“可读”的时候,当获取到一个表示“可读”的消息后,可以对相应的文件描述符进行读操作,通过read()系统调用读取数据,然后对读取的数据进行相应的处理。
3.当映射中一个连接表示为“可读”的时候,当应用程序获取到一个表示“可写”的消息后,根据应用程序中当前记录的状态,将“可写”消息忽略。继续处理新的消息。
4.当映射中一个连接表示为“可读”并且“可写”的时候,当获取到一个表示“可读”的消息后,可以对相应的文件描述符进行读操作,通过read()系统调用读取数据,然后对读取的数据进行相应的处理。
5.当映射中一个连接表示为“可读”并且“可写”的时候,当应用程序获取到一个表示“可写”的消息后,检查这个连接对应的写缓冲区是否有等待发送的数据,如果有数据在缓冲区中,那么调用write()系统调用将暂存的消息通过相应的fd发送出去。如果缓冲区中的数据过多,则一次只发送网络允许的最大长度的消息,然后更新缓冲区,保留未发送的消息,等待下次“可写”事件再发送剩下的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310431657.9A CN103514275A (zh) | 2013-09-22 | 2013-09-22 | 一种基于用户空间事件过滤的提高网络程序处理速度的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310431657.9A CN103514275A (zh) | 2013-09-22 | 2013-09-22 | 一种基于用户空间事件过滤的提高网络程序处理速度的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103514275A true CN103514275A (zh) | 2014-01-15 |
Family
ID=49896999
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310431657.9A Pending CN103514275A (zh) | 2013-09-22 | 2013-09-22 | 一种基于用户空间事件过滤的提高网络程序处理速度的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103514275A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108062224A (zh) * | 2017-12-29 | 2018-05-22 | 北京奇虎科技有限公司 | 基于文件句柄的数据读写方法、装置及计算设备 |
CN109002363A (zh) * | 2018-06-21 | 2018-12-14 | 郑州云海信息技术有限公司 | 一种事件处理方法、装置、设备及可读存储介质 |
CN114756180A (zh) * | 2022-06-15 | 2022-07-15 | 广东睿江云计算股份有限公司 | 覆盖写入数据块分配方法、装置、计算机设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256505A (zh) * | 2007-03-02 | 2008-09-03 | 中国科学院声学研究所 | 基于io事件通知机制的单进程内容服务器装置及方法 |
US20110138389A1 (en) * | 2009-12-04 | 2011-06-09 | Ingo Molnar | Obtaining application performance data for different performance events via a unified channel |
-
2013
- 2013-09-22 CN CN201310431657.9A patent/CN103514275A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256505A (zh) * | 2007-03-02 | 2008-09-03 | 中国科学院声学研究所 | 基于io事件通知机制的单进程内容服务器装置及方法 |
US20110138389A1 (en) * | 2009-12-04 | 2011-06-09 | Ingo Molnar | Obtaining application performance data for different performance events via a unified channel |
Non-Patent Citations (2)
Title |
---|
梁明刚 等: "Linux下基于epoll+线程池高并发服务器实现研究", 《武汉工业学院学报》 * |
王成浩: "基于EPOLL的网络游戏服务器通信架构的研究与设计", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108062224A (zh) * | 2017-12-29 | 2018-05-22 | 北京奇虎科技有限公司 | 基于文件句柄的数据读写方法、装置及计算设备 |
CN109002363A (zh) * | 2018-06-21 | 2018-12-14 | 郑州云海信息技术有限公司 | 一种事件处理方法、装置、设备及可读存储介质 |
CN114756180A (zh) * | 2022-06-15 | 2022-07-15 | 广东睿江云计算股份有限公司 | 覆盖写入数据块分配方法、装置、计算机设备及存储介质 |
CN114756180B (zh) * | 2022-06-15 | 2022-12-09 | 广东睿江云计算股份有限公司 | 覆盖写入数据块分配方法、装置、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10079889B1 (en) | Remotely accessible solid state drive | |
US9742878B2 (en) | Clustering support across geographical boundaries | |
US10346156B2 (en) | Single microcontroller based management of multiple compute nodes | |
CN109445905B (zh) | 虚拟机数据通信方法和系统以及虚拟机配置方法和装置 | |
CN102346725B (zh) | 更改设备配置文件的消息通知装置及方法 | |
CN107682206B (zh) | 基于微服务的业务流程管理系统的部署方法及系统 | |
CN111865657B (zh) | 一种加速管理节点、加速节点、客户端及方法 | |
US9128893B2 (en) | Remote direct memory access socket aggregation | |
CN103986786A (zh) | 一种远程云桌面操作系统 | |
CN103414579A (zh) | 一种适用于云计算的跨平台监控系统及其监控方法 | |
TWI773959B (zh) | 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品 | |
CN112685148B (zh) | 海量终端的异步通信方法、装置、计算机设备和存储介质 | |
CN106293847B (zh) | 一种虚拟化平台服务支撑的方法 | |
CN111026510A (zh) | 一种云环境下虚拟机跨存储热迁移方法 | |
CN113849312A (zh) | 数据处理任务的分配方法、装置、电子设备及存储介质 | |
CN102419753B (zh) | 信息处理设备、信息处理方法和信息处理系统 | |
WO2023104194A1 (zh) | 一种业务处理方法及装置 | |
CN111427822A (zh) | 一种边缘计算系统 | |
CN103514275A (zh) | 一种基于用户空间事件过滤的提高网络程序处理速度的方法 | |
CN114035863A (zh) | 在Linux系统中操作安卓应用的方法、装置和设备 | |
US11132215B2 (en) | Techniques to facilitate out of band management in a virtualization environment | |
US10581997B2 (en) | Techniques for storing or accessing a key-value item | |
CN117041147A (zh) | 智能网卡设备、主机设备和方法及系统 | |
CN107102901B (zh) | 一种任务处理方法和装置 | |
CN104580328A (zh) | 虚拟机迁移方法、装置及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20140115 |