CN117724874B - 用于管理共享接收队列的方法、计算机设备及介质 - Google Patents

用于管理共享接收队列的方法、计算机设备及介质 Download PDF

Info

Publication number
CN117724874B
CN117724874B CN202410168105.1A CN202410168105A CN117724874B CN 117724874 B CN117724874 B CN 117724874B CN 202410168105 A CN202410168105 A CN 202410168105A CN 117724874 B CN117724874 B CN 117724874B
Authority
CN
China
Prior art keywords
queue
work queue
physical page
work
shared
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
Application number
CN202410168105.1A
Other languages
English (en)
Other versions
CN117724874A (zh
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.)
Zhuhai Xingyun Zhilian Technology Co Ltd
Original Assignee
Zhuhai Xingyun Zhilian 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 Zhuhai Xingyun Zhilian Technology Co Ltd filed Critical Zhuhai Xingyun Zhilian Technology Co Ltd
Priority to CN202410168105.1A priority Critical patent/CN117724874B/zh
Publication of CN117724874A publication Critical patent/CN117724874A/zh
Application granted granted Critical
Publication of CN117724874B publication Critical patent/CN117724874B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Multi Processors (AREA)

Abstract

本申请涉及计算机技术领域并提供一种用于管理共享接收队列的方法、计算机设备及介质。方法包括:通过环形缓冲区队首指针和环形缓冲区队尾指针实现在共享接收队列的共享接收队列起始地址与共享接收队列结束地址之间的环形缓冲;通过移动环形缓冲区队首指针来顺序执行填充操作用于顺序填充工作队列元素到共享接收队列,以及,通过比较环形缓冲区队首指针和环形缓冲区队尾指针来判断是否完成一次填充循环;每次执行填充操作之前,判断共享接收队列中的与当前填充操作对应的工作队列元素相关联的至少一个工作队列元素是否均标记已完成。如此,有效应对乱序完成的可能性,有利于提升硬件效率和减低延迟。

Description

用于管理共享接收队列的方法、计算机设备及介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种用于管理共享接收队列的方法、计算机设备及介质。
背景技术
远程直接内存访问是从一台计算机的内存到另一台计算机的内存的直接访问,此过程中不涉及任何一方的操作系统。利用远程直接内存访问技术实现了高吞吐量、低延迟的网络,有效提升数据传输性能,应用于如云计算、数据中心、大规模并行计算机集群等应用场景。远程直接内存访问通信的基本单位是队列对,一个队列对由一个发送队列和一个接收队列组成,用于实现远程直接内存访问报文发送和远程直接内存访问报文接收。为了节省接收端的资源,将一个接收队列由所有关联的队列对使用,这个公用的接收队列被指为共享接收队列。与共享接收队列关联的队列对要下发用于接收任务的工作队列元素时,都填写到这个共享接收队列中。但是,因为共享接收队列由多个队列对共享,每个队列对消耗各自的工作队列元素的速度不同,因此共享接收队列中的每个工作队列元素不一定能够按顺序完成,存在乱序完成的可能。现有技术中,为了解决共享接收队列中的工作队列元素的乱序完成的问题,通过引入链表方式,在链表方式下的共享接收队列的工作队列元素由链表头和主体组成,链表头用于指示下一跳指针也就是下一个工作队列元素的位置,而主体是共享接收队列处理业务需要的信息。但是,现有技术中的链表方式,需要解析链表头也就是解析指针才能读取下一个工作队列元素,这样不利于硬件进行顺序读取工作队列元素,而且导致解析指针的损耗,不利于提升硬件效率和降低延迟。
为此,本申请提供了一种用于管理共享接收队列的方法、计算机设备及介质,用于应对现有技术中的技术难题。
发明内容
第一方面,本申请提供了一种用于管理共享接收队列的方法。多个队列对写入所述多个队列对各自的用于接收任务的工作队列元素到共享接收队列。所述方法包括:通过环形缓冲区队首指针和环形缓冲区队尾指针实现在所述共享接收队列的共享接收队列起始地址与所述共享接收队列的共享接收队列结束地址之间的环形缓冲;通过移动所述环形缓冲区队首指针来顺序执行填充操作用于顺序填充工作队列元素到所述共享接收队列,以及,通过比较所述环形缓冲区队首指针和所述环形缓冲区队尾指针来判断是否完成一次填充循环;当所述环形缓冲区队首指针等于所述环形缓冲区队尾指针时,判断完成一次填充循环并且更新全局变量用于记录已完成的填充循环的次数,每次执行填充操作之前,判断所述共享接收队列中的与当前填充操作对应的工作队列元素相关联的至少一个工作队列元素是否均标记已完成,所述至少一个工作队列元素包括与所述当前填充操作对应的工作队列元素,如果所述至少一个工作队列元素均标记已完成,则执行所述当前填充操作从而消耗与所述当前填充操作对应的工作队列元素,如果所述至少一个工作队列元素中任一工作队列元素标记未完成,则替换所述至少一个工作队列元素所在的物理页为空闲物理页池中的物理页,转移所述至少一个工作队列元素所在的物理页到未完成物理页池,并且记录与所述当前填充操作对应的全局变量为所述至少一个工作队列元素所在的物理页相关联的全局变量,然后执行相对于所述当前填充操作的下一填充操作。
通过本申请的第一方面,基于环形缓冲的设计,实现了按顺序读取和填充共享接收队列中的工作队列元素,可以循环利用共享接收队列的队列资源,不需要借助链表解析和链表操作,有利于提升硬件效率和减低延迟;针对乱序完成的可能性,利用设定工作队列元素的标记为已完成或者未完成,以及利用空闲物理页池和未完成物理页池,提供了一套高效可靠的机制来应对乱序完成的可能性,从而有效地应对共享接收队列中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列中的工作队列元素的次序的问题。
在本申请的第一方面的一种可能的实现方式中,所述方法还包括:响应于第一接收任务的完成,确定所述第一接收任务相关联的第一工作队列元素编号和所述第一接收任务被下发时的全局变量;基于所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量,确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中,定位与所述第一工作队列元素编号对应的工作队列元素,然后标记与所述第一工作队列元素编号对应的工作队列元素为已完成。
在本申请的第一方面的一种可能的实现方式中,所述方法还包括:每次标记所述未完成物理页池中的工作队列元素为已完成之后,判断该工作队列元素所在的物理页中的所有工作队列元素是否均标记已完成,如果是,则转移该工作队列元素所在的物理页到所述空闲物理页池。
在本申请的第一方面的一种可能的实现方式中,基于所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量,确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中,包括:通过比较所述第一接收任务被下发时的全局变量和所述全局变量,判断与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中。
在本申请的第一方面的一种可能的实现方式中,基于所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量,确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中,还包括:当所述第一接收任务被下发时的全局变量不等于所述全局变量时,确定与所述第一工作队列元素编号对应的工作队列元素是在所述未完成物理页池中;当所述第一接收任务被下发时的全局变量等于所述全局变量时,基于所述第一工作队列元素编号确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中。
在本申请的第一方面的一种可能的实现方式中,所述第一接收任务被下发时的全局变量是在执行所述第一接收任务相关联的填充操作时的所述全局变量,所述第一接收任务相关联的填充操作用于填充与所述第一工作队列元素编号对应的工作队列元素到所述共享接收队列。
在本申请的第一方面的一种可能的实现方式中,所述第一接收任务的完成是基于所述第一接收任务相关联的完成队列元素被写入到完成队列,所述第一接收任务相关联的完成队列元素包括所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量。
在本申请的第一方面的一种可能的实现方式中,所述共享接收队列中的工作队列元素通过大小相同的多个物理页存储,所述共享接收队列中的工作队列元素所在的物理页、所述空闲物理页池中的物理页以及所述未完成物理页池中的物理页一起构成所述多个物理页。
在本申请的第一方面的一种可能的实现方式中,所述多个物理页各自的初始地址和当前地址被记录在物理页地址表中的与所述多个物理页一一对应的多个表项,并且,从所述共享接收队列到所述未完成物理页池的物理页转移、从所述未完成物理页池到所述空闲物理页池的物理页转移以及从所述空闲物理页池到所述共享接收队列的物理页转移均通过更改所述物理页地址表中的对应表项实现。
在本申请的第一方面的一种可能的实现方式中,所述物理页地址表包括第一子表对应所述共享接收队列中的工作队列元素所在的物理页,第二子表对应所述空闲物理页池中的物理页,以及第三子表对应所述未完成物理页池中的物理页,所述共享接收队列中的工作队列元素所在的物理页、所述空闲物理页池中的物理页以及所述未完成物理页池中的物理页之间的物理页转移通过所述第一子表、所述第二子表以及所述第三子表之间的表项交换实现。
在本申请的第一方面的一种可能的实现方式中,所述物理页地址表中的所述多个表项中的每一个表项还记录所述多个物理页中的与该表项对应的物理页是在所述共享接收队列中或者在所述未完成物理页池中。
在本申请的第一方面的一种可能的实现方式中,所述至少一个工作队列元素还包括:在所述环形缓冲中的相对于与所述当前填充操作对应的工作队列元素的下一紧邻工作队列元素。
在本申请的第一方面的一种可能的实现方式中,所述至少一个工作队列元素包括:在所述环形缓冲中的从与所述当前填充操作对应的工作队列元素开始顺序排列的多个工作队列元素。
在本申请的第一方面的一种可能的实现方式中,所述共享接收队列用于远程直接内存访问驱动和所述远程直接内存访问逻辑之间的交互,所述远程直接内存访问逻辑基于所述共享接收队列相关联的接收任务完成次序写入完成队列元素到完成队列从而反馈所述远程直接内存访问驱动,所述接收任务完成次序是基于所述多个队列对各自的用于接收任务的工作队列元素的完成次序。
在本申请的第一方面的一种可能的实现方式中,所述多个队列对基于所述共享接收队列相关联的接收任务写入次序写入所述多个队列对各自的用于接收任务的工作队列元素到所述共享接收队列,所述接收任务写入次序不同于所述接收任务完成次序。
在本申请的第一方面的一种可能的实现方式中,所述共享接收队列中的工作队列元素的消耗次序是基于所述接收任务完成次序。
在本申请的第一方面的一种可能的实现方式中,所述多个队列对下发所述多个队列对各自的用于发送任务的工作队列元素到多个发送队列,所述多个发送队列共享所述共享接收队列。
在本申请的第一方面的一种可能的实现方式中,与所述当前填充操作对应的工作队列元素在所述共享接收队列中位于所述环形缓冲区队首指针在执行所述当前填充操作之前的位置。
在本申请的第一方面的一种可能的实现方式中,按照从所述共享接收队列起始地址到所述共享接收队列结束地址的方向朝着所述环形缓冲区队尾指针移动所述环形缓冲区队首指针。
在本申请的第一方面的一种可能的实现方式中,初始化或者再配置所述共享接收队列包括更新所述环形缓冲区队首指针的初始位置和所述环形缓冲区队尾指针的初始位置。
第二方面,本申请实施例还提供了一种计算机设备,所述计算机设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现根据上述任一方面的任一种实现方式的方法。
第三方面,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机设备上运行时使得所述计算机设备执行根据上述任一方面的任一种实现方式的方法。
第四方面,本申请实施例还提供了一种计算机程序产品,所述计算机程序产品包括存储在计算机可读存储介质上的指令,当所述指令在计算机设备上运行时使得所述计算机设备执行根据上述任一方面的任一种实现方式的方法。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种基于共享接收队列的远程直接内存访问系统的示意图;
图2为本申请实施例提供的一种用于管理共享接收队列的方法的流程示意图;
图3为本申请实施例提供的一种从空闲物理池到共享接收队列的物理页转移的示意图;
图4为本申请实施例提供的一种共享接收队列的示意图;
图5为本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
下面将结合附图对本申请实施例作进一步地详细描述。
应当理解的是,在本申请的描述中,“至少一个”指一个或一个以上,“多个”指两个或两个以上。另外,“第一”、“第二”等词汇,除非另有说明,否则仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
图1为本申请实施例提供的一种基于共享接收队列的远程直接内存访问系统的示意图。如图1所示,远程直接内存访问系统包括远程直接内存访问驱动102和远程直接内存访问逻辑104。远程直接内存访问驱动102可以是如操作系统,业务应用等软件。远程直接内存访问逻辑104可以是如远程直接内存访问网卡、数据处理单元等硬件。远程直接内存访问驱动102和远程直接内存访问逻辑104之间的交互通过多个队列对进行。一般地,一个队列对由一个发送队列和一个接收队列组成,用于实现远程直接内存访问报文发送和远程直接内存访问报文接收。图1中所示的远程直接内存访问系统,为了节省队列资源,将共享接收队列A120由所有关联的队列对使用,具体地,共享接收队列A120由发送队列A110、发送队列B112、发送队列C114共用,也就是说,共享接收队列A120由发送队列A110、发送队列B112、发送队列C114各自对应的队列对共用。因此,公用的共享接收队列A120,用于图1所示的远程直接内存访问系统,节省了队列资源和接收端的资源。与共享接收队列A120关联的队列对要下发用于接收任务的工作队列元素时,都填写到这个共享接收队列中。
继续参阅图1,远程直接内存访问驱动102写入队列对A的用于发送任务的工作队列元素A1到发送队列A110,远程直接内存访问驱动102写入队列对B的用于发送任务的工作队列元素B1到发送队列B112,远程直接内存访问驱动102写入队列对C的用于发送任务的工作队列元素C1到发送队列C114。因此,共享接收队列A120由队列对A、队列对B、队列对C共用。远程直接内存访问逻辑104读取发送队列A110中的队列对A的工作队列元素A1用于执行发送任务,远程直接内存访问逻辑104读取发送队列B112中的队列对B的工作队列元素B1用于执行发送任务,远程直接内存访问逻辑104读取发送队列C114中的队列对C的工作队列元素C1用于执行发送任务。如此,远程直接内存访问驱动102和远程直接内存访问逻辑104通过队列对A、队列对B、队列对C实现了发送任务方面的交互,远程直接内存访问驱动102下发某个队列对的发送任务到对应的发送队列,以写入工作队列元素的方式,然后远程直接内存访问逻辑104读取对应的发送队列中的工作队列元素来执行发送任务。另外,共享接收队列A120作为队列对A、队列对B、队列对C之间共用的接收队列,与共享接收队列A120关联的队列对(队列对A、队列对B、队列对C)要下发用于接收任务的工作队列元素时,都填写到共享接收队列A120中。
继续参阅图1,一个队列对由一个发送队列和一个接收队列组成,用于发送任务的工作队列元素被下发到发送队列,用于接收任务的工作队列元素被下发到接收队列。当采用如图1所示的共享接收队列A120来节省队列资源时,远程直接内存访问驱动102下发用于发送任务的工作队列元素到某个发送队列,也下发用于接收任务的工作队列元素到共享接收队列A120,为了对齐到同一个队列对,用于发送任务的工作队列元素和用于接收任务的工作队列元素采用同一个工作队列元素序号(index)或者类似的起到识别作用的工作队列元素标识。远程直接内存访问驱动102基于接收任务写入次序来写入队列对A的用于接收任务的工作队列元素A2,队列对B的用于接收任务的工作队列元素B2,队列对C的用于接收任务的工作队列元素C2到共享接收队列A120,共享接收队列A120中的工作队列元素的消耗次序是基于接收任务完成次序。这里,队列对A的用于发送任务的工作队列元素A1与队列对A的用于接收任务的工作队列元素A2相关联,队列对B的用于发送任务的工作队列元素B1与队列对B的用于接收任务的工作队列元素B2相关联,队列对C的用于发送任务的工作队列元素C1与队列对C的用于接收任务的工作队列元素C2相关联。考虑到不同的队列对消耗各自的工作队列元素的速度可能是不同的,这体现在接收任务写入次序可能不同于接收任务完成次序。例如,假设远程直接内存访问驱动102基于接收任务写入次序,先写入队列对A的用于接收任务的工作队列元素A2,然后再写入队列对B的用于接收任务的工作队列元素B2,这意味着,在共享接收队列A120中,如果按顺序读取工作队列元素,应该先读取队列对A的用于接收任务的工作队列元素A2然后再读取队列对B的用于接收任务的工作队列元素B2。但是,远程直接内存访问驱动102写入队列对A的用于发送任务的工作队列元素A1到发送队列A110,然后,远程直接内存访问逻辑104读取发送队列A110中的队列对A的工作队列元素A1用于执行发送任务,被执行的发送任务通过远程直接内存访问网络被发送给某个远端主机,远端主机可能需要经过一段时间处理后,再从该远端主机接收反馈,然后才通过相关联的接收任务来接收反馈,也就是通过共享接收队列A120中的队列对A的用于发送任务的工作队列元素A1相关联的队列对A的用于接收任务的工作队列元素A2来接收反馈。因此,远端主机的处理时间还有通过远程直接内存访问网络的传输时间,是难以预料的,这也就意味着,从远程直接内存访问逻辑104读取发送队列A110中的队列对A的工作队列元素A1用于执行发送任务开始,到消耗共享接收队列A120中的队列对A的用于接收任务的工作队列元素A2为止,这段时间的长度是难以预料的。因此,在共享接收队列A120看来,共享接收队列A120中的工作队列元素的消耗次序可能是,先消耗队列对B的用于接收任务的工作队列元素B2,然后再消耗队列对A的用于接收任务的工作队列元素A2;相比于按顺序读取工作队列元素的次序,也就是先读取队列对A的用于接收任务的工作队列元素A2然后再读取队列对B的用于接收任务的工作队列元素B2,可以看出,因为接收任务写入次序可能不同于接收任务完成次序,所以针对共享接收队列A120而言,共享接收队列A120中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列A120中的工作队列元素的次序。
继续参阅图1,远程直接内存访问系统还包括完成队列130,远程直接内存访问逻辑104基于接收任务完成次序写入完成队列元素到完成队列130。如此,当接收到对应的反馈时,例如接收到来自远端主机的针对队列对A的工作队列元素A1执行的发送任务做出的反馈,远程直接内存访问逻辑104写入相应完成队列元素到完成队列130,从而通知软件侧也即远程直接内存访问驱动102,然后才能消耗队列对A的用于接收任务的工作队列元素A2。考虑到远程直接内存访问逻辑104接收到对应反馈并写入完成队列元素到完成队列130的时间是难以预料的,因此,假设远程直接内存访问驱动102基于接收任务写入次序,先写入队列对A的用于接收任务的工作队列元素A2,然后再写入队列对B的用于接收任务的工作队列元素B2,则远程直接内存访问逻辑104基于接收任务完成次序,可能是先写入队列对B的用于接收任务的工作队列元素B2相关联的完成队列元素,然后再写入队列对A的用于接收任务的工作队列元素A2相关联的完成队列元素。如此,因为接收任务写入次序可能不同于接收任务完成次序,所以针对共享接收队列A120而言,共享接收队列A120中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列A120中的工作队列元素的次序。可以看出,因为存在乱序完成的可能,共享接收队列A120中的每个工作队列元素不一定能够按顺序完成,但是,如果通过链表解析和链表操作来从一个工作队列元素跳到下一个工作队列元素,则必然导致额外的解析指针的损耗,增加处理延迟且造成性能瓶颈。
下面结合图2详细说明,本申请实施例提供的一种用于管理共享接收队列的方法,应用于如图1所示的基于共享接收队列A120的远程直接内存访问系统,如何在利用如图1所示的共享接收队列A120来节省队列资源和接收端资源的同时,能够有效地应对共享接收队列A120中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列A120中的工作队列元素的次序的问题,不仅实现了按顺序读取工作队列元素及按顺序执行填充操作,而且不需要借助链表解析和链表操作,有利于提升硬件效率和减低延迟。
图2为本申请实施例提供的一种用于管理共享接收队列的方法的流程示意图。如图2所示,方法包括以下步骤。
步骤S210:通过环形缓冲区队首指针和环形缓冲区队尾指针实现在所述共享接收队列的共享接收队列起始地址与所述共享接收队列的共享接收队列结束地址之间的环形缓冲。
步骤S220:通过移动所述环形缓冲区队首指针来顺序执行填充操作用于顺序填充工作队列元素到所述共享接收队列,以及,通过比较所述环形缓冲区队首指针和所述环形缓冲区队尾指针来判断是否完成一次填充循环。
图2所示的用于管理共享接收队列的方法,多个队列对写入所述多个队列对各自的用于接收任务的工作队列元素到共享接收队列。当所述环形缓冲区队首指针等于所述环形缓冲区队尾指针时,判断完成一次填充循环并且更新全局变量用于记录已完成的填充循环的次数。每次执行填充操作之前,判断所述共享接收队列中的与当前填充操作对应的工作队列元素相关联的至少一个工作队列元素是否均标记已完成。所述至少一个工作队列元素包括与所述当前填充操作对应的工作队列元素。如果所述至少一个工作队列元素均标记已完成,则执行所述当前填充操作从而消耗与所述当前填充操作对应的工作队列元素。如果所述至少一个工作队列元素中任一工作队列元素标记未完成,则替换所述至少一个工作队列元素所在的物理页为空闲物理页池中的物理页,转移所述至少一个工作队列元素所在的物理页到未完成物理页池,并且记录与所述当前填充操作对应的全局变量为所述至少一个工作队列元素所在的物理页相关联的全局变量,然后执行相对于所述当前填充操作的下一填充操作。
参阅图1和图2,多个队列对写入所述多个队列对各自的用于接收任务的工作队列元素到共享接收队列,以图1所示的共享接收队列A120为例,共享接收队列A120作为队列对A、队列对B、队列对C之间共用的接收队列。因此,多个队列对(图1所示的队列对A、队列对B、队列对C)写入所述多个队列对各自的用于接收任务的工作队列元素(基于接收任务写入次序来写入队列对A的用于接收任务的工作队列元素A2,队列对B的用于接收任务的工作队列元素B2,队列对C的用于接收任务的工作队列元素C2到共享接收队列A120)到共享接收队列(图1所示的共享接收队列A120)。为了提升硬件效率,在步骤S210,通过环形缓冲区队首指针和环形缓冲区队尾指针实现在所述共享接收队列的共享接收队列起始地址与所述共享接收队列的共享接收队列结束地址之间的环形缓冲。这里,共享接收队列由所述共享接收队列的共享接收队列起始地址与所述共享接收队列的共享接收队列结束地址一起来定义,并且,进一步地通过环形缓冲区队首指针和环形缓冲区队尾指针实现环形缓冲,这样的方式来支持顺序读取共享接收队列中的工作队列元素以及顺序填充工作队列元素到共享接收队列。因此,共享接收队列的可操作范围是在从共享接收队列起始地址到共享接收队列结束地址之间,并且,进一步地,通过环形缓冲区队首指针和环形缓冲区队尾指针来限定了在该可操作范围内的环形缓冲用于执行顺序读取工作队列元素和顺序填充工作队列元素。在步骤S220,通过移动所述环形缓冲区队首指针来顺序执行填充操作用于顺序填充工作队列元素到所述共享接收队列,以及,通过比较所述环形缓冲区队首指针和所述环形缓冲区队尾指针来判断是否完成一次填充循环。这里,按照该环形缓冲的设计,通过移动所述环形缓冲区队首指针,可以顺序读取在共享接收队列中的工作队列元素,还可以顺序执行填充操作从而顺序填充工作队列元素到所述共享接收队列。当移动环形缓冲区队首指针到了环形缓冲区队尾指针,则回到所述环形缓冲区队首指针的初始位置,然后开始新的一轮填充循环。应当理解的是,系统重启、系统升级、系统迁移或者其它事件,可能导致对共享接收队列进行初始化或者再配置,为此可能需要更新环形缓冲区队首指针的初始地址和环形缓冲区队尾指针的初始地址,共享接收队列仍然是由所述共享接收队列的共享接收队列起始地址与所述共享接收队列的共享接收队列结束地址一起定义的存储空间,例如一段连续的存储域。在环形缓冲区队首指针的初始地址和环形缓冲区队尾指针的初始地址被确定后,就可以按照从所述共享接收队列的共享接收队列起始地址到所述共享接收队列的共享接收队列结束地址的方向,朝着环形缓冲区队尾指针来移动环形缓冲区队首指针,在移动环形缓冲区队首指针的过程中,基于环形缓冲区队首指针所在的当前位置来顺序读取工作队列元素以及顺序填充工作队列元素,直到环形缓冲区队首指针被移动到了环形缓冲区队尾指针,从而完成了一次填充循环,然后从环形缓冲区队首指针的初始位置的重新开始新的一次填充循环,这样实现了环形缓冲。如此,基于环形缓冲的设计,实现了按顺序读取和填充共享接收队列中的工作队列元素,可以循环利用共享接收队列的队列资源,不需要借助链表解析和链表操作,有利于提升硬件效率和减低延迟。
继续参阅图1和图2,如上所述,考虑到不同的队列对消耗各自的工作队列元素的速度可能是不同的,这体现在接收任务写入次序可能不同于接收任务完成次序,针对共享接收队列而言,共享接收队列中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列中的工作队列元素的次序。因此,通过环形缓冲的设计来按顺序读取和填充共享接收队列中的工作队列元素,环形缓冲区队首指针所在的当前位置所对应的工作队列元素可能是未完成,例如该工作队列元素相关联的接收任务还没有完成,又例如完成队列还没有收到该工作队列元素相关联的完成队列元素,因此在环形缓冲区队首指针移动到该工作队列元素对应的位置上时,还不能消耗该工作队列元素。为了能够确保硬件按顺序读取和填充共享接收队列中的工作队列元素,而不受到这些可能的未完成的工作队列元素的影响,图2所示的用于管理共享接收队列的方法,针对乱序完成的可能性,利用设定工作队列元素的标记为已完成或者未完成,以及利用空闲物理页池和未完成物理页池,提供了一套机制从而有效地应对共享接收队列中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列中的工作队列元素的次序的问题。具体地,当所述环形缓冲区队首指针等于所述环形缓冲区队尾指针时,判断完成一次填充循环并且更新全局变量用于记录已完成的填充循环的次数。这里,全局变量用于记录下已完成的填充循环的次数,这样在关键的时间点,可以通过记录在这些关键的时间点上的全局变量,从而为后续操作提供参考。全局变量可以通过专门的软硬件来进行记录以及更新。进一步地,每次执行填充操作之前,判断所述共享接收队列中的与当前填充操作对应的工作队列元素相关联的至少一个工作队列元素是否均标记已完成。这里,当前填充操作是由环形缓冲区队首指针所在的当前位置确定的,随着环形缓冲区队首指针朝着环形缓冲区队尾指针移动,按顺序读取和填充共享接收队列中的工作队列元素,与当前填充操作对应的工作队列元素指代位于环形缓冲区队首指针所在的当前位置的工作队列元素,如此,通过识别工作队列元素的标记为已完成或者未完成,可以采取对应的后续操作。
继续参阅图1和图2,工作队列元素是以物理页的方式存储在实际物理存储器中,一般地,每个物理页的大小是一样的例如4千字节大小。取决于工作队列元素的数据长度,一个物理页可以存储一个或者多个工作队列元素。另外,上面提到,多个队列对写入所述多个队列对各自的用于接收任务的工作队列元素到共享接收队列,这意味着,在共享接收队列中的多个工作队列元素来自多个队列对,因此在共享接收队列中,前后紧邻的两个工作队列元素可能来自不同的队列对因此也可能具有不同的数据长度。这样也就意味着,在共享接收队列中的工作队列元素,可能分布在多个物理页上,而每个物理页上的工作队列元素的数量可能是难以确定的且同一个物理页上的工作队列元素可能不是来自同一个队列对。如果通过添加链表和指针到工作队列元素主体的方式,虽然能够实现在多个物理页之间精确定位到下一个工作队列元素且跳过还没有完成也就不能消耗的工作队列元素,但是会导致额外的解析指针的损耗。图2所示的用于管理共享接收队列的方法,判断所述共享接收队列中的与当前填充操作对应的工作队列元素相关联的至少一个工作队列元素是否均标记已完成,其中,所述至少一个工作队列元素包括与所述当前填充操作对应的工作队列元素,这样可以通过提前探测包括了与所述当前填充操作对应的工作队列元素的更多个工作元素队列的标记是否已完成,进而可以提前探测与所述当前填充操作对应的工作队列元素所在的物理页以及可选的下一个物理页或者接下来多个物理页中是否包含了未完成的工作队列元素,这样有助于提前进行替换安排。因此,通过设定与当前填充操作对应的工作队列元素相关联的所述至少一个工作队列元素的范围,可以设定提前探测的物理页的范围。考虑到共享接收队列中的工作队列元素的标记被设定为完成的时间点是由相关联的接收任务的完成时间点或者相关联的完成队列元素被写入完成队列的时间点确定的,因此,可以设定相对合适的所述至少一个工作队列元素的范围,从而取得合理的提前探测范围。在一些实施例中,所述至少一个工作队列元素是与所述当前填充操作对应的工作队列元素所在的物理页所包括的工作队列元素。在另一些实施例中,所述至少一个工作队列元素包括了,与所述当前填充操作对应的工作队列元素所在的物理页所包括的工作队列元素,还有与所述当前填充操作对应的工作队列元素所在的物理页相对的下一个物理页所包括的工作队列元素。
通过设定相对合适的所述至少一个工作队列元素的范围,然后判断所述至少一个工作队列元素是否均标记已完成。如果所述至少一个工作队列元素均标记已完成,则执行所述当前填充操作从而消耗与所述当前填充操作对应的工作队列元素。如此,在所述至少一个工作队列元素均标记已完成的情况下,这意味着所述至少一个工作队列元素都可以被消耗,因此执行当前填充操作,实现了按顺序读取和填充共享接收队列中的工作队列元素。如果所述至少一个工作队列元素中任一工作队列元素标记未完成,则替换所述至少一个工作队列元素所在的物理页为空闲物理页池中的物理页,转移所述至少一个工作队列元素所在的物理页到未完成物理页池,并且记录与所述当前填充操作对应的全局变量为所述至少一个工作队列元素所在的物理页相关联的全局变量,然后执行相对于所述当前填充操作的下一填充操作。这里,所述至少一个工作队列元素中任一工作队列元素标记未完成,这意味着不能填充所述至少一个工作队列元素。为了确保硬件能够按顺序读取和填充共享接收队列中的工作队列元素,替换所述至少一个工作队列元素所在的物理页为空闲物理页池中的物理页,空闲物理页池中的物理页均为空闲物理页也就是可以填充的物理页,这样就可以让硬件继续按顺序读取和填充工作队列元素。接着,对于被替换的所述至少一个工作队列元素所在的物理页,考虑到该物理页中包括了未完成的工作队列元素,转移所述至少一个工作队列元素所在的物理页到未完成物理页池,未完成物理页池中的物理页均包括至少一个未完成的工作队列元素。在用空闲物理页池中的物理页替换所述至少一个工作队列元素所在的物理页以及将所述至少一个工作队列元素所在的物理页转移到未完成物理页池之后,执行相对于所述当前填充操作的下一填充操作,这样确保硬件按顺序读取和填充共享接收队列中的工作队列元素,而不受到这些可能的未完成的工作队列元素的影响。另外,还记录与所述当前填充操作对应的全局变量为所述至少一个工作队列元素所在的物理页相关联的全局变量,这样通过全局变量,可以区分替换前和替换后的工作队列元素。换句话说,在每次执行填充操作之前,如果确定所述至少一个工作队列元素中任一工作队列元素标记未完成,则会执行替换操作和物理页转移操作,而每次用空闲物理页池中的物理页替换所述至少一个工作队列元素所在的物理页,则记录下与所述当前填充操作对应的全局变量,作为被替换的所述至少一个工作队列元素所在的物理页相关联的全局变量。如此,当后续有接收任务完成或者有完成队列元素被写入完成队列时,可以基于全局变量来便利地确定相应的工作队列元素是在共享接收队列中还是在未完成物理页池中,从而有利于快速定位相应的工作队列元素并标记为已完成。
总之,图2所示的用于管理共享接收队列的方法,基于环形缓冲的设计,实现了按顺序读取和填充共享接收队列中的工作队列元素,可以循环利用共享接收队列的队列资源,不需要借助链表解析和链表操作,有利于提升硬件效率和减低延迟;针对乱序完成的可能性,利用设定工作队列元素的标记为已完成或者未完成,以及利用空闲物理页池和未完成物理页池,提供了一套高效可靠的机制,从而有效地应对共享接收队列中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列中的工作队列元素的次序的问题。
图3为本申请实施例提供的一种从空闲物理池到共享接收队列的物理页转移的示意图。如图3所示,通过环形缓冲区队首指针306和环形缓冲区队尾指针308实现在共享接收队列B320的共享接收队列起始地址302与共享接收队列B320的共享接收队列结束地址304之间的环形缓冲。通过移动所述环形缓冲区队首指针306来顺序执行填充操作用于顺序填充工作队列元素到所述共享接收队列B320,以及,通过比较所述环形缓冲区队首指针306和所述环形缓冲区队尾指针308来判断是否完成一次填充循环。图3中示意性示出了,共享接收队列B320中包括多个工作队列元素,这些工作队列元素存储在多个物理页上。其中,工作队列元素A332,工作队列元素B334,工作队列元素C336存储在物理页A330上,工作队列元素D342和工作队列元素E344存储在物理页B340上。环形缓冲区队首指针306的当前位置对应了物理页A330中的工作队列元素B334,因此,与所述当前填充操作对应的工作队列元素是工作队列元素B334,而与所述当前填充操作对应的工作队列元素所在的物理页是物理页A330。这里,在执行针对工作队列元素B334的填充操作之前,判断工作队列元素B334是否标记已完成。因为工作队列元素B334标记未完成,这意味着,所述至少一个工作队列元素中任一工作队列元素标记未完成,因此,替换物理页A330为空闲物理页池(未示出)中的物理页C350,转移物理页A330到未完成物理页池,并且记录与所述当前填充操作对应的全局变量为所述至少一个工作队列元素所在的物理页相关联的全局变量,然后执行相对于所述当前填充操作的下一填充操作。图3中还示意性示出了,物理页A330中的工作队列元素B334的标记未完成,替换物理页A330为空闲的物理页C350,因此,将物理页A330替换成物理页C350,物理页C350是空闲物理页,如此,确保硬件按顺序读取和填充共享接收队列中的工作队列元素,而不受到这些可能的未完成的工作队列元素的影响。
参阅图3,通过设定与当前填充操作对应的工作队列元素相关联的所述至少一个工作队列元素的范围,可以设定提前探测的物理页的范围。因此,可以设定相对合适的所述至少一个工作队列元素的范围,从而取得合理的提前探测范围。在一些实施例中,所述至少一个工作队列元素是与所述当前填充操作对应的工作队列元素(图3中的工作队列元素B334)所在的物理页(图3中的物理页A330)所包括的工作队列元素(图3中的工作队列元素A332,工作队列元素B334,工作队列元素C336)。在另一些实施例中,所述至少一个工作队列元素包括了,与所述当前填充操作对应的工作队列元素所在的物理页所包括的工作队列元素,还有与所述当前填充操作对应的工作队列元素所在的物理页(图3中的物理页A330)相对的下一个物理页(图3中的物理页B340)所包括的工作队列元素。
图4为本申请实施例提供的一种共享接收队列的示意图。图4中示意性示出了共享接收队列C410,未完成物理页池430还有空闲物理页池440之间的相互作用机制。通过移动所述环形缓冲区队首指针来顺序执行填充操作用于顺序填充工作队列元素到所述共享接收队列C410。其中,每次执行填充操作之前,判断所述共享接收队列中的与当前填充操作对应的工作队列元素相关联的至少一个工作队列元素是否均标记已完成。如果所述至少一个工作队列元素均标记已完成,则执行所述当前填充操作从而消耗与所述当前填充操作对应的工作队列元素。如果所述至少一个工作队列元素中任一工作队列元素标记未完成,则替换所述至少一个工作队列元素所在的物理页为空闲物理页池440中的物理页,转移所述至少一个工作队列元素所在的物理页到未完成物理页池430,并且记录与所述当前填充操作对应的全局变量为所述至少一个工作队列元素所在的物理页相关联的全局变量,然后执行相对于所述当前填充操作的下一填充操作。图4中,从空闲物理页池440到共享接收队列C410的带箭头线条代表了,在按顺序读取和填充共享接收队列C410中的工作队列元素的过程中,识别出了带有未完成工作队列元素的物理页,也即所述至少一个工作队列元素中任一工作队列元素标记未完成,因此替换所述至少一个工作队列元素所在的物理页为空闲物理页池440中的物理页。从共享接收队列C410到未完成物理页池430的带箭头线条代表了,在按顺序读取和填充共享接收队列C410中的工作队列元素的过程中,识别出了带有未完成工作队列元素的物理页,也即所述至少一个工作队列元素中任一工作队列元素标记未完成,因此转移所述至少一个工作队列元素所在的物理页到未完成物理页池430。从未完成物理页池430到空闲物理页池440的带箭头线条代表了,当在未完成物理页池430中的某个物理页中的全部工作队列元素均为已完成时,则转移该物理页到空闲物理页池440,这样该物理页后续可用于替换共享接收队列C410中的带有未完成工作队列元素的物理页。如此,确保硬件按顺序读取和填充共享接收队列中的工作队列元素,而不受到这些可能的未完成的工作队列元素的影响,并且,实现了物理页资源的循环利用。因此,针对乱序完成的可能性,利用设定工作队列元素的标记为已完成或者未完成,以及利用空闲物理页池和未完成物理页池,提供了一套高效可靠的机制,从而有效地应对共享接收队列中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列中的工作队列元素的次序的问题。
进一步地,图4中还示意性示出了物理页地址表420。物理页地址表420通过带有双箭头的虚短线与共享接收队列C410,未完成物理页池430还有空闲物理页池440分别连接。利用物理页地址表420,可以通过改变其中的表项例如表项互换或者表项中的地址互换等,从而便利地实现物理页替换和物理页转移,而不需要拷贝数据。如此,通过替换物理页的方式,避免了使用链表等跳跃式写工作队列元素,使得硬件可以顺序读取工作队列元素,提高了硬件处理效率,最终提升了远程直接内存访问性能,而且利用物理页地址表420来实现物理页替换和物理页转移,避免了数据拷贝的损耗,提高了效率。
参阅上述图1至图4,在一种可能的实施方式中,所述方法还包括:响应于第一接收任务的完成,确定所述第一接收任务相关联的第一工作队列元素编号和所述第一接收任务被下发时的全局变量;基于所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量,确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中,定位与所述第一工作队列元素编号对应的工作队列元素,然后标记与所述第一工作队列元素编号对应的工作队列元素为已完成。通过全局变量,可以区分替换前和替换后的工作队列元素。换句话说,在每次执行填充操作之前,如果确定所述至少一个工作队列元素中任一工作队列元素标记未完成,则会执行替换操作和物理页转移操作,而每次用空闲物理页池中的物理页替换所述至少一个工作队列元素所在的物理页,则记录下与所述当前填充操作对应的全局变量,作为被替换的所述至少一个工作队列元素所在的物理页相关联的全局变量。如此,当后续有接收任务完成或者有完成队列元素被写入完成队列时,可以基于全局变量来便利地确定相应的工作队列元素是在共享接收队列中还是在未完成物理页池中,从而有利于快速定位相应的工作队列元素并标记为已完成。这里,第一接收任务的完成可以是基于接收端收到的来自远端主机的反馈或者对应的完成队列元素被写入完成队列。利用第一工作队列元素编号,可以进行编号比对从而快速定位与所述第一工作队列元素编号对应的工作队列元素。
在一些实施例中,所述方法还包括:每次标记所述未完成物理页池中的工作队列元素为已完成之后,判断该工作队列元素所在的物理页中的所有工作队列元素是否均标记已完成,如果是,则转移该工作队列元素所在的物理页到所述空闲物理页池。如此,实现了物理页资源的循环利用。
在一些实施例中,基于所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量,确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中,包括:通过比较所述第一接收任务被下发时的全局变量和所述全局变量,判断与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中。全局变量用于记录下已完成的填充循环的次数,这样在关键的时间点,可以通过记录在这些关键的时间点上的全局变量,从而为后续操作提供参考。如此,可以基于全局变量来便利地确定相应的工作队列元素是在共享接收队列中还是在未完成物理页池中,从而有利于快速定位相应的工作队列元素并标记为已完成。
在一些示例中,基于所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量,确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中,还包括:当所述第一接收任务被下发时的全局变量不等于所述全局变量时,确定与所述第一工作队列元素编号对应的工作队列元素是在所述未完成物理页池中;当所述第一接收任务被下发时的全局变量等于所述全局变量时,基于所述第一工作队列元素编号确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中。这里,当所述第一接收任务被下发时的全局变量不等于所述全局变量时,这意味着,在下发第一接收任务也即写入与所述第一工作队列元素编号对应的工作队列元素到所述共享接收队列之后,至少已经完成了一次填充循环,因此改变了所述全局变量使得所述第一接收任务被下发时的全局变量不等于所述全局变量。这也就意味着环形缓冲区队首指针肯定已经移动到了与所述第一工作队列元素编号对应的工作队列元素,并且判断出与所述第一工作队列元素编号对应的工作队列元素标记未完成,因此已经转移与所述第一工作队列元素编号对应的工作队列元素所在的物理页到所述未完成物理页池。当所述第一接收任务被下发时的全局变量等于所述全局变量时,这意味着,在下发第一接收任务也即写入与所述第一工作队列元素编号对应的工作队列元素到所述共享接收队列之后,还没有完成一次填充循环,因此还没有更新所述全局变量,为此,可以基于所述第一工作队列元素编号来快速定位相应的工作队列元素并标记为已完成。如此,可以基于全局变量来便利地确定相应的工作队列元素是在共享接收队列中还是在未完成物理页池中,从而有利于快速定位相应的工作队列元素并标记为已完成。
在一些实施例中,所述第一接收任务被下发时的全局变量是在执行所述第一接收任务相关联的填充操作时的所述全局变量,所述第一接收任务相关联的填充操作用于填充与所述第一工作队列元素编号对应的工作队列元素到所述共享接收队列。如此,可以基于全局变量来便利地确定相应的工作队列元素是在共享接收队列中还是在未完成物理页池中,从而有利于快速定位相应的工作队列元素并标记为已完成。
在一些实施例中,所述第一接收任务的完成是基于所述第一接收任务相关联的完成队列元素被写入到完成队列,所述第一接收任务相关联的完成队列元素包括所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量。如此,可以基于全局变量来便利地确定相应的工作队列元素是在共享接收队列中还是在未完成物理页池中,从而有利于快速定位相应的工作队列元素并标记为已完成。
在一些实施例中,所述共享接收队列中的工作队列元素通过大小相同的多个物理页存储,所述共享接收队列中的工作队列元素所在的物理页、所述空闲物理页池中的物理页以及所述未完成物理页池中的物理页一起构成所述多个物理页。如此,可以设定相对合适的所述至少一个工作队列元素的范围,从而取得合理的提前探测范围;利用设定工作队列元素的标记为已完成或者未完成,以及利用空闲物理页池和未完成物理页池,提供了一套高效可靠的机制,从而有效地应对共享接收队列中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列中的工作队列元素的次序的问题。
在一些示例中,所述多个物理页各自的初始地址和当前地址被记录在物理页地址表中的与所述多个物理页一一对应的多个表项,并且,从所述共享接收队列到所述未完成物理页池的物理页转移、从所述未完成物理页池到所述空闲物理页池的物理页转移以及从所述空闲物理页池到所述共享接收队列的物理页转移均通过更改所述物理页地址表中的对应表项实现。如此,通过替换物理页的方式,避免了使用链表等跳跃式写工作队列元素,使得硬件可以顺序读取工作队列元素,提高了硬件处理效率,最终提升了远程直接内存访问性能,而且利用物理页地址表来实现物理页替换和物理页转移,避免了数据拷贝的损耗,提高了效率。
在一些示例中,所述物理页地址表包括第一子表对应所述共享接收队列中的工作队列元素所在的物理页,第二子表对应所述空闲物理页池中的物理页,以及第三子表对应所述未完成物理页池中的物理页,所述共享接收队列中的工作队列元素所在的物理页、所述空闲物理页池中的物理页以及所述未完成物理页池中的物理页之间的物理页转移通过所述第一子表、所述第二子表以及所述第三子表之间的表项交换实现。如此,通过替换物理页的方式,避免了使用链表等跳跃式写工作队列元素,使得硬件可以顺序读取工作队列元素,提高了硬件处理效率,最终提升了远程直接内存访问性能,而且利用物理页地址表来实现物理页替换和物理页转移,避免了数据拷贝的损耗,提高了效率。
在一些示例中,所述物理页地址表中的所述多个表项中的每一个表项还记录所述多个物理页中的与该表项对应的物理页是在所述共享接收队列中或者在所述未完成物理页池中。如此,通过替换物理页的方式,避免了使用链表等跳跃式写工作队列元素,使得硬件可以顺序读取工作队列元素,提高了硬件处理效率,最终提升了远程直接内存访问性能,而且利用物理页地址表来实现物理页替换和物理页转移,避免了数据拷贝的损耗,提高了效率。
在一种可能的实施方式中,所述至少一个工作队列元素还包括:在所述环形缓冲中的相对于与所述当前填充操作对应的工作队列元素的下一紧邻工作队列元素。如此,通过设定相对合适的所述至少一个工作队列元素的范围,然后判断所述至少一个工作队列元素是否均标记已完成,从而取得合理的提前探测范围,这样有助于提前进行替换安排。
在一种可能的实施方式中,所述至少一个工作队列元素包括:在所述环形缓冲中的从与所述当前填充操作对应的工作队列元素开始顺序排列的多个工作队列元素。如此,通过设定相对合适的所述至少一个工作队列元素的范围,然后判断所述至少一个工作队列元素是否均标记已完成,从而取得合理的提前探测范围,这样有助于提前进行替换安排。
在一种可能的实施方式中,所述共享接收队列用于远程直接内存访问驱动和所述远程直接内存访问逻辑之间的交互,所述远程直接内存访问逻辑基于所述共享接收队列相关联的接收任务完成次序写入完成队列元素到完成队列从而反馈所述远程直接内存访问驱动,所述接收任务完成次序是基于所述多个队列对各自的用于接收任务的工作队列元素的完成次序。如此,在基于共享接收队列的远程直接内存访问系统中,利用共享接收队列来节省队列资源和接收端资源的同时,能够有效地应对共享接收队列中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列中的工作队列元素的次序的问题,不仅实现了按顺序读取工作队列元素及按顺序执行填充操作,而且不需要借助链表解析和链表操作,有利于提升硬件效率和减低延迟。
在一些实施例中,所述多个队列对基于所述共享接收队列相关联的接收任务写入次序写入所述多个队列对各自的用于接收任务的工作队列元素到所述共享接收队列,所述接收任务写入次序不同于所述接收任务完成次序。如此,在基于共享接收队列的远程直接内存访问系统中,利用共享接收队列来节省队列资源和接收端资源的同时,能够有效地应对共享接收队列中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列中的工作队列元素的次序的问题,不仅实现了按顺序读取工作队列元素及按顺序执行填充操作,而且不需要借助链表解析和链表操作,有利于提升硬件效率和减低延迟。
在一些实施例中,所述共享接收队列中的工作队列元素的消耗次序是基于所述接收任务完成次序。如此,在基于共享接收队列的远程直接内存访问系统中,利用共享接收队列来节省队列资源和接收端资源的同时,能够有效地应对共享接收队列中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列中的工作队列元素的次序的问题,不仅实现了按顺序读取工作队列元素及按顺序执行填充操作,而且不需要借助链表解析和链表操作,有利于提升硬件效率和减低延迟。
在一种可能的实施方式中,所述多个队列对下发所述多个队列对各自的用于发送任务的工作队列元素到多个发送队列,所述多个发送队列共享所述共享接收队列。如此,在基于共享接收队列的远程直接内存访问系统中,利用共享接收队列来节省队列资源和接收端资源的同时,能够有效地应对共享接收队列中的工作队列元素的消耗次序可能不同于按顺序读取共享接收队列中的工作队列元素的次序的问题,不仅实现了按顺序读取工作队列元素及按顺序执行填充操作,而且不需要借助链表解析和链表操作,有利于提升硬件效率和减低延迟。
在一种可能的实施方式中,与所述当前填充操作对应的工作队列元素在所述共享接收队列中位于所述环形缓冲区队首指针在执行所述当前填充操作之前的位置。如此,有效应对乱序完成的可能性,有利于提升硬件效率和减低延迟。
在一种可能的实施方式中,按照从所述共享接收队列起始地址到所述共享接收队列结束地址的方向朝着所述环形缓冲区队尾指针移动所述环形缓冲区队首指针。如此,有效应对乱序完成的可能性,有利于提升硬件效率和减低延迟。
在一种可能的实施方式中,初始化或者再配置所述共享接收队列包括更新所述环形缓冲区队首指针的初始位置和所述环形缓冲区队尾指针的初始位置。如此,有效应对乱序完成的可能性,有利于提升硬件效率和减低延迟。
图5是本申请实施例提供的一种计算设备的结构示意图,该计算设备500包括:一个或者多个处理器510、通信接口520以及存储器530。所述处理器510、通信接口520以及存储器530通过总线540相互连接。可选地,该计算设备500还可以包括输入/输出接口550,输入/输出接口550连接有输入/输出设备,用于接收用户设置的参数等。该计算设备500能够用于实现上述的本申请实施例中设备实施例或者系统实施例的部分或者全部功能;处理器510还能够用于实现上述的本申请实施例中方法实施例的部分或者全部操作步骤。例如,该计算设备500执行各种操作的具体实现可参照上述实施例中的具体细节,如处理器510用于执行上述方法实施例中部分或者全部步骤或者上述方法实施例中的部分或者全部操作。再例如,本申请实施例中,计算设备500可用于实现上述装置实施例中一个或者多个部件的部分或者全部功能,此外通信接口520具体可用于为了实现这些装置、部件的功能所必须的通讯功能等,以及处理器510具体可用于为了实现这些装置、部件的功能所必须的处理功能等。
应当理解的是,图5的计算设备500可以包括一个或者多个处理器510,并且多个处理器510可以按照并行化连接方式、串行化连接方式、串并行连接方式或者任意连接方式来协同提供处理能力,或者多个处理器510可以构成处理器序列或者处理器阵列,或者多个处理器510之间可以分成主处理器和辅助处理器,或者多个处理器510之间可以具有不同的架构如采用异构计算架构。另外,图5所示的计算设备500,相关的结构性描述及功能性描述是示例性且非限制性的。在一些示例性实施例中,计算设备500可以包括比图5所示的更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者具有不同的部件布置。
处理器510可以有多种具体实现形式,例如处理器510可以包括中央处理器(central processing unit,CPU)、图形处理器(graphic processing unit,GPU)、神经网络处理器(neural-network processing unit,NPU)、张量处理器(tensor processingunit,TPU)或数据处理器(data processing unit,DPU)等一种或多种的组合,本申请实施例不做具体限定。处理器510还可以是单核处理器或多核处理器。处理器510可以由CPU和硬件芯片的组合。上述硬件芯片可以是专用集成电路(application-specific integratedcircuit,ASIC),可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。处理器510也可以单独采用内置处理逻辑的逻辑器件来实现,例如FPGA或数字信号处理器(digital signal processor,DSP)等。通信接口520可以为有线接口或无线接口,用于与其他模块或设备进行通信,有线接口可以是以太接口、局域互联网络(local interconnect network,LIN)等,无线接口可以是蜂窝网络接口或使用无线局域网接口等。
存储器530可以是非易失性存储器,例如,只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。存储器530也可以是易失性存储器,易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhancedSDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。存储器530也可用于存储程序代码和数据,以便于处理器510调用存储器530中存储的程序代码执行上述方法实施例中的部分或者全部操作步骤,或者执行上述设备实施例中的相应功能。此外,计算设备500可能包含相比于图5展示的更多或者更少的组件,或者有不同的组件配置方式。
总线540可以是快捷外围部件互连标准(peripheral component interconnectexpress,PCIe)总线,或扩展工业标准结构(extended industry standard architecture,EISA)总线、统一总线(unified bus,Ubus或UB)、计算机快速链接(compute express link,CXL)、缓存一致互联协议(cache coherent interconnect for accelerators,CCIX)等。总线540可以分为地址总线、数据总线、控制总线等。总线540除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
本申请实施例提供的方法和设备是基于同一发明构思的,由于方法及设备解决问题的原理相似,因此方法与设备的实施例、实施方式、示例或实现方式可以相互参见,其中重复之处不再赘述。本申请实施例还提供一种系统,该系统包括多个计算设备,每个计算设备的结构可以参照上述所描述的计算设备的结构。该系统可实现的功能或者操作可以参照上述方法实施例中的具体实现步骤和/或上述装置实施例中所描述的具体功能,在此不再赘述。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机指令,当所述计算机指令在计算机设备(如一个或者多个处理器)上运行时可以实现上述方法实施例中的方法步骤。所述计算机可读存储介质的处理器在执行上述方法步骤的具体实现可参照上述方法实施例中所描述的具体操作和/或上述装置实施例中所描述的具体功能,在此不再赘述。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。本申请实施例可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。可用介质可以是磁性介质(如软盘、硬盘、磁带)、光介质、或者半导体介质。半导体介质可以是固态硬盘,也可以是随机存取存储器,闪存,只读存储器,可擦可编程只读存储器,电可擦可编程只读存储器,寄存器或任何其他形式的合适存储介质。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请实施例的精神和范围。本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并或删减;本申请实施例系统中的模块可以根据实际需要进行划分、合并或删减。如果本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (21)

1.一种用于管理共享接收队列的方法,其特征在于,多个队列对写入所述多个队列对各自的用于接收任务的工作队列元素到共享接收队列,所述方法包括:
通过环形缓冲区队首指针和环形缓冲区队尾指针实现在所述共享接收队列的共享接收队列起始地址与所述共享接收队列的共享接收队列结束地址之间的环形缓冲;
通过移动所述环形缓冲区队首指针来顺序执行填充操作用于顺序填充工作队列元素到所述共享接收队列,以及,通过比较所述环形缓冲区队首指针和所述环形缓冲区队尾指针来判断是否完成一次填充循环;
当所述环形缓冲区队首指针等于所述环形缓冲区队尾指针时,判断完成一次填充循环并且更新全局变量用于记录已完成的填充循环的次数,
每次执行填充操作之前,判断所述共享接收队列中的与当前填充操作对应的工作队列元素相关联的至少一个工作队列元素是否均标记已完成,所述至少一个工作队列元素包括与所述当前填充操作对应的工作队列元素,
如果所述至少一个工作队列元素均标记已完成,则执行所述当前填充操作从而消耗与所述当前填充操作对应的工作队列元素,
如果所述至少一个工作队列元素中任一工作队列元素标记未完成,则替换所述至少一个工作队列元素所在的物理页为空闲物理页池中的物理页,转移所述至少一个工作队列元素所在的物理页到未完成物理页池,并且记录与所述当前填充操作对应的全局变量为所述至少一个工作队列元素所在的物理页相关联的全局变量,然后执行相对于所述当前填充操作的下一填充操作,
其中,所述方法还包括:
响应于第一接收任务的完成,确定所述第一接收任务相关联的第一工作队列元素编号和所述第一接收任务被下发时的全局变量;
基于所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量,确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中,定位与所述第一工作队列元素编号对应的工作队列元素,然后标记与所述第一工作队列元素编号对应的工作队列元素为已完成。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
每次标记所述未完成物理页池中的工作队列元素为已完成之后,判断该工作队列元素所在的物理页中的所有工作队列元素是否均标记已完成,如果是,则转移该工作队列元素所在的物理页到所述空闲物理页池。
3.根据权利要求1所述的方法,其特征在于,基于所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量,确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中,包括:
通过比较所述第一接收任务被下发时的全局变量和所述全局变量,判断与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中。
4.根据权利要求3所述的方法,其特征在于,基于所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量,确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中,还包括:
当所述第一接收任务被下发时的全局变量不等于所述全局变量时,确定与所述第一工作队列元素编号对应的工作队列元素是在所述未完成物理页池中;当所述第一接收任务被下发时的全局变量等于所述全局变量时,基于所述第一工作队列元素编号确定与所述第一工作队列元素编号对应的工作队列元素是在所述共享接收队列中或者在所述未完成物理页池中。
5.根据权利要求1所述的方法,其特征在于,所述第一接收任务被下发时的全局变量是在执行所述第一接收任务相关联的填充操作时的所述全局变量,所述第一接收任务相关联的填充操作用于填充与所述第一工作队列元素编号对应的工作队列元素到所述共享接收队列。
6.根据权利要求1所述的方法,其特征在于,所述第一接收任务的完成是基于所述第一接收任务相关联的完成队列元素被写入到完成队列,所述第一接收任务相关联的完成队列元素包括所述第一工作队列元素编号和所述第一接收任务被下发时的全局变量。
7.根据权利要求2所述的方法,其特征在于,所述共享接收队列中的工作队列元素通过大小相同的多个物理页存储,所述共享接收队列中的工作队列元素所在的物理页、所述空闲物理页池中的物理页以及所述未完成物理页池中的物理页一起构成所述多个物理页。
8.根据权利要求7所述的方法,其特征在于,所述多个物理页各自的初始地址和当前地址被记录在物理页地址表中的与所述多个物理页一一对应的多个表项,并且,从所述共享接收队列到所述未完成物理页池的物理页转移、从所述未完成物理页池到所述空闲物理页池的物理页转移以及从所述空闲物理页池到所述共享接收队列的物理页转移均通过更改所述物理页地址表中的对应表项实现。
9.根据权利要求7所述的方法,其特征在于,所述物理页地址表包括第一子表对应所述共享接收队列中的工作队列元素所在的物理页,第二子表对应所述空闲物理页池中的物理页,以及第三子表对应所述未完成物理页池中的物理页,所述共享接收队列中的工作队列元素所在的物理页、所述空闲物理页池中的物理页以及所述未完成物理页池中的物理页之间的物理页转移通过所述第一子表、所述第二子表以及所述第三子表之间的表项交换实现。
10.根据权利要求8所述的方法,其特征在于,所述物理页地址表中的所述多个表项中的每一个表项还记录所述多个物理页中的与该表项对应的物理页是在所述共享接收队列中或者在所述未完成物理页池中。
11.根据权利要求1所述的方法,其特征在于,所述至少一个工作队列元素还包括:在所述环形缓冲中的相对于与所述当前填充操作对应的工作队列元素的下一紧邻工作队列元素。
12.根据权利要求1所述的方法,其特征在于,所述至少一个工作队列元素包括:在所述环形缓冲中的从与所述当前填充操作对应的工作队列元素开始顺序排列的多个工作队列元素。
13.根据权利要求1所述的方法,其特征在于,所述共享接收队列用于远程直接内存访问驱动和所述远程直接内存访问逻辑之间的交互,所述远程直接内存访问逻辑基于所述共享接收队列相关联的接收任务完成次序写入完成队列元素到完成队列从而反馈所述远程直接内存访问驱动,所述接收任务完成次序是基于所述多个队列对各自的用于接收任务的工作队列元素的完成次序。
14.根据权利要求13所述的方法,其特征在于,所述多个队列对基于所述共享接收队列相关联的接收任务写入次序写入所述多个队列对各自的用于接收任务的工作队列元素到所述共享接收队列,所述接收任务写入次序不同于所述接收任务完成次序。
15.根据权利要求14所述的方法,其特征在于,所述共享接收队列中的工作队列元素的消耗次序是基于所述接收任务完成次序。
16.根据权利要求1所述的方法,其特征在于,所述多个队列对下发所述多个队列对各自的用于发送任务的工作队列元素到多个发送队列,所述多个发送队列共享所述共享接收队列。
17.根据权利要求1所述的方法,其特征在于,与所述当前填充操作对应的工作队列元素在所述共享接收队列中位于所述环形缓冲区队首指针在执行所述当前填充操作之前的位置。
18.根据权利要求1所述的方法,其特征在于,按照从所述共享接收队列起始地址到所述共享接收队列结束地址的方向朝着所述环形缓冲区队尾指针移动所述环形缓冲区队首指针。
19.根据权利要求1所述的方法,其特征在于,初始化或者再配置所述共享接收队列包括更新所述环形缓冲区队首指针的初始位置和所述环形缓冲区队尾指针的初始位置。
20.一种计算机设备,其特征在于,所述计算机设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现根据权利要求1至19中任一项所述的方法。
21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,当所述计算机指令在计算机设备上运行时使得所述计算机设备执行根据权利要求1至19中任一项所述的方法。
CN202410168105.1A 2024-02-06 2024-02-06 用于管理共享接收队列的方法、计算机设备及介质 Active CN117724874B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410168105.1A CN117724874B (zh) 2024-02-06 2024-02-06 用于管理共享接收队列的方法、计算机设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410168105.1A CN117724874B (zh) 2024-02-06 2024-02-06 用于管理共享接收队列的方法、计算机设备及介质

Publications (2)

Publication Number Publication Date
CN117724874A CN117724874A (zh) 2024-03-19
CN117724874B true CN117724874B (zh) 2024-04-26

Family

ID=90205665

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410168105.1A Active CN117724874B (zh) 2024-02-06 2024-02-06 用于管理共享接收队列的方法、计算机设备及介质

Country Status (1)

Country Link
CN (1) CN117724874B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118585505A (zh) * 2024-08-06 2024-09-03 天翼视联科技有限公司 日志处理方法、装置、电子装置和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107579929A (zh) * 2017-09-18 2018-01-12 郑州云海信息技术有限公司 一种可靠连接通信队列对的设置方法、系统及相关装置
CN116991609A (zh) * 2023-09-26 2023-11-03 珠海星云智联科技有限公司 队列公平处理方法、设备以及可读存储介质
CN117033008A (zh) * 2023-04-25 2023-11-10 西安微电子技术研究所 一种基于描述符共享循环队列的多核快速消息通信方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7089378B2 (en) * 2003-03-27 2006-08-08 Hewlett-Packard Development Company, L.P. Shared receive queues
US7496698B2 (en) * 2005-03-22 2009-02-24 International Business Machines Corporation System and method for efficient implementation of a shared receive queue

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107579929A (zh) * 2017-09-18 2018-01-12 郑州云海信息技术有限公司 一种可靠连接通信队列对的设置方法、系统及相关装置
CN117033008A (zh) * 2023-04-25 2023-11-10 西安微电子技术研究所 一种基于描述符共享循环队列的多核快速消息通信方法
CN116991609A (zh) * 2023-09-26 2023-11-03 珠海星云智联科技有限公司 队列公平处理方法、设备以及可读存储介质

Also Published As

Publication number Publication date
CN117724874A (zh) 2024-03-19

Similar Documents

Publication Publication Date Title
EP3667496B1 (en) Distributed computing system, data transmission method and device in distributed computing system
CN117724874B (zh) 用于管理共享接收队列的方法、计算机设备及介质
CN113918101B (zh) 一种写数据高速缓存的方法、系统、设备和存储介质
CN110647480A (zh) 数据处理方法、远程直接访存网卡和设备
CN110119304B (zh) 一种中断处理方法、装置及服务器
CN111124270B (zh) 缓存管理的方法、设备和计算机程序产品
US20090228663A1 (en) Control circuit, control method, and control program for shared memory
CN104239134A (zh) 一种众核系统的任务管理方法和装置
WO2021086693A1 (en) Management of multiple physical function non-volatile memory devices
CN115129621B (zh) 一种内存管理方法、设备、介质及内存管理模块
CN115934625B (zh) 一种用于远程直接内存访问的敲门铃方法、设备及介质
WO2023104194A1 (zh) 一种业务处理方法及装置
US11397612B2 (en) Autonomous job queueing system for hardware accelerators
CN117631974A (zh) 跨越基于存储器的通信队列的多信道接口的存取请求重新排序
CN116089477B (zh) 分布式训练方法及系统
CN116561091A (zh) 一种日志存储方法、装置、设备及可读存储介质
CN116303211A (zh) 一种应用于车载场景的cpu多核间通信方法及装置
CN115878333A (zh) 进程组间的一致性判断方法、装置及设备
CN115840654A (zh) 消息的处理方法、系统、计算设备及可读存储介质
US20210055971A1 (en) Method and node for managing a request for hardware acceleration by means of an accelerator device
WO2024067492A1 (zh) 任务调度方法和电子装置
CN118152154B (zh) 基于共享内存开发的通讯控制方法、系统和可读存储介质
CN115604198B (zh) 一种网卡控制器、网卡控制方法、设备及介质
CN118467453B (zh) 一种数据传输方法、装置、设备、介质及计算机程序产品
US20240220294A1 (en) VM Migration Using Memory Pointers

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