CN109768939B - 一种支持优先级的标签化网络栈方法和系统 - Google Patents
一种支持优先级的标签化网络栈方法和系统 Download PDFInfo
- Publication number
- CN109768939B CN109768939B CN201811426135.9A CN201811426135A CN109768939B CN 109768939 B CN109768939 B CN 109768939B CN 201811426135 A CN201811426135 A CN 201811426135A CN 109768939 B CN109768939 B CN 109768939B
- Authority
- CN
- China
- Prior art keywords
- priority
- queue
- request
- low
- data packet
- 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.)
- Active
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种支持优先级的标签化网络栈方法和系统,其中服务器网络全数据通路支持优先级的优化系统包括:支持数据包按优先级分流的标签化网卡模块、支持优先级的用户态协议栈模块、以及支持优先级的应用事件处理框架模块。本发明提供的一种数据中心服务器网络全数据通路优化支持优先级的方法和系统,能有效改善数据中心服务器上资源使用的不确定性,可期待高效地获得服务吞吐能力和高优先级服务请求尾延迟的双数量级改进。
Description
技术领域
本发明涉及数据中心和云计算服务器网络优化领域,特别涉及一种支持优先级的标签化网络栈方法和系统。
背景技术
随着以无人机、传感器网络等为代表的移动和物端技术的应用,云服务需要面对的并发度有几个数量级的提高,具有明显的高并发、低延迟的需求。物端的行为、动机、访问时间均具有不确定性,海量并发请求之间对资源的无意识竞争,会导致服务延时的波动,形成尾延迟效应。美国工程院院士、谷歌数据中心资深专家Jeffrey Dean博士等早在2013年就总结了数据中心“尾延迟(Tail Latency)”问题,一般以99分位延迟来衡量,会明显高于平均延迟。
长尾延迟将严重影响服务质量,甚至会造成直接或间接的经济损失。例如,谷歌因为用户响应时间增加0.5秒广告而收入下降20%,Dropbox因为用户体验差而离开亚马逊云。为保证服务器一定的尾延迟,通常要牺牲服务器的利用率,用空闲大量备用资源的方式来保障尾延迟,从而造成资源和空间的浪费。如何保障高吞吐低尾延迟是一个突出的挑战问题。
传统网络栈主要涉及网卡、驱动、TCP/IP协议栈、应用等多个层次,而当前主要研究仍然是在某一层次优化通用的整体延迟层面,例如用户态协议栈或内核旁路、智能网卡offload、调度优化等。传统内核的网络协议栈因处理过程复杂,是产生服务响应尾延迟的重要因素之一。传统内核协议栈与整个内核代码集成在一起,难以进行深度定制和优化,因此无法针对服务的尾延迟等指标和优先级等可区分请求进行特殊的优化。相反,用户态协议栈因为不依赖内核和系统服务,可以有效避免不必要的系统调用和内存拷贝,精简协议处理流程,提高并行处理能力,直接和应用服务绑定,除了性能优势之外,也具有更大的灵活性和可控性。国际上用户态网络协议栈是比较新的研究方向,现已有LWIP、mTCP、F-Stack、SeaStar等相关研究。但现有协议栈方案均未区分应用请求的优先级,一系列的排队还是不可避免的对整个请求响应过程带来了巨大的延迟,致使在服务器内排队严重的云计算/数据中心环境中,高优先级请求的延迟得不到保障。一个明显的情况是,因为现有用户态协议栈方案仅基于五元组等TCP/IP包头内容进行流处理,忽略了应用层信息等可用来区分请求优先级的内容,致使面对数据中心内一条长流承载多个具有不同优先级请求的这类应用,不能区分请求的优先级,而使得高优先级请求的延迟得不到保障。
观察到各级排队延迟给整个请求响应过程所带来的延迟问题,自然而然会想到一个解决办法:对于那些亟需响应的请求,是否可以让他们不和普通的请求一起排队,从而避免这些排队延迟以严格保证其响应速度?然而,真正开展软硬件协同的网络全数据通路优化是存在多方面挑战的,从网卡到驱动到协议栈再到应用层次,任一层次的忽视或处理不当都将使优化效果打折扣。
发明内容
本发明的目的在于面对服务器内排队严重的云计算/数据中心环境,提出一种新的服务器网络栈设计方案,以保障高吞吐的同时确保高优先级请求的低尾延迟。
鉴于现有网卡只依赖于TCP/IP包头等协议控制信息为数据包划分多队列,这使得数据包到队列的映射是以数据流为粒度的,也就是同一个数据流的数据包会被映射到同一个队列中。后续处理过程中,随着数据包头的剥去,所有数据包更无优先级区分。而在数据中心常常面对这样的应用,如WeChat、IoT,它们会保持长流(Long-livedTCP flow),在这个长流中承载多个具有不同优先级的请求。如何保障一条流内的多个不同优先级的请求能得到相应优先级的处理,而不是粗粒度的以流为单位进行调度,是本发明所要面对的挑战。即本发明旨在依照请求的优先级来进行队列映射,实现请求级的优先级调度。将属于同一优先级的请求映射到同一队列中,同一队列可能会有来自不同流的但属于同一优先级的请求的包,同一条数据流的包也不再像之前的映射方案中只属于同一个优先级队列,而是会被分散到多个队列中。
具体来说,本发明公开了一种支持优先级的标签化网络栈方法,其中包括:
步骤100、服务器网卡对接收到的数据包提取数据载荷中预设偏移处的值,作为优先级标签,根据该优先级标签将该数据包放入相应优先级的DMA队列;
步骤200、驱动将高优先级的DMA队列中数据包存进主机内存的高优先级队列供协议栈使用,将低优先级的DMA队列中数据包存进主机内存的低优先级队列;
步骤300、TCP/IP协议栈取包时优先处理该高优先级队列中的数据包,对应产生高优先级事件提交上层应用事件处理框架,保障高优先级数据包继续获得优先服务权,直到取包数量达到阈值或该高优先级队列中为空时,TCP/IP协议栈才处理该低优先级队列中的数据包,对应产生低优先级事件,处理设定数量的低优先级数据包后再查看高优先级队列;
步骤400、该应用事件处理框架优先取出该高优先级事件,处理对应的高优先级请求,优先发给应用;该应用事件处理框架收到待发送的响应数据时,把优先级标签写入该响应数据的该预设偏移处,同时在该响应数据之外标注优先级给本地该TCP/IP协议栈用,以使该响应数据包传递给协议栈的顺序也遵循高优先级优先的原则。
所述的支持优先级的标签化网络栈方法,其中步骤100中根据该优先级标签将该数据包放入相应优先级的DMA队列,包括:将高优先级标签对应的数据包放入高优先级的DMA队列,低优先级标签对应的数据包放入低优先级的DMA队列。
所述的支持优先级的标签化网络栈方法,其中该步骤100包括:
步骤110、服务器网卡的网口接收以太网帧,解析帧的各层协议,提取五元组、校验和,计算校验和,并比较,若不正确则丢弃;
步骤120、根据五元组的哈希值得到密钥地址,用密钥对数据载荷解密;
步骤130、解密后,提取数据包的数据载荷中预设偏移处的值,与预设的优先级标签值进行比较,若相等则为高优先级,否则为低优先级,并将该数据包放入相应优先级的DMA队列。
所述的支持优先级的标签化网络栈方法,其中该步骤300,包括:
步骤310、检查各接收队列,若该高优先级队列有数据包,则从该高优先级队列中取出一个数据包并将其标记为高优先级;若该高优先级队列为空,检查该低优先级队列,若有包则取出并标记为低优先级;若该高优先级队列和该低优先级队列列均为空或达到设定策略阈值,跳出收包处理环节,跳转到步骤330发包处理环节;
步骤320、检查该数据包是否带有数据载荷,若有,则检查该数据包的优先级,并根据优先级将该数据包加入对应优先级的接收缓冲区,并生成对应优先级的应用事件发送给应用或用户,跳转到步骤310重复执行,直到达到该设定策略阈值;
步骤330、检查用户高优先级发送请求队列,若有高优先级发送请求,将该请求取出准备处理;若高优先级发送请求队列为空,检查低优先级发送请求队列,若有低优先级发送请求则将其取出准备处理;重复执行该步骤330,若在达到该设定策略阈值或没有用户发送请求时,则跳转到步骤340;
步骤340、进行流状态更新维护,跳转到步骤310。
所述的支持优先级的标签化网络栈方法,其中该步骤400包括:
步骤410、取出的该高优先级事件的事件标识若为listener,则接受并建立socket连接;若该高优先级事件的事件标识为EPOLLIN,则接收数据包,并根据事件优先级,分发请求数据到各请求处理线程的对应的优先级队列中,得到高优先级请求队列和低优先级请求队列;
步骤420、合并该高优先级请求队列和该低优先级请求队列为单队列模式,将高优先级请求排在队头,提交给应用进行处理,跳转到步骤410重复执行,直到达到该设定策略阈值时跳转到步骤430;
步骤430、将应用处理得到的响应结果按优先级需求打好标签放入发送缓冲区,交给协议栈处理,且在达到设定策略阈值时,开始处理低优先级请求的发送,每处理完一个低优先级请求后检查高优先级请求队列是否有新的元素,若有,则依旧处理该高优先级请求至该高优先级请求队列排空,跳到步骤410继续处理。
本发明还公开了一种支持优先级的标签化网络栈系统,其中包括:
模块100、服务器网卡对接收到的数据包提取数据载荷中预设偏移处的值,作为优先级标签,根据该优先级标签将该数据包放入相应优先级的DMA队列;
模块200、驱动将高优先级的DMA队列中数据包存进主机内存的高优先级队列供协议栈使用,将低优先级的DMA队列中数据包存进主机内存的低优先级队列;
模块300、TCP/IP协议栈取包时优先处理该高优先级队列中的数据包,对应产生高优先级事件提交上层应用事件处理框架,保障高优先级数据包继续获得优先服务权,直到取包数量达到阈值或该高优先级队列中为空时,TCP/IP协议栈才处理该低优先级队列中的数据包,对应产生低优先级事件,处理设定数量的低优先级数据包后再查看高优先级队列;
模块400、该应用事件处理框架优先取出该高优先级事件,处理对应的高优先级请求,优先发给应用;该应用事件处理框架收到待发送的响应数据时,把优先级标签写入该响应数据的该预设偏移处,同时在该响应数据之外标注优先级给本地该TCP/IP协议栈用,以使该响应数据包传递给协议栈的顺序也遵循高优先级优先的原则。
所述的支持优先级的标签化网络栈系统,其中模块100中根据该优先级标签将该数据包放入相应优先级的DMA队列,包括:将高优先级标签对应的数据包放入高优先级的DMA队列,低优先级标签对应的数据包放入低优先级的DMA队列。
所述的支持优先级的标签化网络栈系统,其中该模块100包括:
模块110、服务器网卡的网口接收以太网帧,解析帧的各层协议,提取五元组、校验和,计算校验和,并比较,若不正确则丢弃;
模块120、根据五元组的哈希值得到密钥地址,用密钥对数据载荷解密;
模块130、解密后,提取数据包的数据载荷中预设偏移处的值,与预设的优先级标签值进行比较,若相等则为高优先级,否则为低优先级,并将该数据包放入相应优先级的DMA队列。
所述的支持优先级的标签化网络栈系统,其中该模块300,包括:
模块310、检查各接收队列,若该高优先级队列有数据包,则从该高优先级队列中取出一个数据包并将其标记为高优先级;若该高优先级队列为空,检查该低优先级队列,若有包则取出并标记为低优先级;若该高优先级队列和该低优先级队列列均为空或达到设定策略阈值,跳出收包处理环节,跳转到模块330发包处理环节;
模块320、检查该数据包是否带有数据载荷,若有,则检查该数据包的优先级,并根据优先级将该数据包加入对应优先级的接收缓冲区,并生成对应优先级的应用事件发送给应用或用户,跳转到模块310重复执行,直到达到该设定策略阈值;
模块330、检查用户高优先级发送请求队列,若有高优先级发送请求,将该请求取出准备处理;若高优先级发送请求队列为空,检查低优先级发送请求队列,若有低优先级发送请求则将其取出准备处理;重复执行该模块330,若在达到该设定策略阈值或没有用户发送请求时,则跳转到模块340;
模块340、进行流状态更新维护,跳转到模块310。
所述的支持优先级的标签化网络栈系统,其中该模块400包括:
模块410、取出的该高优先级事件的事件标识若为listener,则接受并建立socket连接;若该高优先级事件的事件标识为EPOLLIN,则接收数据包,并根据事件优先级,分发请求数据到各请求处理线程的对应的优先级队列中,得到高优先级请求队列和低优先级请求队列;
模块420、合并该高优先级请求队列和该低优先级请求队列为单队列模式,将高优先级请求排在队头,提交给应用进行处理,跳转到模块410重复执行,直到达到该设定策略阈值时跳转到模块430;
模块430、将应用处理得到的响应结果按优先级需求打好标签放入发送缓冲区,交给协议栈处理,且在达到设定策略阈值时,开始处理低优先级请求的发送,每处理完一个低优先级请求后检查高优先级请求队列是否有新的元素,若有,则依旧处理该高优先级请求至该高优先级请求队列排空,跳到模块410继续处理。
本发明总得的技术效果包括:
预期通过1)将协议解析、加解密和优先级分流等功能下放到网卡;2)将驱动从内核态移植到用户态并增加多优先级队列支持;3)将协议栈从内核移植到用户态并增加优先级支持;4)在应用层事件处理的基础上增加优先级感知,从而预期实现单节点支持百万级高并发TCP连接,相比标准linux内核协议栈,限定尾延迟总并发度提高和限定并发度高优先级的尾延迟降低均可达数量级改进。使用本发明技术后,高优先级应用请求的延迟将得到保障,提高用户体验,提高应用收益等。如在电子商务购物系统中,我们将用户的支付请求与商品浏览请求分别识别为高优先级与低优先级请求,优先保证高优先级即支付请求的优先处理,从而提高用户体验,避免用户因得不到支付响应造成多次重复的表单提交带来支付错误,同时也提高了应用的收益。另外值得的一提的是,基于epoll事件框架下的应用,如redis,可在这一设计下无需接口修改直接接入。
附图说明
图1为本发明方法流程图;
图2为本发明的支持优先级的标签化网络栈的结构图。
具体实施细节
本发明通过客户端和服务端双方约定在payload某特定位置标记优先级,由客户端加标签,payload为载荷,优先级信息是客户端和服务端商定的,可以是数据载荷中已有的一些特定信息,或由程序员额外附加的信息。服务器端在处理过程中提取用于优先级调度,比如网卡在处理协议包头之外,提取非网络协议数据中的优先级信息,实现相同网络流中的请求可以根据信息分到不同的优先级队列,协议栈处理例程优先处理高优先级队列并将处理完后的数据放至高优先级缓冲区中;上层应用事件处理框架优先从高优先级接收缓冲区接收请求,并优先发给应用,对其处理后将响应发往高优先级发送缓冲区,协议栈处理例程将高优先级发送缓冲区的数据写到高优先级发送队列,由网卡优先发送。这样一来,高优先级的请求在服务器端从头到尾在一个独立的高优先级通路上获得优先服务,不参与和其他普通请求一起排队,在用户态高吞吐的基础上可以有效避免各级排队延迟从而降低了请求响应延迟。
为了使本发明的目的,技术方案及优点更加清楚明白,以下节的附图1及实施例,对本发明的一种支持优先级的标签化网络栈方法和系统进行进一步的详细说明。
本发明的一种支持优先级的标签化网络栈方法和系统,把网卡、用户态协议栈、应用事件处理框架整体上协调,在服务器网络全数据通路上对服务请求进行区分、隔离和优先级调度实现全局服务质量QoS控制,包括NIC、TCP/IP协议栈以及应用层事件服务框架等多个层次,以有效改进数据中心服务吞吐和尾延迟。
下面结合上述目标详细介绍本发明的一种支持优先级的标签化网络栈方法。
步骤100。服务器网卡对接收到的网络数据包提取数据载荷(payload)中预设偏移处的值,作为优先级标签,将数据包分到相应优先级队列,比如高或低优先级DMA队列;同理,发送方向也区分优先级。重复执行该步骤直到关闭服务器网卡功能。DMA队列是网卡资源,需要驱动做好软硬件衔接,送数据包给TCP/IP协议栈处理。
步骤200。驱动将网卡DMA队列中数据包放入主机内存的相应优先级队列供协议栈使用,比如高优先级数据包放入高优先级队列,低优先级的放入低优先级队列,其中DMA队列是网卡资源,驱动和协议栈处理的队列在主机内存。同理,发送方向也区分优先级。一直重复执行该步骤直到关闭服务器网卡功能。驱动的目的是做好软硬件衔接,传送网卡DMA队列中的数据包给TCP/IP协议栈处理。DMA队列有多条,本发明中分为多个优先级,一个优先级队列中存相同优先级的数据包,这里方便起见以高低优先级举例。
步骤300。在多队列用户态驱动支持下,TCP/IP协议栈取包时进行优先级判断,优先处理高优先级队列中的数据包,对应产生高优先级事件提交上层应用事件处理框架,保障高优先级数据包继续获得优先服务权,直到取包数量达到阈值或该高优先级队列中为空时,TCP/IP协议栈才处理该低优先级队列中的数据包,处理内容可包括检查正确性、剥包头、维护连接信息等;同理,协议栈发给驱动的发送方向也区分优先级。一直重复执行该步骤直到关闭服务器网卡功能。
步骤400。在应用事件处理框架层面,优先取出高优先级事件,处理对应的高优先级请求,并优先发给应用。高优先级数据包在提交应用层处理时产生高优先级事件。高优先级事件相当于控制流,高优先级数据包相当于数据流。收到应用处理后待发送的响应数据时,把优先级标签写入payload约定位置,同时标注优先级(不是在payload里)给本地TCP/IP用,例如epoll发送函数里带flag优先发送。同样地,响应包传递给协议栈的顺序也遵循高优先级优先的原则。一直重复执行该步骤直到关闭服务器网卡功能。
所述步骤100,包括下列步骤:
步骤110。网口接收以太网帧,解析帧的各层协议,提取五元组、校验和,计算校验和,并比较,若不正确则丢弃。
步骤120。根据五元组的哈希值hash得到密钥地址,用密钥对负载解密。
步骤130。解密后,提取数据包payload中预设偏移处的值,与设定的优先级标签值进行比较,若相等则为高优先级,否则为低优先级,并送到相应的DMA队列。DMA优先传输高优先级队列中的数据包。循环此步骤到设定次数,执行步骤140。
步骤140。网卡发送数据包,从服务器发给客户端,发送时网卡优先从高优先级队列取包,解析数据包各层协议,提取五元组,根据五元组hash得到密钥地址,用密钥对数据内容加密,计算加密后数据包的TCP校验和,并填充到TCP头部,将以太网帧编码,发送出去。在达到设定策略阈值时,取低优先级数据包完成上述同样工作或者跳到步骤110继续收包。
所述步骤300,包括下列步骤:
步骤310。检查驱动的接收队列,若高优先级接收队列有数据包,则从高优先级队列中取出一个数据包并将其标记为高优先级;若高优先级接收队列为空,检查低优先级接收队列,若有包则取出并标记为低优先级;若在达到设定策略阈值或两个接收队列均为空,跳出收包处理环节,跳转到步骤330发包处理环节。
步骤320。检查该包是否带有payload,若有,检查该数据包的优先级,并根据优先级将该数据包加入对应优先级的接收缓冲区,并生成对应优先级的应用事件发送给应用或用户。跳转到步骤310重复执行,直到达到设定策略阈值。
步骤330。开始用户发送请求处理环节。首先检查用户高优先级发送请求队列,若有高优先级发送请求,将该请求取出准备处理;若高优先级发送请求队列为空,检查低优先级发送请求队列,若有低优先级发送请求则将其取出准备处理;重复执行该步骤,若在达到设定策略阈值或没有用户发送请求时,则退出用户发送请求处理环节,跳转到步骤340。
步骤340。流状态更新维护等处理,比如超时重传。跳到步骤310继续收包。
所述步骤400,包括下列步骤:
步骤410。事件分发线程首先取出待处理事件,优先处理高优先级事件。取出的事件若为listener,则接受该连接;若为EPOLLIN,则接收数据包,这里的数据包是经过TCP/IP协议栈处理后剥去包头的纯数据,即客户端发往服务器的真实内容,并根据事件优先级,分发请求数据到各请求处理线程的对应的优先级队列中。listener是接受并建立socket连接,socket是从传输层上抽象出来的一个抽象层,本质是接口。EPOLLIN是处理具体的读事件,即接收数据包。
步骤420。应用批处理层合并高低优先级请求队列至传统应用层支持的单队列模式,将高优先级请求排在队头,提交给应用(如redis)进行处理。跳转到步骤410重复执行,在达到设定策略阈值时跳转到步骤430。
步骤430。将响应结果按优先级需求打好标签放入发送缓冲区,交给协议栈处理。在达到设定策略阈值时,开始处理低优先级请求的发送,每处理完一个低优先级请求后也要检查高优先级队列是否有新的元素,有则依旧处理至排空。跳到步骤410继续处理。
作为一种可实施方式,针对服务器网络全数据通路支持优先级的访问,本发明特举实施例包括如下步骤:
步骤1,以redis应用为例,假定网卡收到一个批次的数据包,前三个为低优先级数据包,后一个为高优先级数据包,经过标签化协议栈的网卡分流到DMA优先级队列,用户态驱动处理后送到主机内存的优先级队列;
步骤2,将高优先级数据包先通过高优先级队列送至协议栈并处理,处理后将数据包放入接收缓冲区并调用AddPepollEvent()产生一个新的收包事件。
步骤3,接下来协议栈从低优先级收包队列中将低优先级数据包收上来,处理后将他们放入缓冲区并调用AddPepollEvent()生成新的收包事件。
步骤4,上层应用调用pepoll_wait()接收到收包事件后调用pmtcp_recv(),从高优先级接收缓冲中取出一个高优先级请求,对数据包处理完毕后,生成redis请求并将提交给redis批处理层。
步骤5,redis批处理层优先将高优先级请求提交给redis进行处理。接着,
步骤6,server线程调用pmtcp_recv()再次从接收缓冲区中收一个数据包,发现为低优先级请求,生成redis请求并将请求放在低优先级队列交给redis批处理层。
步骤7,redis批处理层收到请求后发现其为低优先级请求,将其顺次提交给redis等待处理。redis将请求队列中的请求处理完毕后,
步骤8,将结果返回给server线程,server线程根据redis的返回结果生成响应结果,
步骤9,调用pmtcp_send()将响应结果根据优先级放入相应的发送缓冲区并将对应的流放入作业队列。
步骤10,协议栈线程检测到作业队列中有未处理的数据包时依据优先级策略将其取出,经过协议栈处理后生成要发送的响应数据包,
步骤11,并将其交给标签化协议栈的用户态驱动等待依据优先级发送。
如图2所示,为本发明的支持优先级的标签化网络栈的结构图。该系统包括:
支持内容感知优先级分流的标签化网卡模块21。该网卡设计了a)基于数据载荷的分流机制,基于标签实现网络流的区分隔离,解决现有基于网络包地址五元组信息进行分流所导致的灵活性较差的问题。当前原型系统支持高低优先级两个队列;b)基于优化的多通道DMA引擎及优先级队列调度机制,实现对不同类型网络请求的差异化处理,提高网络服务质量;同时优化DMA描述符访问方式,降低频繁PCIe访存开销,提高网络包处理性能;c)通过使用(4GB)片外高速DRAM实现大容量网络包多FIFO队列缓冲区结构,接收分流后的不同网络数据,从而支撑(万兆)高速不丢包的网络处理。d)实现了卡上的数据加解密功能,以便在网卡上就可以分析应用Payload。
多队列应用级驱动模块22。驱动包括多队列收发,收包时将网卡DMA队列中数据包放入主机内存的相应优先级队列供协议栈使用,比如高优先级数据包放入高优先级队列,低优先级的放入低优先级队列。发包时,也依据优先级放入相应的网卡DMA队列。
支持优先级的用户态协议栈模块23。在多队列用户态驱动支持下,TCP/IP协议栈取包时进行优先级判断,优先处理高优先级队列中的数据包,对应产生高优先级事件提交上层应用事件处理框架,保障高优先级数据包继续获得优先服务权,直到取包数量达到阈值或该高优先级队列中为空时,TCP/IP协议栈才处理低优先级队列中的数据包。处理完设定数量的低优先级数据包后再立即查收高优先级数据包;同理,发送方向也区分优先级。以标签化全路径优先级隔离操作,提升高优先级数据包的资源使用权。
支持优先级的应用事件处理模块24。在应用事件处理框架层面,优先取出高优先级事件,处理对应的高优先级请求,把高优先级的数据包插队优先服务;发送时把优先级标签写到payload里约定位置,同时标注优先级(不是在payload里)给本地TCP/IP用,例如epoll发送函数里带flag优先发送。
进一步地,所述支持内容感知优先级分流的标签化网卡模块21,又包括:
协议解析模块211。网口接收以太网帧,解析帧的各层协议,提取五元组、校验和,计算校验和,并比较,若不正确则丢弃。
加解密模块212。根据五元组hash得到密钥地址,用密钥对负载解密。在发送时进行数据加密。
标签分流模块(收/发)213。解密后,提取数据包payload中预设偏移处的值,与预定标签值进行比较,若相等则为高优先级,否则为低优先级,并送到相应的DMA队列,优先传输高优先级队列中的数据包。
发送时,优先从主机内存的高优先级队列取包,解析数据包各层协议,提取五元组,根据五元组hash得到密钥地址,用密钥对数据内容加密,计算加密后数据包的TCP校验和,并填充到TCP头部,将以太网帧编码发送出去。
进一步地,所述支持优先级的用户态协议栈模块23,又包括:
支持优先级的收发包模块231。检查驱动的接收队列,若高优先级接收队列有数据包,则从高优先级队列中取出一个数据包处理并将其标记为高优先级;若高优先级接收队列为空,检查低优先级接收队列,若有包则取出处理并标记为低优先级。
用户发送请求处理环节,首先检查用户高优先级发送请求队列,若有高优先级发送请求,将该请求取出准备处理;若高优先级发送请求队列为空,检查低优先级发送请求队列,若有低优先级发送请求则将其取出准备处理。
支持优先级的事件提交模块232。根据数据包优先级生成对应优先级的收包事件发送给应用事件框架。
流状态更新维护模块233。流状态更新维护等处理,比如超时重传。
进一步地,所述支持优先级的应用事件处理模块24,又包括:
支持优先级的事件收发模块241。事件分发线程首先取出待处理事件,优先处理高优先级事件。取出的事件若为listener,则接受该连接;若为EPOLLIN,则接收数据包,并根据事件优先级处理相应的请求数据,分发到各请求处理线程的对应优先级队列中。发送方向,将响应结果按优先级需求打好标签放入相应级别的发送缓冲区,交给协议栈处理。在处理高优先级响应达到设定策略阈值时,开始处理低优先级响应的发送,每处理完一个低优先级响应后也要检查高优先级队列是否有新的元素,有则依旧处理至排空。
支持优先级的应用兼容接口模块242。应用批处理层合并高低优先级请求队列至传统应用层支持的单队列模式,将高优先级请求排在队头,提交给应用(如redis)进行处理。
以下为与上述方法实施例对应的系统实施例,本实施方式可与上述实施方式互相配合实施。上述实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在上述实施方式中。
本发明还公开了一种支持优先级的标签化网络栈系统,其中包括:
模块100、服务器网卡对接收到的数据包提取数据载荷中预设偏移处的值,作为优先级标签,根据该优先级标签将该数据包放入相应优先级的DMA队列;
模块200、驱动将高优先级的DMA队列中数据包存进主机内存的高优先级队列供协议栈使用,将低优先级的DMA队列中数据包存进主机内存的低优先级队列;
模块300、TCP/IP协议栈取包时优先处理该高优先级队列中的数据包,对应产生高优先级事件提交上层应用事件处理框架,保障高优先级数据包继续获得优先服务权,直到取包数量达到阈值或该高优先级队列中为空时,TCP/IP协议栈才处理该低优先级队列中的数据包,对应产生低优先级事件,处理设定数量的低优先级数据包后再查看高优先级队列;
模块400、该应用事件处理框架优先取出该高优先级事件,处理对应的高优先级请求,优先发给应用;该应用事件处理框架收到待发送的响应数据时,把优先级标签写入该响应数据的该预设偏移处,同时在该响应数据之外标注优先级给本地该TCP/IP协议栈用,以使该响应数据包传递给协议栈的顺序也遵循高优先级优先的原则。
所述的支持优先级的标签化网络栈系统,其中模块100中根据该优先级标签将该数据包放入相应优先级的DMA队列,包括:将高优先级标签对应的数据包放入高优先级的DMA队列,低优先级标签对应的数据包放入低优先级的DMA队列。
所述的支持优先级的标签化网络栈系统,其中该模块100包括:
模块110、服务器网卡的网口接收以太网帧,解析帧的各层协议,提取五元组、校验和,计算校验和,并比较,若不正确则丢弃;
模块120、根据五元组的哈希值得到密钥地址,用密钥对数据载荷解密;
模块130、解密后,提取数据包的数据载荷中预设偏移处的值,与预设的优先级标签值进行比较,若相等则为高优先级,否则为低优先级,并将该数据包放入相应优先级的DMA队列。
所述的支持优先级的标签化网络栈系统,其中该模块300,包括:
模块310、检查各接收队列,若该高优先级队列有数据包,则从该高优先级队列中取出一个数据包并将其标记为高优先级;若该高优先级队列为空,检查该低优先级队列,若有包则取出并标记为低优先级;若该高优先级队列和该低优先级队列列均为空或达到设定策略阈值,跳出收包处理环节,跳转到模块330发包处理环节;
模块320、检查该数据包是否带有数据载荷,若有,则检查该数据包的优先级,并根据优先级将该数据包加入对应优先级的接收缓冲区,并生成对应优先级的应用事件发送给应用或用户,跳转到模块310重复执行,直到达到该设定策略阈值;
模块330、检查用户高优先级发送请求队列,若有高优先级发送请求,将该请求取出准备处理;若高优先级发送请求队列为空,检查低优先级发送请求队列,若有低优先级发送请求则将其取出准备处理;重复执行该模块330,若在达到该设定策略阈值或没有用户发送请求时,则跳转到模块340;
模块340、进行流状态更新维护,跳转到模块310。
所述的支持优先级的标签化网络栈系统,其中该模块400包括:
模块410、取出的该高优先级事件的事件标识若为listener,则接受并建立socket连接;若该高优先级事件的事件标识为EPOLLIN,则接收数据包,并根据事件优先级,分发请求数据到各请求处理线程的对应的优先级队列中,得到高优先级请求队列和低优先级请求队列;
模块420、合并该高优先级请求队列和该低优先级请求队列为单队列模式,将高优先级请求排在队头,提交给应用进行处理,跳转到模块410重复执行,直到达到该设定策略阈值时跳转到模块430;
模块430、将应用处理得到的响应结果按优先级需求打好标签放入发送缓冲区,交给协议栈处理,且在达到设定策略阈值时,开始处理低优先级请求的发送,每处理完一个低优先级请求后检查高优先级请求队列是否有新的元素,若有,则依旧处理该高优先级请求至该高优先级请求队列排空,跳到模块410继续处理。
本发明的技术效果包括:
1、数据中心服务中客户端和服务端双方约定在payload某特定位置标记优先级,由客户端加标签,服务器端在处理过程中提取用于优先级调度,比如网卡在处理协议包头之外,提取非网络协议数据中的优先级信息,实现相同网络流中的请求可以根据优先级信息分到不同的DMA队列。这是一种低开销的数据包粒度优先级方法,支持从数据包内容自身提取标签或直接附加标签,用于表征数据包的优先级,可以实现数据包一级的细粒度区分、隔离和优先级调度,使得同一数据流内部的不同数据包获得不同优先级的服务。
2、服务器网络数据通路各阶段优先级优化方法,包括NIC、TCP/IP以及应用事件处理框架。其中网卡对接收到的网络数据包进行payload标签提取,将数据包划分到比如高低优先级DMA队列;发送时,优先从高优先级队列取包。在多队列用户态驱动支持下,TCP/IP从网卡队列取包时进行优先级判断,优先处理高优先级请求,在完成数据包处理产生应用层事件通知时同样支持高低优先级区分;同理,识别应用层给的高优先级响应包优先发送。在应用事件框架层面,接收事件时优先处理高优先级事件,并优先发送给应用处理;同理,在收到应用层响应数据包待发送时,把优先级写到payload相应位置,同时标注优先级(不在payload里)给本地TCP/IP用,例如epoll发送函数里带flag优先发送。这是一种软硬件协同的服务器网络栈全路径优先级方法,在包括NIC、TCP/IP以及应用等在内的服务器网络全数据通路的多个层次上始终支持关键点1所述的优先级信息,减少高优先级数据包和其他数据包一起在网络数据通路的各环节排队产生额外延迟。
3、服务器网络全数据通路支持优先级的优化系统,利用关键点1和2的两种方法构建,包括:支持请求数据包按优先级分流的标签化网卡模块、支持优先级的用户态协议栈模块、以及支持优先级的应用事件处理框架。能有效改善数据中心服务器上资源使用的不确定性,可达数量级效果高效改进服务吞吐能力和高优先级服务请求尾延迟。
Claims (10)
1.一种支持优先级的标签化网络栈方法,其特征在于,包括:
步骤100、服务器网卡对接收到的数据包提取数据载荷中预设偏移处的值,作为优先级标签,根据该优先级标签将该数据包放入相应优先级的DMA队列;
步骤200、驱动将高优先级的DMA队列中数据包存进主机内存的高优先级队列供TCP/IP协议栈使用,将低优先级的DMA队列中数据包存进主机内存的低优先级队列;
步骤300、TCP/IP协议栈取包时优先处理该高优先级队列中的数据包,对应产生高优先级事件提交上层应用事件处理框架,保障高优先级数据包继续获得优先服务权,直到取包数量达到设定策略阈值或该高优先级队列中为空时,TCP/IP协议栈才处理该低优先级队列中的数据包,对应产生低优先级事件,处理设定数量的低优先级数据包后再查看高优先级队列;
步骤400、该应用事件处理框架优先取出该高优先级事件,处理对应的高优先级请求,优先发给应用;该应用事件处理框架收到待发送的响应数据时,把优先级标签写入该响应数据的该预设偏移处,同时在该响应数据之外标注优先级给本地该TCP/IP协议栈用,以使响应数据包传递给TCP/IP协议栈的顺序也遵循高优先级优先的原则。
2.如权利要求1所述的支持优先级的标签化网络栈方法,其特征在于,步骤100中根据该优先级标签将该数据包放入相应优先级的DMA队列,包括:将高优先级标签对应的数据包放入高优先级的DMA队列,低优先级标签对应的数据包放入低优先级的DMA队列。
3.如权利要求1或2所述的支持优先级的标签化网络栈方法,其特征在于,该步骤100包括:
步骤110、服务器网卡的网口接收以太网帧,解析帧的各层协议,提取五元组、校验和,计算校验和,并比较,若不正确则丢弃;
步骤120、根据五元组的哈希值得到密钥地址,用密钥对数据载荷解密;
步骤130、解密后,提取数据包的数据载荷中预设偏移处的值,与预设的优先级标签值进行比较,若相等则为高优先级,否则为低优先级,并将该数据包放入相应优先级的DMA队列。
4.如权利要求3所述的支持优先级的标签化网络栈方法,其特征在于,该步骤300,包括:
步骤310、检查各接收队列,若该高优先级队列有数据包,则从该高优先级队列中取出一个数据包并将其标记为高优先级;若该高优先级队列为空,检查该低优先级队列,若有包则取出并标记为低优先级;若该高优先级队列和该低优先级队列均为空或达到设定策略阈值,跳出收包处理环节,跳转到步骤330发包处理环节;
步骤320、检查该数据包是否带有数据载荷,若有,则检查该数据包的优先级,并根据优先级将该数据包加入对应优先级的接收缓冲区,并生成对应优先级的应用事件发送给该应用事件处理框架,跳转到步骤310重复执行,直到达到设定策略阈值;
步骤330、检查用户高优先级发送请求队列,若有高优先级发送请求,将该请求取出准备处理;若高优先级发送请求队列为空,检查低优先级发送请求队列,若有低优先级发送请求则将其取出准备处理;重复执行该步骤330,若在达到设定策略阈值或没有用户发送请求时,则跳转到步骤340;
步骤340、进行流状态更新维护,跳转到步骤310。
5.如权利要求4所述的支持优先级的标签化网络栈方法,其特征在于,该步骤400包括:
步骤410、取出的该高优先级事件的事件标识若为listener,则接受并建立socket连接;若该高优先级事件的事件标识为EPOLLIN,则接收数据包,并根据事件优先级,分发请求数据到各请求处理线程的对应的优先级队列中,得到高优先级请求队列和低优先级请求队列;
步骤420、合并该高优先级请求队列和该低优先级请求队列为单队列模式,将高优先级请求排在队头,提交给应用进行处理,跳转到步骤410重复执行,直到达到设定策略阈值时跳转到步骤430;
步骤430、将应用处理得到的响应结果按优先级需求打好标签放入发送缓冲区,交给TCP/IP协议栈处理,且在达到设定策略阈值时,开始处理低优先级请求的发送,每处理完一个低优先级请求后检查高优先级请求队列是否有新的元素,若有,则依旧处理该高优先级请求至该高优先级请求队列排空,跳到步骤410继续处理。
6.一种支持优先级的标签化网络栈系统,其特征在于,包括:
服务器网卡,对接收到的数据包提取数据载荷中预设偏移处的值,作为优先级标签,根据该优先级标签将该数据包放入相应优先级的DMA队列;
驱动,将高优先级的DMA队列中数据包存进主机内存的高优先级队列供TCP/IP协议栈使用,将低优先级的DMA队列中数据包存进主机内存的低优先级队列;
TCP/IP协议栈,取包时优先处理该高优先级队列中的数据包,对应产生高优先级事件提交上层应用事件处理框架,保障高优先级数据包继续获得优先服务权,直到取包数量达到设定策略阈值或该高优先级队列中为空时,TCP/IP协议栈才处理该低优先级队列中的数据包,对应产生低优先级事件,处理设定数量的低优先级数据包后再查看高优先级队列;
该应用事件处理框架,优先取出该高优先级事件,处理对应的高优先级请求,优先发给应用;该应用事件处理框架收到待发送的响应数据时,把优先级标签写入该响应数据的该预设偏移处,同时在该响应数据之外标注优先级给本地该TCP/IP协议栈用,以使响应数据包传递给TCP/IP协议栈的顺序也遵循高优先级优先的原则。
7.如权利要求6所述的支持优先级的标签化网络栈系统,其特征在于,该服务器网卡中根据该优先级标签将该数据包放入相应优先级的DMA队列,包括:将高优先级标签对应的数据包放入高优先级的DMA队列,低优先级标签对应的数据包放入低优先级的DMA队列。
8.如权利要求6或7所述的支持优先级的标签化网络栈系统,其特征在于,该服务器网卡包括:
模块110,用于使服务器网卡的网口接收以太网帧,解析帧的各层协议,提取五元组、校验和,计算校验和,并比较,若不正确则丢弃;
模块120,用于根据五元组的哈希值得到密钥地址,用密钥对数据载荷解密;
模块130,用于解密后,提取数据包的数据载荷中预设偏移处的值,与预设的优先级标签值进行比较,若相等则为高优先级,否则为低优先级,并将该数据包放入相应优先级的DMA队列。
9.如权利要求8所述的支持优先级的标签化网络栈系统,其特征在于,该TCP/IP协议栈,包括:
模块310、检查各接收队列,若该高优先级队列有数据包,则从该高优先级队列中取出一个数据包并将其标记为高优先级;若该高优先级队列为空,检查该低优先级队列,若有包则取出并标记为低优先级;若该高优先级队列和该低优先级队列均为空或达到设定策略阈值,执行模块330;
模块320、检查该数据包是否带有数据载荷,若有,则检查该数据包的优先级,并根据优先级将该数据包加入对应优先级的接收缓冲区,并生成对应优先级的应用事件发送给该应用事件处理框架,执行模块310重复执行,直到达到设定策略阈值;
模块330、检查用户高优先级发送请求队列,若有高优先级发送请求,将该请求取出准备处理;若高优先级发送请求队列为空,检查低优先级发送请求队列,若有低优先级发送请求则将其取出准备处理;重复执行该模块330,若在达到设定策略阈值或没有用户发送请求时,则执行模块340;
模块340、进行流状态更新维护,执行模块310。
10.如权利要求9所述的支持优先级的标签化网络栈系统,其特征在于,该模块400包括:
模块410、取出的该高优先级事件的事件标识若为listener,则接受并建立socket连接;若该高优先级事件的事件标识为EPOLLIN,则接收数据包,并根据事件优先级,分发请求数据到各请求处理线程的对应的优先级队列中,得到高优先级请求队列和低优先级请求队列;
模块420、合并该高优先级请求队列和该低优先级请求队列为单队列模式,将高优先级请求排在队头,提交给应用进行处理,执行模块410重复执行,直到达到设定策略阈值时执行模块430;
模块430、将应用处理得到的响应结果按优先级需求打好标签放入发送缓冲区,交给TCP/IP协议栈处理,且在达到设定策略阈值时,开始处理低优先级请求的发送,每处理完一个低优先级请求后检查高优先级请求队列是否有新的元素,若有,则依旧处理该高优先级请求至该高优先级请求队列排空,执行模块410。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811426135.9A CN109768939B (zh) | 2018-11-27 | 2018-11-27 | 一种支持优先级的标签化网络栈方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811426135.9A CN109768939B (zh) | 2018-11-27 | 2018-11-27 | 一种支持优先级的标签化网络栈方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109768939A CN109768939A (zh) | 2019-05-17 |
CN109768939B true CN109768939B (zh) | 2021-05-25 |
Family
ID=66449164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811426135.9A Active CN109768939B (zh) | 2018-11-27 | 2018-11-27 | 一种支持优先级的标签化网络栈方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109768939B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110493329A (zh) * | 2019-08-08 | 2019-11-22 | 西藏宁算科技集团有限公司 | 一种基于用户态协议栈的并发推送服务方法和系统 |
CN111399994B (zh) * | 2019-11-27 | 2023-10-10 | 杭州海康威视系统技术有限公司 | 请求调度方法、装置、电子设备及存储介质 |
CN111162935B (zh) * | 2019-12-17 | 2021-06-04 | 中国科学院计算技术研究所 | 一种基于包级别数据分流的网络通信方法及系统 |
CN111210288A (zh) * | 2019-12-26 | 2020-05-29 | 大象慧云信息技术有限公司 | 基于税控服务器的发票批量开具作业优化调度方法及系统 |
CN111901126B (zh) * | 2020-08-05 | 2022-10-14 | 深圳旺富达讯息技术有限公司 | 一种基于v2x协议栈网络层避免解密验签模块耗时的方法 |
CN112491620B (zh) * | 2020-11-29 | 2022-11-01 | 中国航空工业集团公司洛阳电光设备研究所 | 一种基于srio的多通道数据传输控制器及调整方法 |
CN116711282A (zh) * | 2021-04-30 | 2023-09-05 | 华为技术有限公司 | 通信设备和通信方法 |
CN113438163B (zh) * | 2021-05-29 | 2022-11-25 | 中国人民解放军空军工程大学 | 一种基于路径隔离的数据中心网络混合流路由方法及系统 |
CN113965528A (zh) * | 2021-10-21 | 2022-01-21 | 傲普(上海)新能源有限公司 | 基于队列的数据分级动态排序传输控制方法 |
CN113676416B (zh) * | 2021-10-22 | 2021-12-28 | 浙江锐文科技有限公司 | 一种在高速网卡/dpu内提升网络服务质量的方法 |
CN114268623B (zh) * | 2021-12-29 | 2024-04-05 | 深圳前海同益网络技术有限公司 | 一种实现应用网络优先级设定的方法及系统 |
CN114785870B (zh) * | 2022-04-06 | 2024-01-19 | 浙江大学 | 一种面向tcp/ip和ble集成协议栈的优化方法 |
CN115086173B (zh) * | 2022-05-09 | 2023-10-31 | 阿里巴巴(中国)有限公司 | 网络升级过程中的可靠性保障方法和装置 |
CN115834730A (zh) * | 2022-10-21 | 2023-03-21 | 中国科学院计算技术研究所 | 支持优先级乱序的tcp数据包收发方法及系统 |
WO2024103288A1 (zh) * | 2022-11-16 | 2024-05-23 | 哲库科技(上海)有限公司 | 通信方法、装置、设备、存储介质、芯片及系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6574683B1 (en) * | 1999-07-15 | 2003-06-03 | Texas Instruments Incorporated | External direct memory access processor implementation that includes a plurality of priority levels stored in request queue |
EP3001322B1 (en) * | 2014-09-29 | 2018-08-08 | F5 Networks, Inc | Network devices with multiple fully isolated and independently resetable direct memory access channels and methods thereof |
CN105871751A (zh) * | 2016-03-25 | 2016-08-17 | 中国科学院计算技术研究所 | 一种数据中心网络带宽保证方法及系统 |
CN107888515A (zh) * | 2016-09-30 | 2018-04-06 | 郑州云海信息技术有限公司 | 一种基于ntb硬件的自适应优先级通信方法 |
CN107634915A (zh) * | 2017-08-25 | 2018-01-26 | 中国科学院计算机网络信息中心 | 数据传输方法、装置及储存介质 |
-
2018
- 2018-11-27 CN CN201811426135.9A patent/CN109768939B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN109768939A (zh) | 2019-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109768939B (zh) | 一种支持优先级的标签化网络栈方法和系统 | |
US11799764B2 (en) | System and method for facilitating efficient packet injection into an output buffer in a network interface controller (NIC) | |
US9258171B2 (en) | Method and system for an OS virtualization-aware network interface card | |
TWI392288B (zh) | 用於多核心通訊處理的系統及方法 | |
EP2406723B1 (en) | Scalable interface for connecting multiple computer systems which performs parallel mpi header matching | |
US7499457B1 (en) | Method and apparatus for enforcing packet destination specific priority using threads | |
US7499463B1 (en) | Method and apparatus for enforcing bandwidth utilization of a virtual serialization queue | |
US9185033B2 (en) | Communication path selection | |
US20040017819A1 (en) | Receive queue descriptor pool | |
EP2755363B1 (en) | Data-fast-distribution method and device | |
US11750418B2 (en) | Cross network bridging | |
US20190044879A1 (en) | Technologies for reordering network packets on egress | |
CN109313618A (zh) | 用于分组传递的图形处理单元(gpu) | |
CN1593041A (zh) | 具有多个首部的包的解封装和封装的方法、装置和计算机程序 | |
US20070124378A1 (en) | Method and system for indicate and post processing in a flow through data architecture | |
US7171464B1 (en) | Method of tracing data traffic on a network | |
US7457845B2 (en) | Method and system for TCP/IP using generic buffers for non-posting TCP applications | |
US20200272579A1 (en) | Rdma transport with hardware integration | |
US20200274832A1 (en) | Rdma transport with hardware integration and out of order placement | |
US9270602B1 (en) | Transmit rate pacing of large network traffic bursts to reduce jitter, buffer overrun, wasted bandwidth, and retransmissions | |
US7675920B1 (en) | Method and apparatus for processing network traffic associated with specific protocols | |
CN113553279B (zh) | 一种rdma通信加速集合通信的方法及系统 | |
US7376809B2 (en) | Systems and methods for multi-frame control blocks | |
CN118200253A (zh) | 面向rdma ud传输的可靠通信方法、电子设备及可读介质 | |
CN117834570A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |