CN113467964A - 接入用户态协议栈的实现方法、系统、装置及存储介质 - Google Patents

接入用户态协议栈的实现方法、系统、装置及存储介质 Download PDF

Info

Publication number
CN113467964A
CN113467964A CN202110565693.9A CN202110565693A CN113467964A CN 113467964 A CN113467964 A CN 113467964A CN 202110565693 A CN202110565693 A CN 202110565693A CN 113467964 A CN113467964 A CN 113467964A
Authority
CN
China
Prior art keywords
function
api
protocol stack
user mode
data
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.)
Withdrawn
Application number
CN202110565693.9A
Other languages
English (en)
Inventor
李哲
张硕
刘亚萍
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Pairi Technology Guangzhou Co ltd
Original Assignee
Pairi Technology Guangzhou Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Pairi Technology Guangzhou Co ltd filed Critical Pairi Technology Guangzhou Co ltd
Priority to CN202110565693.9A priority Critical patent/CN113467964A/zh
Publication of CN113467964A publication Critical patent/CN113467964A/zh
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请涉及计算机技术领域,提供了接入用户态协议栈的实现方法、系统、装置及存储介质,其中方法包括:配置数据共享区域;以LD_PRELOAD方式启动网络应用程序,将操作系统内核中的第一API重定向到用户态协议栈对应的第二API,劫持与第一API对应的函数信息并写入到数据共享区域;对数据共享区域中的函数标志位进行监测,监测到函数标志位变化时,根据与函数标志位对应的第一API确定对应重定向的第二API,使用用户态协议栈调用所述对应重定向的第二API以执行对应的函数;以轮询模式运行所述用户态协议栈,监测数据共享区域中其他函数标志位是否变化,在变化时执行对应的函数。本发明能够使普通网络应用程序在不修改源码的情况下使用用户态协议栈。

Description

接入用户态协议栈的实现方法、系统、装置及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及接入用户态协议栈的实现方法、系统、装置及存储介质。
背景技术
近年来,不断增长的互联网流量和网络带宽,对网络技术的发展提供了广阔的应用前景,也对网络数据包处理性能提出了新的要求。
目前,基于内核旁路技术的用户态协议栈能显著提升网络数据包处理性能,但是其普遍存在兼容性较低、难以移植传统应用的问题。例如mTCP独立开发的简易TCP网络协议栈,其无法支持UDP应用并难以应对常见的网络攻击,由于向其移植网络应用需要修改源码导致至今只支持Lighttpd一个较为主流的网络应用服务器。IX封装成libix库向上层应用提供API,包括connect、accpet、sendv、recv_done、close等接口,但由于IX向应用暴露了流量控制条件信息,造成libixAPI的语义发生改变。为了追求更高的性能,IX既没有遵从POSIXAPI的语义,也没有实现epoll相关常用的网络API,因此具有较低的兼容性,使当今主流网络服务器应用Nginx、Lighttpd等难以移植到IX上。Arraki相比之下在兼容性方面做了更多考虑,给网络应用暴露Native Arrakis API和POSIX API两种接口,前者由于重新设计数据I/O的接口而实现了真正的数据零复制,后者由于POSIX API中recv、send等收发函数中带有应用buffer的语义而无法实现真正的零复制,但也获得相比传统Linux内核协议栈在网络性能上的提升。
综上所述,基于内核旁路技术的用户态协议栈能显著提升网络处理性能,但是应用程序如果想使用用户态协议栈,就必须按照其规则进行深度修改,对开发人员要求较高,目前尚无公开的资料或产品能够使普通网络应用程序在不修改源码的情况下使用用户态协议栈。
发明内容
本申请实施例的目的在于,提供一种接入用户态协议栈的实现方法、系统、装置及存储介质,能够使普通网络应用程序在不修改源码的情况下使用用户态协议栈。
为达到上述目的,本发明采用如下技术方案:
本发明第一方面提供了接入用户态协议栈的实现方法,所述方法包括:
配置数据共享区域;
以LD_PRELOAD方式启动网络应用程序,将操作系统内核中的第一API重定向到用户态协议栈对应的第二API,从所述应用程序劫持与所述第一API对应的函数信息并将所述函数信息写入到所述数据共享区域,所述函数信息包括函数标志位;
对所述数据共享区域中的函数标志位进行监测,监测到所述函数标志位变化时,根据与所述函数标志位对应的第一API确定对应重定向的第二API,使用用户态协议栈调用所述对应重定向的第二API以执行与所述函数标志位对应的函数;
以轮询模式运行所述用户态协议栈,监测所述数据共享区域中其他函数标志位是否变化,在变化时执行对应的函数。
根据本发明第一方面的一种能够实现的方式,所述操作系统内核中的第一API包括操作系统内核的POSIX API。
根据本发明第一方面的一种能够实现的方式,当所述网络应用程序在高并发网络环境下会使用多线程模式进行并发操作时,所述操作系统内核中的第一API还包括操作系统内核pthread库函数的接口。
根据本发明第一方面的一种能够实现的方式,所述方法还包括:
在以轮询模式运行所述用户态协议栈之前,判断所述网络应用程序的运行模式是否为阻塞模式;
在是阻塞模式时,将所述网络应用程序的I/O事件模式转换为epoll或者Kqueue方式。
根据本发明第一方面的一种能够实现的方式,所述数据共享区域为根据共享内存技术在用户态使用大页生成的共享内存。
根据本发明第一方面的一种能够实现的方式,所述共享内存包括控制区和数据区,所述控制区包括函数标志位以及用于读写数据的环形队列。
根据本发明第一方面的一种能够实现的方式,所述共享内存基于动态管理机制管理所述环形队列,所述动态管理机制包括:
数据发送时,在与所述数据的类型对应的环形队列中获取一个空闲的内存块索引,将数据拷贝到对应的内存块中,并更新对应函数标志位的读取状态标志;
数据读取时,根据函数标志位的读取状态标志,在对应的环形队列的队尾中读取内存块索引,从对应的内存块中读取数据,并将函数标志位的状态复位。
本发明第二方面提供了接入用户态协议栈的实现系统,所述系统包括:
配置模块,用于配置数据共享区域;
重定向模块,用于以LD_PRELOAD方式启动网络应用程序,将操作系统内核中的第一API重定向到用户态协议栈对应的第二API,从所述应用程序劫持与所述第一API对应的函数信息并将所述函数信息写入到所述数据共享区域,所述函数信息包括函数标志位;
监测模块,用于对所述数据共享区域中的函数标志位进行监测,监测到所述函数标志位变化时,根据与所述函数标志位对应的第一API确定对应重定向的第二API,使用用户态协议栈调用所述对应重定向的第二API以执行与所述函数标志位对应的函数;
所述监测模块还用于以轮询模式运行所述用户态协议栈,监测所述数据共享区域中其他函数标志位是否变化,在变化时执行对应的函数。
根据本发明第二方面的一种能够实现的方式,所述操作系统内核中的第一API包括操作系统内核的POSIX API。
根据本发明第二方面的一种能够实现的方式,当所述网络应用程序在高并发网络环境下会使用多线程模式进行并发操作时,所述操作系统内核中的第一API还包括操作系统内核pthread库函数的接口。
根据本发明第二方面的一种能够实现的方式,所述系统还包括:
判断模块,用于在所述监测模块以轮询模式运行所述用户态协议栈之前,判断所述网络应用程序的运行模式是否为阻塞模式;
转换模块,用于在是阻塞模式时,将所述网络应用程序的I/O事件模式转换为epoll或者Kqueue方式。
根据本发明第二方面的一种能够实现的方式,所述数据共享区域为根据共享内存技术在用户态使用大页生成的共享内存。
根据本发明第二方面的一种能够实现的方式,所述共享内存包括控制区和数据区,所述控制区包括函数标志位以及用于读写数据的环形队列。
根据本发明第二方面的一种能够实现的方式,所述共享内存基于动态管理机制管理所述环形队列,所述动态管理机制包括:
数据发送时,在与所述数据的类型对应的环形队列中获取一个空闲的内存块索引,将数据拷贝到对应的内存块中,并更新对应函数标志位的读取状态标志;
数据读取时,根据函数标志位的读取状态标志,在对应的环形队列的队尾中读取内存块索引,从对应的内存块中读取数据,并将函数标志位的状态复位。
本发明第三方面实施例提供了一种接入用户态协议栈的实现装置,该装置包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一项实施例所述的接入用户态协议栈的实现方法。
本发明第四方面实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被执行时实现如上述任一项实施例所述的接入用户态协议栈的实现方法。
本发明能够使普通网络应用程序在不修改源码的情况下使用用户态协议栈。
附图说明
图1是本发明提供的接入用户态协议栈的实现方法的一个优选实施例的流程示意图;
图2是本发明提供的接入用户态协议栈的实现系统的一个优选实施例的结构示意图。
附图标记:
配置模块1、重定向模块2、监测模块3。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了方便理解本发明实施例,首先在此介绍本发明实施例描述中会引入的几个要素。
LD_PRELOAD:是Linux系统的一个环境变量,它可以影响程序的运行时的链接。
用户态协议栈:协议栈是操作系统的网络处理部分通常都会包含的模块。当与网络处理部分相关的进程/线程在用户空间运行时,cpu堆栈指针寄存器指向的协议栈即为用户态协议栈,本发明实施例中,用户态协议栈指在用户空间运行的所有协议栈的集合。
POSIX:可移植操作系统接口,是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称。
API:应用程序接口,是一些预先定义的接口(如函数、HTTP接口)。
Epoll:是在UNIX上一种比较高效的IO复用技术。
Kqueue:是在UNIX上另一种比较高效的IO复用技术。
环形队列:是一个首尾相连的FIFO的数据结构,采用数组的线性空间来实现,并能很快判断出队列状态是满或者空,从而实现数据的快速存取。环形队列原理为当数据到了队列尾部时,它将转回到0位置来处理。这个的转回是通过取模操作来执行的。因此,环列队列在逻辑上是将数组元素q[0]与q[MAXN-1]连接,形成一个存放队列的环形空间。为了方便读写,还要用数组下标来指明队列的读写位置。例如head/tail,其中head指向可以读的位置,tail指向可以写的位置。
图1所示为本发明提供的接入用户态协议栈的实现方法的一个优选实施例的流程示意图。
如图1所示,所述方法包括:
S1配置数据共享区域;
S2以LD_PRELOAD方式启动网络应用程序,将操作系统内核中的第一API重定向到用户态协议栈对应的第二API,从所述应用程序劫持与所述第一API对应的函数信息并将所述函数信息写入到所述数据共享区域,所述函数信息包括函数标志位;
S3对所述数据共享区域中的函数标志位进行监测,监测到所述函数标志位变化时,根据与所述函数标志位对应的第一API确定对应重定向的第二API,使用用户态协议栈调用所述对应重定向的第二API以执行与所述函数标志位对应的函数;
S4以轮询模式运行所述用户态协议栈,监测所述数据共享区域中其他函数标志位是否变化,在变化时执行对应的函数。
对于步骤S3,具体执行时首先读取配置文件进行网卡端口,CPU核心数、内存通道数等数据进行初始化,然后读取数据共享区域中的函数标志位。采用0和1来表示函数标志位的两种状态,当服务端Socket函数(socket、bind、listen、accept)、客户端Socket函数(socket、connect)发生变化时,函数标志位将从0变为1。对函数标志位的变化进行监测,如果发生改变说明网络应用在调用该API,此时执行用户态协议栈中对应实现的API,成功执行后更新数据共享区域中的函数标志位信息,将对应的函数标志位置为0。
对于步骤S4,具体执行时继续判断除服务端、客户端Socket函数外其他Socket函数(send、sendto、recv、recvfrom、close等)的函数标志位是否改变,如果改变调用对应API,并以轮询方式继续将此过程重复进行下去,从而实现使用所述用户态协议栈执行与发生改变的函数标志位对应的函数。
本发明实施例能够使普通网络应用程序在不修改源码的情况下使用用户态协议栈。通过LD_PRELOAD环境变量方式来改变对动态链接库的加载顺序,使得网络应用程序在通过操作系统调用接口时,不向内核发送调用信息,实现了对网络应用程序调用API操作的拦截,并将相应函数标志位及相关信息传入数据共享区域,用户态协议栈进程根据数据共享区域相关信息匹配具体调用函数进行重定向,以此来实现在不修改网络应用任何源码的情况下,接入用户态协议栈进行使用的目标。
其中,所述操作系统内核中的第一API包括操作系统内核的POSIXAPI。
进一步地,当所述网络应用程序在高并发网络环境下会使用多线程模式进行并发操作时,所述操作系统内核中的第一API还包括操作系统内核pthread库函数的接口。
本发明实施例能够使得接入用户态协议栈的实现方法能够支持多线程的网络应用程序模型。
进一步地,所述方法还包括:
在以轮询模式运行所述用户态协议栈之前,判断所述网络应用程序的运行模式是否为阻塞模式;
在是阻塞模式时,将所述网络应用程序的I/O事件模式转换为epoll或者Kqueue方式。
在阻塞模式下,在I/O操作完成前,执行的操作函数一直等候而不会立即返回,该函数所在的线程会阻塞在这里。由于F-Stack用户态协议栈不支持阻塞模式,只支持在FreeBSD基础上的非阻塞模式Kqueue以及在Kqueue基础上实现的epoll方式,所以当网络应用程序采取阻塞模式编写时,需要将该网络应用的I/O事件模式转换为epoll或者Kqueue方式实现。
其中,所述数据共享区域为根据共享内存技术在用户态使用大页生成的共享内存。
接入用户态协议栈的实现方法中各步骤之间的数据交互需要由数据共享区域来参与,它们都需要在数据共享区域频繁读取、写入数据,所以数据共享区域的实现方式会对用户态协议栈性能产生直接影响。如果利用内核使用传统的进程间通信机制,例如消息队列、信号、信号量等,在高速报文处理流程中,频繁的与内核进行交互,会产生大量的上下文切换开销,并且数据报文需要在内核空间和用户空间进行多次的数据拷贝,会导致性能大幅度降低。
本发明实施例根据共享内存技术在用户态使用大页生成所述数据共享区域,不需要将数据再拷贝到内核,来减少数据拷贝次数以及上下文切换造成的性能损耗,提高了数据交互性能。使用大页内存技术,当共享内存申请地址空间时,直接申请大页内存空间,从而实现对内存池的管理。
进一步地,所述共享内存包括控制区和数据区,所述控制区包括函数标志位以及用于读写数据的环形队列。
具体地,系统工作时,根据写入到所述数据共享区域内的函数信息确定对应的函数类型、数据种类以及线程,进而根据对应的函数类型、数据种类以及线程生成相应数量的环形队列。数据共享区域内为每个环形队列将被分配一定大小的内存块。内存块根据数据类型的不同大小不同。作为优选,为了节省系统开销,分配的内存块大小固定。
进一步地,所述共享内存基于动态管理机制管理所述环形队列,所述动态管理机制包括:
数据发送时,在与所述数据的类型对应的环形队列中获取一个空闲的内存块索引,将数据拷贝到对应的内存块中,并更新对应函数标志位的读取状态标志;
数据读取时,根据函数标志位的读取状态标志,在对应的环形队列的队尾中读取内存块索引,从对应的内存块中读取数据,并将函数标志位的状态复位。
本发明上述实施例通过对读写环形队列的不断交替操作,极大地弱化了共享内存空间物理结构代理的影响,从而使用异步I/O实现对数据的传送。采用环形队列的形式可以极大地提高数据共享区域内存的利用效率,并且使用多个读写环形队列进行数据同步还可以避免多个线程访问调度带来的性能影响。
本发明第二方面实施例提供了一种接入用户态协议栈的实现系统。
图2所示是本发明提供的接入用户态协议栈的实现系统的一个优选实施例的结构示意图,所述系统能够实现上述任一实施例所述的接入用户态协议栈的实现方法的全部流程。
如图2所示,该系统包括:
配置模块1,用于配置数据共享区域;
重定向模块2,用于以LD_PRELOAD方式启动网络应用程序,将操作系统内核中的第一API重定向到用户态协议栈对应的第二API,从所述应用程序劫持与所述第一API对应的函数信息并将所述函数信息写入到所述数据共享区域,所述函数信息包括函数标志位;
监测模块3,用于对所述数据共享区域中的函数标志位进行监测,监测到所述函数标志位变化时,根据与所述函数标志位对应的第一API确定对应重定向的第二API,使用用户态协议栈调用所述对应重定向的第二API以执行与所述函数标志位对应的函数;
所述监测模块还用于以轮询模式运行所述用户态协议栈,监测所述数据共享区域中其他函数标志位是否变化,在变化时执行对应的函数。
其中,所述操作系统内核中的第一API包括操作系统内核的POSIX API。
进一步地,当所述网络应用程序在高并发网络环境下会使用多线程模式进行并发操作时,所述操作系统内核中的第一API还包括操作系统内核pthread库函数的接口。
进一步地,所述系统还包括:
判断模块,用于在所述监测模块以轮询模式运行所述用户态协议栈之前,判断所述网络应用程序的运行模式是否为阻塞模式;
转换模块,用于在是阻塞模式时,将所述网络应用程序的I/O事件模式转换为epoll或者Kqueue方式。
其中,所述数据共享区域为根据共享内存技术在用户态使用大页生成的共享内存。
其中,所述共享内存包括控制区和数据区,所述控制区包括函数标志位以及用于读写数据的环形队列。
进一步地,所述共享内存基于动态管理机制管理所述环形队列,所述动态管理机制包括:
数据发送时,在与所述数据的类型对应的环形队列中获取一个空闲的内存块索引,将数据拷贝到对应的内存块中,并更新对应函数标志位的读取状态标志;
数据读取时,根据函数标志位的读取状态标志,在对应的环形队列的队尾中读取内存块索引,从对应的内存块中读取数据,并将函数标志位的状态复位。
本发明系统上述实施例各模块的功能及实现方式与上述接入用户态协议栈的实现方法的实施例相同,具体解析可以参照上述接入用户态协议栈的实现方法的实施例,为了避免重复,在此不再赘述。
本发明还提供了一种接入用户态协议栈的实现装置,该装置包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一项实施例所述的接入用户态协议栈的实现方法。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被执行时实现如上述任一项实施例所述的接入用户态协议栈的实现方法。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述接入用户态协议栈的实现装置的控制中心,利用各种接口和线路连接整个接入用户态协议栈的实现装置的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述接入用户态协议栈的实现装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(SecureDigital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
其中,所述接入用户态协议栈的实现装置集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。
以上所述是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本申请的保护范围。

Claims (16)

1.接入用户态协议栈的实现方法,其特征在于,所述方法包括:
配置数据共享区域;
以LD_PRELOAD方式启动网络应用程序,将操作系统内核中的第一API重定向到用户态协议栈对应的第二API,从所述应用程序劫持与所述第一API对应的函数信息并将所述函数信息写入到所述数据共享区域,所述函数信息包括函数标志位;
对所述数据共享区域中的函数标志位进行监测,监测到所述函数标志位变化时,根据与所述函数标志位对应的第一API确定对应重定向的第二API,使用用户态协议栈调用所述对应重定向的第二API以执行与所述函数标志位对应的函数;
以轮询模式运行所述用户态协议栈,监测所述数据共享区域中其他函数标志位是否变化,在变化时执行对应的函数。
2.根据权利要求1所述的接入用户态协议栈的实现方法,其特征在于,所述操作系统内核中的第一API包括操作系统内核的POSIX API。
3.根据权利要求2所述的接入用户态协议栈的实现方法,其特征在于,当所述网络应用程序在高并发网络环境下会使用多线程模式进行并发操作时,所述操作系统内核中的第一API还包括操作系统内核pthread库函数的接口。
4.根据权利要求1所述的接入用户态协议栈的实现方法,其特征在于,所述方法还包括:
在以轮询模式运行所述用户态协议栈之前,判断所述网络应用程序的运行模式是否为阻塞模式;
在是阻塞模式时,将所述网络应用程序的I/O事件模式转换为epoll或者Kqueue方式。
5.根据权利要求1所述的接入用户态协议栈的实现方法,其特征在于,所述数据共享区域为根据共享内存技术在用户态使用大页生成的共享内存。
6.根据权利要求5所述的接入用户态协议栈的实现方法,其特征在于,所述共享内存包括控制区和数据区,所述控制区包括函数标志位以及用于读写数据的环形队列。
7.根据权利要求6所述的接入用户态协议栈的实现方法,其特征在于,所述共享内存基于动态管理机制管理所述环形队列,所述动态管理机制包括:
数据发送时,在与所述数据的类型对应的环形队列中获取一个空闲的内存块索引,将数据拷贝到对应的内存块中,并更新对应函数标志位的读取状态标志;
数据读取时,根据函数标志位的读取状态标志,在对应的环形队列的队尾中读取内存块索引,从对应的内存块中读取数据,并将函数标志位的状态复位。
8.接入用户态协议栈的实现系统,其特征在于,所述系统包括:
配置模块,用于配置数据共享区域;
重定向模块,用于以LD_PRELOAD方式启动网络应用程序,将操作系统内核中的第一API重定向到用户态协议栈对应的第二API,从所述应用程序劫持与所述第一API对应的函数信息并将所述函数信息写入到所述数据共享区域,所述函数信息包括函数标志位;
监测模块,用于对所述数据共享区域中的函数标志位进行监测,监测到所述函数标志位变化时,根据与所述函数标志位对应的第一API确定对应重定向的第二API,使用用户态协议栈调用所述对应重定向的第二API以执行与所述函数标志位对应的函数;
所述监测模块还用于以轮询模式运行所述用户态协议栈,监测所述数据共享区域中其他函数标志位是否变化,在变化时执行对应的函数。
9.根据权利要求8所述的接入用户态协议栈的实现系统,其特征在于,所述操作系统内核中的第一API包括操作系统内核的POSIX API。
10.根据权利要求9所述的接入用户态协议栈的实现系统,其特征在于,当所述网络应用程序在高并发网络环境下会使用多线程模式进行并发操作时,所述操作系统内核中的第一API还包括操作系统内核pthread库函数的接口。
11.根据权利要求8所述的接入用户态协议栈的实现系统,其特征在于,所述系统还包括:
判断模块,用于在所述监测模块以轮询模式运行所述用户态协议栈之前,判断所述网络应用程序的运行模式是否为阻塞模式;
转换模块,用于在是阻塞模式时,将所述网络应用程序的I/O事件模式转换为epoll或者Kqueue方式。
12.根据权利要求8所述的接入用户态协议栈的实现系统,其特征在于,所述数据共享区域为根据共享内存技术在用户态使用大页生成的共享内存。
13.根据权利要求12所述的接入用户态协议栈的实现系统,其特征在于,所述共享内存包括控制区和数据区,所述控制区包括函数标志位以及用于读写数据的环形队列。
14.根据权利要求13所述的接入用户态协议栈的实现系统,其特征在于,所述共享内存基于动态管理机制管理所述环形队列,所述动态管理机制包括:
数据发送时,在与所述数据的类型对应的环形队列中获取一个空闲的内存块索引,将数据拷贝到对应的内存块中,并更新对应函数标志位的读取状态标志;
数据读取时,根据函数标志位的读取状态标志,在对应的环形队列的队尾中读取内存块索引,从对应的内存块中读取数据,并将函数标志位的状态复位。
15.接入用户态协议栈的实现装置,其特征在于,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1-7任一项所述的接入用户态协议栈的实现方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被执行时实现如权利要求1-7任一项所述的接入用户态协议栈的实现方法。
CN202110565693.9A 2021-05-24 2021-05-24 接入用户态协议栈的实现方法、系统、装置及存储介质 Withdrawn CN113467964A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110565693.9A CN113467964A (zh) 2021-05-24 2021-05-24 接入用户态协议栈的实现方法、系统、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110565693.9A CN113467964A (zh) 2021-05-24 2021-05-24 接入用户态协议栈的实现方法、系统、装置及存储介质

Publications (1)

Publication Number Publication Date
CN113467964A true CN113467964A (zh) 2021-10-01

Family

ID=77871292

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110565693.9A Withdrawn CN113467964A (zh) 2021-05-24 2021-05-24 接入用户态协议栈的实现方法、系统、装置及存储介质

Country Status (1)

Country Link
CN (1) CN113467964A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114143061A (zh) * 2021-11-25 2022-03-04 郑州信大信息技术研究院有限公司 基于用户态协议栈实现数据安全可靠传输的方法及系统
CN115827120A (zh) * 2023-01-10 2023-03-21 苏州浪潮智能科技有限公司 用户态网络栈调用、用户态接口设置方法和装置
CN116016702A (zh) * 2022-12-26 2023-04-25 浪潮云信息技术股份公司 一种应用可观测数据采集处理方法、装置及介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114143061A (zh) * 2021-11-25 2022-03-04 郑州信大信息技术研究院有限公司 基于用户态协议栈实现数据安全可靠传输的方法及系统
CN116016702A (zh) * 2022-12-26 2023-04-25 浪潮云信息技术股份公司 一种应用可观测数据采集处理方法、装置及介质
CN115827120A (zh) * 2023-01-10 2023-03-21 苏州浪潮智能科技有限公司 用户态网络栈调用、用户态接口设置方法和装置

Similar Documents

Publication Publication Date Title
CN113467964A (zh) 接入用户态协议栈的实现方法、系统、装置及存储介质
US6728722B1 (en) General data structure for describing logical data spaces
US10120705B2 (en) Method for implementing GPU virtualization and related apparatus, and system
US10402223B1 (en) Scheduling hardware resources for offloading functions in a heterogeneous computing system
CN110719234A (zh) 一种基于dpdk的数据包处理方法及装置
CN113918101B (zh) 一种写数据高速缓存的方法、系统、设备和存储介质
CN113067849B (zh) 基于Glusterfs的网络通信优化方法及装置
US6832266B1 (en) Simplified microkernel application programming interface
WO2022042127A1 (zh) 一种协程切换的方法、装置及设备
US10198784B2 (en) Capturing commands in a multi-engine graphics processing unit
CN109951532B (zh) 一种基于dpdk的流量模型自动变换装置
CN113407357A (zh) 进程间数据搬移的方法及装置
CN114697194B (zh) 阻塞式事件通知方法及装置
JP2008537248A (ja) デジタルシグナルプロセッサ上でのマルチタスクの実施
CN108228273B (zh) 一种执行可执行文件的方法及设备
CN114371920A (zh) 一种基于图形处理器加速优化的网络功能虚拟化系统
US6865579B1 (en) Simplified thread control block design
CN110445874B (zh) 一种会话处理方法、装置、设备和存储介质
Rosa et al. INSANE: A Unified Middleware for QoS-aware Network Acceleration in Edge Cloud Computing
KR100658918B1 (ko) 블록 단위 입출력 명령어를 이용한 시스템 전역 변수초기화 장치 및 그 방법
CN112769638B (zh) 一种基于dpdk技术的提高jain sip服务器性能的方法
US11593113B2 (en) Widening memory access to an aligned address for unaligned memory operations
CN112395083B (zh) 一种资源文件的释放方法、装置和计算机可读存储介质
US20210389985A1 (en) Data processing method, electronic device, and storage medium
CN116048914A (zh) 一种继电保护装置裸跑程序的异步日志处理方法

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
WW01 Invention patent application withdrawn after publication
WW01 Invention patent application withdrawn after publication

Application publication date: 20211001