首页> 中国专利> 一种基于NFSoRDMA的内核态RPC通信加速方法

一种基于NFSoRDMA的内核态RPC通信加速方法

摘要

本发明公开了一种基于NFSoRDMA的内核RPC通信加速方法,包括如下步骤:(1)在状态机模型的初始状态下建立RDMA连接,并对RPC操作相关的数据结构进行赋值;2)对RDMA帧头、RPC帧头和数据报正文进行封装,获得传输报文,并对所示传输报文进行校验处理;将校验后的传输报文发送到服务器;(3)当接收到用户请求,由服务器对请求的报文进行解封,并将解封获得的报文消息发送到客户端;(4)当客户端接收到服务器发送的报文消息,对RDMA帧头,RPC帧头和数据正文进行解封装处理,获得用户请求的数据;本发明提供的这种用户态与内核态这种特殊的跨态场景下RDMA交互通信的方案,可以应用到分布式系统的内核态与用户态的RDMA交互通信中,具有加速通信的有益效果。

著录项

  • 公开/公告号CN105933325A

    专利类型发明专利

  • 公开/公告日2016-09-07

    原文格式PDF

  • 申请/专利权人 华中科技大学;

    申请/专利号CN201610399042.6

  • 发明设计人 王芳;冯丹;李亮;杨恒;

    申请日2016-06-07

  • 分类号H04L29/06(20060101);

  • 代理机构42201 华中科技大学专利中心;

  • 代理人赵伟

  • 地址 430074 湖北省武汉市洪山区珞喻路1037号

  • 入库时间 2023-06-19 00:26:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-04-12

    授权

    授权

  • 2016-10-05

    实质审查的生效 IPC(主分类):H04L29/06 申请日:20160607

    实质审查的生效

  • 2016-09-07

    公开

    公开

说明书

技术领域

本发明属于计算机网络通信技术领域,更具体地,涉及一种基于NFSoRDMA的内核态RPC通信加速方法。

背景技术

随着网络带宽不断增长,Infiniband高速网络技术的普及,传统的TCP/IP网络架构已很难充分利用网络带宽,需要更高效的通信方式。RDMA(远程直接内存访问,Remote Direct Memory Access)技术采用直接读写远端内存的方式,避免了多次内存拷贝的开销,满足分布式应用中的高速通信的需求。

分布式文件系统中会应用到RDMA,并且其为了保证性能,通常将客户端放在内核态,而服务器可能位于用户态或内核态,由此涉及到内核态与内核态通信以及内核态与用户态通信的RDMA,如何在内核态提供高效可用的RPC over RDMA通信架构成为问题的难点。

现有技术提供了内核态与内核态的RDMA交互通信、用户态与用户态的RDMA交互通信方案,并没有用户态与内核态这种跨态场景下RDMA交互通信的方案。

发明内容

针对现有技术的以上缺陷或改进需求,本发明提供了一种基于NFSoRDMA(Network File System over RDMA)的内核态RPC通信加速方法,由此加快分布式系统中跨态网络通信的速度。

为实现上述目的,按照本发明的一个方面,提供了一种基于NFSoRDMA的内核态RPC通信加速方法,包括如下步骤:

(1)在状态机模型的初始状态下建立RDMA连接,对RPC(Remote Procedure CALL)操作相关的数据结构进行赋值,并向服务端发送消息;待建立连接完成后,进入稳定状态;

本步骤中,对整体数据流的处理基于NFSoRDMA的状态转换逻辑实现,借助状态机,采用标志状态函数,由此保证内核的稳定性和故障易恢复性;

(2)对RDMA帧头、RPC帧头和数据报正文进行封装,获得传输报文;并对传输报文进行校验处理;将校验后的传输报文发送到服务器;

(3)当接收到用户请求,由服务器对请求的报文进行解封,并将解封获得的报文消息发送到客户端;

(4)当客户端接收到服务器发送的报文消息,对RDMA帧头,RPC帧头和数据正文进行解封装处理,获得用户请求的数据。

优选地,上述基于NFSoRDMA的内核态RPC通信加速方法,状态机模型的建立方法具体如下:

(i)上层用户采用上层RPC函数创建RPC传输句柄;

(ii)对RPC传输句柄对应的数据结构赋值,将该数据结构中表征当前所处的稳定状态的状态标志位设定为初始状态值;

(iii)通过稳定状态的状态标志位来标识已完成的操作;

(iv)根据RPC传输过程建立与传输过程对应的函数方法,并在操作完成后改变RPC传输句柄中的状态标志位,由此达到改变状态的目的,形成NFSoRDMA状态机模型。

优选地,上述基于NFSoRDMA的内核态RPC通信加速方法,其步骤(2)对RDMA帧头、RPC帧头和数据报正文进行封装的方法,包括如下步骤:

(2.1)在报文封装前,判断待封装数据的数据量是否小于预设的阈值,若是,则进入步骤(2.2);若否,则进入步骤(2.3);

其中,待封装数据的数据量包括RDMA帧头、RPC帧头和数据报正文 的数据量;

(2.2)将RDMA帧头、RPC帧头和数据报正文进行编码形成传输报文;

(2.3)将RPC帧头和数据报正文存储到预设的缓存区;根据RDMA帧头和该缓存区地址封装形成传输报文;

本方法中,所述阈值根据内存容量可调整,在32KB~32MB之间取值;增大该阈值可使得绝大部分报文处理不必借助缓存区;随着硬件发展、计算机内存增加,长报文传输对内存没有压力;本方法通过牺牲内存来减少内存拷贝次数,达到通信加速的目的。

本方法可通过提高阈值,使得封装处理无需借助额外缓存区,直接将RDMA帧头、RPC帧头和数据报正文封装形成传输报文;而现有技术是必须预留一个用于存储RPC头和数据报正文的缓存区,这种利用缓存区的方法虽然可以减小传输报文的长度,但会增加一次内存拷贝,读写操作涉及的多次块传输聚集起来将会带来较大时间开销。

优选地,上述基于NFSoRDMA的内核态RPC通信加速方法,其步骤(2)对报文校验处理的方法为:对封装好的RDMA帧头进行校验处理,在RDMA帧头的尾部加入一个无关标志项;当发生RDMA头的突发错误时,通过该无关标志项可及时发现错误;

单独针对RDMA头部进行处理以增加RDMA字段的可靠性,区别于现有技术中对传输报文正文的校验,可消除报文正文对RDMA头部的干扰。

优选地,上述基于NFSoRDMA的内核态RPC通信加速方法,其步骤(3)中,当接收到用户读请求,在服务器端通过RDMA_WRITE从服务器的内存区中获取报文;并在向客户端反馈报文的同时通知服务器释放内存;

现有技术中,对于用户读请求,是由客户端通过RDMA_READ从服务器的内存区中远程获取消息报文;获取到报文后,为了让服务器知晓并释放对应的内存,客户端还需要向服务器发送一个RPC通知消息;

对于上层用户读请求,服务器向客户端远程写数据相当于客户端从服 务器远程读取数据,因此本方法利用在服务器调用远程写操作RDMA_WRITE来替换在客户端采用远程读操作RDMA_READ进行用户读请求的处理;当服务器端通过RDMA_WRITE获取报文后,服务器向客户端反馈消息报文时可顺带通知服务器端释放内存,由此减少一次整体的RPC调用,通过减少RPC消息通信次数来实现通信加速。

优选地,上述基于NFSoRDMA的内核态RPC通信加速方法,其步骤(2)中,在RDMA帧头封装过程中,对NFSoRDMA下层传输块对应的数据结构进行扩充,采用堆内存替换内核栈内存,将单次可封装最大页数从8页增大到64页,以增大NFSoRDMA下层传输块值;将最大数据传输单元从32KB扩展为256KB;从而大幅提升传输性能;

随着计算机技术发展,计算机内存充足,网络性能才是通信速度的瓶颈;本方法通过提高增大单次可封装最大页数,增大NFSoRDMA下层传输块值,增大内核RPC块传输预留空间,达到提升NFSoRDMA的网络传输性能的目的。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:

(1)本发明提供的基于NFSoRDMA的内核态RPC通信加速方法,是一种用户态与内核态这种特殊的跨态场景下RDMA交互通信的方案,与传统用户态RDMA库一起构成了一套应用于内核态与用户态交互通信的跨态场景下的RPC over RDMA通信接口;可以应用到分布式系统的内核态与用户态的RDMA交互通信中;

(2)本发明提供的基于NFSoRDMA的内核态RPC通信加速方法,其报文封装过程中,可根据内存容量调整可封装长度,尽可能的使得报文处理不必借助缓存区,通过减少内存拷贝次数,达到加快通信速度的目的;

(3)本发明提供的基于NFSoRDMA的内核态RPC通信加速方法,通过在RDMA帧头的尾部加入一个无关标志项对封装好的RDMA帧头进行 校验;当发生RDMA头的突发错误时,通过该无关标志项可及时发现错误,及时重传;该方法单独针对RDMA头部进行处理以增加RDMA字段的可靠性,区别于现有技术中对传输报文正文的校验,可消除报文正文对RDMA头部的干扰。

附图说明

图1本发明实施例提供的基于NFSoRDMA的内核态RPC通信加速方法的流程图;

图2是实施例中客户端上半程处理的流程图;

图3是实施例中客户端编码形成RPC数据报内容的流程图;

图4是本实施例中客户端解码形成RPC消息的流程图;

图5是实施例中客户端下半程处理的流程图;

图6是实施例中内核RPC编码流程的内存拷贝优化过程的示意图;

图7是实施例中内核RPC消息返回的通信次数优化过程的示意图;

图8是实施例中内核RPC的块传输预留空间优化过程的示意图;

图9是实施例中内核RPC读写链表的可靠性优化过程的示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

本发明实施例提供的基于NFSoRDMA的内核态RPC通信加速方法的流程图如图1所示,客户端RPC流程包括客户端上半程处理、客户端编码、客户端解码、客户端下半程处理;下面结合附图和实施例对其流程进行详细说明:

图2所示是实施例中客户端上半程处理的流程示意图,包括以下步骤:

(1)通过初始化处理,使得客户端由初始状态进入传输状态;

(2)对RDMA头部唯一标识号、版本号、安全认证号和消息类型进行封装;

(3)判断消息类型是否为不需要拷贝整段RPC报文的MSG(Message)方式,若是,则进入步骤(4),若否,则进入步骤(5);

(4)将块链表初始化,对数据报正文进行编码,将编码获得的报文存入传输数据缓存中;并对RPC帧头的数据进行初始化处理,将处理后的RPC帧头与数据报正文一起编码形成传输报文,进入步骤(6);

(5)对RPC帧头数据与数据报正文进行初始化处理,并创建一个缓存区,将初始化后的数据存储到该缓存区中;对块链表进行初始化处理,使块链表指向该存放RPC内容的缓存区,进入步骤(6);

(6)通过RDMA_SEND发送传输报文。

图3所示,是实施例中客户端编码形成RPC数据报的流程示意图,具体包括如下步骤:

(1)对于大块的超过阈值的数据,通过RDMA原语进行读写以加快传输效率;实施例中,阈值设为1024字节;

其中,RDMA原语是指RDMA_READ和RDMA_WRITE,根据上层读写请求的类型确定;

(2)当采用RDMA读原语读取客户端数据时,将数据的地址、句柄和偏移量信息编码形成读链表;

(3)客户端编码RPC数据内容时,当需要服务器端调用RDMA_READ读取客户端数据,则由服务器端直接通过读链表中的属性信息远程读取客户端的大块数据;若客户端有需要服务器远程写的大块数据,则将该数据属性信息写入写链表中;

(4)若数据不满足RDMA原语的调用要求,则直接将其封装形成传输报文;

其中,RDMA原语的调用要求是指是否为超过阈值的大块数据。

解码RPC数据报正文时,根据链表中的变量值进行处理;图4是本实施例中RPC解码数据报正文的流程示意图,具体如下:

(1)当读链表存在RDMA项时,则根据其中的句柄、地址、偏移值信息直接调用RDMA_READ原语操作从远端服务器内存中读取数据;

当客户端获取到数据后,向服务器发送内存释放通知,以便于服务器释放客户端RDMA_READ读取的内存;

其中,读链表存在RDMA项表明需要传输超过阈值的RDMA大块;其中,链表包括管理远程读操作的读链表和管理远程写操作的写链表;

(2)当写链表存在RDMA项时,根据链表中的参数值向远程服务器端预先创建的内存直接写数据;

采用写链表减少了一次RPC消息传递;对于服务器上层读请求,用服务器端的RDMA_WRITE来代替客户端RDMA_READ的方式,可优化RPC消息发送流程。

图5是实施例中客户端下半程处理的流程示意图,包括如下步骤:

(1)通过持续的独立线程不断轮询RDMA消息接收队列,以检测是否有新的RPC消息到达;

(2)当收到RPC消息请求后,对RDMA头、块链表和RPC头进行解析处理;

(3)唤醒解码线程,进入解码状态,并对RPC正文数据报进行解析;解析完成后,结束客户端RPC调用。

图6为实施例中内核RPC编码流程的内存拷贝优化的示意图;MSG和NOMSG(No Message)两种方式都需要对RDMA头、块链表、RPC帧头和RPC数据报正文封装;采用MSG流程是直接对报文组成部分按序封装;采用NOMSG流程封装RPC头和数据报正文时需要将其拷贝至一个额外的缓存区,以防止传输报文的报文内容过长。

图7为实施例中内核RPC消息返回的通信次数优化的示意图,具体如下:

(1)用户在进行读操作时,在客户端调用RDMA_READ从服务器预先准备好的内存区中远程读取数据;

(2)客户端远程读取数据完毕后,向服务器发送RPC通知消息,使得服务器知晓并释放对应的内存;

可通过在服务器端执行RDMA_WRITE进行内存释放;服务器端执行RDMA_WRITE后,服务器在向客户端返回消息报文时同时通知服务器端释放内存,由此减少了一次整体的RPC调用,可有效提升整体通信性能。

图8为实施例中内核RPC的块传输预留空间优化的示意图,具体如下:

(1)基于NFSoRDMA的内核RPC在封装数据时,对应数据结构xdr_buf,包含send_buf和recv_buf,其预留的数据部分以页为单位,单次最大封装数为8个页,对应32KB的最大数据传输单元;

(2)采用堆内存替换原有的内核栈内存,以增大NFSoRDMA下层传输块值,将页数从8增大到64,将默认的最大数据传输单元32KB扩展为256KB;将单次可封装最大页数设置为64时,可极大的提升数据传输性能,且内存开销较小;通过增大预留的最大数据传输页提升NFSoRDMA的网络传输性能。

图9所示为实施例中内核RPC读写链表的可靠性优化的示意图,该图示意了块链表的构成;如该图所示的,在封装RDMA头、RPC头和数据报正文时,在RDMA头的尾部加入一个无关标志项来校验RDMA头;通过标志和特殊长度参数进行双重校验,实施例中,将特殊长度参数设定为43799这个无特征值。

在封装RDMA头、RPC头和数据报正文时,现有技术是对整体报文校验,由于数据报正文干扰,很难直接评估RDMA头的突发错误;虽然RPC整个块传输结构中也含有尾部,但该尾部针对的是整体数据报文,块链表 则是关乎RDMA原语调用的关键参数的封装头部。

本发明提供的这种在RDMA头的尾部加入无关标志项的方法,可以及时发现错误并进行重传,提高数据通信的可靠性,以防止网络数据丢失或突发错误。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号