一种基于纠删码的RDMA网络数据传输方法与流程

文档序号:15624454发布日期:2018-10-09 22:38阅读:448来源:国知局

本发明属于网络技术领域,具体涉及一种基于纠删码的rdma网络数据传输方法。



背景技术:

面对云计算、大数据、人工智能计算等高并发低延时的应用,传统的tcp/ip软硬件架构无法满足需求。因为tcp/ip软硬件架构的多次内存拷贝、中断处理,上下文切换、复杂的tcp/ip协议处理、存储转发模式和丢包导致了过高的传输时延和额外的cpu计算开销。

远程直接数据存取(remotedirectmemoryaccess,rdma)作为tcp/ip的一个互补技术,提供直接访问远程机器上的虚拟内存的消息服务。由于rdma网卡可以直接拷贝数据,所以可以绕开复杂的网络协议栈,并且最小化操作系统的参与。这种设计实现了数据传输的延迟、高吞吐、并降低了cpu的开销。

现代的数据中心通常由成百上千的服务器组成,内部需要tb级别的双向带宽来发送数据。为了满足这样的网络需求并降低开销,大多数的数据中心采用clos拓扑结构的网络(通常三层甚至更多),水平地扩展网络容量。这些网络使用交换机来替换具有大量网路端口的路由器。图1是一个典型的clos结构的数据中心网络的拓扑。

数据中心服务器运行着大量的云服务。这些服务产生了多种多样的流量模式。这些不同的数据流对网络性能有不同的要求,其中大流传输的数据量大,对带宽要求高;小流传输的数据量小但一般都携带有控制信息,对传输延时要求较高。大流和小流在网络中混合传输的时候,小流可能因为调度到大流之后传输而产生很高的延时。如果采用细粒度的传输,将大流切分成固定大小的小流进行传输,可以避免上述问题,而且大流切分以后还可以通过数据中心中rdma网络的多路径并行传输,从而降低数据的传输时延。但是与此同时,这也带来了问题:一个数据流的完成时间由最后到达的数据块决定,会产生长尾效应;而且接收方需要实现一个复杂的排序算法来重排出原始数据。



技术实现要素:

发明目的:基于现有技术的不足,本发明提出一种基于纠删码的rdma网络数据传输方法,通过细粒度传输和多路径并行传输降低传输时延,并利用纠删码消除网络传输的长尾效应和简化接收端的重排序操作,同时利用rdma网卡的纠删码硬件卸载计算纠删码,降低cpu计算开销。

技术方案:本发明所述的一种基于纠删码的rdma网络数据传输方法,包括以下步骤:

s1、发送端获取应用的数据,将数据切分成固定大小的数据帧,再将每一帧数据切分为k个大小相同的数据块,然后发送给接收端;

s2、若在指定时间阈值内还有数据块没有到达接收端,则发送端对这k个数据块编码生成m个校验块,将校验块发送给接收端;

s3、接收端接收到这k+m个数据块中的任意k个时,恢复出一帧数据,当接收端收到所有的数据帧时,就完成了一次数据传输。

进一步地,所述步骤s1包括:发送端将应用内存中的数据按照帧大小逐个拷贝到缓冲区中,并为这一帧数据分配一个帧号,每发送一帧数据帧号都会加一。将一帧数据切分为k个数据块,每一个数据块的大小为block_size个字节。然后用k个qp并行地将这些数据块发送给接收端。然后将这个数据帧加入到定时器的事件序列中。

所述步骤s2包括:发送端为每一帧数据设置一个定时器,超时后对数据帧计算纠删码,将校验块发送给接收端。定时器模块检查每一个发送的数据帧是否超时,如果超时后k个数据中还有没成功到达接收端,则可能出现了延迟,这时通过纠删码模块对这一帧数据进行编码,生成m个校验块,然后调用数据传输模块用另外m个qp将它发送给接收端。

所述步骤s3包括:接收端接收到数据块后解码出数据帧。接收端收到一个数据块以后,通过rdma的writewithimmediate操作的立即数识别出它属于哪个数据帧,根据接收的数据块的qp获知是这个数据帧中的哪一个数据块或者校验块,当收集到一个数据帧的数据块加校验块的总数达到k个的时候,通过纠删码的解码得到这一帧数据的原始内容,最后将这一帧数据添加到已接收数据的队列中,等待应用程序读取。

进一步地,接收端将接收到的所有数据帧排序成原始数据,完成接收。接收端按照帧号逐个读取已经接收到的数据帧,接收端用一个变量read_pos记录接下来要读取的数据帧的帧号,读取数据分为阻塞式和非阻塞式,在阻塞式下应用程序一直等待直到已接收的数据队列中出现帧号为read_pos的数据帧,在非阻塞模式下,如果在已接收的数据队列中没有帧号为read_pos的数据帧就直接返回,应用程序从系统的接收缓冲区读取完一帧数据以后,将read_pos加一,然后读取下一帧数据,直到用户的缓冲区满或者遇到一个数据传输的最后一帧数据。

有益效果:相比于现有技术,本发明具有以下优点:

1、本发明使用纠删码将数据切分为大小相同的数据帧,再将每一帧数据切分为k个大小相同的数据块,将数据块发送给接收端,对这k个数据块计算纠删码,生成m个校验块,再将k个数据块发送给接收端。接收端只需要接收这k+m个块中的k个就可以恢复出数据,而不需要等待所有的数据块,通过数据冗余降低传输延迟。

2、为了降低编码的cpu计算开销,本发明使用rdma网卡的纠删码硬件卸载功能,使用硬件计算纠删码,在使用纠删码的时候不增加cpu的计算开销。

3、本发明使用系统码编码方案,系统码中包含有原始数据信息,当k个数据块都先于校验块到达接收端的时候,可以直接得到原始数据,不需要解码计算,降低解码开销。

4、本发明系统使用延迟编码的策略,网络中数据的延迟和丢失相对是较少发生的,通过设定一个时间阈值,只有当在超时过后还有数据块没有成功到达接收端的时候,再计算校验块并发送,进一步降低编码开销。

5、本发明提出了一种基于纠删码的重新排序的算法。在发送端将数据分片,然后计算纠删码,将数据块和校验块通过多路径并行传输的时候,因为不会出现数据丢失或无限期等待的情况,所以接收端可以利用这个特点简化重新排序的算法。

附图说明

图1是使用clos架构的数据中心的网络拓扑图;

图2是根据本发明实施例的传输系统结构图;

图3是根据本发明实施例的网络传输的数据帧结构图;

图4是rdma纠删码计算硬件卸载的异步模型示意图。

具体实施方式

下面结合附图对本发明的技术方案作进一步说明。

图1是一个典型的clos结构的数据中心网络的拓扑。机架上的交换机(tor)通过d0个10g的链路连接机架(rack)上的服务器,然后通过d1个40g的链路连接到聚合交换机(agg)上。每一个聚合交换机连接d2个机架上的交换机(tor)和d3个主交换机(spine)。所以,同一汇聚区域(pod)内的主机之间有d1条同样的路径,跨越主交换机的不同的区域之间有d1*d3条同样的路径。比如,当d1=d3=8的时候,这样的路径有64条。充分利用这些平行的路径,将数据流切分为细粒度的数据块进行并行传输,能够有效地加速节点间的数据传输,降低数据传输的网络时延。

本发明的数据传输方法主要包括以下步骤:(1)发送端获取应用的数据,将数据切分成固定大小的数据帧,再将每一帧数据切分为k个大小相同的数据块,然后发送给接收端;(2)若在指定时间阈值内还有数据块没有到达接收端,则发送端对这k个数据块编码生成m个校验块,将校验块发送给接收端;(3)接收端接收到这k+m块中的任意k个就可以恢复出一帧数据,当收到所有的数据帧就完成了一次数据传输。

在一个实施例中,数据传输系统结构如图2所示。所述系统是一个主机侧的解决方案,并且是一个位于用户层的数据传输中间件,因此它是独立于传输层并且对主机侧的网络栈透明。在发送端,应用给出要发送的数据的内存地址和长度,接收端的网络地址,系统会截获应用的数据,将其拷贝到系统管理的缓冲区中,然后将其切分为固定大小(例如64kb)的数据块并对数据块进行编码。最后将数据块和校验块发送给接收端,由接收端负责解码并提交给接收端的应用。在接收端,系统接收数据块,同时解码出原始数据,重新排序后按照原始顺序将原始的数据块拷贝到应用的内存区中。因为每一帧数据可以通过解码得到,所以帧内部的数据块不需要排序,因为每一帧的完成时间被控制在一个阈值内,所以只需简单地按序号等待数据到达即可,也不需要特别的排序。系统包含五个个主要的模块:缓冲区、数据传输模块、纠删码模块、定时器模块、事件处理模块。它们的功能分别是:

(1)缓冲区包含发送缓冲区和接收缓冲区,用来暂存待发送的数据和接收到的数据。之所以要用缓冲区是因为计算纠删码的时候需要一个临时的内存区域,而且数据的传输需要缓冲区来做同步。发送数据的时候,先将数据按固定大小的帧拷贝到缓冲区,然后发送给接收端,如果出现延迟,则对数据进行编码,然后将校验块发送给接收端。接收端接收到足够的数据后就会解码出一帧数据,等待应用程序读取。双方需要同步发送时写入的位置,因为不能覆盖接收端还没有读取的数据。

(2)数据传输摸块负责数据的收发。数据发送过程:从应用处获得待发送的数据,从头开始每次拷贝一帧数据(一帧数据等于数据块的大小乘以编码时数据块的数目)到系统的缓冲区中。然后将这一帧数据切分为k个数据块,再用rdma的write操作将切分后的数据块通过不同的qp(queuepairs)写到接收端的缓存中,最后将这一帧的信息交给定时器模块,等待编码。重复这一过程直到所有的数据发送完成。数据接收过程:将已经接收到足够数据块的帧的数据解码出来,然后复制到应用的内存中,当应用缓冲区满或者到达一个数据的尾部的时候就返回。

(3)纠删码模块负责调用网卡的纠删码硬件卸载来编码或者根据已经接收到的数据块解码出原始数据。

(4)定时器模块统计每一帧数据中已经发送的数据块的到达信息,从这些数据块发送时开始计算,当超过设定的时间阈值时,定时器会调用编解码模块对数据进行编码,然后将编码得到的校验块发送给接收端。

(5)事件处理模块主要处理两类事件:一是数据发送成功的事件,二是接收到新数据的事件。当收到一个数据发送成功的事件的时候,事件处理模块会更新定时器保存的每一帧中数据块成功的统计信息,定时器模块会根据此信息决定是否要进行编码,然后让数据传输模块将校验块发送给接收端。当收到接收新数据的事件的时候,如果是一个数据帧中的第一个数据块/校验块,就会创建一个新的解码上下文,否则会更新对应数据帧的解码上下文信息。当收到足够的数据块/校验块的时候,就通知数据传输模块这一帧数据已经接收成功。

本发明传输数据是按数据帧为组,按数据帧中的数据块为单位传输的,数据帧的结构如图3所示。每一个连接由k+m个虚拟连接组成(即qp),由上述可知每一帧数据有k个数据块和m个校验块,一共由k+m个块。每一个数据帧的第i个块通过第i个qp发送到接收端内存中对应帧的第i块的位置上,这样就不用对数据块进行标号,可以直接从接收的qp判断出数据是哪一个块。因为编码的时候对于大小不满一帧的数据需要补零,所以一帧中不一定都是有效数据,所以每一帧的开头用一32bit的数据的低24位保存这一帧中保存的有效数据的大小,它的取值范围是0~(block_size*k-4),高8位用来保存帧的类型(帧在一个原始数据中的位置),它可以取值为:

(1)full:这一帧就是一个完整的数据;

(2)begin:这是一个数据的第一帧;

(3)mid:这是位于一个数据中间的帧;

(4)end:这是一个数据结尾的帧。

本发明使用rdma网卡的纠删码计算的硬件卸载功能来降低纠删码计算的开销。纠删码计算硬件卸载的编码模型如图4所示。使用的是reed-solomon(rs)编码。rs编码是基于有限域的一种编码算法,在rs编码中使用gf(2w),其中2w>=k+m(其中w为码元的长度,k为数据块的个数,m为校验块的个数)。rs编码以码元为编码和解码单位,大的数据块拆分到字长为w(取值一般为8或者16位)的码元,然后对码元进行编解码。因为数据延迟和数据丢失相对来说是较少发生的,在所有的数据块都正常到达的情况下,希望不需要解码。本发明使用一种被称为系统码的编码方式,经过编码后,数据块中包含有原始数据信息。在这种编码下,数据帧被切分为k数据块,通过编码产生m个校验块。这k个校验块有着和原始数据一样的内容,当它们到达接收端的时候,可以不经过解码操作直接将数据提交给上层应用。当出现数据包丢失或者网络延迟的时候,可以利用校验块来解码恢复出数据。本发明选用的网卡纠删码硬件卸载模型是异步计算模型,这种模型的效率更高,因为在网卡计算纠删码的时候,进程不用等待计算完成,而是可以去计算或者执行其他的任务,它的工作流程是:

(1)调用encod_async(data,code,......)接口,data是数据块,code是校验块;

(2)将数据块发送给接收端,不需要等待编码完成;

(3)异步等待编码完成,这期间cpu可以处理其他任务;

(4)编码完成,将校验块发送给接收端节点。

rdma网卡计算纠删码的时候需要外界提供编码矩阵和解码矩阵,这需要由第三方的纠删码计算库来提供。jerasure是一个支持跨平台的开软纠删码计算工具库,支持范德蒙德矩阵的rs编码和cauchyrs编码。本发明使用jerasure来计算编解码的矩阵。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1