【技术实现步骤摘要】
一种基于用户态协议栈的通信方法及相应装置
[0001]本申请涉及计算机
,具体涉及一种基于用户态协议栈的通信方法及相应装置。
技术介绍
[0002]计算机系统中实现应用线程与网络硬件之间的交互通常是通过内核协议栈或用户态协议栈。近年来,网络硬件的输入/输出(input/output,IO)能力得到了很大的发展,因为内核协议栈在处理IO数据的过程中需要频繁的在内核态和用户态之间进行上下文之间切换。所以现有内核协议栈的能力已无法充分释放网络硬件的IO能力,在多种网络IO加速的技术中,用户态协议栈是一种常见且有效的技术手段。
[0003]用户态协议栈的设计初衷就是越过(bypass)内核,采取更直接的方式使应用与硬件交互。目前的用户态协议栈通常是将用户态协议栈线程与应用的线程设计成在同一个线程上下文内,这样可以避免线程切换的开销。但是这种用户态协议栈的设计方式,会导致用户态协议栈的线程与应用的线程绑定,导致通用性不够。
技术实现思路
[0004]本申请实施例提供一种基于用户态协议栈的通信方法,用于提高 ...
【技术保护点】
【技术特征摘要】
1.一种基于用户态协议栈的通信方法,应用于服务端,其特征在于,所述服务端包括应用层、所述用户态协议栈和硬件层,所述应用层的目标应用对应至少一个W线程,所述W线程为用于处理所述目标应用的数据的线程,所述用户态协议栈包括多个N线程、路由模块,以及与所述多个N线程一一对应的传输控制协议哈希表,所述N线程为用户态协议栈线程,所述硬件层包括多个非均衡内存访问NUMA节点和网卡,其中,所述多个N线程与所述多个NUMA节点一一对应;所述方法包括:通过所述路由模块获取第一对应关系,所述第一对应关系包括第一W线程的侦听文件描述符FD与多个影子FD之间的对应关系,所述多个影子FD是针对所述多个N线程一对一生成的,所述第一W线程为所述至少一个W线程中的一个;通过所述路由模块获取第二对应关系,所述第二对应关系包括目标N线程与连接FD之间的对应关系,所述目标N线程是所述多个N线程中在建立与客户端的通信连接时被所述网卡选中的一个N线程;通过所述路由模块,基于所述第一对应关系和所述第二对应关系与所述客户端通信。2.根据权利要求1所述的通信方法,其特征在于,所述通过所述路由模块获取第一对应关系,包括:通过所述路由模块接收所述第一W线程发起的侦听操作,并为所述第一W线程生成所述侦听FD;通过所述路由模块向所述多个N线程分别发起侦听操作,以得到所述多个N线程对应的多个影子FD,所述多个影子FD与所述多个N线程一一对应;通过所述路由模块建立所述侦听FD与所述多个影子FD之间的对应关系,以得到所述第一对应关系。3.根据权利要求1或2所述的通信方法,其特征在于,所述网卡中包括至少一个网卡队列,所述通过所述路由模块获取第二对应关系,包括:通过所述路由模块获取所述目标N线程为建立所述通信连接生成的所述连接FD,所述通信连接是基于第一网卡队列接收的所述客户端发送的建链请求建立的,所述第一网卡队列为所述至少一个网卡队列中的一个;通过所述路由模块建立所述目标N线程与所述连接FD的对应关系,以得到所述第二对应关系。4.根据权利要求1
‑
3任一项所述的通信方法,其特征在于,所述通过所述路由模块,基于所述第一对应关系和所述第二对应关系与所述客户端通信,包括:通过所述路由模块,基于所述第一对应关系中所述目标N线程对应的影子FD与所述第一W线程对应的侦听FD之间的对应关系,将与所述目标N线程对应的连接FD传递给所述第一W线程;通过所述路由模块,基于所述连接FD,以及所述第二对应关系与所述客户端通信。5.根据权利要求4所述的通信方法,其特征在于,当所述目标应用对应的W线程有多个时,所述通过所述路由模块,基于所述连接FD,以及所述第二对应关系与所述客户端通信,包括:通过所述路由模块,接收第二W线程发起的等待poll/扩展的等待epoll事件,所述poll/epoll事件中包括所述连接FD,所述连接FD是所述第一W线程传递给所述第二W线程
的,所述第二W线程发起所述poll/epoll事件后转入休眠状态,所述第二W线程为所述目标应用对应的多个W线程中的一个;通过所述路由模块,根据所述第二对应关系确定所述连接FD与所述目标N线程对应,以等待与所述目标线程相关的唤醒事件;在所述第二W线程被唤醒后,通过所述路由模块,根据所述第二对应关系,执行与所述目标N线程相关的读操作或写操作。6.根据权利要求5所述的通信方法,其特征在于,所述方法还包括:通过与所述目标N线程关联的唤醒代理线程唤醒所述第二W线程。7.根据权利要求5或6所述的通信方法,其特征在于,所述根据所述第二对应关系确定所述连接FD与所述目标N线程对应之后,所述方法还包括:在所述目标N线程对应的NUMA节点的内存中为所述连接FD分配接收队列和发送队列,所述接收队列用于记录与读操作相关的数据的内存地址,所述发送队列用于记录与写操作相关的数据的内存地址。8.根据权利要求7所述的通信方法,其特征在于,所述通过所述路由模块,根据所述第二对应关系,执行与所述目标N线程相关的读操作,包括:通过所述路由模块接收所述第二W线程或第三W线程发起的读操作,所述读操作中携带所述连接FD,所述第三线程为所述目标应用对应的多个W线程中的一个,当由所述第三线程发起所述读操作时,所述连接FD是所述第二W线程传递给所述第三W线程的;通过所述路由模块,根据所述连接FD,从与所述连接FD关联的所述接收队列中获取第一数据的内存地址,所述第一数据是与所述目标N线程关联的第一网卡队列从所述客户端接收的数据,所述第一网卡队列是接收所述客户端发送的建链请求的网卡队列;根据所述第一数据的内存地址,获取所述第一数据,并将所述第一数据传递给所述二线程或所述第三W线程进行处理。9.根据权利要求7所述的通信方法,其特征在于,所述通过所述路由模块,根据所述第二对应关系,执行与所述目标N线程相关的写操作,包括:通过所述路由模块接收所述第二W线程或第三W线程发起的写操作,所述写操作中携带所述连接FD和第二数据,所述第三线程为所述目标应用对应的多个W线程中的一个,当由所述第三线程发起所述写操作时,所述连接FD是所述第二W线程传递给所述第三W线程的;通过所述路由模块,根据所述连接FD,将所述第二数据写入与所述目标N线程对应的内存中,并将所述第二数据在所述内存中的内存地址写入与所述连接FD对应的所述发送队列;当所述目标N线程轮询到所述发送队列中的所述第二数据的内存地址时,将所述内存中的所述第二数据发送到所述网卡。10.根据权利要求8或9所述的通信方法,其特征在于,在执行所述读操作或写操作之前,所述方法还包括:将所述第二W线程或所述第三W线程绑定到所述目标N线程所在的NUMA节点中的处理核上。11.根据权利要求7
‑
10任一项所述的通信方法,其特征在于,与所述目标N线程对应的NUMA节点中的内存为大页内存。
12.一种基于用户态协议栈的通信方法,应用于客户端,其特征在于,所述客户端包括应用层、所述用户态协议栈和硬件层,所述应用层的目标应用对应至少一个W线程,所述W线程为用于处理所述目标应用的数据的线程,所述用户态协议栈包括多个N线程、路由模块,以及与所述多个N线程一一对应的传输控制协议哈希表,所述N线程为用户态协议栈线程,所述硬件层包括多个非均衡内存访问NUMA节点,其中,所述多个N线程与所述多个NUMA节点一一对应;所述方法包括:通过路由模块获取目标对应关系,所述目标对应关系包括连接文件描述符FD与目标N线程的对应关系,所述目标N线程是所述路由模块为发起连接操作的第一W线程选择的N线程,所述第一W线程为所述至少一个W线程中的一个,所述目标N线程是所述多个N线程中的一个;通过所述路由模块,基于所述目标对应关系与服务端通信。13.根据权利要求12所述的通信方法,其特征在于,所述通过路由模块获取目标对应关系,包括:通过所述路由模块接收所述第一W线程发起的连接操作,为该连接操作从所述多个N线程中选择目标N线程,并为所述第一W线程生成所述连接FD;通过所述路由模块建立所述目标N线程与所述连接FD的对应关系,以得到所述目标对应关系。14.根据权利要求12所述的通信方法,其特征在于,所述通过所述路由模块,基于所述目标对应关系与服务端通信,包括:通过所述路由模块,根据所述连接FD,确定与所述目标N线程对应的NUMA节点以及网卡队列;通过所述与所述目标N线程对应的NUMA节点以及网卡队列向所述服务端发送建链请求,以及第一数据。15.根据权利要求12
‑
14任一项所述的通信方法,其特征在于,所述根据所述连接FD,确定与所述目标N线程对应的NUMA节点以及网卡队列之后,所述方法还包括:在所述目标N线程对应的NUMA节点的内存中为所述连接FD分配发送队列,所述发送队列用于记录与写操作相关的数据的内存地址。16.根据权利要求15所述的通信方法,其特征在于,所述通过所述与所述目标N线程对应的NUMA节点以及网卡队列向所述服务端发送第一数据,包括:通过所述路由模块接收第二W线程发起的写操作,所述写操作中携带所述连接FD和第一数据,所述第二线程为所述目标应用对应的多个W线程中的一个,当由所述第二线程发起所述写操作时,所述连接FD是所述第一W线程传递给所述第二W线程的;通过所述路由模块,根据所述连接FD,将所述第一数据写入与所述目标N线程对应的内存中,并将所述第一数据在所述内存中的内存地址写入与所述连接FD对应的所述发送队列;当所述目标N线程轮询到所述发送队列中的所述第一数据的内存地址时,将所述内存中的所述第一数据发送到所述网卡。17.根据权利要求16所述的通信方法,其特征在于,在执行所述写操作之前,所述方法还包括:将所述第二W线程绑定到所述目标N线程所在的NUMA节点中的处理核上。
18.一种服务端,其特征在于,所述服务端包括应用层、所述用户态协议栈和硬件层,所述应用层的目标应用对应至少一个W线程,所述W线程为用于处理所述目标应用的数据的线程,所述用户态协议栈包括多个N线程、路由模块,以及与所述多个N线程一一对应的传输控制协议哈希表,所述N线程为用户态协议栈线程,所述硬件层包括多个非均衡内存访问NUMA节点和网卡,其中,所述多个N线程与所述多个NUMA节点一一对应;...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。