CN116346737A - 一种基于Virtio-net的传输优化方法 - Google Patents
一种基于Virtio-net的传输优化方法 Download PDFInfo
- Publication number
- CN116346737A CN116346737A CN202310259448.4A CN202310259448A CN116346737A CN 116346737 A CN116346737 A CN 116346737A CN 202310259448 A CN202310259448 A CN 202310259448A CN 116346737 A CN116346737 A CN 116346737A
- Authority
- CN
- China
- Prior art keywords
- descriptor
- packet
- information
- target message
- sent
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 54
- 230000005540 biological transmission Effects 0.000 title claims abstract description 19
- 238000005457 optimization Methods 0.000 title claims abstract description 16
- 238000012545 processing Methods 0.000 claims description 16
- 238000004064 recycling Methods 0.000 claims description 4
- 238000004891 communication Methods 0.000 abstract description 6
- 230000006870 function Effects 0.000 description 10
- 230000007246 mechanism Effects 0.000 description 9
- 239000000872 buffer Substances 0.000 description 8
- 238000010586 diagram Methods 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 230000001133 acceleration Effects 0.000 description 5
- 230000003993 interaction Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001149 cognitive effect Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012482 interaction analysis Methods 0.000 description 1
- 230000000149 penetrating effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/35—Flow control; Congestion control by embedding flow control information in regular packets, e.g. piggybacking
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/56—Queue scheduling implementing delay-aware scheduling
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于Virtio‑net的传输优化方法,属于数据通信技术领域,方法包括:通过Virtio前端中的驱动程序模块查询待发送包,在存在待发送包的情况下,生成描述符并更新availidx,待发送包组成目标报文,向后端设备发送notify信息,notify信息包括待发送包所在队列的ID信息和availidx,通过后端设备根据notify信息得到描述符,根据描述符得到待发送包,以将目标报文搬运到后端设备侧。
Description
技术领域
本发明属于数据通信技术领域,具体涉及一种基于Virtio-net的传输优化方法。
背景技术
数据中心是云计算时代最重要的基础设施之为云提供强大的计算和存储能力。数据中心网络作为联合数据中心内所有计算、存储单元的“交通枢纽”,是影响云服务能力的关键所在。然而,近年来业界对数据中心网络性能以及虚拟化能力的需求日益增长,给现有端系统中网络协议栈的处理带来了极大挑战。一方面,目前业界普遍的百G级带宽、微秒级延时的高性能网络设施需要端系统协议栈具备极高的处理速度,因此将协议栈的处理卸载(offload)到网卡ASIC(Application Specific Integrated Circuit,专用集成电路)芯片上实现是目前普遍采用的方式;另一方面,为应对层出不穷的虚拟化需求,网络协议栈所包含的处理功能也需要频繁更新,这又使将协议栈的处理卸载到网卡ASIC芯片上变得非常困难。在此背景下,智能网卡(SmartNIC)技术开始走进人们的视野并逐渐得到普及。不同于传统网卡,智能网卡同时具备高性能及可编程的能力,既能处理高速的网络数据流,又能对网卡进行编程,实现定制化的处理逻辑。
此外,从业务的角度看,随着Internet的日益普及,企业内部网用户访问Internet的需求在不断增加,企业需要对外提供诸如www页面浏览、FTP(File Transfer Protocol,文件传输协议)文件传输、DNS域名解析等服务,这些因素会导致网络流量的急剧增加。如果网络平台的吞吐量太小,就会成为网络瓶颈,给整个网络的传输效率带来负面影响。因此,在云计算里面,对网络进行性能测试的时候,吞吐量指标是技术指标里面的一个核心项,并且也是体现团队研发能力的一个有效展示。
根据RFC2544标准,以太网数据包的帧长采用64B、128B、256B、512B、1024B、1280B、1518B字节。目前大多数X86架构网络平台在处理256B、512B、1024B和1518B这样的中、大包时,吞吐量大都能近似线速,而处理64B和128B小包的时候,性能差异立即体现。但是,近年来普及的一些应用,包括MSN、QQ、视频、线上游戏等,都是以小包的形式在工作。因此,业界对网络平台的小包数据处理能力的关注程度越来越高。因此提升小包转发性能和降低时延对业界非常重要。
发明内容
本发明实施例的目的是提供一种基于Virtio-net的传输优化方法及装置,以提升小包转发性能和降低时延。
为了解决上述技术问题,本发明是这样实现的:
第一方面,本发明实施例提供了一种基于Virtio-net的传输优化方法,其特征在于,所述方法包括:
通过Virtio前端中的驱动程序模块查询待发送包,在存在待发送包的情况下,生成描述符并更新availidx,所述待发送包组成目标报文;
向后端设备发送notify信息,所述notify信息包括所述待发送包所在队列的ID信息和所述availidx;
通过所述后端设备根据所述notify信息得到所述描述符;
根据所述描述符得到所述待发送包,以将所述目标报文搬运到所述后端设备侧。
可选地,在所述通过Virtio前端中的驱动程序模块查询待发送包之后,在所述生成描述符之前,所述方法还包括:
将所述待发送包发送至skb对应的缓存中。
可选地,所述通过所述后端设备根据所述notify信息得到所述描述符包括:
通过所述后端设备根据所述notify信息计算所述描述符的数量;
通过所述后端设备的DMA引擎分N次获得所述描述符,所述N的值通过所述数量确定,N为正整数。
可选地,在所述根据所述描述符得到所述待发送包,以将所述目标报文搬运到所述后端设备侧之后,所述方法还包括:
通过所述DMA引擎将所述目标报文转发至网络侧。
可选地,在所述通过所述DMA引擎将所述目标报文转发至网络侧之后,所述方法还包括:
更新所述描述符的used信息,通过所述驱动程序模块根据所述used信息的属性回收所述描述符。
可选地,在所述更新所述描述符的used信息之后,所述方法还包括:
通过所述后端设备向所述Virtio前端发送MSIx中断信息。
可选地,所述notify信息包括多个子notify信息,在所述向后端设备发送notify信息之后,所述方法还包括:
通过轮询算法对所述notify信息处理,在所述多个子notify信息的数量达到预设值的情况下,通过所述后端设备根据所述notify信息得到所述描述符。
可选地,所述描述符的flag预留字段设有标识位,所述标识位指示报文的长度,在所述生成描述符之后,所述方法还包括:
根据所述目标报文的字节长度更新所述描述符的flag信息;
其中,在所述目标报文的字节长度大于等于预设值的情况下,将所述标志位的值更新为第一值;
在所述目标报文的字节长度小于预设值的情况下,将所述标志位的值更新为第二值。
可选地,在所述根据所述目标报文的字节长度更新所述描述符的flag信息之后,所述方法还包括:
在所述目标报文的字节长度大于等于预设值的情况下,将所述待发送包存储至所述描述符指向的内存;
在目标报文的字节长度小于预设值的情况下,将所述待发送包存储至所述描述符中的内存中。
可选地,所述根据所述描述符得到所述待发送包,包括:
在所述目标报文的字节长度大于等于预设值的情况下,根据所述描述符发送读请求,以从所述描述符指向的内存中得到所述待发送包;
在目标报文的字节长度小于预设值的情况下,从所述描述符的内存中得到所述待发送包。
第二方面,本发明实施例提供了一种基于Virtio-net的传输优化装置,其特征在于,所述装置包括:
生成模块,用于通过Virtio前端中的驱动程序模块查询待发送包,在存在待发送包的情况下,生成描述符并更新availidx,所述待发送包组成目标报文;
第一发送模块,用于向后端设备发送notify信息,所述notify信息包括所述待发送包所在队列的ID信息和所述availidx;
第一获取模块,用于通过所述后端设备根据所述notify信息得到所述描述符;
搬运模块,用于根据所述描述符得到所述待发送包,以将所述目标报文搬运到所述后端设备侧。
可选地,所述装置还包括:
第二发送模块,将所述待发送包发送至skb对应的缓存中。
可选地,所述第一获取模块包括:
计算模块,用于通过所述后端设备根据所述notify信息计算所述描述符的数量;
第一获取子模块,用于通过所述后端设备的DMA引擎分N次获得所述描述符,所述N的值通过所述数量确定,N为正整数。
可选地,所述装置还包括:
第三发送模块,用于通过所述DMA引擎将所述目标报文转发至网络侧。
可选地,所述装置还包括:
第一更新模块,用于更新所述描述符的used信息,通过所述驱动程序模块根据所述used信息的属性回收所述描述符。
可选地,所述装置还包括:
第四发送模块,用于通过所述后端设备向所述Virtio前端发送MSIx中断信息。
可选地,所述装置还包括:
第二获取模块,用于通过轮询算法对所述notify信息处理,在所述多个子notify信息的数量达到预设值的情况下,通过所述后端设备根据所述notify信息得到所述描述符。
可选地,所述装置还包括:
第二更新模块,用于根据所述目标报文的字节长度更新所述描述符的flag信息;
其中,在所述目标报文的字节长度大于等于预设值的情况下,将所述标志位的值更新为第一值;
在所述目标报文的字节长度小于预设值的情况下,将所述标志位的值更新为第二值。
可选地,所述装置还包括:
第五发送模块,用于在所述目标报文的字节长度大于等于预设值的情况下,将所述待发送包存储至所述描述符指向的内存;
在目标报文的字节长度小于预设值的情况下,将所述待发送包存储至所述描述符中的内存中。
可选地,所述第一获取模块还包括:
第二获取子模块,用于在所述目标报文的字节长度大于等于预设值的情况下,根据所述描述符发送读请求,以从所述描述符指向的内存中得到所述待发送包;
在目标报文的字节长度小于预设值的情况下,从所述描述符的内存中得到所述待发送包。
本发明实施例提供了一种基于Virtio-net的传输优化方法,其特征在于,所述方法包括:通过Virtio前端中的驱动程序模块查询待发送包,在存在待发送包的情况下,生成描述符并更新availidx,所述待发送包组成目标报文,向后端设备发送notify信息,所述notify信息包括所述待发送包所在队列的ID信息和所述availidx,通过所述后端设备根据所述notify信息得到所述描述符,根据所述描述符得到所述待发送包,以将所述目标报文搬运到所述后端设备侧。本发明实施例提供的Virtionotify机制里,不管传输的是大包还是小包,由于notify的内容额外携带了队列的availidx,进而让FPGA实现的后端驱动在不需要额外开销的情况下,不需要通过DMA取读取availidx,节省了一次DMA读操作,可有效提升小包转发性能和降低时延。
附图说明
图1是Virtio的架构的示意图;
图2是Virtio前后端交互原理的示意图;
图3是本发明实施例提供的一种基于Virtio-net的传输优化方法的流程示意图;
图4是Virtio-net1.1典型发包处理流程的示意图;
图5是本发明实施例提供的一种基FPGA处理notify处理流程的示意图;
图6是本发明实施例提供的新旧描述符flag定义对比的示意图;
图7是本发明实施例提供的merge desc在描述符表里面的形态的示意图;
图8是本发明实施例提供的一种基于Virtio-net的传输优化装置的结构示意图。
本发明目的的实现、功能特点及优点将结合实施例、参照附图做进一步说明。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。
下面结合附图,通过具体的实施例及其应用场景对本发明实施例提供的基于Virtio-net的传输优化方法进行详细地说明。
实施例一
智能网卡是有线网络和计算资源在同一张卡上的融合,通常由网络接口控制器、多核CPU制成,并可选择添加FPGA(Field-Programmable Gate Array,现场可编程门阵列)。在基于FPGA的智能网卡,主机侧网络的卸载常常使用到Virtio,而Virtio是一种I/O半虚拟化解决方案,是一套通用I/O设备虚拟化的程序,是对半虚拟化Hypervisor中的一组通用I/O设备的抽象。
如图1所示,从总体上看,Virtio可以分为四层,包括前端客户端中各种驱动程序模块,后端Hypervisor上的处理程序模块,中间用于前后端通信的Virtio层和Virtio-ring层,Virtio这一层实现的是虚拟队列接口,算是前后端通信的桥梁,而Virtio-ring则是该桥梁的具体实现,它实现了两个环形缓冲区,分别用于保存前端驱动程序和后端处理程序执行的信息。
从图1也可以看到,前后端的通信主要是靠传输层的ring进行通信的,而ring主要通过两个环形缓冲区来完成数据流的转发,如图2所示。
虚拟机通过写寄存器的方式通知外部的KVM(Kernel-based Virtual Machine,基于内核的虚拟机),进而通知Virtio后端。为了优化性能,业界又提出了vHost-net,vHost-user和vDPA(Virtio Data Path Acceleration,Virtio数据路径加速)三种加速技术,如今基于FPGA的智能网卡则是直接在FPGA内部实现Virtio的后端,并将其透传到虚机,不用再穿透KVM/QEMU(Quick Emulator,虚拟操作系统模拟器),进一步减少性能的损耗。
尽管已经通过硬件实现Virtio后端进行加速,并且Virtio从1.0版本演进到更有利于硬件加速的1.1版本,但在小包场景下,转发性能依然较差,在100G场景下,还是只能在256字节场景下,达到线速处理。对于64B的性能依然很不理想。可以看出,即使通过优化软件实现及硬件加速均无法在小包场景下获得较好的小包转发性能,那么就需要分析其为何在小包场景下存在瓶颈,从根本原因解决该问题。本发明就是从Virtio1.1最底层实现ring的交互分析着手,分析报文发送的整个流程,分析流程的合理性与优化点,最终通过减少Virtio内部前后端交互的次数,达到小包转发性能的提升和时延的降低。
参照图3,示出了本发明实施例提供的是本发明实施例提供的一种基于Virtio-net的传输优化方法的流程示意图,所述方法包括:
S301:通过Virtio前端中的驱动程序模块查询待发送包,在存在待发送包的情况下,生成描述符并更新avail idx,所述待发送包组成目标报文;availidx是ring环的指针。
可选地,在所述通过Virtio前端中的驱动程序模块查询待发送包之后,在所述生成描述符之前,所述方法还包括:
将所述待发送包发送至skb对应的缓存中。skb是套接口缓存(socket buffer)。
具体来说,发送的目标报文会划分成多个小包,驱动程序模块会轮询包,看用户应用是否有包需要发送,一旦有包需要发送,包首先会先到skb对应缓存里,然后生成有效的发送描述符同时更新avail idx。
可选地,在本发明实施例中,如图4所示,在驱动程序模块会轮询包之前,还包括发送初始化阶段,主要是完成一些寄存器配置及功能协商;协商卸载相关,和接收初始化同步进行,最终设置设备状态寄存器(device status register),当驱动加载成功后,Virtio设备可以开始发送工作了。
S302:向后端设备发送notify信息,所述notify信息包括所述待发送包所在队列的ID信息和所述avail idx;
具体来说,驱动程序模块通过notify的方式通知后端设备,而notify信息包括待发送包所在队列的ID信息和avail idx,相对于现有技术中notify的时候只将队列id两字节信息传递过来,本发明实施例中将notify的内容由单纯的队列id变更为队列id+对应队列的avail idx四字节模式。在一次iowrite中,由iowrite16变为iowrite32,没有增加额外开销,但是后端驱动无需为了获取该队列的avail idx而进行一次额外操作。
可选地,notify函数在当前kernel代码可以如下:
static void vp_notify(struct virtqueue*vq)
{
struct Virtio_pci_device*vp_dev=to_vp_device(vq->vdev);
/*we write the queue′s selector into the notification register to
*signal the other end*/
iowrite16(vq->index,vp_dev->ioaddr+VIRTIO_PCI_QUEUE_NOTIFY);
}
现有技术中,notify的目的是前端告诉后端驱动哪个队列有报文需要处理,然后第一次存储器直接访问(Direct Memory Access,DMA)读操作是去获取该队列的availidx;第二次DMA读是利用第一次获取到的avail idx信息和本地保存的last avail idx进行差值比较,计算有多少avail的描述符可以使用,进而发起将这些待搬运的描述符读回到后端;第三次DMA读则是消耗这些搬运回来的描述符,利用描述符信息搬运真实的报文数据。搬运完后的DMA写操作,则是后端驱动通过回写描述符信息,告知前端驱动这些包已经处理完毕,描述符可以回收,对应缓存可以释放。可以看出,要发送一个报文,需要有一次notify,即MMIO操作,三次DMA读操作和一次DMA写操作,而本发明实施例中通过对于notify函数的优化即可减少一次DMA读操作。
S303:通过所述后端设备根据所述notify信息得到所述描述符;
可选地,所述通过所述后端设备根据所述notify信息得到所述描述符包括:
通过所述后端设备根据所述notify信息计算所述描述符的数量;
通过所述后端设备的DMA引擎分N次获得所述描述符,所述N的值通过所述数量确定,N为正整数。
具体来说,后端设备会根据notify信息,计算本次notify有多少描述符需要处理,后端的DMA引擎会一次或者分若干次获得avail描述符。
S304:根据所述描述符得到所述待发送包,以将所述目标报文搬运到所述后端设备侧。
可选地,在所述根据所述描述符得到所述待发送包,以将所述目标报文搬运到所述后端设备侧之后,所述方法还包括:
通过所述DMA引擎将所述目标报文转发至网络侧。
具体来说,后端设备侧直接利用发送方向有效的描述符发送读请求,目的是将报文从主机侧内存搬运到后端设备侧,如果一个包比较大,发出的请求则可能是多个,然后DMA发送引擎会将数据包从主机侧内存搬到后端设备,并转发到网络侧。
本发明实施例提供的Virtio notify机制里,不管传输的是大包还是小包,由于notify的内容额外携带了队列的avail idx,进而让FPGA实现的后端驱动在不需要额外开销的情况下,不需要通过DMA取读取avail idx,节省了一次DMA读操作,即可以减少2-4us的开销,可有效提升小包转发性能和降低时延。
在一种可能的实施方式中,在所述通过所述DMA引擎将所述目标报文转发至网络侧之后,所述方法还包括:
更新所述描述符的used信息,通过所述驱动程序模块根据所述used信息的属性回收所述描述符。
具体来说,搬完内存内数据后,紧接着回写描述符里面的used信息。当用户应用不断发包,设备侧会重复S301-S303的步骤,值得留意的是,Virtio规范并未要求一包一更新描述符,故device会采用类似NAPI(NEW API)机制,在从主机侧搬运多个报文后,一次性更新多个描述符,或者利用Virtio1.1in-order新特性,更新最新的信息即可,即可将该描述符前面的所有消费过的描述符进行回收。驱动会不断监控描述符used属性的更新情况,及时回收描述符资源,提升可分配的描述符的数量,最终达到快速回收并重新循环使用,达到提升性能提升的目的。
在一种可能的实施方式中,在所述更新所述描述符的used信息之后,所述方法还包括:
通过所述后端设备向所述Virtio前端发送MSIx中断信息。
具体来说,当完成描述符的flag更新后,后端设备可以根据需要向前端驱动程序模块发送MSIx中断.
在一种可能的实施方式中,所述notify信息包括多个子notify信息,在所述向后端设备发送notify信息之后,所述方法还包括:
通过轮询算法对所述notify信息处理,在所述多个子notify信息的数量达到预设值的情况下,通过所述后端设备根据所述notify信息得到所述描述符。
由于在智能网卡中,通过SR-IOV(Single Root I/O Virtualization,单根I/O虚拟化)或者SIOV技术(Scalable IOV),实现了很多功能(function),每个功能(function)又可以支持多个队列,故而在实际工作中采用轮询round robin算法对notify的信息进行处理,CPU侧写入的notify在实际过程中并不是立马实时处理的,这些信息被FPGA内部的BRAM缓存,并且对于同一个功能(function)同一个队列的avail idx进行迭代,在大流量,多队列场景下,描述符搬运引擎每次搬运的描述符数量是多次notify积累下的数量。在搬运相同描述符数量的时候,减少了搬运描述符的DMA总次数。
如图5所示提供了一种基FPGA处理notify处理流程的示意图,本发明实施例中,FPGA实现的后端驱动,对队列的notify进行了叠加,不管是大包还是小包,由于采用轮询rr算法,每个队列都对notify进行了叠加,优化后的机制将让描述符搬运引擎一次取更多的描述符,并可以支持突发读取描述符,改变传统频繁取描述符的碎片化操作。
Virtio1.1里面的描述符结构如下:
struct vring_packed_desc{
/*Buffer Address.*/
__le64 addr;
/*Buffer Length.*/
__le32 len;
/*Buffer ID.*/
__le16 id;
/*The flags depending on descriptor type.*/
__le16 flags;
};
每个描述符16字节,在极端情况下,一个包一次notify的时候,描述符搬运引擎每次DMA读请求搬运一个描述符,但是对于FPGA内部PCIe DMA引擎来说,其最大请求单元(maxread request size)一般是256/512字节,用户侧的用户总线位宽为64B或者128B,即意味在一次DMA读请求中,读16字节和读128字节的开销基本相同。在小包场景下,一次notify取一个16字节的描述符,再取一次64字节的数据包,合计搬运了80字节数据,却消耗了两次DMA读的RTT(Round-Trip Time,往返时间)。
为进一步优化减少小包情形下DMA的次数。在一种可能的实施方式中,所述描述符的flag预留字段设有标识位,所述标识位指示报文的长度,在所述生成描述符之后,所述方法还包括:
根据所述目标报文的字节长度更新所述描述符的flag信息;
其中,在所述目标报文的字节长度大于等于预设值的情况下,将所述标志位的值更新为第一值;
在所述目标报文的字节长度小于预设值的情况下,将所述标志位的值更新为第二值。
具体来说,驱动程序模块轮询包,用户应用有包需要发送的情况下,包首先会先到skb对应缓存里,然后生成有效的发送描述符,还会更新描述符及其内部的avail flag标志位,最后再以notify的方式通知后端。
本发明实施例中可进一步优化描述符的结构,由此针对Virtio-net里面的分配描述符进行修改,提出一个merge-desc概念,即设置一个merge-desc,如图6所示,其大小是128字节,在发送流程中,用描述符里面的长度信息做判断,当其发送的报文长度小于等于112字节时,我们启用merge报文格式,如果大于112字节时,我们采用原有模式,其区分采用原有描述符里面flag保留字段,具体如图6所示。
本发明实施例中,将原有的16bit flag里面的bit3拿出来做MERGR标识,在所述目标报文的字节长度大于等于预设值的情况下,将所述标志位的值更新为第一值,在所述目标报文的字节长度小于预设值的情况下,将所述标志位的值更新为第二值。
例如,如果待发送的报文大于112字节,该bit为0,如果待发送的报文,小于等于112字节,其值为1,且当应用通过skb申请sg时,驱动会直接将利用Virtio packed queue里面的in-order特性,将报文内容填充到紧接着的7个描述符位置上,即利用描述符的信息承载了报文内容,如图7所示。在这种机制下,即使报文长度未使用到112字节,merge desc接下来的描述符也不能被应用程序调用。新的业务报文只能从第8个后面的描述符开始使用。
对应驱动修改如下:
本发明实施例通过引入merge-desc,在flag设立MERGE bit,在兼容当前Virtio前后端交互机制的情况下,将长度小于等于112字节的报文放置在描述符表内存中,没有引入额外开销的情况下,再次减少一次DMA读操作,即再次减少2-4us的开销;此外,由于DMA读次数的减少,也直接加快了描述符的回收,报文处理的时延也将大大减小。
可选地,在所述根据所述目标报文的字节长度更新所述描述符的flag信息之后,所述方法还包括:
在所述目标报文的字节长度大于等于预设值的情况下,将所述待发送包存储至所述描述符指向的内存;
在目标报文的字节长度小于预设值的情况下,将所述待发送包存储至所述描述符中的内存中。
所述根据所述描述符得到所述待发送包,包括:
在所述目标报文的字节长度大于等于预设值的情况下,根据所述描述符发送读请求,以从所述描述符指向的内存中得到所述待发送包;
在目标报文的字节长度小于预设值的情况下,从所述描述符的内存中得到所述待发送包。
本发明实施例中,通过提出merge-desc的概念,在原有的描述符格式里面的flag预留字段,设置MERGE bit,用于区分长短包,加之Virtio packed queue的in-order特性,进而确认真实报文内容是放描述符表的内存还是存放描述符指向的内存。当报文小于112字节的时候,通过将报文拆分到紧接着的7个描述符区段,实现通过notify的机制就将报文从Virtio前端搬运到了FPGA实现的后端,对于小包而言,再一次减少了一次DMA操作,提升了Virtio-net的小包性能和降低时延的目的。
实施例二
参照图8,示出了本发明实施例提供的一种基于Virtio-net的传输优化装置80的结构示意图,包括:
生成模块801,用于通过Virtio前端中的驱动程序模块查询待发送包,在存在待发送包的情况下,生成描述符并更新availidx,所述待发送包组成目标报文;
第一发送模块802,用于向后端设备发送notify信息,所述notify信息包括所述待发送包所在队列的ID信息和所述availidx;
第一获取模块803,用于通过所述后端设备根据所述notify信息得到所述描述符;
搬运模块804,用于根据所述描述符得到所述待发送包,以将所述目标报文搬运到所述后端设备侧。
可选地,所述装置80还包括:
第二发送模块805,将所述待发送包发送至skb对应的缓存中。
可选地,所述第一获取模块包括:
计算模块806,用于通过所述后端设备根据所述notify信息计算所述描述符的数量;
第一获取子模块8031,用于通过所述后端设备的DMA引擎分N次获得所述描述符,所述N的值通过所述数量确定,N为正整数。
可选地,所述装置80还包括:
第三发送模块807,用于通过所述DMA引擎将所述目标报文转发至网络侧。
可选地,所述装置80还包括:
第一更新模块808,用于更新所述描述符的used信息,通过所述驱动程序模块根据所述used信息的属性回收所述描述符。
可选地,所述装置80还包括:
第四发送模块809,用于通过所述后端设备向所述Virtio前端发送MSIx中断信息。
可选地,所述装置80还包括:
第二获取模块810,用于通过轮询算法对所述notify信息处理,在所述多个子notify信息的数量达到预设值的情况下,通过所述后端设备根据所述notify信息得到所述描述符。
可选地,所述装置80还包括:
第二更新模块811,用于根据所述目标报文的字节长度更新所述描述符的flag信息;
其中,在所述目标报文的字节长度大于等于预设值的情况下,将所述标志位的值更新为第一值;
在所述目标报文的字节长度小于预设值的情况下,将所述标志位的值更新为第二值。
可选地,所述装置80还包括:
第五发送模块812,用于在所述目标报文的字节长度大于等于预设值的情况下,将所述待发送包存储至所述描述符指向的内存;
在目标报文的字节长度小于预设值的情况下,将所述待发送包存储至所述描述符中的内存中。
可选地,所述第一获取模块还包括:
第二获取子模块8032,用于在所述目标报文的字节长度大于等于预设值的情况下,根据所述描述符发送读请求,以从所述描述符指向的内存中得到所述待发送包;
在目标报文的字节长度小于预设值的情况下,从所述描述符的内存中得到所述待发送包。
本发明实施例提供的基于Virtio-net的传输优化装置80能够实现上述方法实施例中实现的各个过程,为避免重复,这里不再赘述。
在本发明实施例中,生成模块用于通过Virtio前端中的驱动程序模块查询待发送包,在存在待发送包的情况下,生成描述符并更新availidx,所述待发送包组成目标报文,第一发送模块用于向后端设备发送notify信息,所述notify信息包括所述待发送包所在队列的ID信息和所述availidx,第一获取模块用于通过所述后端设备根据所述notify信息得到所述描述符,搬运模块用于根据所述描述符得到所述待发送包,以将所述目标报文搬运到所述后端设备侧。本发明实施例提供的Virtionotify机制里,不管传输的是大包还是小包,由于notify的内容额外携带了队列的availidx,进而让FPGA实现的后端驱动在不需要额外开销的情况下,不需要通过DMA取读取availidx,节省了一次DMA读操作,可有效提升小包转发性能和降低时延。
本发明实施例中的虚拟系统可以是装置,也可以是终端中的部件、集成电路、或芯片。
此外,需要说明的是,以上所描述的装置实施例仅仅是示意性的,并不对本发明的保护范围构成限定,在实际应用中,本领域的技术人员可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的,此处不做限制。
另外,未在本实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的智能认知方法和系统,此处不再赘述。
以上仅为本发明的较佳实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于Virtio-net的传输优化方法,其特征在于,所述方法包括:
通过Virtio前端中的驱动程序模块查询待发送包,在存在待发送包的情况下,生成描述符并更新availidx,所述待发送包组成目标报文;
向后端设备发送notify信息,所述notify信息包括所述待发送包所在队列的ID信息和所述availidx;
通过所述后端设备根据所述notify信息得到所述描述符;
根据所述描述符得到所述待发送包,以将所述目标报文搬运到所述后端设备侧。
2.根据权利要求1所述的方法,其特征在于,在所述通过Virtio前端中的驱动程序模块查询待发送包之后,在所述生成描述符之前,所述方法还包括:
将所述待发送包发送至skb对应的缓存中。
3.根据权利要求1所述的方法,其特征在于,所述通过所述后端设备根据所述notify信息得到所述描述符包括:
通过所述后端设备根据所述notify信息计算所述描述符的数量;
通过所述后端设备的DMA引擎分N次获得所述描述符,所述N的值通过所述数量确定,N为正整数。
4.根据权利要求3所述的方法,其特征在于,在所述根据所述描述符得到所述待发送包,以将所述目标报文搬运到所述后端设备侧之后,所述方法还包括:
通过所述DMA引擎将所述目标报文转发至网络侧。
5.根据权利要求4所述的方法,其特征在于,在所述通过所述DMA引擎将所述目标报文转发至网络侧之后,所述方法还包括:
更新所述描述符的used信息,通过所述驱动程序模块根据所述used信息的属性回收所述描述符。
6.根据权利要求5所述的方法,其特征在于,在所述更新所述描述符的used信息之后,所述方法还包括:
通过所述后端设备向所述Virtio前端发送MSIx中断信息。
7.根据权利要求1所述的方法,其特征在于,所述notify信息包括多个子notify信息,在所述向后端设备发送notify信息之后,所述方法还包括:
通过轮询算法对所述notify信息处理,在所述多个子notify信息的数量达到预设值的情况下,通过所述后端设备根据所述notify信息得到所述描述符。
8.根据权利要求1所述的方法,其特征在于,所述描述符的flag预留字段设有标识位,所述标识位指示报文的长度,在所述生成描述符之后,所述方法还包括:
根据所述目标报文的字节长度更新所述描述符的flag信息;
其中,在所述目标报文的字节长度大于等于预设值的情况下,将所述标志位的值更新为第一值;
在所述目标报文的字节长度小于预设值的情况下,将所述标志位的值更新为第二值。
9.根据权利要求8所述的方法,其特征在于,在所述根据所述目标报文的字节长度更新所述描述符的flag信息之后,所述方法还包括:
在所述目标报文的字节长度大于等于预设值的情况下,将所述待发送包存储至所述描述符指向的内存;
在目标报文的字节长度小于预设值的情况下,将所述待发送包存储至所述描述符中的内存中。
10.根据权利要求9所述的方法,其特征在于,所述根据所述描述符得到所述待发送包,包括:
在所述目标报文的字节长度大于等于预设值的情况下,根据所述描述符发送读请求,以从所述描述符指向的内存中得到所述待发送包;
在目标报文的字节长度小于预设值的情况下,从所述描述符的内存中得到所述待发送包。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310259448.4A CN116346737A (zh) | 2023-03-10 | 2023-03-10 | 一种基于Virtio-net的传输优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310259448.4A CN116346737A (zh) | 2023-03-10 | 2023-03-10 | 一种基于Virtio-net的传输优化方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116346737A true CN116346737A (zh) | 2023-06-27 |
Family
ID=86888879
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310259448.4A Pending CN116346737A (zh) | 2023-03-10 | 2023-03-10 | 一种基于Virtio-net的传输优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116346737A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971326A (zh) * | 2023-12-05 | 2024-05-03 | 天翼云科技有限公司 | 一种有智能网卡的主机启动方法 |
-
2023
- 2023-03-10 CN CN202310259448.4A patent/CN116346737A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971326A (zh) * | 2023-12-05 | 2024-05-03 | 天翼云科技有限公司 | 一种有智能网卡的主机启动方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Honda et al. | mSwitch: a highly-scalable, modular software switch | |
US6526446B1 (en) | Hardware only transmission control protocol segmentation for a high performance network interface card | |
US7631106B2 (en) | Prefetching of receive queue descriptors | |
US20180159803A1 (en) | Header replication in accelerated tcp (transport control protocol) stack processing | |
US11956156B2 (en) | Dynamic offline end-to-end packet processing based on traffic class | |
EP3771169B1 (en) | Message processing method and related device | |
US20070271401A1 (en) | Techniques to moderate interrupt transfer | |
CN113572688B (zh) | 报文转发方法及终端设备、计算机存储介质 | |
US7788437B2 (en) | Computer system with network interface retransmit | |
US20220217085A1 (en) | Server fabric adapter for i/o scaling of heterogeneous and accelerated compute systems | |
US20180181421A1 (en) | Transferring packets between virtual machines via a direct memory access device | |
CN116346737A (zh) | 一种基于Virtio-net的传输优化方法 | |
US20060004904A1 (en) | Method, system, and program for managing transmit throughput for a network controller | |
CN116074131B (zh) | 一种数据处理方法、智能网卡和电子设备 | |
KR20240004315A (ko) | Smartnic들 내의 네트워크 연결형 mpi 프로세싱 아키텍처 | |
US8745235B2 (en) | Networking system call data division for zero copy operations | |
US6567859B1 (en) | Device for translating medium access control dependent descriptors for a high performance network | |
CN106790162B (zh) | 虚拟网络优化方法与系统 | |
CN116954675A (zh) | 已用环表更新方法及模块、后端设备、介质、设备、芯片 | |
MacArthur et al. | An efficient method for stream semantics over rdma | |
CN115866103A (zh) | 一种报文处理方法、装置、智能网卡和服务器 | |
Balaji et al. | Supporting iWARP compatibility and features for regular network adapters | |
CN115086310A (zh) | 一种高吞吐量、低延迟的数据包转发方法 | |
CN116136790A (zh) | 任务处理方法和装置 | |
CN112019450A (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 |