CN116954675A - 已用环表更新方法及模块、后端设备、介质、设备、芯片 - Google Patents

已用环表更新方法及模块、后端设备、介质、设备、芯片 Download PDF

Info

Publication number
CN116954675A
CN116954675A CN202310834524.XA CN202310834524A CN116954675A CN 116954675 A CN116954675 A CN 116954675A CN 202310834524 A CN202310834524 A CN 202310834524A CN 116954675 A CN116954675 A CN 116954675A
Authority
CN
China
Prior art keywords
packet
update information
write request
linked list
queues
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
Application number
CN202310834524.XA
Other languages
English (en)
Inventor
王建东
刘静涛
马强
米岩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Yunbao Chuangxin Intelligent Technology Co ltd
Original Assignee
Beijing Yunbao Chuangxin Intelligent Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Yunbao Chuangxin Intelligent Technology Co ltd filed Critical Beijing Yunbao Chuangxin Intelligent Technology Co ltd
Priority to CN202310834524.XA priority Critical patent/CN116954675A/zh
Publication of CN116954675A publication Critical patent/CN116954675A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请涉及已用环表更新方法及模块、后端设备、介质、设备、芯片,包括:当接收到任一个队列的包更新信息时,将该包更新信息存储至存储单元;若所述存储单元中所述队列的包更新信息的个数等于n,则根据所述n个包更新信息生成第一写请求和第二写请求,并将所述第一写请求和所述第二写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第一写请求将所述n个包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第二写请求将所述n个包更新信息中最后接收的一个包更新信息的索引写入所述已用环表,通过本申请,有利于提高数据包收包速率。

Description

已用环表更新方法及模块、后端设备、介质、设备、芯片
技术领域
本申请涉及云计算虚拟化技术领域,具体涉及一种已用环表更新方法及模块、后端设备、计算机可读存储介质、电子设备、芯片。
背景技术
云计算虚拟化技术中,为了让多个Guest OS(客户机操作系统)可以独立于HostOS(主机操作系统)运行在同一个硬件上,通常需要增加一个虚拟化层来实现,该虚拟化层称为VMM(Virtual Machine Monitor,虚拟机监视器)。
QEMU(MachineEmulator and Virtualizer)作为一个VMM提供了全虚拟化环境,在全虚拟化环境中,客户机操作系统不感知自己是虚拟机,也无需修改客户机操作系统。但是,由于所有操作都需要前端驱动模拟,设备访问过程中,频繁的陷入/陷出带来了严重的性能问题,针对于此,半虚拟化技术VIRTIO(Virtual I/O Device,虚拟化I/O设备)应运而生。
VIRTIO是一个通用的半虚拟化I/O框架,VMM通过它模拟出一系列的虚拟化设备。VIRTIO框架主要包含3个部分:前端驱动(Front-end Driver)、后端设备(Back-endDevice)以及虚拟化队列(Virtqueue)。其中,前端驱动为虚拟机内部的VIRTIO模拟设备(比如常见的VIRTIO网络设备、VIRTIO磁盘设备等)对应的驱动,前端驱动用于接收用户态(UserMode)的请求,然后按照预设的协议将这些请求进行封装并发送到后端设备;后端设备通常在QEMU中实现,后端设备用于接收前端驱动发过来的I/O请求并进行解析,从实际物理设备上完成收、发请求,最终通过中断机制通知前端驱动;前端驱动和后端设备的数据通过Virtqueue进行交互。
按照VIRTIO规范,一个Virtqueue包含描述符表(Descriptor Table)、可用环表(Avail Ring)以及已用环表(Used Ring),描述符表中存放着数据缓存地址、长度、标志以及下一跳指针等信息,可用环表和已用环表中存放着指向描述符表中条目的指针;在接收数据包时,前端驱动将分配的用于存放数据包的缓存地址和长度等信息填入描述符表中描述符表项,并将该描述符表项的指针值存入至可用环表的当前索引指向的位置并更新索引;前端驱动通知后端设备发送数据包。
后端设备在接收数据包时,读取可用环表中的指针值,根据该指针值读取描述符表中的描述符表项的信息,根据该描述符表项的信息确定用于存放数据包的缓存地址和长度,将数据包存入该缓存地址,并更新可用环表的内容(包括指针值、数据包长度)和索引,通知前端驱动当前设备送了多少报文到主机;进一步地,读取MSI-X中断表,发起中断,通知前端驱动收到数据包。因此,一个数据包在接收时要执行至少四次写请求,包括写数据包缓存、写已用环表内容、写已用环表索引、写中断。当接收数据包数目比较多时,写请求带宽会成为瓶颈,影响数据包收包速率;以小包64字节为例,假设系统主频为1GHz,接收一个包需要4个时钟周期的写请求,则理想情况下,最大包速率为1/4=250Mpps。
发明内容
本申请的目的在于提供一种已用环表更新方法及模块、后端设备、计算机可读存储介质、电子设备、芯片,以提高数据包发包速率。
为实现上述目的,本申请实施例提供一种已用环表更新方法,所述方法包括:
当接收到任一个队列的包更新信息时,将该包更新信息存储至存储单元;所述包更新信息包括指针值、数据包长度、索引;
判断所述存储单元中所述队列的包更新信息的个数是否等于n,若是,则从所述存储单元中读取所述队列的n个包更新信息;其中,当所述n个包更新信息被读取时,所述n个包更新信息从所述存储单元中删除;
根据所述n个包更新信息生成第一写请求和第二写请求,并将所述第一写请求和所述第二写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第一写请求将所述n个包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第二写请求将所述n个包更新信息中最后接收的一个包更新信息的索引写入所述已用环表;
其中,所述第一写请求包括所述n个包更新信息的指针值、数据包长度,所述第二写请求包括所述n个包更新信息中最后接收的一个包更新信息的索引,所述n大于等于2。
本申请实施例提供一种已用环表更新模块,包括:
存储单元,用于当接收到任一个队列的包更新信息时,存储该包更新信息;所述包更新信息包括指针值、数据包长度、索引;
控制单元,用于判断所述存储单元中所述队列的包更新信息的个数是否等于n,若是,则从所述存储单元中读取所述队列的n个包更新信息;其中,当所述n个包更新信息被读取时,所述n个包更新信息从所述存储单元中删除;
写请求生成单元,用于根据所述n个包更新信息生成第一写请求和第二写请求,并将所述第一写请求和所述第二写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第一写请求将所述n个包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第二写请求将所述n个包更新信息中最后接收的一个包更新信息的索引写入所述已用环表;
其中,所述第一写请求包括所述n个包更新信息的指针值、数据包长度,所述第二写请求包括所述n个包更新信息中最后接收的一个包更新信息的索引,所述n大于等于2。
本申请实施例还提供一种VIRTIO后端设备,包括如上所述的已用环表更新模块。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现如上所述的已用环表更新方法。
本申请实施例还提供一种电子设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述的已用环表更新方法。
本申请实施例提供一种芯片,包括如上所述的VIRTIO后端设备。
本申请实施例提供了一种已用环表更新方法及模块、VIRTIO后端设备、计算机可读存储介质、电子设备、芯片,传统方法在更新已用环表时,每接收到一个包更新信息,则发起2个写请求,该2个写请求分别用于将该一个包更新信息的指针值、数据包长度以及索引写入可用环表,因此对于n个包更新信息,则需要发起2n个写请求(n大于1);相对于传统方法,本申请实施例在更新已用环表时,在系统数据带宽允许情况下,根据n个包更新信息发起2个写请求,其中一个写请求用于将n个包更新信息的指针值、数据包长度写入可用环表,另一个写请求用于将索引写入可用环表,相对于传统方法要发起2n个写请求而言,本申请实施例只需要发起2个写请求即可完成已用环表的更新,能够减少发起写请求的次数,充分利用系统数据带宽,实现一次处理n个包更新信息,大大提高已用环表更新效率,从而提高数据包的收包速率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一个实施例中的一种已用环表更新方法的流程图。
图2为本申请一个实施例中VIRTIO网络设备收包流程示意图。
图3为传统方法中可用环表更新模块的原理示意图。
图4为本申请一个实施例中可用环表更新模块的原理示意图。
图5为本申请一个实施例中的一种已用环表更新模块的示意图。
具体实施方式
附图的详细说明意在作为本申请的当前优选实施例的说明,而非意在代表本申请能够得以实现的仅有形式。应理解的是,相同或等同的功能可以由意在包含于本申请的精神和范围之内的不同实施例完成。
参阅图1,本申请的一个实施例提供一种已用环表更新方法,所述方法基于已用环表更新模块实现。
如图2所示,VIRTIO网络设备发包流程包括VIRTIO前端驱动执行流程和后端设备执行流程;
VIRTIO前端驱动执行流程包括:
第一步,驱动程序准备接收数据包的缓存,这些数据包缓存通常分成2部分,一部分12字节放VIRITO网络设备头内容;一部分1522字节,存放接收到的网络数据包内容,如果VIRTIO的MERGAEGBLE这个特性协商成功,会将VIRTIO头和数据包内容放到一起,分配一个4096字节的缓存;
第二步,将第一步中分配的缓存的地址及长度等信息填入描述符表中,对于多个缓存需要占用多个描述符的数据包,通过下一跳将这些描述符串成一条链,一条链对应一个网络数据包;
第三步,将描述符表的链首地址填入可用环表的当前索引所指向的位置,同时更新索引值(索引值+1);
第四步,写通知寄存器(Notify),通知后端设备接收缓存已经准备好;
需说明的是,以上第一步至第四步均在VIRITO前端驱动中完成。
VIRTIO后端设备执行流程包括:
VIRTIO后端设备在接收到Notify通知后,执行如下步骤:
第五步,描述符表预取模块根据可用环表中的索引,读取可用环表中的指针值,利用这些指针值读取描述符表中的相关内容,这一步通常叫做描述符预取,具体实现由描述符表预取模块完成,预取指的是描述符的读取是在接收数据包之前完成的,等接收到数据包之后,直接使用之前预取的描述符,可以降低数据包接收延时;
当从以太网数据包接口模块接收到链路上接收到的数据包时,利用第五步预取到的描述符,将数据包发送到描述符所指向的缓存地址进行存储,同时,更新已用环表当前索引所指向地址的内容(4字节指针+4字节长度);
第六步,数据包更新模块将接收到的数据包通过数据包更新模块写入数据包缓存,缓存地址由对应的描述符内容指示;
第七步,已用环表更新模块更新已用环表内容,通知前端驱动当前设备送了多少报文到主机;
第八步,MSI-X中断模块读取MSI-X中断表,发起中断,通知前端驱动收到网络数据包。
本实施例的方法主要是上述第七步的内容,参阅图1,本实施例方法包括以下步骤:
步骤S10,当接收到任一个队列(Virtqueue)的包更新信息时,将该包更新信息存储至存储单元;所述包更新信息包括指针值、数据包长度、索引;
具体而言,所述包更新信息包含队列信息,根据所述队列信息可以确定是属于哪一个队列的包更新信息;所述包更新信息指的是数据包更新信息,所述已用环表用于记录已经使用的缓存地址,如图2所示,可用环表和已用环表均包括标志单元、索引单元、指针单元,其中,该索引单元用于存储索引值,该指针值指示当前可用的指针单元;所述指针单元用于存放指针值,该指针值指示描述符表中的地址;其中,描述符表的每个地址存储一个描述表项,如图2所示描述符表的每一行为一个描述符表项,每个描述符表项包括缓存地址(用于存放数据包)、缓存长度(预先分配给数据包的缓存资源)、标志(指示是否有下一跳)、下一跳(下一跳指针值),也就是说,可用环表和已用环表中存放的指针值与描述符表中的描述符表项是一一对应的,根据可用环表和已用环表中存放的指针值可以找到对应的描述符表项,根据描述符表项可以获取对应的缓存地址、缓存长度、标志、下一跳等信息;其中,描述符表中记录的预先分配给数据包的缓存长度与所述数据包长度可能不同,所述数据包长度为数据包的实际长度,分配给数据包的缓存长度大于等于所述数据包长度;
当将数据包存储至对应的缓存地址后,需要对已用环表进行更新,假设将数据包Pac1存储至缓存地址adr1,指针值1对应的描述符表项存放所述缓存地址adr1,已用环表的索引需更新至索引3,则此时会接收到数据包更新模块发送的一个包更新信息1,该包更新信息1包含指针值1、数据包Pac1的长度、索引3。
步骤S20,判断所述存储单元中所述队列的包更新信息的个数是否等于n,若是,则从所述存储单元中读取所述队列的n个包更新信息;其中,当所述n个包更新信息被读取时,所述n个包更新信息从所述存储单元中删除。
步骤S30,根据所述n个包更新信息生成第一写请求和第二写请求,并将所述第一写请求和所述第二写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第一写请求将所述n个包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第二写请求将所述n个包更新信息中最后接收的一个包更新信息的索引写入所述已用环表;
其中,所述第一写请求和第二写请求为PCIe TLP DMA格式,所述第一写请求包括所述n个包更新信息的指针值、数据包长度,所述第二写请求包括所述n个包更新信息中最后接收的一个包更新信息的索引,所述n大于等于2;
具体而言,如图3所示为传统方法对已用环表进行更新的示意图,在图3中,前级模块(数据包更新模块)依次送入3个包更新信息(包1、包2、包3)到已用环表更新模块中来,已用环表更新模块根据该3个包更新信息分别发起包1写请求(指针+长度)、包1写请求(索引),包2写请求(指针+长度)、包2写请求(索引),以及包3写请求(指针+长度)、包3写请求(索引),即对于这3个包数据包更新信息需要发起6次写请求,而且每次写请求的字节数都比较少,其中,写“指针+长度”是8Byte,写索引是2Byte,而系统PCIe带宽远远大于8Byte,极大地浪费了系统PCIe带宽,针对于此,对于同一个队列而言,这些写请求都是连续的,因此可以进行合并,考虑了写请求合并的优化后的原理如图4所示,已用环表更新模块不再是接收到一个包更新信息就立即发出这个包的更新写请求,而是等聚齐多个包更新信息后再发起一次写已用环表的写请求;举例来说:原先收到包1就立即发出两笔DMA写请求,写指针+长度是8Byte,写索引是2Byte,优化后,假设系统带宽为64Byte,则令n等于8,等收集齐8个包更新信息,将这8个包信息拼接在一起发送出一笔DMA写请求8Byte*8=64Byte,最后再发起一个写请求通知软件当前索引已经更新到8。通过这样的优化,每8个包,原先需要发起16个写请求,占用PCIe带宽16拍,采用本实施例的方法只需要发起2个写请求,占用PCIe带宽2拍,优化效果十分可观。
其中,所述DMA处理模块用于对数据进行DMA(Direct Memory Access,直接内存访问)处理,DMA处理是一种计算机技术,允许外部设备直接访问计算机内存,而无需通过中央处理器的干预,这可以大大提高数据传输的效率。
下面分析一下本实施例方法所做优化带来的收益,仍然以小包64字节为例,假设系统主频为1GHz,可得以下表1:
表1优化收益表
不优化 优化(汇聚粒度为8)
带宽Mpps 1000/(1+1+1+1)=250 1000/(1+0.125+1+1)=320
带宽提升% 1 (320-250)/250=28
从表1的结果来看,在汇聚度n为8的情况下,带宽性能可以得到28%的提升,提升效果相当可观。
综上,本实施例的方法能够减少发起PCIe写请求的次数,充分利用系统数据带宽,实现一次处理n个包更新信息,大大提高已用环表更新效率,从而提高数据包的收包速率。
在一些实施例中,所述步骤S20,还包括:
实时判断任一个队列的初始包接收时间与当前时间之间的时间差值是否等于预设阈值,若是,则从所述存储单元中读取该任一个队列的所有包更新信息;所述任一个队列的初始包接收时间为保存在所述存储单元中的最早接收到的该任一个队列的一个包更新信息的接收时间。
所述步骤S30,还包括:
根据所述所有包更新信息生成第三写请求和第四写请求生成第三写请求和第四写请求,并将所述第三写请求和所述第四写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第三写请求将所述所有包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第四写请求将所述所有包更新信息中最后接收的一个包更新信息的索引写入所述已用环表。
其中,所述第三写请求包括所述所有包更新信息的指针值、数据包长度,所述第四写请求包括所述所有包更新信息中最后接收的一个包更新信息的索引。
具体而言,实际应用过程中,会存在某条队列迟迟凑不齐汇聚粒度所需的数目,即接收到的包更新信息的个数小于n,针对这一种情况,本实施例通过实时查看各个队列的初始包接收时间,比较各个队列的初始包接收时间与当前时间,如果初始包接收时间与当前时间的时间差值等于预设阈值,则在汇聚粒度不够的情况下,也从所述存储单元中读取该某条队列的所有包更新信息,根据该所有包更新信息输出对应的第三写请求和第四写请求给DMA处理模块来对已用环表进行写操作更新,来避免出现卡包问题。
在一些实施例中,所述存储单元为链表存储结构;
所述步骤S10,具体包括:
当接收到任一个队列的一个包更新信息时,判断所述链表存储结构中是否存在与该任一个队列对应的链表;其中,所述链表包括链表头单元、链表尾单元、时间戳单元、多个数据单元以及与所述多个数据单元一一对应的多个指针单元,所述链表头单元用于存储该任一个队列的第一个包更新信息的数据单元地址,所述链表尾单元用于存储该任一个队列的最后一个包更新信息的数据单元地址,所述时间戳单元用于存储所述初始包接收时间,所述数据单元用于存储该任一个队列的包更新信息,所述指针单元用于存储该任一个队列的下一个包更新信息的数据单元地址;
若不存在与该任一个队列对应的链表,则创建与该任一个队列对应的链表,并将该一个包更新信息存储至该链表中;
若存在与该任一个队列对应的链表,则将该一个包更新信息存储至该链表中;
具体而言,本实施例采用链表结构来存储队列的包更新信息,每一条队列对应一条链表,不同队列的包更新信息会进入不同的链表,并记录对应的初始包接收时间,这样一来,尽管进来的包可能是按队列交织的,但是,利用链表进行汇聚,等某条队列汇聚齐n个包时,将这n个包汇聚后拼接生成相应的写请求输出给DMA处理模块,或者,在队列的初始包接收时间与当前时间的差值等于预设阈值,根据该队列的所有包更新信息生成相应的写请求输出给DMA处理模块。
在一些实施例中,所述方法还包括:
步骤S40,在读取任一个链表的所有包更新信息之后,清空该任一个链表的链表头单元、链表尾单元、时间戳单元、多个数据单元、多个指针单元所存储的内容。
具体而言,本实施例中不同队列的链表共享同一片缓存空间,为了提高缓存空间的资源利用率,在将所述链表的所有包更新信息写入所述已用环表之后,不需要再对该所有包更新信息进行缓存,因此,清空所述链表头单元、链表尾单元、时间戳单元、多个数据单元、多个指针单元所存储的内容,当接收到新的包更新信息时,重新更新所述链表头单元、链表尾单元、时间戳单元、多个数据单元、多个指针单元所存储的内容。
在一些实施例中,所述方法还包括:
在读取任一个链表的所有包更新信息之后,若在预设时间内没有接收到与所述链表对应的队列的新的包更新信息,则删除所述链表。
具体而言,若在预设时间内没有接收到与所述链表对应队列的新的包更新信息,链表一直为空,因此,删除链表,回收缓存资源,以便于其他队列的包更新信息的存储使用。
在一些实施例中,所述方法基于已用环表更新模块实现,所述第一写请求的长度等于所述已用环表更新模块所在系统的PCIE带宽。
具体而言,假设系统带宽为64Byte,则令n等于8,等收集齐8个包更新信息,将这8个包信息拼接在一起发送出一笔DMA写请求8Byte*8=64Byte。
与上述实施例所述的已用环表更新方法对应,参阅图5,本申请的另一个实施例还提供一种已用环表更新模块,包括:
存储单元,用于当接收到任一个队列的包更新信息时,存储该包更新信息;所述包更新信息包括指针值、数据包长度、索引;
控制单元,用于判断所述存储单元中所述队列的包更新信息的个数是否等于n,若是,则从所述存储单元中读取所述队列的n个包更新信息;其中,当所述n个包更新信息被读取时,所述n个包更信息从所述存储单元中删除;
写请求生成单元,用于根据所述n个包更新信息生成第一写请求和第二写请求,并将所述第一写请求和所述第二写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第一写请求将所述n个包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第二写请求将所述n个包更新信息中最后接收的一个包更新信息的索引写入所述已用环表;
其中,所述第一写请求包括所述n个包更新信息的指针值、数据包长度,所述第二写请求包括所述n个包更新信息中最后接收的一个包更新信息的索引,所述n大于等于2。
在一些实施例中,所述控制单元,还用于判断任一个队列的初始包接收时间与当前时间之间的时间差值是否等于预设阈值,若是,则从所述存储单元中读取该任一个队列的所有包更新信息;所述任一个队列的初始包接收时间为保存在所述存储单元中的最早接收到的该任一个队列的一个包更新信息的接收时间;
所述写请求生成单元,还用于根据所述所有包更新信息生成第三写请求和第四写请求,并将所述第三写请求和所述第四写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第三写请求将所述所有包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第四写请求将所述所有包更新信息中最后接收的一个包更新信息的索引写入所述已用环表;
其中,所述第三写请求包括所述所有包更新信息的指针值、数据包长度,所述第四写请求包括所述所有包更新信息中最后接收的一个包更新信息的索引。
在一些实施例中,所述存储单元为链表存储结构;
所述存储单元,还用于当接收到任一个队列的一个包更新信息时,判断所述链表存储结构中是否存在与该任一个队列对应的链表;其中,所述链表包括链表头单元、链表尾单元、时间戳单元、多个数据单元以及与所述多个数据单元一一对应的多个指针单元,所述链表头单元用于存储该任一个队列的第一个包更新信息的数据单元地址,所述链表尾单元用于存储该任一个队列的最后一个包更新信息的数据单元地址,所述时间戳单元用于存储所述初始包接收时间,所述数据单元用于存储该任一个队列的包更新信息,所述指针单元用于存储该任一个队列的下一个包更新信息的数据单元地址;
若不存在与该任一个队列对应的链表,则所述存储单元创建与该任一个队列对应的链表,并将该一个包更新信息存储至该链表中;
若存在与该任一个队列对应的链表,则所述存储单元将该一个包更新信息存储至该链表中。
在一些实施例中,所述存储单元,还用于在读取任一个链表的所有包更新信息之后,清空该任一个链表的链表头单元、链表尾单元、时间戳单元、多个数据单元、多个指针单元所存储的内容。
在一些实施例中,所述存储单元,还用于在读取任一个链表的所有包更新信息之后,若在预设时间内没有接收到与所述链表对应的队列的新的包更新信息,则删除所述链表。
在一些实施例中,所述第一写请求的长度等于所述已用环表更新模块所在系统的PCIE带宽。
需说明的是,本实施例所述的已用环表更新模块与上述实施例所述的已用环表更新方法对应,本实施例所述的已用环表更新模块实现的功能已在上述实施例方法中详细说明,故本实施例中不进行赘述。
以上所描述的实施例的已用环表更新模块仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现实施例的已用环表更新模块的方案的目的。
本申请的另一个实施例提供一种VIRTIO后端设备,包括上述实施例所述的已用环表更新模块。
本申请的另一个实施例还提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现如上述实施例所述的已用环表更新方法。
具体而言,所述计算机可读存储介质可以包括:能够携带所述计算机程序指令的任何实体或记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及前端驱动分发介质等。
本申请的另一个实施例提出一种电子设备,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述的已用环表更新方法。
其中,电子设备还可以包括连接不同组件(包括存储器和处理器)的总线。存储器可以包括易失性存储器形式的计算机可读介质,例如随机存取存储器(RAM)和/或高速缓存存储器。存储器也可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。电子设备也可以与一个或多个外部设备(例如键盘、指向设备、显示器等)通信,还可与一个或者多个使得用户能与该电子设备交互的设备通信,和/或与使得该电子设备能与一个或多个其他计算设备进行通信的任何设备(例如网卡)通信,这种通信可以通过输入/输出(I/O)接口进行,并且,电子设备还可以通过网络适配器与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。
本申请的另一个实施例提出一种芯片,包括上述实施例所述的VIRTIO后端设备。
以上已经描述了本申请的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (16)

1.一种已用环表更新方法,其特征在于,所述方法包括:
当接收到任一个队列的包更新信息时,将该包更新信息存储至存储单元;所述包更新信息包括指针值、数据包长度、索引;
判断所述存储单元中所述队列的包更新信息的个数是否等于n,若是,则从所述存储单元中读取所述队列的n个包更新信息;
根据所述n个包更新信息生成第一写请求和第二写请求,并将所述第一写请求和所述第二写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第一写请求将所述n个包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第二写请求将所述n个包更新信息中最后接收的一个包更新信息的索引写入所述已用环表;
其中,所述第一写请求包括所述n个包更新信息的指针值、数据包长度,所述第二写请求包括所述n个包更新信息中最后接收的一个包更新信息的索引,所述n大于等于2。
2.根据权利要求1所述的方法,其特征在于,所述方法包括:
判断任一个队列的初始包接收时间与当前时间之间的时间差值是否等于预设阈值,若是,则从所述存储单元中读取该任一个队列的所有包更新信息;所述任一个队列的初始包接收时间为保存在所述存储单元中的最早接收到的该任一个队列的一个包更新信息的接收时间;
根据所述所有包更新信息生成第三写请求和第四写请求生成第三写请求和第四写请求,并将所述第三写请求和所述第四写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第三写请求将所述所有包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第四写请求将所述所有包更新信息中最后接收的一个包更新信息的索引写入所述已用环表;
其中,所述第三写请求包括所述所有包更新信息的指针值、数据包长度,所述第四写请求包括所述所有包更新信息中最后接收的一个包更新信息的索引。
3.根据权利要求2所述的方法,其特征在于,所述存储单元为链表存储结构;
所述方法还包括:
当接收到任一个队列的一个包更新信息时,判断所述链表存储结构中是否存在与该任一个队列对应的链表;其中,所述链表包括链表头单元、链表尾单元、时间戳单元、多个数据单元以及与所述多个数据单元一一对应的多个指针单元,所述链表头单元用于存储该任一个队列的第一个包更新信息的数据单元地址,所述链表尾单元用于存储该任一个队列的最后一个包更新信息的数据单元地址,所述时间戳单元用于存储所述初始包接收时间,所述数据单元用于存储该任一个队列的包更新信息,所述指针单元用于存储该任一个队列的下一个包更新信息的数据单元地址;
若不存在与该任一个队列对应的链表,则创建与该任一个队列对应的链表,并将该一个包更新信息存储至该链表中;
若存在与该任一个队列对应的链表,则将该一个包更新信息存储至该链表中。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在读取任一个链表的所有包更新信息之后,清空该任一个链表的链表头单元、链表尾单元、时间戳单元、多个数据单元、多个指针单元所存储的内容。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在读取任一个链表的所有包更新信息之后,若在预设时间内没有接收到与所述链表对应的队列的新的包更新信息,则删除所述链表。
6.根据权利要求1~5中任一项所述的方法,其特征在于,所述方法基于已用环表更新模块实现,所述第一写请求的长度等于所述已用环表更新模块所在系统的PCIE带宽。
7.一种已用环表更新模块,其特征在于,包括:
存储单元,用于当接收到任一个队列的包更新信息时,存储该包更新信息;所述包更新信息包括指针值、数据包长度、索引;
控制单元,用于判断所述存储单元中所述队列的包更新信息的个数是否等于n,若是,则从所述存储单元中读取所述队列的n个包更新信息;其中,当所述n个包更新信息被读取时,所述n个包更新信息从所述存储单元中删除;
写请求生成单元,用于根据所述n个包更新信息生成第一写请求和第二写请求,并将所述第一写请求和所述第二写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第一写请求将所述n个包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第二写请求将所述n个包更新信息中最后接收的一个包更新信息的索引写入所述已用环表;
其中,所述第一写请求包括所述n个包更新信息的指针值、数据包长度,所述第二写请求包括所述n个包更新信息中最后接收的一个包更新信息的索引,所述n大于等于2。
8.根据权利要求7所述的已用环表更新模块,其特征在于,
所述控制单元,还用于判断任一个队列的初始包接收时间与当前时间之间的时间差值是否等于预设阈值,若是,则从所述存储单元中读取该任一个队列的所有包更新信息;所述任一个队列的初始包接收时间为保存在所述存储单元中的最早接收到的该任一个队列的一个包更新信息的接收时间;
所述写请求生成单元,还用于根据所述所有包更新信息生成第三写请求和第四写请求,并将所述第三写请求和所述第四写请求依次发送给DMA处理模块,以使得所述DMA处理模块根据所述第三写请求将所述所有包更新信息的指针值、数据包长度写入所述已用环表,并根据所述第四写请求将所述所有包更新信息中最后接收的一个包更新信息的索引写入所述已用环表;
其中,所述第三写请求包括所述所有包更新信息的指针值、数据包长度,所述第四写请求包括所述所有包更新信息中最后接收的一个包更新信息的索引。
9.根据权利要求8所述的已用环表更新模块,其特征在于,所述存储单元为链表存储结构;
所述存储单元,还用于当接收到任一个队列的一个包更新信息时,判断所述链表存储结构中是否存在与该任一个队列对应的链表;其中,所述链表包括链表头单元、链表尾单元、时间戳单元、多个数据单元以及与所述多个数据单元一一对应的多个指针单元,所述链表头单元用于存储该任一个队列的第一个包更新信息的数据单元地址,所述链表尾单元用于存储该任一个队列的最后一个包更新信息的数据单元地址,所述时间戳单元用于存储所述初始包接收时间,所述数据单元用于存储该任一个队列的包更新信息,所述指针单元用于存储该任一个队列的下一个包更新信息的数据单元地址;
若不存在与该任一个队列对应的链表,则所述存储单元创建与该任一个队列对应的链表,并将该一个包更新信息存储至该链表中;
若存在与该任一个队列对应的链表,则所述存储单元将该一个包更新信息存储至该链表中。
10.根据权利要求9所述的已用环表更新模块,其特征在于,所述存储单元,还用于在读取任一个链表的所有包更新信息之后,清空该任一个链表的链表头单元、链表尾单元、时间戳单元、多个数据单元、多个指针单元所存储的内容。
11.根据权利要求10所述的已用环表更新模块,其特征在于,所述存储单元,还用于在读取任一个链表的所有包更新信息之后,若在预设时间内没有接收到与所述链表对应的队列的新的包更新信息,则删除所述链表。
12.根据权利要求7~11中任一项所述的已用环表更新模块,其特征在于,所述第一写请求的长度等于所述已用环表更新模块所在系统的PCIE带宽。
13.一种VIRTIO后端设备,其特征在于,包括权利要求7~12中任一项所述的已用环表更新模块。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,实现如权利要求1~6中任一项所述的已用环表更新方法。
15.一种电子设备,其特征在于,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述权利要求1~6中任一项所述的已用环表更新方法。
16.一种芯片,其特征在于,包括权利要求13所述的VIRTIO后端设备。
CN202310834524.XA 2023-07-08 2023-07-08 已用环表更新方法及模块、后端设备、介质、设备、芯片 Pending CN116954675A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310834524.XA CN116954675A (zh) 2023-07-08 2023-07-08 已用环表更新方法及模块、后端设备、介质、设备、芯片

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310834524.XA CN116954675A (zh) 2023-07-08 2023-07-08 已用环表更新方法及模块、后端设备、介质、设备、芯片

Publications (1)

Publication Number Publication Date
CN116954675A true CN116954675A (zh) 2023-10-27

Family

ID=88450381

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310834524.XA Pending CN116954675A (zh) 2023-07-08 2023-07-08 已用环表更新方法及模块、后端设备、介质、设备、芯片

Country Status (1)

Country Link
CN (1) CN116954675A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117411842A (zh) * 2023-12-13 2024-01-16 苏州元脑智能科技有限公司 事件抑制方法、装置、设备、异构平台及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117411842A (zh) * 2023-12-13 2024-01-16 苏州元脑智能科技有限公司 事件抑制方法、装置、设备、异构平台及存储介质
CN117411842B (zh) * 2023-12-13 2024-02-27 苏州元脑智能科技有限公司 事件抑制方法、装置、设备、异构平台及存储介质

Similar Documents

Publication Publication Date Title
US11616738B2 (en) Packet processing method and related device
CN109558344B (zh) 一种适用于网络传输的dma传输方法及dma控制器
US20210089343A1 (en) Information processing apparatus and information processing method
EP4160424A2 (en) Zero-copy processing
CN110109626B (zh) 一种基于FPGA的NVMe SSD命令处理方法
CN106325758B (zh) 一种队列存储空间管理方法及装置
CN112650558B (zh) 数据处理方法、装置、可读介质和电子设备
WO2023165400A1 (zh) 计算系统、内存缺页处理方法及存储介质
US9747233B2 (en) Facilitating routing by selectively aggregating contiguous data units
CN110602166B (zh) 解决数据重复发送问题的方法、终端设备和存储介质
US9836338B2 (en) Method and apparatus for message interactive processing
CN116954675A (zh) 已用环表更新方法及模块、后端设备、介质、设备、芯片
CN115113977A (zh) 描述符读取装置和设备、方法及集成电路
US8055817B2 (en) Efficient handling of queued-direct I/O requests and completions
US10545697B1 (en) Reverse order request queueing by para-virtual device drivers
CN114397999A (zh) 基于非易失内存接口-远程处理消息传递的通信方法、装置及设备
CN116155828B (zh) 一种多个虚拟队列的报文保序方法及其装置、存储介质、电子设备
CN115113978A (zh) 一种中断请求处理装置、方法及virtio网络设备
CN116578391B (zh) 描述符表读取方法及模块、后端设备、介质、设备、芯片
CN116601616A (zh) 一种数据处理装置、方法及相关设备
US20220179805A1 (en) Adaptive pipeline selection for accelerating memory copy operations
CN117891567B (zh) 数据处理方法、装置、系统和存储介质
CN117931406A (zh) 一种virtio设备中断方法及装置、后端设备、芯片
CN115529275B (zh) 一种报文处理系统及方法
CN117573041B (zh) 一种改进vhost-scsi提升虚拟化存储性能的方法

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