CN108289063B - 一种低延迟通讯系统 - Google Patents
一种低延迟通讯系统 Download PDFInfo
- Publication number
- CN108289063B CN108289063B CN201710812188.3A CN201710812188A CN108289063B CN 108289063 B CN108289063 B CN 108289063B CN 201710812188 A CN201710812188 A CN 201710812188A CN 108289063 B CN108289063 B CN 108289063B
- Authority
- CN
- China
- Prior art keywords
- descriptor
- data
- user
- network
- management module
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Finance (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Accounting & Taxation (AREA)
- Economics (AREA)
- Development Economics (AREA)
- Computer Security & Cryptography (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种低延迟通讯系统,能够在无需额外采购网络硬件的条件下,有效降低金融衍生品交易系统中的系统延迟问题,且使用简单。其技术方案为:系统包括API接口管理模块、信息交互管理模块、策略管理模块、描述符管理模块和数据收发模块,其中API接口管理模块用于向用户应用程序提供数据收发接口;信息交互管理模块用于管理不同进程之间的通信机制;策略管理模块用于维护数据分发策略方法;描述符管理模块用于管理所有用户进程所申请的描述符;数据收发模块用于通过描述符在用户层、内核和网卡之间的数据收发。
Description
技术领域
本发明涉及金融期货领域中的技术,尤其涉及基于数据层开发工具包(DPDK,DatePlane Development Kit)的低延迟通讯系统。
背景技术
近年来,随着金融衍生品品种的丰富壮大和金融知识的传播,越来越多的投资者参与到了金融衍生品交易中来。为了满足广大投资者的需求,规范不同交易所之间的系统接口,2005年国际金融信息交换组织(FIX Protocol Limited简称FPL)提出了基于减少带宽使用率的FAST编码方法。为了提高交易系统吞吐量,降低交易延迟,2013年FPL组织又提出了符合FIX规范的简单二进制编码方法,简称SBE。简单二进制编码方法的主要思想是通过在应用层对业务数据进行快速编解码,从而达到降低应用程序处理延迟的目的。然而,这一方法仅仅只是在应用层降低了数据处理延迟,并没有解决网络层带来的系统延迟开销。
为了解决这一问题,美国Solarflare公司研发了一系列定制的低延迟通讯网卡和Onload程序套件。其主要方法是通过内核旁路的方式实现网络数据包从网卡到用户态的直接交互,从而达到降低操作系统延迟的目的。然而,该方案的采用必须购买Solarflare专用网卡。相比于目前市场上广泛使用的Intel网卡,这不仅增加了额外的成本开销,而且需要经过大量的稳定性测试。
2010年Intel提出了数据层开发工具包(Date Plane Development Kit,简称DPDK),其主要思想也是通过内核旁路的方式在用户层直接处理网卡数据,从而达到降低网络层延迟的目的。然而,一方面该方案会造成网卡独占,也就是说操作系统将不能再访问被DPDK占用的网卡;另一方面,该方案只是提供了一个网卡数据包的接收和发送接口,并没有提供完整的网络协议栈,例如UDP、TCP协议的处理。同时对用户程序多进程多线程的支持较差,从而导致现有的用户程序,必须经过大幅修改才能使用该方案。
发明内容
以下给出一个或多个方面的简要概述以提供对这些方面的基本理解。此概述不是所有构想到的方面的详尽综览,并且既非旨在指认出所有方面的关键性或决定性要素亦非试图界定任何或所有方面的范围。其唯一的目的是要以简化形式给出一个或多个方面的一些概念以为稍后给出的更加详细的描述之序。
本发明的目的在于解决上述问题,提供了一种低延迟通讯系统,能够在无需额外采购网络硬件的条件下,有效降低金融衍生品交易系统中的系统延迟问题,且使用简单。
本发明的技术方案为:本发明揭示了一种低延迟通讯系统,包括API接口管理模块、信息交互管理模块、策略管理模块、描述符管理模块和数据收发模块,其中:
API接口管理模块,用于向用户应用程序提供数据收发接口;
信息交互管理模块,用于管理不同进程之间的通信机制;
策略管理模块,用于维护数据分发策略方法;
描述符管理模块,用于管理所有用户进程所申请的描述符;
数据收发模块,用于通过描述符在用户层、内核和网卡之间的数据收发。
根据本发明的低延迟通讯系统的一实施例,API接口管理模块提供发送、接收、描述符申请、描述符释放四个API接口,其中描述符申请的信息包括源IP地址、目的IP地址、源端口号、目的端口号,以及数据类型。
根据本发明的低延迟通讯系统的一实施例,API接口管理模块包括描述符请求响应单元和描述符维护单元,其中:
第一描述符请求响应单元,用户应用程序通过用户数据隔离层提供的API接口发出描述符申请,用户数据隔离层对描述符申请进行校验后将其打包封装再通过信息交互管理模块的共享内存管理单元中的描述符请求队列传递给网络数据包分发层,并发送信号量通知消息激活网络数据包分发层的用户请求响应线程,然后阻塞等待,用户请求响应线程被激活后从描述符请求队列中提取描述符申请并向描述符管理模块的第二描述符请求响应单元进行注册,然后向用户返回注册结果。
第一描述符维护单元,用于维护当前进程中各个已申请的描述符的管理和释放,用户请求响应线程通过管道将描述符在共享内存中的分配信息返回给用户数据隔离层,用户数据隔离层解除阻塞后读取分配信息并调用第一描述符维护单元更新进程内存信息。
根据本发明的低延迟通讯系统的一实施例,信息交互管理模块所管理的通信机制包括共享内存、管道和信号量,当用户应用程序申请到一个描述符后维护该描述符所对应的数据收发队列缓冲区;信息交互管理模块包括共享内存管理单元和进程间通信管理单元,其中:
共享内存管理单元,用于维护共享内存中各个数据结构的申请和释放;
进程间通信管理单元,提供用户应用程序和底层环境的一套通讯机制,包括管道和信号量。
根据本发明的低延迟通讯系统的一实施例,策略管理模块包括ARP表维护单元、数据分发策略表维护单元和CPU线程绑定单元,其中:
ARP表维护单元,用于实时的在内存中维护ARP表,并对外提供ARP信息查询接口;
数据分发策略表维护单元,用于根据当前所有用户申请的描述符,对从网卡接收到的网络数据包进行匹配路由;
CPU绑定单元,用于根据当前线程要处理的网络数据包的来源,选择一个最佳逻辑CPU进行线程绑定。
根据本发明的低延迟通讯系统的一实施例,描述符管理模块包括第二描述符请求响应单元和第二描述符维护单元,其中:
第二描述符请求响应单元,用于维护当前系统中所有的用户应用程序描述符的申请和释放,第一描述符请求响应单元通过用户请求响应线程向第二描述符请求响应单元进行注册,收到该注册申请后,第二描述符请求响应单元对描述符申请进行检测,检测信息包括所申请的端口号是否已经被占用,IP地址、协议类型是否合法,如果检测未通过则拒绝该申请并返回错误信息,如果检测通过则生成描述符并为该描述符在共享内存中分配数据收队列和数据发队列,当第二描述符请求响应单元收到的是描述符释放申请时,直接交由第二描述符维护单元操作;
第二描述符维护单元,用于维护当前系统中所有描述符的管理和释放,当收到第二描述符请求响应单元发送的描述符申请注册成功信息时,更新内存表信息,标记该描述符已经被占用,并记录所分配的数据收发队列、进程间通讯地址;当接收到第二描述符请求响应单元发送的描述符释放信息时,更新内存表信息,释放该描述符所占用的数据收发队列、进程通讯地址。
根据本发明的低延迟通讯系统的一实施例,数据收发模块用于将从用户层和内核发送过来的数据通过指定的网卡队列发送出去,以及将从网卡上接收的数据,通过数据分发策略表发送给指定的用户或者操作系统内核网络协议栈;数据收发模块进一步包括上行数据分发单元、下行数据分发单元和内核交互单元。
根据本发明的低延迟通讯系统的一实施例,下行数据分发单元中,用户应用程序调用用户数据隔离层提供的发送API接口,将描述符、数据传递给用户数据隔离层,用户数据隔离层在收到后先查找本地内存对描述符进行校验,如果该描述符处于未申请状态则将数据抛弃并向用户应用程序返回错误信息,如果该描述符处于已申请状态则用户数据隔离层根据描述符信息解析要发送的IP地址、端口号,并从ARP表查找对方的MAC地址,用户数据隔离层根据网络协议将用户数据封装成可以在网络上传输的UDP数据或者TCP数据,并将封装好的网络数据包通过共享内存的方式,从该描述符的无锁发队列上发送给网络数据包分发层,同时向网络数据包分发层的下行数据发送线程发送一个激活指令,网络数据包分发层的下行数据发送线程在侦听到无锁发队列中的网络数据包后立即取出并从指定的网卡队列上发送出去。
根据本发明的低延迟通讯系统的一实施例,上行数据分发单元中,网络数据包分发层的上行数据分发线程先从网卡上通过DPDK提供的数据接收函数接收网络数据包,将该网络数据包交由策略管理模块处理,策略管理模块对该网络数据包进行解析,提取目的IP地址、目的端口号,然后查找数据分发策略表,如果成功查找到对应的描述符则将该网络数据包推送至共享内存中相应描述符的无锁收队列,并激活该描述符上的select操作,如果没有查找到对应的描述符则将该网络数据包通过内核交互单元中的内核交互线程发送给Linux内核网络协议栈,用户应用程序的select函数被激活后,通过用户数据隔离层提取无锁收队列中与其描述符相对应的数据。
根据本发明的低延迟通讯系统的一实施例,低延迟通讯系统是基于数据平面开发套件实现的。
本发明对比现有技术有如下的有益效果:本发明通过设计合理的内核旁路系统模型和API接口,无需额外采购网络硬件,全部协议都运行在用户态,实现了网络协议层内存的零申请零拷贝。同时,对API接口进行了高度封装,用户学习使用成本为零。本发明支持多进程、多线程并发访问,可以在现有硬件条件下有效降低网络延迟。
附图说明
在结合以下附图阅读本公开的实施例的详细描述之后,能够更好地理解本发明的上述特征和优点。在附图中,各组件不一定是按比例绘制,并且具有类似的相关特性或特征的组件可能具有相同或相近的附图标记。
图1示出了本发明的低延迟通讯系统的实施例的系统架构图。
图2示出了本发明的低延迟通讯系统的数据收发模型图。
具体实施方式
以下结合附图和具体实施例对本发明作详细描述。注意,以下结合附图和具体实施例描述的诸方面仅是示例性的,而不应被理解为对本发明的保护范围进行任何限制。
图1示出了本发明的低延迟通讯系统的实施例的系统架构。请参见图1,本实施例的系统包括:API接口管理模块、信息交互管理模块、策略管理模块、描述符管理模块和数据收发模块。
API接口管理模块主要负责向用户应用程序提供简单的数据收发接口,以降低用户的学习使用复杂度,这里主要提供发送、接收、描述符申请、描述符释放四个API接口。
API接口管理模块进一步包括第一描述符请求响应单元和第一描述符维护单元。第一描述符请求响应单元主要负责侦听用户应用程序通过API接口发送的描述符释放请求,然后对其进行基础检测。检查信息主要包括所申请的端口号是否已经被占用,IP地址、协议类型是否合法等。如果检测未通过,则拒绝该申请,并向用户返回错误信息。否则,则通过信息交互管理模块向底层的描述符管理模块进行注册。而第一描述符维护单元主要负责维护当前进程中各个已申请的描述符的管理和释放,例如超时检测。
信息交互管理模块主要负责管理不同进程之间的通信机制,包括共享内存、管道和信号量。当用户程序成功申请到了一个描述符后,维护该描述符所对应的数据收发队列缓冲区。
具体来说,信息交互管理模块包括共享内存管理单元和进程间通信管理单元。共享内存管理单元维护共享内存中各个数据结构的申请和释放。例如,上层某个应用程序的各个socket描述符所对应的收发队列、ARP(AddressResolution Protocol)表共享区等。进程间通信管理单元提供了用户应用程序和本方法底层环境的一套通讯机制、包括管道、信号量等。
策略管理模块主要负责维护本发明中的一系列策略方法,主要包括ARP表维护单元、数据分发策略表维护单元,和CPU线程绑定单元。其中,ARP表维护单元主要负责实时的在内存中维护一张ARP表,并对外提供ARP信息查询接口。数据分发策略表维护单元主要负责根据当前所有用户申请的描述符,来对从网卡接收到的网络数据包进行匹配路由。CPU绑定单元主要负责根据当前线程要处理的网络包数据来源,选择一个最佳逻辑CPU进行线程绑定,以在NUMA(Non Uniform Memory Access Architecture)架构下,提高数据处理性能。
描述符管理模块主要负责管理所有本机用户进程所申请的描述符。描述符管理模块包括第二描述符请求响应单元和第二描述符维护单元。注意,API接口管理模块中的描述符维护单元主要负责维护某一个特定的用户进程中的描述符。而描述符管理模块的描述符管理单元所负责的对象是当前主机上所有使用本发明的用户进程所申请的描述符。
数据收发模块主要负责将从用户层和内核发送过来的数据通过指定的网卡队列发送出去,以及将从网卡上接收的数据,通过数据分发策略表发送给指定的用户或者操作系统内核网络协议栈。数据收发模块包括上行数据分发单元、下行数据发送单元和内核交互单元。
图2示出了本发明的低延迟通讯系统的数据收发模型。请参见图2,用户应用程序首先通过用户数据隔离层提供的API接口发出一个描述符申请,申请信息包括源IP地址、目的IP地址、源端口号、目的端口号,以及数据类型(UDP/TCP)。以下表格1是表示用户数据隔离层对外提供的API接口。tsd_dpdkuser_create_socket函数表示创建一个描述符,如果创建成功,则返回该描述符。否则,返回错误信息。这里,返回的描述符支持select、epoll操作。tsd_dpdkuser_close_socket函数为释放已经申请的描述符。
创建描述符 | int tsd_dpdkuser_create_socket(struct tsd_socket_info*socketInfo); |
释放描述符 | void tsd_dpdkuser_close_socket(int socketId); |
发送数据 | int tsd_dpdkuser_write_imp(int nSocketId,const char*pBuffer,int nSize); |
接收数据 | int tsd_dpdkuser_read_imp(int nSocketId,char*pBuffer,int nSize); |
表格1
用户数据隔离层在对该申请进行校验后,将请求信息打包封装,然后通过共享内存中的描述符请求队列传递给网络数据包分发层,并发送信号量通知消息,激活网络数据包分发层的用户请求响应线程,然后阻塞等待。用户请求响应线程被激活后,从描述符请求队列里提取描述符请求信息并加以校验。检验的内容包括源端口号是否被占用,源IP地址是否与系统初始化时的IP地址匹配。如果校验通过,则生成一个网络描述符,并为该网络描述符在共享内存中分配一个数据收队列和一个数据发队列。
用户请求响应线程通过管道将网络描述符在共享内存中的分配信息返回给用户数据隔离层。用户数据隔离层解除阻塞,读取该分配信息并调用API接口管理模块的第一描述符维护单元更新本进程内存信息。
最终,用户数据隔离层将描述符返回给用户应用程序。用户应用程序即可使用该描述符进行数据收发。
对于下行数据发送单元中的数据下行通道,用户应用程序首先调用用户数据隔离层提供的发送API接口,将描述符、数据传递给用户数据隔离层。用户数据隔离层在收到这些信息后,会首先查找本地内存对描述符进行校验。如果发现该描述符处于未申请状态,则将数据抛弃并向用户应用程序返回错误信息。否则,用户数据隔离层根据描述符信息解析要发送的IP地址、端口号,并从ARP表查找对方的MAC地址。
最终,用户数据隔离层根据网络协议将用户数据封装成可以在网络上传输的UDP数据或者TCP数据,并将封装好的数据包通过共享内存的方式,从该描述符的无锁发队列上发送给网络数据包分发层。同时向网络数据包分发层的下行数据发送线程发送一个激活指令。网络数据包分发层的下行数据发送线程在侦听到数据发送队列中的数据包后,则立即取出该数据包,并从指定的网卡队列上发送出去。
对于上行数据分发单元的数据上行通道,网络数据包分发层的上行数据分发线程首先从网卡上通过DPDK提供的数据接收函数接收数据。然后将该数据包交由策略管理模块处理。策略管理模块会对该数据包进行解析,提取目的IP地址、目的端口号,然后查找数据分发策略表。如果成功查找到对应的描述符,则将该数据包推送至共享内存中相应描述符的无锁收队列,并激活该描述符上的select操作。否则,则将该数据包通过内核交互线程发送给Linux内核网络协议栈。最终,用户应用程序的select函数被激活后,通过用户数据隔离层提取无锁收队列中与其描述符相对应的数据。
要注意的是,图2中的多种策略对应用程序来讲并不可见。用户也无需关心以上策略的实现。为了降低用户使用成本,本申请对以上各种策略进行了高度封装。举例来讲,假设用户已经有一个需要通过网卡收发数据的应用程序,那么本申请的使用过程如下。
首先,用户需要启动本申请提供的一个网络数据管理进程,该进程启动后会生成网络数据包分发层、共享内存管理,并将用户指定的物理网卡从当前操作系统中剥离,然后进行其它一系列网卡初始化操作。为了解决原生DPDK的网卡独占问题,该进程会在Linux操作系统中重新注册一张虚拟网卡。
第二步,用户需要对该虚拟网卡配置IP地址和子网掩码,这样操作系统就可以通过该虚拟网卡访问实际对应的物理网卡。
第三步,对用户应用程序进行简单的修改,主要包括以下操作:a)加载本方法提供的动态链接库;b)将应用程序中的socket申请、释放、网络I/O的读写函数替换成本方法提供的四个接口函数;c)重新编译应用程序。此时,启动重新编译后的应用程序,可以使用本方法进行低延迟网络数据包收发。
特别指出,本申请支持多进程、多线程模型。用户如果同时有其它多个应用程序需要使用本方法,只要在其它应用程序中执行第三步即可。
上述的基于DPDK的低延迟通讯系统,其框架的运行操作包括如下的步骤。
(1)网络数据包分发层的进程必须在用户应用程序启动之前启动,主要负责维护网卡驱动、网卡初始化和执行一系列数据分发策略初始化操作。网络数据包分发层的进程启动之后,首先会加载网卡驱动程序,实现在用户态对网卡的驱动。然后通过读取指定的配置文件,对网卡进行自动配置。初始化完成后,会额外开启四个子线程,包括下行数据发送线程、上行数据分发线程、用户请求响应线程、和内核交互线程。这些子线程会分别选取一个离该网卡最近的逻辑CPU单元进行线程绑定,以提高网络数据包处理性能。其中,下行数据发送线程用于将发送缓冲区中的数据包从指定的网卡端口发送出去;上行数据分发线程则用于将从网卡上接收到的网络数据包,根据数据分发策略表推送给指定的上层用户;用户请求响应线程用于侦听用户网络描述符的申请和释放,并根据用户申请的描述符类型更新维护分发策略表;内核交互线程用于实现网络数据包分发层与Linux内核的数据交互。
(2)按照步骤(1)的操作,当网络数据包分发层初始化完成后,会在操作系统中注册一张虚拟网卡。为了能够让操作系统访问这张虚拟网卡,用户需要对网卡进行配置,包括IP地址和子网掩码。这里,添加虚拟网卡的主要目的是为了解决DPDK网卡独占的问题,使得用户在使用内核旁路方案时,操作系统仍然可以通过物理网卡收发数据。
(3)按照步骤(2)的操作,当操作系统完成对虚拟网卡的初始化后,通过该虚拟网卡,操作系统就可以跟网络上的其它主机节点进行通信。由于此刻数据分发策略表为空,网络上其它主机节点发送过来的数据包都将会被上行数据分发线程通过内核交互线程转发送给操作系统内核网络协议栈。与此同时,上行数据分发线程在接收到网络数据包后,也会实时检测该数据包是否是ARP报文,如果是则触发ARP表维护策略,解析该ARP报文并通过共享内存的方式在系统中维护一张ARP表。
(4)在用户数据隔离层中,当每一个用户进程启动的时候,会首先加载一个用户数据隔离层。用户进程通过该用户数据隔离层获取网络数据包分发层所提供的共享内存地址。某一时刻,当用户进程通过API接口申请一个网络描述符的时候,用户数据隔离层会首先对该用户的申请信息进行校验,当校验失败时,拒绝用户申请并返回相应的错误信息。当校验成功可以申请时,用户数据隔离层则将该申请信息进行打包封装,然后通过共享内存的方式,使用无锁队列交付给网络数据包分发层,并阻塞等待网络数据包分发层返回申请处理结果。
(5)网络数据包分发层在收到该描述符的创建请求后,首先会对该请求信息进行校验,如果校验失败,则返回错误信息给用户数据隔离层。如果校验成功,则根据用户申请信息,更新数据分发策略表,同时在共享内存中针对该描述符创建一个数据发送缓冲队列和一个数据接收缓冲队列,然后将这两个队列的信息返回给用户数据隔离层。最终,用户数据隔离层解除阻塞并将该信息返回给应用程序。
(6)用户应用程序通过API接口接收到从用户数据隔离层返回的网络描述符后,即可以使用该描述符进行数据包的收发。其中,数据包的发送过程为,用户应用程序首先调用API发送接口,将要发送的数据从指定的网络描述符发送给用户数据隔离层。用户数据隔离层会首先对该网络描述符进行检验,如果该网络描述符从未被申请过或者已经被释放,则拒绝发送数据并返回相应错误信息。否则,用户数据隔离层将根据该描述符信息,查找ARP表、组建UDP或者TCP网络数据包、填充MAC地址信息,然后将封装好的可用于在网络上传输的数据包推送给网络数据分发层,最终由网络数据分发层的下行数据发送线程通过指定网卡发送队列发送出去。
(7)当网络上另外一台主机节点向当前主机节点指定的IP地址和端口号发送网络数据包时,网络数据分发层的上行数据分发线程会首先从网卡队列上捕获该网络数据包,然后解析出IP地址、协议类型、目标网络端口号等,并根据这些信息查找数据分发策略表以找出对应的网络描述符和相应的数据收发队列。如果成功查找到数据接收队列,则将该网络数据包解析后推送至相应的用户数据隔离层数据接收队列,最终由用户应用程序通过相应的API接口读取该数据。如果网络数据包分发层通过数据分发策略表查找不到对应的网络描述符,则将该网络数据包交由Linux内核处理。
(8)多进程、多线程数据收发策略:通过用户数据隔离层,本方法支持多进程多线程并发访问方式。也就是说在某一时刻,可以有多个进程同时通过网络数据分发层以无锁的方式访问同一张网卡,实现低延迟策略。此外,每一个进程中也可以同时拥有多个线程进行数据收发。
(9)低使用成本:使用本方法,用户几乎无需对现有的程序进行修改。只需要在用于应用程序中加载一个本方法生成的动态链接库,然后将网络I/O函数改为本方法提供的四个I/O接口函数即可。本方法提供的I/O接口支持同时支持select/epoll操作,因此用户无需对其它网络调度策略进行任何修改。
尽管为使解释简单化将上述方法图示并描述为一系列动作,但是应理解并领会,这些方法不受动作的次序所限,因为根据一个或多个实施例,一些动作可按不同次序发生和/或与来自本文中图示和描述或本文中未图示和描述但本领域技术人员可以理解的其他动作并发地发生。
本领域技术人员将进一步领会,结合本文中所公开的实施例来描述的各种解说性逻辑板块、模块、电路、和算法步骤可实现为电子硬件、计算机软件、或这两者的组合。为清楚地解说硬件与软件的这一可互换性,各种解说性组件、框、模块、电路、和步骤在上面是以其功能性的形式作一般化描述的。此类功能性是被实现为硬件还是软件取决于具体应用和施加于整体系统的设计约束。技术人员对于每种特定应用可用不同的方式来实现所描述的功能性,但这样的实现决策不应被解读成导致脱离了本发明的范围。
结合本文所公开的实施例描述的各种解说性逻辑板块、模块、和电路可用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立的门或晶体管逻辑、分立的硬件组件、或其设计成执行本文所描述功能的任何组合来实现或执行。通用处理器可以是微处理器,但在替换方案中,该处理器可以是任何常规的处理器、控制器、微控制器、或状态机。处理器还可以被实现为计算设备的组合,例如DSP与微处理器的组合、多个微处理器、与DSP核心协作的一个或多个微处理器、或任何其他此类配置。
结合本文中公开的实施例描述的方法或算法的步骤可直接在硬件中、在由处理器执行的软件模块中、或在这两者的组合中体现。软件模块可驻留在RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动盘、CD-ROM、或本领域中所知的任何其他形式的存储介质中。示例性存储介质耦合到处理器以使得该处理器能从/向该存储介质读取和写入信息。在替换方案中,存储介质可以被整合到处理器。处理器和存储介质可驻留在ASIC中。ASIC可驻留在用户终端中。在替换方案中,处理器和存储介质可作为分立组件驻留在用户终端中。
在一个或多个示例性实施例中,所描述的功能可在硬件、软件、固件或其任何组合中实现。如果在软件中实现为计算机程序产品,则各功能可以作为一条或更多条指令或代码存储在计算机可读介质上或藉其进行传送。计算机可读介质包括计算机存储介质和通信介质两者,其包括促成计算机程序从一地向另一地转移的任何介质。存储介质可以是能被计算机访问的任何可用介质。作为示例而非限定,这样的计算机可读介质可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、或能被用来携带或存储指令或数据结构形式的合意程序代码且能被计算机访问的任何其它介质。任何连接也被正当地称为计算机可读介质。例如,如果软件是使用同轴电缆、光纤电缆、双绞线、数字订户线(DSL)、或诸如红外、无线电、以及微波之类的无线技术从web网站、服务器、或其它远程源传送而来,则该同轴电缆、光纤电缆、双绞线、DSL、或诸如红外、无线电、以及微波之类的无线技术就被包括在介质的定义之中。如本文中所使用的盘(disk)和碟(disc)包括压缩碟(CD)、激光碟、光碟、数字多用碟(DVD)、软盘和蓝光碟,其中盘(disk)往往以磁的方式再现数据,而碟(disc)用激光以光学方式再现数据。上述的组合也应被包括在计算机可读介质的范围内。
提供对本公开的先前描述是为使得本领域任何技术人员皆能够制作或使用本公开。对本公开的各种修改对本领域技术人员来说都将是显而易见的,且本文中所定义的普适原理可被应用到其他变体而不会脱离本公开的精神或范围。由此,本公开并非旨在被限定于本文中所描述的示例和设计,而是应被授予与本文中所公开的原理和新颖性特征相一致的最广范围。
Claims (8)
1.一种低延迟通讯系统,其特征在于,包括API接口管理模块、信息交互管理模块、策略管理模块、描述符管理模块和数据收发模块,其中:
API接口管理模块,用于向用户应用程序提供数据收发接口;
信息交互管理模块,用于管理不同进程之间的通信机制;
策略管理模块,用于维护数据分发策略方法;
描述符管理模块,用于管理所有用户进程所申请的描述符;
数据收发模块,用于通过描述符在用户层、内核和网卡之间的数据收发;
其中,API接口管理模块提供发送、接收、描述符申请、描述符释放四个API接口,API接口管理模块包括第一描述符请求响应单元和第一描述符维护单元,其中:
第一描述符请求响应单元,用户应用程序通过用户数据隔离层提供的描述符申请的API接口发出描述符申请,用户数据隔离层对描述符申请进行校验后将其打包封装再通过信息交互管理模块的共享内存管理单元中的描述符请求队列传递给网络数据包分发层,并发送信号量通知消息激活网络数据包分发层的用户请求响应线程,然后阻塞等待,用户请求响应线程被激活后从描述符请求队列中提取描述符申请并向描述符管理模块的第二描述符请求响应单元进行注册,然后向用户返回注册结果;
第一描述符维护单元,用于维护当前进程中各个已申请的描述符的管理和释放,用户请求响应线程通过信息交互管理模块中的管道将描述符在共享内存中的分配信息返回给用户数据隔离层,用户数据隔离层解除阻塞后读取分配信息并调用第一描述符维护单元更新进程内存信息;
信息交互管理模块所管理的通信机制包括共享内存、管道和信号量,当用户应用程序申请到一个描述符后维护该描述符所对应的数据收发队列缓冲区;
策略管理模块包括ARP表维护单元、数据分发策略表维护单元和CPU线程绑定单元,其中的数据分发策略表维护单元用于根据当前所有用户申请的描述符,对从网卡接收到的网络数据包进行匹配路由;
描述符管理模块包括第二描述符请求响应单元和第二描述符维护单元,其中:
第二描述符请求响应单元,用于维护当前系统中所有的用户应用程序描述符的申请和释放,第一描述符请求响应单元通过用户请求响应线程向第二描述符请求响应单元进行注册,收到该注册申请后,第二描述符请求响应单元对描述符申请进行检测,检测信息包括所申请的端口号是否已经被占用,IP地址、协议类型是否合法,如果检测未通过则拒绝该申请并返回错误信息,如果检测通过则生成描述符并为该描述符在共享内存中分配数据收队列和数据发队列,当第二描述符请求响应单元收到的是描述符释放申请时,直接交由第二描述符维护单元操作;
第二描述符维护单元,用于维护当前系统中所有描述符的管理和释放,当收到第二描述符请求响应单元发送的描述符申请注册成功信息时,更新内存表信息,标记该描述符已经被占用,并记录所分配的数据收发队列、进程间通讯地址;当接收到第二描述符请求响应单元发送的描述符释放信息时,更新内存表信息,释放该描述符所占用的数据收发队列、进程通讯地址;
数据收发模块用于将从用户层和内核发送过来的数据通过指定的网卡队列发送出去,以及将从网卡上接收的数据,通过数据分发策略表发送给指定的用户或者操作系统内核网络协议栈。
2.根据权利要求1所述的低延迟通讯系统,其特征在于,API接口管理模块提供的描述符申请的信息包括源IP地址、目的IP地址、源端口号、目的端口号,以及数据类型。
3.根据权利要求2所述的低延迟通讯系统,其特征在于,信息交互管理模块包括共享内存管理单元和进程间通信管理单元,其中:
共享内存管理单元,用于维护共享内存中各个数据结构的申请和释放;
进程间通信管理单元,提供用户应用程序和底层环境的一套通讯机制,包括管道和信号量。
4.根据权利要求3所述的低延迟通讯系统,其特征在于,策略管理模块中:
ARP表维护单元,用于实时的在内存中维护ARP表,并对外提供ARP信息查询接口;
CPU绑定单元,用于根据当前线程要处理的网络数据包的来源,选择一个最佳逻辑CPU进行线程绑定。
5.根据权利要求4所述的低延迟通讯系统,其特征在于,数据收发模块进一步包括上行数据分发单元、下行数据分发单元和内核交互单元。
6.根据权利要求5所述的低延迟通讯系统,其特征在于,下行数据分发单元中,用户应用程序调用用户数据隔离层提供的发送API接口,将描述符、数据传递给用户数据隔离层,用户数据隔离层在收到后先查找本地内存对描述符进行校验,如果该描述符处于未申请状态则将数据抛弃并向用户应用程序返回错误信息,如果该描述符处于已申请状态则用户数据隔离层根据描述符信息解析要发送的IP地址、端口号,并从ARP表查找对方的MAC地址,用户数据隔离层根据网络协议将用户数据封装成可以在网络上传输的UDP数据或者TCP数据,并将封装好的网络数据包通过共享内存的方式,从该描述符的无锁发队列上发送给网络数据包分发层,同时向网络数据包分发层的下行数据发送线程发送一个激活指令,网络数据包分发层的下行数据发送线程在侦听到无锁发队列中的网络数据包后立即取出并从指定的网卡队列上发送出去。
7.根据权利要求5所述的低延迟通讯系统,其特征在于,上行数据分发单元中,网络数据包分发层的上行数据分发线程先从网卡上通过DPDK提供的数据接收函数接收网络数据包,将该网络数据包交由策略管理模块处理,策略管理模块对该网络数据包进行解析,提取目的IP地址、目的端口号,然后查找数据分发策略表,如果成功查找到对应的描述符则将该网络数据包推送至共享内存中相应描述符的无锁收队列,并激活该描述符上的select操作,如果没有查找到对应的描述符则将该网络数据包通过内核交互单元中的内核交互线程发送给Linux内核网络协议栈,用户应用程序的select函数被激活后,通过用户数据隔离层提取无锁收队列中与其描述符相对应的数据。
8.根据权利要求1至7中任一项所述的低延迟通讯系统,其特征在于,低延迟通讯系统是基于数据平面开发套件实现的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710812188.3A CN108289063B (zh) | 2017-09-11 | 2017-09-11 | 一种低延迟通讯系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710812188.3A CN108289063B (zh) | 2017-09-11 | 2017-09-11 | 一种低延迟通讯系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108289063A CN108289063A (zh) | 2018-07-17 |
CN108289063B true CN108289063B (zh) | 2021-07-27 |
Family
ID=62831523
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710812188.3A Active CN108289063B (zh) | 2017-09-11 | 2017-09-11 | 一种低延迟通讯系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108289063B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110750469A (zh) * | 2018-07-23 | 2020-02-04 | 大唐移动通信设备有限公司 | 一种应用数据的处理方法及装置 |
CN111327645B (zh) * | 2018-11-28 | 2023-11-21 | 鸿合科技股份有限公司 | 一种共享网络方法及装置、电子设备 |
CN110460540B (zh) * | 2019-06-28 | 2023-03-14 | 杨涛 | 一种低延迟高频交易系统及方法 |
CN110912873B (zh) * | 2019-11-05 | 2021-10-29 | 郑州信大捷安信息技术股份有限公司 | 一种基于dpdk的双协议栈实现系统及实现方法 |
CN111314311A (zh) * | 2020-01-19 | 2020-06-19 | 苏州浪潮智能科技有限公司 | 一种提高交换机性能的方法、系统、设备及介质 |
CN113067849B (zh) * | 2021-02-05 | 2022-05-10 | 湖南国科亿存信息科技有限公司 | 基于Glusterfs的网络通信优化方法及装置 |
CN114221861B (zh) * | 2021-03-26 | 2023-07-07 | 无锡江南计算技术研究所 | 一种大规模互连网络的管理包收发方法 |
CN113359510B (zh) * | 2021-06-04 | 2023-01-31 | 北京理工大学 | 北斗卫星导航系统信号模拟器数据实时仿真系统 |
CN113938531B (zh) * | 2021-09-23 | 2023-10-31 | 北京车和家信息技术有限公司 | 数据传输方法、装置、设备及介质 |
CN114331445A (zh) * | 2022-03-15 | 2022-04-12 | 上海金仕达软件科技有限公司 | 用于海量用户接入的api接口、方法、存储介质及电子设备 |
CN115766438B (zh) * | 2023-01-05 | 2023-04-18 | 北京锐服信科技有限公司 | 一种基于dpdk的接口管理方法及系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009076535A1 (en) * | 2007-12-13 | 2009-06-18 | Academia Sinica | System and method for performing charge-monitoring mass spectrometry |
CN102375789A (zh) * | 2010-08-09 | 2012-03-14 | 上海中标软件有限公司 | 一种通用网卡非缓存的零拷贝方法及零拷贝系统 |
CN104579695A (zh) * | 2013-10-23 | 2015-04-29 | 杭州华三通信技术有限公司 | 一种数据转发装置和方法 |
CN104904160A (zh) * | 2012-11-09 | 2015-09-09 | 思杰系统有限公司 | 用于数据流的应用流的系统和方法 |
US9135191B1 (en) * | 2012-06-15 | 2015-09-15 | Symantec Corporation | Techniques for storage network bandwidth management |
CN105608027A (zh) * | 2015-12-18 | 2016-05-25 | 华为技术有限公司 | 非易失存储设备和访问非易失存储设备的方法 |
CN106254179A (zh) * | 2016-08-05 | 2016-12-21 | 深圳先进技术研究院 | 一种心跳包异步控制方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030172235A1 (en) * | 2002-02-27 | 2003-09-11 | Letey George Thomas | Read data storage controller with bypass read data return path |
-
2017
- 2017-09-11 CN CN201710812188.3A patent/CN108289063B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2009076535A1 (en) * | 2007-12-13 | 2009-06-18 | Academia Sinica | System and method for performing charge-monitoring mass spectrometry |
CN102375789A (zh) * | 2010-08-09 | 2012-03-14 | 上海中标软件有限公司 | 一种通用网卡非缓存的零拷贝方法及零拷贝系统 |
US9135191B1 (en) * | 2012-06-15 | 2015-09-15 | Symantec Corporation | Techniques for storage network bandwidth management |
CN104904160A (zh) * | 2012-11-09 | 2015-09-09 | 思杰系统有限公司 | 用于数据流的应用流的系统和方法 |
CN104579695A (zh) * | 2013-10-23 | 2015-04-29 | 杭州华三通信技术有限公司 | 一种数据转发装置和方法 |
CN105608027A (zh) * | 2015-12-18 | 2016-05-25 | 华为技术有限公司 | 非易失存储设备和访问非易失存储设备的方法 |
CN106254179A (zh) * | 2016-08-05 | 2016-12-21 | 深圳先进技术研究院 | 一种心跳包异步控制方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108289063A (zh) | 2018-07-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108289063B (zh) | 一种低延迟通讯系统 | |
US11934341B2 (en) | Virtual RDMA switching for containerized | |
US10735329B2 (en) | Container communication method and system for parallel applications | |
US7752635B2 (en) | System and method for configuring a virtual network interface card | |
Jose et al. | Memcached design on high performance RDMA capable interconnects | |
US8645558B2 (en) | Reception according to a data transfer protocol of data directed to any of a plurality of destination entities for data extraction | |
US20070041383A1 (en) | Third party node initiated remote direct memory access | |
US11716264B2 (en) | In situ triggered function as a service within a service mesh | |
KR102184512B1 (ko) | 관리 방법 및 디바이스 | |
US7984438B2 (en) | Virtual machine transitioning from emulating mode to enlightened mode | |
US9639407B1 (en) | Systems and methods for efficiently implementing functional commands in a data processing system | |
US10496676B2 (en) | Synchronization cache seeding | |
KR20200078382A (ko) | 개시자 모드를 갖는 솔리드-스테이트 드라이브 | |
CN103858111B (zh) | 一种实现聚合虚拟化中内存共享的方法、设备和系统 | |
WO2021197182A1 (zh) | 程序加载方法、设备、系统及存储介质 | |
US11474880B2 (en) | Network state synchronization for workload migrations in edge devices | |
CN110532106A (zh) | 进程间的通讯方法、装置、设备和存储介质 | |
WO2022170946A1 (zh) | 一种访问控制方法及相关装置 | |
US20140156905A1 (en) | System and Method for Intelligent Platform Management Interface Keyboard Controller Style Interface Multiplexing | |
WO2016188014A1 (zh) | 数据存储方法和装置 | |
US10924455B2 (en) | Method and system for implementing a cluster-wide communication over a single port | |
US20140337456A1 (en) | Systems and methods for enabling rdma between diverse endpoints | |
US20230185455A1 (en) | Method and apparatus for offloading memory/storage sharding from cpu resources | |
CN115933973B (zh) | 远程更新数据的方法、rdma系统及存储介质 | |
CN113810210B (zh) | 在redfish上的ipmi |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |