技术领域
[0001] 本发明涉及数据传输技术领域,尤其涉及一种基于驱动中间件的RDMA网络数据处理方法及系统。
相关背景技术
[0002] RDMA(Remote Direct Memory Access)技术全称远程直接数据存取,是为了解决网络传输中服务器端数据处理的延迟而产生的。RDMA将数据从一个系统的内存中快速移动到远程系统存储器中,无需通信双方的操作系统介入。与TCP/IP不同,它通过内存注册机制使得网卡能够直接读取用户态内存数据,并将网络协议转卸载到网卡硬件上,从而消除了数据包在用户空间和内核空间的复制移动和上下文切换的开销,极大的降低了CPU开销。这允许高吞吐且低时延的网络通信,尤其是适用于大规模并行计算机集群。
[0003] RDMA最初通过Infiniband(IB)专用网络硬件构建无损数据中心网络,为HPC(High Performance Compute,高性能计算)集群提供了高性能网络。然而当前数据中心网络设备多为以太网设备,并且是有损网络,有丢包的发生。第二代融合以太网RDMA的出现让以太网集群能够应用RDMA技术,通过将RDMA传输层包封装在UDP(User Datagram Protocol,用户数据报协议)传输层下面来实现,并且依靠PFC(Priority‑based Flow Control,基于优先级的流量控制)来提供无损支持。RDMA支持的三种基础传输类型是RC(Reliable Connection),UC(Unreliable Connection),UD(Unreliable Datagram),面向连接的传输类型需要通信双方都建立一对QP(Queue Pair,队列对)来通信。
[0004] 因此,当网络规模较大时,需要构建的QP数量较为庞大,限制了网络规模的扩展。
具体实施方式
[0039] 为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
[0040] 在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
[0041] 现有技术中随着RoCEv2(RDMAover Converged Ethernet v2)技术的成熟,RDMA可以部署在数据中心已有的网络设施上,RDMA成为数据中心高速网络通信的主流方案。随着数据中心网络规模的不断扩大,一个存储或计算集群内存在上万台服务器以及配套网卡。对于分布式存储集群,由于单机存储介质空间有限,分布式互联的RDMA网络规模巨大。对于分布式机器学习集群,由于单张GPU的显存空间以及计算能力的限制,基于数据并行,流水线并行,张量并行的分布式的训练和推理任务成为当下主流。然而,随着存储集群和AI训推要求的集群规模不断扩大,会带来一系列性能问题限制训练集群或者存储集群的可拓展性。限制可拓展性主要的原因如下:
[0042] 1.由于RDMA无损网络的要求,RoCEv2组网时会选择开启PFC(Priority‑based Flow Control,基于优先级的流量控制)来防止丢包。但是PFC通过网络链路逐跳的反压来进行流控,会带来PFC队头阻塞、PFC死锁、PFC风暴等副作用。随着HPC(High Performance Compute,高性能计算)、GPU等RDMA业务集群越来越大,PFC的副作用越发显著,导致业务性能下降,阻碍着RDMA跨POD大规模组网。
[0043] 2.大规模分布式业务的可拓展性限制主要表现在连接拓展的限制,具体表现为:随着端侧网卡的连接数(或QP数量)的上升,RDMA性能会出现性能骤降的现象,性能骤降的根本原因是,大量QP连接数占据了巨大的网卡片上存储,导致缓存溢出,因此网卡需要重新通过PCIE去读取丢失的缓存数据。这一行为使得传输吞吐直线降低,同时导致FCT的增加。
大规模的分布式业务中通常采用RC QP来通信,每一对进程之间均需要一对QP,在N台服务器,每台服务器M个进程的full‑mesh的全连接通信中,一张网卡就要负担O(M*M*N)的QP数量,随着分布式集群规模的不断扩大,更多的机器数量势必会导致连接拓展性问题更加严峻。
[0044] 3.与RC QP连接类型相对应的时UD QP连接类型,UD连接具有以下特点:UD是基于数据报的通信方式,可以使用一个连接与其他多个节点进行通信,具备了连接拓展的优势,可以将网卡的QP连接数量从O(M*M*N)降低到O(M)。然而UD并不具备RC的可靠性保障,在数据包丢失后无法重传丢失的数据。除此之外,UD连接的单次下发传送的消息大小被限制为不能超过MTU,而RC连接下的单次下发的消息大小可以最高达到2GB。
[0045] 当前数据中心RDMA网络现状为:商用RDMA网卡的重传方式实现为回退N的丢包恢复机制,RoCEV2网络通过PFC保证网络无丢包。业务使用RC连接来保证传输的可靠性。当前网络配置下的可拓展性收到限制,为此,业界提出了诸多解决方案概括如下表一所示:
[0046] 表一
[0047]
[0048] 硬件方案:现有技术分析了RDMA概念模型中涉及的所有数据结构,并通过RDMA协议头修改和架构创新(包括无缓存QP调度程序和无内存选择性重复)尽可能多地删除它们。我们使用FPGA实现了一个全功能的SRNIC原型,可以支持10K连接的高性能传输。现有技术通过向另一端传输连接状态来解决RDMA的可扩展性问题。利用数据中心应用程序中的非对称通信模式,现有技术允许具有低并发性的通信端为具有高并发性的另一端保存状态,从而使瓶颈端的RNIC处于无状态模式。在带有10Gbps网络端口的FPGA板上实现在高并发下提升了吞吐量。
[0049] 软件方案:现有技术使用了共享连接的方式来缓解连接拓展性受限的问题。它使用了的是节点内线程之间的QP复用,再通过接收线程分发到目标线程。并通过无锁队列避免了争用,大大降低了存储业务集群中的QP数量。XRC是IB的规范用于增强可拓展性的新传输类型。在多核多进程的FULL MESH通信中将O(N*P*P)的连接数降低到了O(N*P),对于进程数多的应用来说是极大的改善。
[0050] 软硬件结合方案:现有技术通过网卡实现了RD协议栈来克服连接拓展问题,并将乱序重组上移到软件中间件来协同,该方案已经在数据中心RDMA网络中部署。
[0051] 现有技术的缺点,硬件方案从网卡架构上同时解决了网络可拓展问题和连接可拓展问题,但是这种基于硬件FPGA的形式难以简单的增量部署。摒弃现有商用网卡架构提出的新的硬件方案均存在上述难以部署的问题。从软件方案的角度来看,QP进程间共享能够缓解该问题,但是带来了对头阻塞和锁争用的问题,并且该方式还是没有做到解耦机器数量,没有从根源解决拓展性问题,并且上述软件解决方案均需要上层应用作适配修改,无法做到透明部署。软硬件结合方案从协议栈的角度出发,采用数据报协议,并且设计了自研的网卡通过软硬件结合的方式部署在了私有网络中,解决了可拓展性问题,无法做到异构数据中心的通用性。
[0052] 如图1所示,本发明提出一种基于驱动中间件的RDMA网络数据处理方法,本方法应用于网卡驱动,该方法包括以下步骤:
[0053] 在具体实施过程中,本发明的实现技术切入点为端侧,应用于网卡驱动,是一个纯端侧的方案,没有网侧的设计。本发明的框架主要分为两个大模块,分别为:队列管理切换模块与选择重传模块。
[0054] 在队列管理切换模块中,步骤S100,获取应用创建的RC类型连接的请求,基于RC类型连接的请求构建UD类型连接的请求;
[0055] 在本发明的一些实施方式中,RC类型连接为Reliable Connection,即可靠连接;UD类型连接为Unreliable Datagram。
[0056] 在具体实施过程中,数据报通信(UD)仅需要建立一个QP完成一对多的通信。所有传输都支持SEND/RECV。RC和UC支持写,但只有RC支持读。在RC中,RNIC负责丢失后的重传。相反,UC和UD中的RNIC会忽略数据包的丢失。
[0057] 步骤S200,获取应用下发的RC类型的WQE,将多个WQE组合为一个数据包,基于预设的第一长度阈值将数据包中的WQE分为大消息和普通消息,并将RC类型的大消息切分为多个MTU(Maximum Transmission Unit,最大传输单元)粒度的小消息;
[0058] 在具体实施过程中,若WQE的数据长度大于第一长度阈值则判定为大消息,若不大于,则判定为普通消息。
[0059] 在具体实施过程中,第一长度阈值可以为MTU的长度值。
[0060] 在具体实施过程中,本方案采用构造器构建数据包;
[0061] 具体的,设计构造器的作用为,将同一进程不同线程上的WQE通过一个单向链表(list)的形式连接起来,一次性送入切分器和调度器进行处理,构造的链表长度由网卡生成的CQE数量决定。
[0062] 具体构造逻辑为:
[0063] 1.当上一轮构造器停止构造后并进入切分器和调度器处理时,开始新一轮的构造;
[0064] 2.构造期间,所有该进程内来自不同线程的WQE按照先后到来的顺序存储在链表中。在时间线下,WQE链表不断增长。
[0065] 3.假设上一轮WQE链表经过切分后共生成了M个MTU的小消息,我们称这M个小消息为一个batch,网卡按序处理发送小消息,每一个发送完毕的小消息都会生成一个CQE。当该batch下生成了N个CQE时,通知构造器停止构造,将该轮WQE链表送入切分器和调度器进行处理。
[0066] 在具体实施过程中,采用切分器将大消息切分为多个MTU(Maximum Transmission Unit,最大传输单元)粒度的小消息。
[0067] 步骤S300,基于大消息的数据长度计算大消息的权重判定大消息属于短流队列或者长流队列,将属于短流队列的大消息和普通消息进行组合构建为短流队列;将属于长流队列的大消息构建为长流队列;
[0068] 步骤S400,将短流队列和长流队列组合为发送队列,将发送队列中的普通消息或小消息传递给已经处于RTS状态的UD类型的连接,为各个普通消息或小消息按顺序添加编号和标识字段,向目的端发送;
[0069] 在具体实施过程中,采用调度器完成步骤S400。
[0070] 在选择重传模块中,步骤S500,获取目的端的反馈信息,基于所述反馈信息确定是否需要进行数据重传,若需要数据重传则将对应的普通消息或小消息进行数据重传。
[0071] 采用上述方案,本方案应用于网卡驱动程序,并对网卡驱动程序进行调整,并基于RC类型连接的请求构建UD类型连接的请求,UD类型连接与RC类型连接不同,对于RC类型连接需要通信双方都建立一对QP(Queue Pair,队列对)来通信,而对于UD类型连接,只需要在每端构建一个一对多的QP,不需要构建庞大的QP,保证了网络规模扩展的稳定性。
[0072] 在本发明的一些实施方式中,在基于RC类型连接的请求构建UD类型连接的请求的步骤之后,还包括步骤,将RC连接类型的建联信息转换为UD连接类型需要的建联信息,将UD连接的状态机从初始换状态转换到RTS状态。
[0073] 在本发明的一些实施方式中,在将RC类型的大消息切分为多个MTU粒度的小消息的步骤中,将所述大消息进行缓存,并记录每个小消息在大消息中的位置。
[0074] 在本发明的一些实施方式中,基于大消息的数据长度计算大消息的权重判定大消息属于短流队列或者长流队列,将属于短流队列的大消息和普通消息进行组合构建为短流队列;将属于长流队列的大消息构建为长流队列的步骤还包括:
[0075] 如图2所示,步骤S310,对于大消息,基于数据包中最大的权重和大消息的权重计算第一判定值,将第一判定值与第一阈值进行比较,基于数据包中最小的普通消息的长度和大消息的长度计算第二判定值,将第二判定值与第二阈值进行比较;
[0076] 在具体实施过程中,采用计算大消息的权重的方式计算全部的数据包中全部的大消息或者普通消息的权重,数据包中最大的权重即为全部权重中的最大值,数据包中最小的普通消息的长度为数据包中数据长度最小的普通消息的数据长度。
[0077] 步骤S320,若对于一个大消息,第一判定值大于第一阈值,且第二判定值小于或等于第二阈值,则判定该大消息属于短流队列,且采用SJF算法对该大消息与普通消息进行计算,完成重排序;
[0078] 在具体实施过程中,所述SJF算法为最短完成时间算法。
[0079] 在具体实施过程中,在采用SJF算法对该大消息与普通消息进行计算,完成重排序的步骤中,目标是保证短流队列中的所有WQE的完成时间最短。
[0080] 开始时间从该WQE进入构造器时间计时,记为T0。下标i为每一次经过重新排序后的WQE序列。rate表示网卡的发送速率、上一个WQE的硬件完成时间、第0个的完成时间、Tdoorbell数据包进入调度器的时间、第i个wqe进入构造器的时间、
[0081] ΔTi=sizei/rate+ΔTi‑1;
[0082]
[0083] 其中,ΔTi表示第i个WQE的软件完成时间,ΔTi‑1表示第i‑1个WQE的软件完成时间,sizei表示第i个WQE的数据长度,rate表示网卡的发送速率, 表示第i个WQE的硬件完成时间, 表示第i个WQE进入构造器的时间,Tdoorbell表示数据包进入调度器的时间。
[0084] 根据上述公式计算得到SJF算法的输入,使用SJF算法重新排列WQE,求满足target的最优解,得到排序完成的短流队列。
[0085] 步骤S330,若对于一个大消息,第一判定值大于第一阈值,且第二判定值大于第二阈值,则判定该大消息属于短流队列,并置于重排序的大消息和普通消息之后;
[0086] 步骤S340,若对于一个大消息,第一判定值小于或等于第一阈值,则判定该大消息属于长流队列,并采用基于权重的轮询算法对长流队列中的大消息进行重排序。
[0087] 在具体实施过程中,基于权重的轮询算法为Weight Round Robin算法。
[0088] 采用上述方案,本方案首先通过上述方式,本方案基于权重和数据长度进行综合判定,根据综合判定结果将数据包中的大消息或者普通消息置于长流队列或短流队列中,保证后续数据传输的传输效率。
[0089] 在本发明的一些实施方式中,在基于大消息的数据长度计算大消息的权重判定大消息属于短流队列或者长流队列的步骤中,基于如下公式计算大消息的权重:
[0090] W=L+LMTU‑1/LMTU;
[0091] 其中,W表示权重,L表示大消息的长度,LMTU表示单位MTU的长度。
[0092] 在本发明的一些实施方式中,在基于数据包中最大的权重和大消息的权重计算第一判定值的步骤中,计算数据包中最大的权重与大消息的权重的比值,作为第一判定值;在基于数据包中最小的普通消息的长度和大消息的长度计算第二判定值的步骤中,计算大消息的长度与数据包中最小的普通消息的长度的比值,作为第二判定值。
[0093] 在本发明的一些实施方式中,在将短流队列和长流队列组合为发送队列的步骤中,将短流队列置于长流队列前,构建为发送队列。
[0094] 采用上述方案,在发送队列中本方案将短流队列置于长流队列之前,短流队列中的WQE往往发送速度较快,因此在发送队列中优先处理,保证处理效率。
[0095] 在本发明的一些实施方式中,所述反馈信息中包括小消息的确认接收信息,在获取目的端的反馈信息,基于所述反馈信息确定是否需要进行数据重传的步骤中,若在预设的时间段内收到普通消息或小消息的确认接收信息,则确定对应的普通消息或小消息接收成功。
[0096] 在本发明的一些实施方式中,在获取目的端的反馈信息,基于所述反馈信息确定是否需要进行数据重传的步骤中,若在预设的时间段内未收到普通消息或小消息的确认接收信息,则将对应的普通消息或小消息进行数据重传。
[0097] 在本发明的一些实施方式中,在将对应的普通消息或小消息进行数据重传的步骤中,若重传小消息,获取对应小消息的编号,基于小消息的编号确定该小消息在大消息中的位置,基于小消息在大消息中的位置从所述大消息中截取对应的小消息,将该小消息向目的端发送。
[0098] 采用上述方案,本方案能够将大消息进行整体保存,保证其完整性,防止由于切分导致的数据失真,且在数据重传过程中,从原有的大消息中进行重新切分,一方面便于对大消息的保存,另一方面,保证重传消息的精准度。
[0099] 如图3所示,在本发明的一些实施方式中,在为各个普通消息或小消息按顺序添加编号和标识字段,向目的端发送的步骤中,将预设的标识字段插入有效载荷之前。
[0100] 在本发明的一些实施方式中,将所述大消息划分为多个处理分段,在获取目的端的反馈信息的步骤中,从前往后遍历所述处理分段,若处理分段中的小消息均接收完成,则将从缓存的大消息中删除对应的处理分段,并记录删除的处理分段的长度。
[0101] 采用上述方案,本方案将大消息进行分段,当前序的分段接收完成后,能够优先将前序的分段数据删除,并记录删除的数据长度,一方面能够高效利用缓存区域,另一方面能够通过记录删除数据的长度保证后续数据处理的精准性,避免删除数据造成的误差。
[0102] 在本发明的一些实施方式中,在获取目的端的反馈信息的步骤中,当缓存的大消息中最后一个处理分段中的全部小消息接收完成后,将最后一个处理分段删除,并删除记录的每个处理分段的长度。
[0103] 在具体实施过程中,在队列管理切换模块的处理步骤中:
[0104] 1.上层应用通过Libfabric、UCX和NCCL等通信库调用底层的用户态Libibverbs库提供的Verbs接口。其中Verbs包含控制路径接口和数据路径接口两部分。控制路径包括保护域创建、内存注册、连接创建和状态机更改等接口;数据路径包含WQE消息下发和完成队列轮询接口。
[0105] 2.应用首先通过调用ibv_alloc_pd分配保护域,ibv_reg_mr注册内存,用于通信初始化阶段的资源创建。该过程直接通过系统调用由用户态嵌入到内核态执行,并于硬件网卡通信分配创建资源。
[0106] 3.应用在与远程节点通信时需要创建可靠的连接,当应用通过Verbs接口ibv_create_qp向用户态驱动请求创建一个RC类型的连接时,驱动中间件通过QP连接类型覆盖模块将请求的RC类型请求截获,并将连接请求更改为UD类型,在底层硬件RDMA网卡中注册一个UD类型的QP上下文(QPC),此时QP连接处于初始化的INIT状态,并向上层应用返回UD连接的指针,此时的上层应用并不感知连接类型是否被修改,仍会根据RC类型连接作后续处理。
[0107] 4.当应用通过Verbs控制路径接口ibv_modify_qp传递RC连接类型的参数进行连接的状态机修改时,驱动中间件同样获取传入的参数并且将传入的参数转换为UD连接类型所需的参数(UD类型参数是RC类型参数的子集),逐步将连接的状态从初始化状态INIT转换为RTR和RTS状态,此时的连接就具备发送接收的能力。
[0108] 5.经过上述1、2、3、4步骤后,通信资源和通信队列连接的创建和配置全部完成。当应用通过数据路径接口ibv_post_send下发一个WQE到步骤3返回的连接的指针时,驱动中间件首先将WQE消息在内存中的地址以及数据在内存中连续的长度进行记录缓存,放置到一个专用的缓冲区队列中,用于丢包重传模块的数据备份。
[0109] 6.为了满足UD连接类型的消息大小限制,上述WQE在备份完成后需要进行切分处理,将WQE指定的内存大小划分成为逐个MTU粒度的内存块。
[0110] 7.将步骤6划分的内存块封装为逐个数据帧,并按照切分的顺序填写自定义包头字段,按照图2所示的四个字段进行填写。PKT_TYPE代表数据包类型,MSG_ID代表未经步骤6消息切分模块处理时的消息序列号,SGE_LEN代表切分后的子数据的长度,SGE_OFFSET代表着子数据片段在整个原始数据中的字节偏移量。将携带者自定义报文字段的消息封装成为一整个负载,由统一的MTU大小的WQE指定下发给UD连接,通过UD连接使用doorbell机制来通知网卡向网络中发送数据包,此时初始化位图bitmap全部为0,并且初始化计时器。当应用持续下发WQE消息时,重复步骤5,6,7。
[0111] 在用户态选择重传模块的处理步骤中,
[0112] 1.接收端收到数据包之后,通过负载中携带的自定义字段解析数据包的连续情况,并将接收到的数据包的信息通过构造用户态ACK应答消息的方式发送给发送方。当检测到乱序丢包情况发生时,立刻构造生成一个NAK传递到发送端,NAK仅携带丢失的数据包的序列号供发送端选择性重传。
[0113] 2.发送端通过控制队列CTRL QP接收来自接受端返回的ACK/NAK信号。
[0114] 3.当接收到ACK信号后,解析ACK控制信号包携带的数据包序号,并将序号与对应位图的比特位相匹配,将比特位置为1标志着对应的数据包已经正确无误的接收。
[0115] 4.当接收到NAK信号时,解析NAK对应的数据包序列号,代表该序列号对应的数据包已经丢失,立刻从模块一的步骤5中的消息缓存队列中提取相应的数据,封装成一个WQE消息负载,通过单独的无队头阻塞的重传队列RETRY QP重新发送丢失数据包。
[0116] 5.当步骤3中的ACK接收时间超过一定阈值后,位图仍然没有全部被置为1,标志着有数据包的超时事件发生,这时,根据位图的空缺位置确定超时数据包的序列号,通过该序列号确定丢失数据包在内存中的位置,在模块一的步骤5中的缓存队列中提取数据地址和长度,重新通过重传队列发送。重传的同时重置计时器预防下一次超时事件的到来。
[0117] 6.发送端分批次发送的每一个子消息都会在接收端生成ACK或者NAK,在发送端接收到这些控制消息后,根据控制信号类型重复步骤3和步骤4。
[0118] 在具体实施过程中,本发明为了解决当前大规模RDMA网络中存在的可拓展性问题,并且提出了技术实现路线以降低数据中心的部署难度。
[0119] 要解决的可拓展性问题和部署问题概括为:
[0120] 1.大规模网络中的网络可拓展性,即消除当前网络中PFC带来的队头阻塞,PFC风暴,PFC死锁等消极影响,并且提供高性能的传输保障,提高网络的可拓展性。
[0121] 2.大规模网络中的连接可拓展性,即支持单网卡更多的连接数,避免在大规模业务连接数下发生频繁的缓存丢失导致的性能下降现象,支持大规模组网下业务更多连接数。
[0122] 3.本发明需要在当前数据中心中易于增量部署。对网卡硬件不做任何修改,对上层应用来说也无需任何接口的更改,只需通过添加网卡用户态驱动中间件的方式来部署实现。
[0123] 采用上述方案,本方案通过关闭PFC消除了PFC死锁、风暴等弊端,克服了在大规模RDMA组网时的网络拓展性约束。设计了用户态的选择性重传方案,提升了丢包发生时的恢复效率,提高了容损网络下流量的吞吐量和流完成时间。通过将RC连接转换成为UD连接,并作底层驱动的适配后,减小了底层的连接上下文占用的存储资源,使得单网卡上可以容纳更多的连接,降低了大规模网络中的连接上下文缓存丢失的频率,提高了连接拓展性。从用户态驱动的角度设计方案,无需修改底层硬件。同时对上层业务透明,无需修改上层业务的接口。
[0124] 在本方案中:
[0125] 1、本发明提出的针对数据中心RDMA网络的连接可拓展系统实现技术方案。具体为:基于RDMA网卡用户态驱动实现的连接类型转换功能(包含状态机转换和消息切片处理的实现方法)。
[0126] 2、本发明提出的针对数据中心RDMA网络的网络可拓展系统实现技术方案。具体为:基于RDMA网卡用户态驱动实现的选择重传功能(包含搭载在负载中的自定义头部字段实现和端侧重传队列的执行方法)。
[0127] 本发明实施例还提供一种基于驱动中间件的RDMA网络数据处理系统,该系统包括计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该系统实现如前所述方法所实现的步骤。
[0128] 本发明实施例还提供一种基于驱动中间件的RDMA网络数据处理系统,该系统包括计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该系统实现如前所述方法所实现的步骤。
[0129] 本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时以实现前述基于驱动中间件的RDMA网络数据处理方法所实现的步骤。该计算机可读存储介质可以是有形存储介质,诸如随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、软盘、硬盘、可移动存储盘、CD‑ROM、或技术领域内所公知的任意其它形式的存储介质。
[0130] 本领域普通技术人员应该可以明白,结合本文中所公开的实施方式描述的各示例性的组成部分、系统和方法,能够以硬件、软件或者二者的结合来实现。具体究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。
[0131] 需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,做出各种改变、修改和添加,或者改变步骤之间的顺序。
[0132] 本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
[0133] 以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。