WO2024088268A1 - Rdma事件管理方法、设备及存储介质 - Google Patents

Rdma事件管理方法、设备及存储介质 Download PDF

Info

Publication number
WO2024088268A1
WO2024088268A1 PCT/CN2023/126279 CN2023126279W WO2024088268A1 WO 2024088268 A1 WO2024088268 A1 WO 2024088268A1 CN 2023126279 W CN2023126279 W CN 2023126279W WO 2024088268 A1 WO2024088268 A1 WO 2024088268A1
Authority
WO
WIPO (PCT)
Prior art keywords
rdma
user
memory area
event
queue
Prior art date
Application number
PCT/CN2023/126279
Other languages
English (en)
French (fr)
Inventor
杨航
李金虎
徐成
Original Assignee
杭州阿里云飞天信息技术有限公司
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 杭州阿里云飞天信息技术有限公司 filed Critical 杭州阿里云飞天信息技术有限公司
Publication of WO2024088268A1 publication Critical patent/WO2024088268A1/zh

Links

Abstract

本申请实施例提供一种RDMA事件管理方法、设备及存储介质。在本申请实施例中,在RDMA应用与RDMA设备之间增设用于事件通知的用户态事件管理实例,基于该用户态事件管理实例,在针对RDMA应用进行事件通知过程中,可使用于向RDMA应用进行完成事件通知的CPU硬件资源在低功耗状态等待完成事件发生,以节约功耗,在完成事件发生的情况下,可使RDMA设备在用户态将该CPU硬件资源"唤醒",CPU硬件资源被唤醒后可直接通知RDMA应用有完成事件发生,整个过程无需经过内核态,也就不用在内核态和用户态之间进行上下文切换,缩短了事件通知的路径和周期,降低了RDMA应用的网络通信延迟,提高RDMA的应用性能。

Description

RDMA事件管理方法、设备及存储介质
本申请要求于2022年10月28日提交中国专利局、申请号为202211338130.7、发明名称为“RDMA事件管理方法、设备及存储介质”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及基于RDMA的网络通信技术领域,尤其涉及一种RDMA事件管理方法、设备及存储介质。
背景技术
远程内存访问(Remote Direct Memory Access,RDMA)协议,凭借其旁路内核的特性,允许应用与网卡之间的直接数据读写,可以将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入,规避了传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol,TCP/IP)协议的限制,能有效降低通讯的时延以及CPU的占用率,在互联网数据中心(Internet Data Center,简称IDC)中,高性能计算(High Performance Computing,HPC)应用或人工智能(Artificial Intelligence,AI)应用等领域得到广泛应用。
为了使用RDMA进行数据收发,业内提供了用于RDMA的计算机网络通信标准,例如,无线带宽(InfiniBand,IB)。为了开发RDMA应用,提供了用于RDMA应用的编程接口规范,例如Verbs,其是由RDMA/IB规范所描述的一组抽象定义。一方面可基于该接口规范编程实现RDMA应用,另一方面可基于该接口规范实现用于RDMA应用的传输接口,例如Verbs API。RDMA应用可通过传输接口Verbs API调用RDMA硬件进行数据收发,在数据收发过程中,RDMA应用需要了解RDMA硬件在数据收发过程中是否发生相关完成事件(Completion Event,CE),以便及时进行响应和处理。
常见的RDMA应用的事件通知方式是将轮询(Polling)方式与事件通知(Event Notification)方式结合:在没有完成事件发生时用于事件通知的进程进入睡眠状态以释放CPU资源,在有完成事件发生时唤醒进程,然后再采用轮询方式,无需不断唤醒进程,降低唤醒开销。然而,目前RDMA硬件实现中,使用硬件中断通知和一个事件队列(Event Queue,EQ)来实现事件通知机制,硬件中断上报给操作系统(Operating System,OS)的内核态,经过内核态的一系列代码处理逻辑后再通知用户态的RDMA应用,这存在内核态和用户态的上下文切换,以及事件通知路径较长,周期较长的问题。
发明内容
本申请的多个方面提供一种RDMA事件管理方法、设备及存储介质,用以缩短RDMA应用的事件通知路径和周期,解决内核态和用户态来回切换的问题,降低RDMA应用的网络通信延迟,提高RDMA的应用性能。
本申请实施例提供一种RDMA事件管理方法,应用于用户态事件管理实例,用户态事件管理实例位于RDMA应用与RDMA设备之间,该方法包括:响应RDMA应用发起的完成事件等待请求,确定RDMA应用对应的用户态内存区域,用户态内存区域用于供RDMA设备在RDMA应用对应的至少一个CQ队列中有完成事件发生时写入通知信息;控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,第一CPU硬件资源是分配给RDMA应用用于向其进行完成事件通知的CPU硬件资源;在用户态内存区域发生写入事件的情况下,将第一CPU硬件资源唤醒,并控制第一CPU硬件资源向RDMA应用上报与通知信息对应的目标CQ标识信息,以通知RDMA应用目标CQ标识信息对应的目标CQ队列中发生了完成事件。
本申请实施例还提供一种RDMA事件管理方法,应用于RDMA设备,该方法包括:在为RDMA应用进行数据传输过程中,监测RDMA应用对应的至少一个CQ队列中是否有完成事件发生;在监测到目标CQ队列中有完成事件发生时,向RDMA应用对应的用户态内存区域中写入通知信息,以使用 户态事件管理实例将第一CPU硬件资源唤醒并控制所述第一CPU硬件资源向RDMA应用上报与通知信息对应的目标CQ标识信息;其中,第一CPU硬件资源是分配给RDMA应用用于向其进行完成事件通知的CPU硬件资源,且在所述用户态管理实例的控制下以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,直至监测到发生写入事件时被唤醒。
本申请实施例还提供一种计算机设备,包括:存储器、处理器和RDMA设备,存储器中存储有用户态事件管理实例和RDMA应用对应的程序代码,用户态事件管理实例位于RDMA应用与RDMA设备之间,处理器与存储器耦合,用于执行用户态事件管理实例对应的程序代码,以用于实现本申请实施例提供的RDMA事件管理方法中的步骤。
本申请实施例还提供一种RDMA设备,包括:监测模块,用于在为RDMA应用进行数据传输过程中,监测RDMA应用对应的至少一个CQ队列中是否有完成事件发生;写入模块,用于在监测模块监测到目标CQ队列中有完成事件发生时,向RDMA应用对应的用户态内存区域中写入通知信息,以使用户态事件管理实例将第一CPU硬件资源唤醒并控制所述第一CPU硬件资源向RDMA应用上报与通知信息对应的目标CQ标识信息;其中,第一CPU硬件资源是分配给RDMA应用用于向其进行完成事件通知的CPU硬件资源,且在所述用户态管理实例的控制下以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,直至监测到发生写入事件时被唤醒。
本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,当计算机程序被处理器执行时,致使处理器能够实现本申请实施例提供的RDMA事件管理方法中的步骤。
附图说明
在附图中,除非另外规定,否则贯穿多个附图相同的附图标记表示相同或相似的部件或元素。这些附图不一定是按照比例绘制的。应该理解,这些附图仅描绘了根据本申请公开的一些实施方式,而不应将其视为是对本申请范围的限制。
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为目前RDMA硬件实现中使用硬件中断通知和一个事件队列实现事件通知的流程示意图。
图2A为本申请示例性实施例提供的一种计算机设备的结构示意图。
图2B为本申请示例性实施例提供的一种事件通知的流程示意图。
图2C为本申请示例性实施例提供的另一种事件通知的流程示意图。
图3A为本申请示例性实施例提供的一种RDMA事件管理方法的流程示意图。
图3B为本申请示例性实施例提供的另一种RDMA事件管理方法的流程示意图。
图4A为本申请示例性实施例提供的一种RDMA事件管理装置的结构示意图。
图4B为本申请示例性实施例提供的一种RDMA设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在标准RDMA Verbs API层中,不仅提供了供RDMA应用调用RDMA设备进行数据收发所需的API,还提供了一些用于完成事件通知机制的API。RDMA通过这些用于完成事件通知机制的API,配合RDMA硬件的动作来感知数据收发过程中是否有完成事件发生并获取所发生完成事件的内容信息。其中,在RDMA硬件实现中,通常使用高速串行计算机扩展总线标准(Peripheral Component Interconnect Express,PCIE)的扩充讯息信号中断(Message Signaled Interrupt eXtended,MSI-X)通知以及事件队列(EQ)结合的实现事件通知机制。该事件通知机制的流程,如图1所示,包括以下步骤A1至步骤 A6。
步骤A1:RDMA应用通过调用Verbs API层中的事件获取接口(如,ibv_get_cq_event接口),等待事件完成队列(Completion Queue,CQ)有完成事件产生。
步骤A2:在Verbs接口层中,控制用于向RDMA应用进行完成事件通知的进程进入睡眠状态,并在内核态中的事件通知(如,eventfd)层中等待有完成事件发生的通知信息,该通知信息表示哪个CQ有完成事件发生。其中,eventfd层用来承载完成事件发生的通知信息。其中,eventfd层是内核态支持的一种事件等待/通知机制,eventfd是一个用来通知事件的文件描述符。
步骤A3:在某个CQ有完成事件发生时,RDMA设备(如,RDMA网卡)向EQ中写入“哪个CQ中发生了完成事件”的信息。EQ是由RDMA设备的驱动创建的属于内核态的内存空间,用于供RDMA设备在有完成事件发生时写入“哪个CQ中发生了完成事件”的信息。
步骤A4:RDMA设备向EQ中写入信息时,可以触发RDMA设备写MSI-X,产生硬件中断,该硬件中断被上报到内核态。
步骤A5:在内核态,EQ中由RDMA设备写入的信息依次经RDMA设备的驱动(Driver)和开放结构企业分发(Open Fabrics Enterprise Distribution,OFED)到达eventfd层。其中,在驱动层将EQ中的EQ事件转换为CQ事件,即CQ事件表示是哪个CQ发生了完成事件,将该CQ事件给到OFED层;OFED层将CQ事件透传给eventfd层。
其中,OFED是一个开源软件包集合,其包含内核框架和驱动、用户框架和驱动、以及各种中间件、测试工具和API文档等,是RDMA在内核态的框架代码,可以为eventfd层屏蔽底层硬件(如,驱动层)的实现差异,从而向RDMA应用提供更统一更抽象的内核态的接口。
步骤A6:唤醒上述步骤A2中处于睡眠状态的进程,通过该事件获取接口向RDMA应用返回eventfd层承载的CQ事件,以使RDMA应用获知哪个CQ发生了完成事件。
由上述事件通知机制的实现过程存在一定的缺点:1)、用户态进程想要通过“休眠”,等待完成事件的发生,需要陷入到内核态等待完成事件的发生。同时,RDMA硬件通过PCIE的MSI-X—>内核态—>用户态,将事件通知到用户态进程的路径较长,还会涉及内核态和用户态的上下文切换;2)、内核态通知用户态的RDMA应用需要通过内核态中一系列的代码逻辑,例如OFED、eventfd层的代码逻辑,通常会产生延迟。
为了解决上述技术问题,在本申请实施例中,在RDMA应用与RDMA设备之间增设用于事件通知的用户态事件管理实例,基于该用户态事件管理实例,在针对RDMA应用进行事件通知过程中,可使用于向RDMA应用进行完成事件通知的CPU硬件资源在低功耗状态等待完成事件发生,以节约功耗,在完成事件发生的情况下,可使RDMA设备在用户态将该CPU硬件资源“唤醒”,CPU硬件资源被唤醒后可直接通知RDMA应用有完成事件发生,整个过程无需经过内核态,也就不用在内核态和用户态之间进行上下文切换,减少了内核态的代码处理逻辑,缩短了完成事件从RDMA设备向RDMA应用进行通知的路径和周期,降低了RDMA应用的网络通信延迟,提高RDMA的应用性能。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图2A为本申请示例性实施例提供的一种计算机设备的结构示意图。如图2A所示,在硬件实现结构上,该计算机设备100至少包括:RDMA设备101、存储器和处理器。在一实施例中,该计算机设备还可以包括:通信组件、显示器、电源组件、音频组件等其它组件。其中,显示器和音频组件为可选组件,具体可视计算机设备100的具体实现形态而定。例如,如果计算机设备实现为智能手机、笔记本电脑、平板电脑、台式电脑或智能穿戴设备等终端设备,则可以包含显示器和音频组件;如果计算机设备实现为常规服务器、云服务器、服务器集群等,则可以不包括显示器和音频组件。在图2A中仅示出了RDMA设备101,其它硬件组件未作图示。
其中,计算机设备100完成各种功能离不开各种软件代码,这些软件代码包括用户态的软件代码和内核态的软件代码,这些软件代码通常存储在计算机设备100的存储器中,并在被处理器加载执行时控制计算机设备100完成对应的功能。
其中,内核态的软件代码主要是指操作系统(OS)的程序代码,例如文件管理、各种硬件设备的驱动程序等;用户态的软件代码包括安装并运行于计算机设备100上的各种应用程序的程序代码,以及为这些应用程序提供相应服务的其它程序代码。在本实施例中,并未对计算机设备100包含的全部硬件和全部软件进行图示,仅对向RDMA应用进行完成事件通知相关的硬件部分和软件部分进行了图示。
如图2A所示,计算机设备100上至少安装并运行有RDMA应用102以及负责为RDMA应用102提供完成事件通知服务的用户态管理实例103,而且从计算机设备100的软硬架构中,用户态管理实例103位于RDMA应用102与RDMA设备101之间,一方面感知RDMA应用102发起的与完成事件通知相关的请求,并对各种请求进行响应和处理,一方面感知RDMA设备101发送的是否有完成事件的信息以及与完成事件相关的其它各种信息并上报给RDMA应用102,实现一种用户态的事件通知机制。
在本实施例中,RDMA设备是指支持RDMA编程接口规范(如Verbs)的硬件设备,例如,RDMA设备可以是网络接口卡,简称为RNIC。RDMA应用是支持RDMA协议的上层应用,即基于RDMA编程接口规范开发的上层应用,可以通过RDMA协议进行网络传输。本申请实施例中的RDMA应用,可以是单独支持RDMA协议的上层应用,也可以是同时支持RDMA协议和TCP/IP协议的上层应用。对于同时支持RDMA协议和TCP/IP协议的RDMA应用,其可以在TCP/IP协议和RDMA协议混跑场景使用中,这种情况下,本申请实施例重点关注基于RDMA协议进行数据传输过程中的完成事件通知过程。
其中,计算机设备100上可以包含至少一台RDMA设备101,RDMA应用102有可能使用任何RDMA设备与其它网络设备进行数据传输,RDMA应用在通过RDMA设备与其它网络设备进行数据传输时需要建立RDMA连接,并创建RDMA连接需要使用的队列对(Queue Pairs,QP)、完成事件通道(Completion Channel,CC)和事件完成队列(Completion Queue,CQ)等各种队列资源。其中,QP包括发送队列(Send Queue,SQ)和接收队列((Receive Queue,RQ),SQ用于存储RDMA应用写入的表示发送事件的工作队列元素(Work Queue Ellement,WQE),RQ用于存储RDMA应用写入的表示接收事件的WQE;CC用于在该CC对应的RDMA连接有IO任务完成(该IO任务包括发送任务和接收任务)时,向RDMA应用发送通知信息的通道,CQ用于存储RDMA连接在完成IO任务时产生的完成队列元素(Completion Queue Element,CQE)消息。
其中,RDMA应用通过向RDMA设备的发送队列(SQ)和接收队列(RQ)写入WQE,通知计算机设备100的网卡分别进行数据发送和数据接收,RDMA设备在任务完成(例如完成数据发送或数据接收)后,可以向完成队列(Completion Queue,CQ)写入完成队列元素(Completion Queue Element,CQE),并需要通知RDMA应用哪个CQ中有完成事件发生,以供RDMA应用102根据该通知信息获取具体的完成事件,即CQE,并根据该CQE执行下一步操作。需要说明的是,RDMA设备和网卡可以集成在同一网络接口设备上实现,也可以作为两个独立的设备实现但相互之间通信连接。
在上述过程中,仅以数据发送完成后会产生完成事件和数据接收完成后会产生完成事件为例进行示例性说明,实际应用中,在RDMA应用通过RDMA设备进行数据传输过程中,RDMA设备可以完成各种工作(work)并会产生各种工作完成事件,对此不做限定,凡是RDMA设备产生的完成事件均可以采用本申请实施例提供的用户态的事件通知机制向RDMA应用进行通知。
在本实施例中,并不限定用户态事件管理实例103在计算机设备100上的部署实现方式,例如可以以动态连接库的方式在计算机设备100上的部署用户态事件管理实例103,当然,也可以以API、插件、SDK或小程序等其它方式将用户态事件管理实例103部署在计算机设备100上。其中,用户态事件管理实例103、RDMA应用102以及RDMA设备101三者可以相互配合实现用户态的事件通知机制。
在本实施例中,为了让用户态事件管理实例103、RDMA应用102以及RDMA设备101三者相互配合实现用户态的事件通知机制,至少需要为RDMA应用创建用户态内存区域,该用户态内存区域用于在RDMA应用对应的至少一个CQ队列中有完成事件发生时,供RDMA设备直接向该用户态内存区域写入有CQ队列发生完成事件的通知信息。该通知信息用于标识有CQ队列中发生了完成事件,在本实施例中,每个CQ队列可通过CQ标识信息进行唯一标识,该CQ标识信息可以是任何能够唯一标识 一个CQ队列的信息,例如,CQ标识信息可以是CQ队列的名称、ID、编号等。为了便于区分和描述,将上述通知信息所标识的发生了完成事件的CQ队列称为目标CQ队列,并将目标CQ队列的CQ标识信息称为目标CQ标识信息。关于至少为RDMA应用创建用户态内存区域的详细实施方式可参见后续实施例,在此暂不赘述。
在至少为RDMA应用创建用户态内存区域的基础上,如图2B所示,用户态事件管理实例103、RDMA应用102以及RDMA设备101三者可以相互配合实现用户态的事件通知机制的过程包括以下步骤21至25。
21、在需要通过RDMA设备进行数据传输(即具有通信需求)的情况下,RDMA应用向用户态事件管理实例发起完成事件等待请求。
22、用户态事件管理实例响应RDMA应用发起的完成事件等待请求,确定RDMA应用对应的用户态内存区域。
在RDMA应用发起的完成事件等待请求中,携带有标识用户态内存区域的相关信息,例如可以是RDMA应用对应的CC通道的标识,该CC通道与RDMA应用对应的至少一个CQ队列以及用户态内存区域的关联,其中,可在为RDMA应用创建CQ队列和用户态内存区域的过程中,将为RDMA应用创建的CQ队列以及用户态内存区域分别关联到RDMA应用对应的CC通道上。当然,也可以通过其它信息,例如RDMA应用的标识来标识该RDMA应用的用户态内存区域的,这需要预先建立RDMA应用的标识与用户态内存区域之间的关联关系。
23、用户态事件管理实例控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件。
在本实施例中,用户态事件管理实例的运行依赖于CPU硬件资源,该CPU硬件资源是由操作系统基于CPU资源的调度和管理机制动态为用户态事件管理机制分配的,对此不做限定和关注。相应地,在RDMA应用运行过程中,操作系统也随着RDMA应用的运行为RDMA应用分配CPU硬件资源,当然,该CPU硬件资源也是操作系统基于CPU的资源调度和管理机制动态分配给RDMA应用的。其中,分配给RDMA应用的CPU硬件资源中包括用于向RDMA应用进行完成事件通知的CPU硬件资源。为了便于区分和描述,将RDMA应用分配的用于向RDMA应用进行完成事件通知的CPU硬件资源称为第一CPU硬件资源。
其中,第一CPU硬件资源的资源形态具体视计算机设备支持的CPU的硬件资源形态而定。例如,计算机设备支持的CPU的硬件资源形态为:超线程(Hyper-threading)CPU,每个超线程CPU包括多个硬件线程,则第一CPU硬件资源可以是某个超线程CPU中的一个CPU硬件线程。又例如,计算机设备支持的CPU的硬件资源形态为:多核CPU,第一CPU硬件资源可以是该多核CPU中的一个CPU核。
在本实施例中,第一CPU硬件资源用于为RDMA应用进行完成事件的通知,而且在没有完成事件发生期间,该第一CPU硬件资源不会被释放,而是由用户态事件管理实例103控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,相当于以低功耗状态等待完成事件的发生。其中,低功耗状态是第一CPU硬件资源处于较低功耗的状态,低功耗状态可以包含但不限于:休眠状态、等待状态、浅睡眠状态或停止运行状态等。其中,用户态内存区域中的通知信息是RDMA设备在RDMA应用对应的至少一个CQ队列中发生完成事件的情况下才会写入,所以,在用户态内存区域中未发生通知信息的写入事件的情况下,说明没有任何CQ队列中发生完成事件,在这期间,第一CPU硬件资源不需要向RDMA应用进行事件上报,让第一CPU硬件资源以低功耗状态等待完成事件的发生,既可以节约功耗,又能够及时在完成事件发生时及时发现完成事件的发生。
24、当至少一个CQ队列中发生完成事件时,RDMA设备向用户态内存区域中写入有CQ队列中发生完成事件的通知信息。
25、在用户态内存区域发生写入事件的情况下,用户态事件管理实例将第一CPU硬件资源唤醒,并控制第一CPU硬件资源向RDMA应用上报与通知信息对应的目标CQ标识信息,以通知RDMA应 用目标CQ标识信息对应的目标CQ队列中发生了完成事件。
在用户态内存区域中发生通知信息的写入事件的情况下,说明有CQ队列中发生完成事件,此时第一CPU硬件资源需要向RDMA应用上报哪个CQ队列发生完成事件的信息,这就需要将第一CPU硬件资源唤醒,使第一CPU硬件资源退出低功耗状态,然后在非低功耗状态下向RDMA应用上报与该通知信息对应的目标CQ标识信息,以通知RDMA应用目标CQ标识信息对应的目标CQ队列中发生了完成事件。
在本实施例中,用户态内存区域一方面用于供RDMA设备在RDMA应用对应的至少一个CQ队列中有完成事件发生时写入通知信息,换句话说,用于存储RDMA设备写入的通知信息;另一方面用户态内存区域中发生的通知信息的写入事件用于将第一CPU硬件资源唤醒,从而触发第一CPU硬件资源在非低功耗状态下向RDMA应用上报与该通知信息对应的目标CQ标识信息,以通知RDMA应用目标CQ标识信息对应的目标CQ队列中发生了完成事件。
在本实施例中,将用户态事件管理实例与RDMA应用对应的用户态内存区域相结合,一方面可控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件来感知是否有CQ队列发生完成事件,另一方面RDMA设备在有CQ队列发生完成事件时向用户态内存区域中写入通知信息,而不是向内核态的EQ队列写入,RDMA设备向用户态内存区域中写入通知信息的事件可将第一CPU硬件资源唤醒,使得第一CPU硬件资源在用户态被唤醒并在被唤醒后直接通知RDMA应用有完成事件发生,整个过程无需经过内核态,不存在内核态和用户态之间的上下文切换,减少了内核态的代码处理逻辑,缩短了完成事件从RDMA设备向RDMA应用进行通知的路径和周期,降低了RDMA应用的网络通信延迟,提高RDMA的应用性能。
在一实施例中,计算机设备100可以采用支持用户态控制指令的CPU,用户态控制指令是指允许用户态程序代码调用以对CPU状态进行控制的指令,这些用户态控制指令中包括一条或多条可让CPU进入低功耗状态的用户态控制指令。支持用户态控制指令的CPU可以是自研的CPU,也可以采购CPU厂商提供的支持用户态控制指令的CPU,对此不做限定。基于此,可控制第一CPU硬件资源执行一条或者多条用户态控制指令,进入达到控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件的目的。其中,无论是一条用户态控制指令还是多条用户态控制指令,这些用户态控制指令用于指示第一CPU硬件资源执行以下操作M1至M3。
操作M1:指示第一CPU硬件资源获取用户态内存区域的描述信息,并根据该描述信息确定需要监测的用户态内存区域;该用户态内存区域的描述信息可以是任何能够唯一标识该内存区域的信息,例如可以是包括但不限于:用户态内存区域的地址信息(Address)和长度信息(Size)。
操作M2:指示第一CPU硬件资源监测用户态内存区域中是否发生通知信息的写入事件。
操作M3:指示第一CPU硬件资源进入低功耗状态。
例如,用户态事件管理实例可以控制第一CPU硬件资源执行一条用户态控制指令,该条用户态控制指令指示第一CPU硬件资源执行上述操作M1-M3,即控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件;该条用户态控制指令中包含用户态内存区域的描述信息,以使第一CPU资源确定需要监测的所述用户态内存区域。或者,例如,用户态事件管理实例可以控制第一CPU硬件资源执行多条用户态控制指令,由该多条用户态控制指令相互配合指示第一CPU硬件资源执行上述操作M1-M3,即控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件。所述多条用户态控制指令中的至少一条指令中需要包含用户态内存区域的描述信息,以使第一CPU资源确定需要监测的所述用户态内存区域。
其中,在控制第一CUP硬件资源执行多条用户态控制指令的情况下,多条用户态控制指令相互配合指示第一CPU硬件资源执行上述操作M1-M3。例如,多条用户态控制指令实现为三条用户态控制指令,三条用户态控制指令可以分别执行操作M1-M3;再例如,多条用户态控制指令实现为两条用户态控制指令,其中一条用户态控制指令执行操作M1和操作M2,另一条用户态控制指令执行操作M3;或者,一条用户态控制指令执行操作M1和操作M3,另一条用户态控制指令执行操作M2;又例如, 多条用户态控制指令实现为四条用户态控制指令,其中,两条用户态控制指令用于执行操作M1,一条用户态控制指令用于执行操作M2,另一条用户态控制指令用于执行操作M3,对此不做限定。无论是哪种指令方式,在控制第一CPU硬件资源执行上述动作M1的指令中需要包含用户态内存区域的描述信息。
在一些实施方式中,在控制第一CUP硬件资源执行多条用户态控制指令的情况下,多条用户态控制指令包括第一用户态控制指令和第二用户态控制指令。其中,第一用户态控制指令包括用户态内存区域的描述信息,第一CPU硬件资源可根据该描述信息确定需要监测的用户态内存区域,第二用户态控制指令用于指示第一CPU硬件资源进入低功耗状态,并在低功耗状态下监测用户态内存区域中是否发生通知信息的写入事件。基于此,可以控制第一CUP硬件资源执行第一用户态控制指令,使得第一CPU硬件资源确定需要监测的用户态内存区域;控制第一CPU硬件资源执行第二用户态控制指令,以控制第一CPU硬件资源进入低功耗状态,并在低功耗状态下监测用户态内存区域中是否发生通知信息的写入事件。
在一实施例中,在对于一些类型的CPU,其所支持的用户态控制指令可以包含但不限于:监测配置指令(如umonitor)、监测等待指令(如umwait)和监测暂停指令(如tpause)等。
其中,监测配置指令包含用户态内存区域的描述信息,如,用户态内存区域地址信息(address)和长度信息(size),通过监测配置指令可以将用户态内存区域的地址信息和长度信息配置给第一CPU硬件资源,使得第一CPU硬件资源确定需要监测的用户态内存区域。监测等待指令是使得第一CUP硬件资源进入低功耗状态,并在低功耗状态下监测上述用户态内存区域,等待该用户态内存区域中发生通知信息的写入事件,直至上述写入事件发生的指令时被唤醒。另外,监测等待指令通过寄存器提供了超时机制,第一CUP硬件资源不会无限制的进入低功耗状态,而是等到时间戳(TimeStamp Counter,TSC)的值超过预设值之后,结束第一CUP硬件资源的低功耗状态,进入“唤醒”状态,第一CUP硬件资源在唤醒状态的功耗高于低功耗状态的功耗。监测暂停指令可以使得第一CUP硬件资源进入暂停状态,该暂停状态属于低功耗状态的一种具体实现。
基于上文的描述,监测配置指令和监测等待指令可组合使用,分别作为上述第一用户态控制指令和第二用户态控制指令;或者,监测配置指令和监测暂停指令可组合使用,分别作为上述第一用户态控制指令和第二用户态控制指令。无论是哪种指令方式,均可通过调用上述用户态控制指令,使得第一CPU硬件资源进入对应的低功耗状态,在低功耗状态下监测用户态内存区域中是否发生通知信息的写入事件,节约功耗资源。在通常情况下,CPU可以支持不同的低功耗等级,在本申请实施例中,第一CPU硬件资源需要进入的低功耗状态可以是默认某一低功耗等级,也可以通过相关指令动态配置所使用的低功耗等级,对此不做限定。
在本申请上述实施例中,在有CQ队列中发生完成事件时,RDMA设备向用户态内存区域中写入通知信息,以此唤醒第一CPU硬件资源,使得第一CPU硬件资源向RDMA应用上报与该通知信息对应的目标CQ标识信息,以通知RDMA应用目标CQ标识信息对应的目标CQ队列中发生了完成事件。例如,第一CPU硬件资源向RDMA应用上报与该通知信息对应的目标CQ标识信息之前,需要获取该通知信息对应的目标CQ标识信息。
在一些实施方式中,可以通过用户态内存区域中或用户态内存区域关联的队列缓冲区存储目标CQ标识信息,基于此,可以根据该通知信息的写入位置,控制第一CPU硬件资源从用户态内存区域中或用户态内存区域关联的队列缓冲区中,读取目标CQ标识信息,并向RDMA应用上报目标CQ标识信息。其中,通知信息在用户态内存区域中的写入位置,可以表示目标CQ标识信息在用户态内存区域中或在用户态内存区域关联的队列缓冲区中的存储位置。
在本申请实施例中,用户态内存区域可以关联有队列缓冲区,也可以不关联队列缓冲区。在用户态内存区域关联有队列缓冲区的情况下,该队列缓冲区用于供RDMA设备在至少一个CQ队列中有完成事件发生时写入发生完成事件的CQ队列对应的CQ标识信息,即用于记录发生完成事件的CQ队列的CQ标识信息,换句话说,用户态内存区域用于承载有CQ队列发生完成事件的通知信息,而队列缓冲 区用于承载发生完成事件的目标CQ队列的目标CQ标识信息。在用户态内存区域未关联队列缓冲区的情况下,用户态内存区域除了供RDMA设备在至少一个CQ队列中有完成事件发生时写入通知信息之外,还用于供RDMA设备在对应CQ队列中有完成事件发生时写入目标CQ标识信息,换句话说,用户态内存区域同时用于承载有CQ队列发生完成事件的通知信息和发生完成事件的目标CQ队列的目标CQ标识信息。
在一实施例中,在用户态内存区域同时承载有CQ队列发生完成事件的通知信息和发生完成事件的目标CQ队列的目标CQ标识信息的方案中,一种具体实现中,通知信息可以包含目标CQ标识信息,即通知信息与目标CQ标识信息可以实现为同一信息,这样,RDMA设备只需向用户态内存区域中执行一次写操作,将目标CQ标识信息作为通知消息写入用户态内存区域中,有利于提高写效率,通知消息的写入位置即为目标CQ标识信息的写入位置;另一种具体实现中,通知信息与目标CQ标识信息是两个不同的信息,对RDMA设备来说,可以先向用户态内存区域中执行一次写操作,将通知消息写入用户态内存区域中,再向用户态内存区域中执行一次写操作,将目标CQ标识信息写入用户态内存区域中,而且通知消息的写入位置与目标CQ标识信息的写入位置相关联,例如相邻。
在此说明,无论是用户态内存区域是否关联有队列缓冲区,用户态内存区域以及其它RDMA资源(例如CC通道、CQ队列等)可以在使用RDMA设备进行数据传输之前的资源初始化阶段为RDMA应用创建,或者,有些RDMA资源(例如用户态内存区域、CQ队列等)也可以在数据传输过程中按需动态地为RDMA应用创建。例如,无论是在哪个阶段,关于创建用户态内存区域的方式包括:RDMA应用可以向用户态事件管理实例发起RDMA资源初始化请求,该RDMA资源初始化请求用于请求创建RDMA应用所需的各种资源,如RDMA应用对应的至少一个CQ队列和用户态内存区域。基于此,用户态事件管理实例可以响应RDMA应用发起的RDMA资源初始化请求,至少为RDMA应用创建至少一个CQ队列和用户态内存区域,并将创建的至少一个CQ队列,以及用户态内存区域的描述信息以供给RDMA设备,以供RDMA设备在至少一个CQ队列中有完成事件发生时向用户态内存区域写入通知信息。
其中,用户态内存区域与至少一个CQ队列的对应关系并不限定。例如,可以是至少一个CQ队列共享一个用户态内存区域,在CQ队列为多个的情况下,多个CQ队列也可以是共享两个或两个以上的用户态内存区域,当然,也可以是每个CQ队列具有各自的用户态内存区域,对此不做限定。在一些实施方式中,无论是哪种用户态内存区域与至少一个CQ队列之间的对应关系,用户态内存区域可以关联有队列缓冲区,也可以不关联队列缓冲区。下面分情况对RDMA资源(例如用户态内存区域、CQ队列以及对列缓冲区等)的创建过程和基于这些RDMA资源向RDMA应用上报与目标CQ标识信息的过程进行示例性说明。
示例Y1:用户态内存区域不关联队列缓冲区,用户态内存区域的数量为至少一个,至少一个用户态内存区域与至少一个CQ队列一一对应。从资源创建角度来看,响应RDMA应用发起的RDMA资源初始化请求,为RDMA应用创建至少一个CQ队列和至少一个用户态内存区域,并将创建的至少一个CQ队列以及至少一个用户态内存区域的描述信息以供给RDMA设备,以供RDMA设备在至少一个CQ队列中有完成事件发生时向对应的用户态内存区域写入通知信息。相应地,从RDMA设备写入通知信息的角度来看,在某个CQ队列中发生完成事件的情况下,RDMA设备可以将通知信息写入该CQ队列对应的用户态内存区域中。
基于此,在用户态管理实例的控制下,第一CPU硬件资源以低功耗状态对至少一个用户态内存区域进行监测,在监测到有通知信息写入事件发生的情况下,一方面会将第一CPU硬件资源唤醒,另一方面会确定通知信息的写入位置,根据通知信息的写入位置,确定至少一个用户态内存区域中被写入通知信息的目标用户态内存区域;控制第一CPU硬件资源从目标用户态内存区域中读取目标CQ标识信息,将目标CQ标识信息上报给RDMA应用,该目标CQ标识信息标识目标用户态内存区域对应的目标CQ队列中发生了完成事件。
其中,在该示例Y1中,关于通知信息的实现方式并不限定。例如,通知信息可以实现为目标CQ 标识信息,则在目标CQ队列中发生完成事件的情况下,RDMA设备可以在用户态内存区域中写入目标CQ标识信息,将该目标CQ标识信息作为“目标CQ队列中发生了完成事件”的通知信息。
又例如,通知信息不同于目标CQ标识信息,RDMA设备在目标CQ队列中有完成事件发生时,除了可以在用户态内存区域中写入通知信息之外,还可以写入目标CQ标识信息。此时,通知信息可以是任何能够指示目标CQ队列中有完成事件发生的信息,例如,通知信息可以是任何数字、字母以及符号的单独或结合。例如,在用户态内存区域中没有写入信息的情况下,用户态内存区域中的值为“0”,表示目标CQ队列中没有完成事件发生,在用户态内存区域中写入通知信息的情况下,RDMA设备向用户态内存区域中写入“1”,表示目标CQ队列中有完成事件发生。需要说明的是,在该实施方式中,通知信息的内容本身并不存在任何意义,所以RDMA设备每次向用户态内存区域中写入的通知信息可以相同,也可以不同,在本实施例中,重点关注写入通知信息的事件,若发生写入事件,则表示CQ队列中有完成事件发生,至于通知信息的内容,可以不过多关注。
示例Y2:用户态内存区域关联有队列缓冲区,其中,用户态内存区域与至少一个CQ队列的对应关系,可以是至少一个CQ队列对应一个用户态内存区域(即共享同一个用户态内存区域的情况),也可以是每个CQ队列对应一个用户态内存区域,对此不做限定。在至少一个CQ队列共享用户态内存区域的情况,除了共享同一个用户态内存区域的情况之外,还可以共享多个用户态内存区域。
在本实施例中,无论是至少一个CQ队列对应一个用户态内存区域的情况,还是每个CQ队列对应一个用户态内存区域的情况,考虑到用户态内存区域的空间有限,为了节约内存空间,还可以为RDMA应用创建队列缓冲区,并将用户态内存区域与队列缓冲区进行关联。例如,在响应RDMA应用发起的RDMA资源初始化请求时,除了为RDMA应用创建至少一个CQ队列和一个或多个用户态内存区域之外,还可以为RDMA应用创建队列缓冲区,并将用户态内存区域与队列缓冲区进行关联。又例如,RDMA可以向用户态事件管理实例发起队列缓冲区创建请求,用户态事件管理实例响应RDMA应用发起的队列缓冲区创建请求,为RDMA应用创建队列缓冲区,并将RDMA应用对应的用户态内存区域与队列缓冲区进行关联。
相应地,RDMA设备在至少一个CQ队列中有完成事件发生时,除了向发生完成事件的CQ队列对应的用户态内存区域中写入通知信息之外,还可以向队列缓冲区中写入发生完成事件的目标CQ队列对应的目标CQ标识信息。相应地,在用户态管理实例的控制下,第一CPU硬件资源以低功耗状态监测用户态内存区域中是否有通知信息的写入事件发生;在监测到有通知信息写入事件发生的情况下,一方面将第一CPU硬件资源唤醒,另一方面根据通知信息的写入位置,控制第一CPU硬件资源从队列缓冲区中读取最新写入的CQ信息作为目标CQ标识信息。例如,可以根据通知信息的写入位置,确定用户态内存区域中被写入通知信息;控制第一CPU硬件资源从用户态内存区域关联的队列缓冲区中读取最新写入的CQ信息作为目标CQ标识信息。
其中,在该示例Y2中,由于通知信息被写入用户态内存区域,目标CQ标识信息被写入队列缓冲区,所以通知信息和目标CQ标识信息是两个独立的信息。在该示例Y2中,通知信息的内容本身并不存在任何意义,所以RDMA设备每次向用户态内存区域中写入的通知信息可以相同,也可以不同,在本实施例中,重点关注写入通知信息的事件,若发生写入事件,则表示CQ队列中有完成事件发生,至于通知信息的内容,可以不过多关注。当然,在该示例Y2中也不限定通知信息的实现,可以是任何能够指示目标CQ队列中有完成事件发生的信息,例如,通知信息可以是任何数字、字母以及符号的单独或结合。
在本实施例中,为RDMA应用创建RDMA资源的方式可以是预先设定好的,或者采用第一资源创建模式,或者采用第二资源创建模式,对RDMA应用来说是固定的,而且对不同RDMA应用也都是相同的。其中,第一资源创建模式是默认为RDMA应用创建至少一个CQ队列、被至少一个CQ队列共享的用户态内存区域,以及该用户态内存区域关联的队列缓冲区的创建模式。第二资源创建模式是默认为RDMA应用创建至少一个CQ队列、与至少一个CQ队列一一对应的用户态内存区域,且用户态内存区域未关联队列缓冲区的创建模式。在第一资源创建模式下,至少一个CQ队列之间共享用户态内存 区域,且用户态内存区域关联队列缓冲区,用户态内存区域用于承载有CQ队列发生完成事件的通知信息,而队列缓冲区用于承载发生完成事件的目标CQ队列的目标CQ标识信息。在第二资源创建模式下,至少一个CQ队列各自具有对应的用户态内存区域,且用户态内存区域未关联队列缓冲区,用户态内存区域同时用于承载有CQ队列发生完成事件的通知信息和发生完成事件的目标CQ队列的目标CQ标识信息。
除了预先设定好使用的资源创建模式之外,在一实施例中,允许RDMA应用自行选择所使用的资源创建模式,即RDMA应用可以选择使用第一资源创建模式或第二资源创建模式,而且对于不同的RDMA应用可以选择使用不同的资源创建模式,对于同一RDMA应用在不同数据传输过程中也可以选择使用不同的资源创建模式。
基于上文的描述,RDMA应用可以从第一资源创建模式和第二资源创建模式中选择使用的目标资源创建模式,该目标资源创建模式包含是否需要为RDMA应用创建队列缓冲区的信息,并将目标资源创建模式提供给用户态事件管理实例。相应地,用户态事件管理实例可以获取RDMA应用选择使用的目标资源创建模式;在目标资源创建模式为第一资源创建模式的情况下,不仅为RDMA应用创建至少一个CQ队列以及被至少一个CQ队列共享的用户态内存区域,还需要为RDMA应用创建队列缓冲区,并将用户态内存区域与队列缓冲区进行关联;在目标资源创建模式为第二资源创建模式的情况下,仅需为RDMA应用创建至少一个CQ队列以及为至少一个CQ队列创建一一对应的用户态内存区域,并禁止执行为RDMA应用创建队列缓冲区的操作。
在一实施例中,用户态事件管理实例获取RDMA应用选择使用的目标资源创建模式的实施方式并不限定。下面进行示例性说明。
示例Z1:在资源初始化阶段,RDMA应用向用户态事件管理实例发起RDMA资源初始化请求,该RDMA资源初始化请求中包括目标资源创建模式,则用户态事件管理实例可以从RDMA资源初始化请求中获取该RDMA应用选择使用的目标资源创建模式。在示例Z1中,可以对RDMA资源初始化请求进行扩展,允许携带更多的信息,RDMA应用通过扩展后的RDMA资源初始化请求进行资源创建模式的选择。
示例Z2:在资源初始化阶段,RDMA应用向用户态事件管理实例发起资源创建模式选择请求,该请求包括RDMA应用所需的目标资源创建模式,用户态事件管理实例可以响应RDMA应用发起的资源创建模式选择请求,从资源创建模式选择请求中获取RDMA应用选择使用的目标资源创建模式。在示例Z2中,在RDMA资源初始化请求之外新增一种请求,RDMA应用通过新增的请求进行资源创建模式的选择。
在本申请一实施例中,可在计算机设备100上部署用于RDMA的传输接口层,例如可以是但不限于Verbs API接口层,在该传输接口层中,提供了用于实现事件通知机制的多个标准API接口。在该实施例中,为了保持对已有RDMA应用的兼容性,本实施例在不改变或尽量少改变RDMA应用的编程接口的情况下,基于该传输接口层中用于实现事件通知机制的API接口,通过对相关API接口的功能进行改进,从而实现本申请实施例提供的用户态事件管理实例。即,当RDMA应用对功能改进后的API接口发起调用时,这些API接口对应的执行逻辑可形成本申请实施例中的用户态事件管理实例,为发起接口调用的RDMA应用提供用户态的事件通知服务。下面对本实施例提供的传输接口层包括的多个API接口进行举例说明。
1)完成事件通道创建接口(如,可以是Verbs API接口层中的API接口:ibv_create_comp_channel),用于创建完成事件通道,又称为CC通道。
2)完成事件队列创建接口(如,可以是Verbs API接口层中的API接口:ibv_create_cq),用于创建完成事件队列,又称为CQ队列,并建立CC通道和CQ队列的关联关系。
3)使能队列接口(如,可以是Verbs API接口层中的API接口:ibv_req_notify_cq),用于使能CQ队列的事件通知功能,即指示当CQ队列中有新的完成队列元素(CQE)产生时,通过CC通道通知RDMA应用。
4)通知信息获取接口(如,可以是Verbs API接口层中的API接口:ibv_get_cq_event),用于获取发生了完成事件的CQ队列。
5)完成事件获取接口(如,可以是Verbs API接口层中的API接口:ibv_poll_cq),用于获取CQ队列中的完成事件,即获取CQ队列中的CQE元素。
6)完成事件确认接口(如,可以是Verbs API接口层中的API接口:ibv_ack_cq_events),用于确认完成事件。使用ibv_get_cq_event接口读取的所有完成事件,RDMA应用在对完成事件进行处理后,可使用ibv_ack_cq_events接口对完成事件进行确认,以使用户态事件管理实例对完成事件进行状态同步,确保记录的待处理的完成事件的数量与实际待处理的完成事件的数量保持一致,确保各个完成事件均得以处理,避免遗漏。
例如,为了保持和现有RDMA应用的兼容性,并不改变RDMA应用对应的传输接口层中的接口,而是对接口内部的功能进行了改进,结合CPU硬件资源支持的用户态控制指令,实现本申请实施例的用户态事件管理实例,使得关于RDMA应用的事件通知不再经过内核态,而是直接在用户态完成,提高事件通知的效率,减少事件通知的时延。其中,结合下述流程,本申请实施例主要对资源初始化阶段的步骤B1或B2中的API接口,以及步骤B4中的API接口进行功能改进,从而实现本申请实施例的用户态事件管理实例。其中,RDMA应用可以通过传输接口层(如Verbs API接口层)中包括的多个API接口实现事件通知,从RDMA应用视角描述的事件通知整体流程如下,包括步骤B1至步骤B6。
步骤B1:RDMA应用调用完成事件通道创建(如,ibv_create_comp_channel)接口,向用户态事件管理实例传入RDMA设备的上下文信息(conntext),以请求用户态事件管理实例创建RDMA应用与RDMA设备之间的CC通道。
在RDMA应用使用RDMA功能之前,需要进行资源初始化,在资源初始化阶段,可以创建CC通道。其中,资源初始化阶段可以是RDMA应用被启动运行的初始化阶段,或者,也可以是在RDMA应用运行过程中,使能RDMA功能的阶段。上述资源初始化阶段创建的资源在后续事件通知的过程中,可以多次使用,无需再次创建。
步骤B2:RDMA应用调用完成事件队列创建(如,ibv_create_cq)接口,以请求用户态事件管理实例为其创建CQ队列,并建立CC通道和CQ队列之间的对应关系。
其中,一个RDMA应用可以对应一个或多个CQ队列,这意味着,一个CC通道可以对应一个CQ队列或者多个CQ队列。其中,步骤B2也可以是在资源初始化阶段完成,在资源初始化阶段创建CQ队列,后续事件通知的过程中可多次使用。
步骤B3:RDMA应用调用使能队列(如,ibv_req_notify_cq)接口,使能CQ队列的事件通知,这样,在CQ队列中有CQE消息写入时,通过CQ队列关联的CC通道通知RDMA应用该CQ队列中有完成事件发生。
其中,RDMA应用在使用RDMA设备与其它网络设备进行数据传输时,需要建立RDMA连接,在创建RDMA连接之前、之后或者创建RDMA连接过程中均可以使能CQ队列的事件通知。
步骤B4:RDMA应用调用通知信息获取(如,ibv_get_cq_event)接口,以获取CC通道中发生了完成事件的CQ队列的标识信息。
其中,上述步骤B4可以确定哪个CQ队列出现了完成事件,每个CQ队列对应有多个RDMA连接,步骤B4并不能区分是哪条RDMA连接,也无法区分CQ队列中完成事件的类型或种类。
步骤B5:RDMA应用调用完成事件获取(如,ibv_poll_cq)接口,以从发生完成事件的CQ队列中获取具体的完成事件,即获取CQ队列中的CQE元素,这样,根据CQE元素的内容可以确定是哪个QP出现了完成事件,即确定哪条RDMA连接,以及完成事件的类型,如读事件或写事件等。
步骤B6:RDMA应用调用完成事件确认(如,ibv_ack_cq_events)接口确认完成事件,以保证获取到的通知事件均能被处理。
需要说明的是,上述步骤B1和步骤B2是在使用RDMA设备进行数据传输之前进行资源初始化的步骤,步骤B3-B6描述的是在使用RDMA设备进行数据传输过程中进行完成事件通知的过程,这几个 步骤是需要循环执行的步骤。
其中,从用户态事件管理实例角度描述的事件通知的完整流程,如图2C所示,包括以下步骤C0至步骤C9。
步骤C0:初始化资源创建。具体包括创建、分配如下资源,具体包括步骤C01至步骤C02。
步骤C01、响应RDMA应用对完成事件通道创建(如,ibv_create_comp_channel)接口发起的调用请求,根据该调用请求中包含的RDMA设备的上下文信息,为RDMA应用创建CC通道和用户态内存区域,并建立用户态内存区域与CC通道的关联关系。
在一些实施方式中,在步骤C01中,还可以为RDMA应用创建与用户态内存区域关联的队列缓冲区。在图2C所示实施例中,以同时为RDMA应用创建用户态内存区域及其关联的队列缓冲区为例进行图示。
步骤C02、响应RDMA应用对完成事件队列创建(如,ibv_create_cq)接口发起的调用请求,根据该调用请求中包含的CC通道的标识,为RDMA应用创建至少一个CQ队列,并建立CC通道和至少一个CQ队列之间的关联关系。
其中,在图2C中仅示出步骤C01和步骤C02,并未示出步骤C0。
其中,用户态内存区域的作用之一是:用于在至少一个CQ队列有完成事件发生的情况下,供RDMA设备向用户态内存区域写入通知信息,即存储发生完成事件的通知信息。其中,该写入事件用于触发第一CPU硬件资源向RDMA应用上报事件通知,例如,RDMA设备可以将用户态内存区域中的值从“0”修改为“1”,表示有完成事件发生,或者,还可以在用户态内存区域中写入CQ队列的标识信息,表示该CQ队列有完成事件发生。
用户态内存区域的作用之二是:让第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,达到以低功耗状态等待完成事件的发生的目的,直至用户态内存区域中有通知信息的写入事件发生时将第一CPU硬件资源唤醒。第一CPU硬件资源被唤醒后,向RDMA应用上报发生完成事件的CQ队列的标识信息。其中,第一CPU硬件资源是动态分配给RDMA应用的,用于为RDMA应用进行完成事件的通知。
队列缓冲区的作用是:在至少一个CQ队列有完成事件发生的情况下,供RDMA设备向用户态内存区域写入发生完成事件的CQ队列的CQ标识信息,即存储发生完成事件的CQ队列的CQ标识信息。
在此说明,创建用户态内存区域和队列缓冲区的过程可以是在步骤C01中实现,也可以在步骤C02中实现。
步骤C1:响应RDMA应用对使能队列(如,ibv_req_notify_cq)接口的调用请求,使能CQ队列的事件通知,这样,在CQ队列中有CQE消息写入时,通过CQ队列关联的CC通道通知RDMA应用该CQ队列中有完成事件发生。
步骤C2:响应于RDMA应用对通知信息获取(如,ibv_get_cq_event)接口发起的调用请求,获取RDMA应用对应的用户态内存区域,以等待至少一个CQ队列中有完成事件发生。
步骤C3:控制第一CUP硬件资源以低功耗状态监测用户态内存区域是否发生通知信息的写入事件。
若RDMA应用对通知信息获取(如,ibv_get_cq_event)接口发起调用时,完成事件尚未发生,则通过调用用户态控制指令(如,umonitor指令和umwait指令等),使得第一CUP硬件资源处于低功耗状态(如,暂停或者等待状态)以低功耗状态监测用户态内存区域是否发生通知信息的写入事件,即以低功耗状态等待完成事件的发生;若RDMA应用对通知信息获取(如,ibv_get_cq_event)接口发起调用时,完成事件已经发生,则直接跳转到步骤C6。
其中,以用户态控制指令umonitor和umwait为例,执行等待完成事件的逻辑如下:响应于通知信息获取(ibv_get_cq_event)接口的调用,控制第一CPU硬件资源(如硬件线程)执行umonitor指令,将用户态控制指令与用户态内存区域的地址信息和长度信息进行关联,具体是将用户态内存区域的地址信息和长度信息作为用户态控制指令的入参提供给硬件线程,执行umwait指令,使得该硬件线程在休眠状态下监测用户态内存区域是否有通知信息的写入事件发生,当监测到有通知信息的写入事件发生 时,硬件线程自己被唤醒,上述执行等待完成事件的逻辑是纯硬件完成的,功耗比较低节省资源。
步骤C4:RDMA设备需要将完成事件上报给RDMA应用的情况下,若需要对发生完成事件的目标CQ队列的目标CQ标识信息进行缓冲和保存,则将目标CQ标识信息写入到步骤C0中准备的队列缓冲区中,表示目标CQ队列中发生了完成事件。
步骤C5:更新步骤C0中的用户态内存区域,CQ队列中一旦发生了完成事件,可以将用户态内存区域从0置为1,以向用户态内存区域中写入通知信息,表示有CQ队列中发生了完成事件,但具体是哪个CQ队列出现了完成事件,该用户态内存区域中的信息并不能体现,当然,也可以在用户态内存信息中写入CQ队列的标识信息,对此不做限定。
其中,步骤4和步骤C5的执行顺序并不限定,例如,可以先执行步骤C4,在执行步骤C5,或者先执行步骤C5,再执行步骤C4,或者同时执行步骤C4和步骤C5。
步骤C6:第一CPU硬件资源(如硬件线程)监测到用户态内存区域有通知信息的写入,被唤醒,然后从队列缓冲区中读取目标CQ队列的目标CQ标识信息。
步骤C7:通过应用调用通知信息(如,ibv_get_cq_event)接口向RDMA应用返回目标CQ标识信息。
在一些实施例中,在步骤C7之后还可以包括以下步骤C8和C9,步骤C8和步骤C9并未在图2C中示出。
步骤C8:响应RDMA应用对完成事件获取(如,ibv_poll_cq)接口的调用,从发生完成事件的CQ队列中获取具体的完成事件,即获取CQ队列中的CQE元素,CQE元素中包含完成事件的种类和类型,向RDMA应用返回完成事件的CQE。
步骤C9:响应RDMA应用对完成事件确认(如,ibv_ack_cq_events)接口的调用,确认完成事件。
在本实施例中,利用计算机设备中CPU允许用户态程序将其置为低功耗的特性,使RDMA设备的完成事件可以直接通知到用户态中,既减少了用户态和内核态之间进行上下文切换的开销,也减少了完成事件通知的路径长度,进而达到更好的RDMA通信性能。另外,本实施例中的用户态事件管理实例基于RDMA的已有传输接口实现,通过对传输接口的功能进行拓展,可同时保持对现有传输接口的兼容,RDMA应用无需任何修改。
图3A为本申请示例性实施例提供的一种RDMA事件管理方法的流程示意图,该方法适用于上述实施例提供到的用户态事件管理实例,如图3A所示,该方法包括:301a、响应RDMA应用发起的完成事件等待请求,确定RDMA应用对应的用户态内存区域,用户态内存区域用于供RDMA设备在RDMA应用对应的至少一个CQ队列中有完成事件发生时写入通知信息;302a、控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,第一CPU硬件资源是分配给RDMA应用用于向其进行完成事件通知的CPU硬件资源;303a、在用户态内存区域发生写入事件的情况下,将第一CPU硬件资源被唤醒,并控制第一CPU硬件资源向RDMA应用上报与通知信息对应的目标CQ标识信息,以通知RDMA应用目标CQ标识信息对应的目标CQ队列中发生了完成事件。
在一实施例中,控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,包括:控制第一CUP硬件资源执行一条或多条用户态控制指令,以控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件;其中,一条或多条用户态控制指令中包含用户态内存区域的描述信息,以使第一CPU资源确定需要监测的用户态内存区域。
在一实施例中,控制第一CUP硬件资源执行多条用户态控制指令,以控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,包括:控制第一CUP硬件资源执行第一用户态控制指令,第一用户态控制指令中包括用户态内存区域的描述信息,以供第一CPU硬件资源确定需要监测的用户态内存区域;控制第一CPU硬件资源执行第二用户态控制指令,以控制第一CPU硬件资源进入低功耗状态,并在低功耗状态下监测用户态内存区域中是否发生通知信息的写入事件。
在一实施例中,控制第一CPU硬件资源向RDMA应用上报与通知信息对应的目标CQ标识信息,包括:根据通知信息的写入位置,控制第一CPU硬件资源从用户态内存区域中或用户态内存区域关联 的队列缓冲区中,读取目标CQ标识信息,并向RDMA应用上报目标CQ标识信息。
在一实施例中,本申请实施例提供的方法还包括:响应RDMA应用发起的RDMA资源初始化请求,至少为RDMA应用创建至少一个CQ队列和用户态内存区域,以供RDMA设备在至少一个CQ队列中有完成事件发生时写入通知信息。
在一实施例中,用户态内存区域的数量为至少一个,且至少一个用户态内存区域与至少一个CQ队列一一对应;相应地,根据通知信息的写入位置,控制第一CPU硬件资源从用户态内存区域中或用户态内存区域关联的队列缓冲区中,读取目标CQ标识信息,包括:根据通知信息的写入位置,确定至少一个用户态内存区域中被写入通知信息的目标用户态内存区域;控制第一CPU硬件资源从目标用户态内存区域中读取目标CQ标识信息,目标CQ标识信息标识目标用户态内存区域对应的目标CQ队列中发生了完成事件。
在一实施例中,通知信息为目标CQ标识信息。
在一实施例中,每个用户态内存区域还用于供RDMA设备在对应CQ队列中有完成事件发生时写入目标CQ标识信息;相应地,通知信息不同于目标CQ标识信息。
在一实施例中,本实施例的方法还包括:响应RDMA应用发起的RDMA资源初始化请求,为RDMA应用创建队列缓冲区,并将用户态内存区域与队列缓冲区进行关联;其中,队列缓冲区用于供RDMA设备在至少一个CQ队列中有完成事件发生时写入发生完成事件的CQ队列对应的CQ标识信息;相应地,根据通知信息的写入位置,从用户态内存区域中或用户态内存区域关联的队列缓冲区中,读取目标CQ标识信息,包括:根据通知信息的写入位置,控制第一CPU硬件资源从队列缓冲区中读取最新写入的CQ信息作为目标CQ标识信息。
在一实施例中,在为RDMA应用创建队列缓冲区域之前,还包括:获取RDMA应用选择使用的目标资源创建模式;在目标资源创建模式为第一资源创建模式的情况下,执行为RDMA应用创建队列缓冲区,并将用户态内存区域与队列缓冲区进行关联的操作;在目标资源创建模式为第二资源创建模式的情况下,为至少一个CQ队列创建一一对应的用户态内存区域,并禁止执行为RDMA应用创建队列缓冲区的操作。
在一实施例中,获取RDMA应用选择使用的目标资源创建模式,包括:从RDMA资源初始化请求中获取RDMA应用选择使用的目标资源创建模式;或者响应RDMA应用发起的资源创建模式选择请求,从资源创建模式选择请求中获取RDMA应用选择使用的目标资源创建模式。
在一实施例中,RDMA设备每次向用户态内存区域中写入的通知信息相同或不同。
在一实施例中,第一CPU硬件资源为超线程CPU中的一个CPU硬件线程,或者为多核CPU中的一个CPU核。
图3B为本申请实例性实施例提供的另一种RDMA事件管理方法的流程示意图,该方法应用于RDMA设备,如图3B所示,该方法包括:301b、在为RDMA应用进行数据传输过程中,监测RDMA应用对应的至少一个CQ队列中是否有完成事件发生;302b、在监测到目标CQ队列中有完成事件发生时,向RDMA应用对应的用户态内存区域中写入通知信息,以使用户态事件管理实例将第一CPU硬件资源唤醒并控制第一CPU硬件资源向RDMA应用上报与通知信息对应的目标CQ标识信息;其中,第一CPU硬件资源是分配给RDMA应用用于向其进行完成事件通知的CPU硬件资源,且在用户态管理实例的控制下以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,直至监测到发生写入事件时被唤醒。
其中,用户态管理实例是位于RDMA应用和RDMA设备之间,用于为RDMA应用进行完成事件通知的用户态实例。另外,为了为RDMA应用进行完成事件的通知,用户态管理实例还会为RDMA应用进行RDMA资源的创建,所创建的RDMA资源是为RDMA应用进行完成事件的通知所需的资源。
在一实施例中,本申请实施例提供的方法,还包括:接收用户态事件管理实例发送的至少一个CQ队列的描述信息和用户态内存区域的描述信息;根据至少一个CQ队列的描述信息和用户态内存区域的描述信息分别确定至少一个CQ队列和用户态内存区域;其中,至少一个CQ队列和用户态内存区域是 用户态管理实例为RDMA应用创建的用于进行完成事件的通知所需的RDMA资源。
其中,关于RDMA事件管理方法以及用户态管理实例的详细实施方式,可参见前述图2A所示实施例,在此不再赘述。
本申请实施例提供的RDMA事件管理方法,在RDMA应用与RDMA设备之间增设用于事件通知的用户态事件管理实例,基于该用户态事件管理实例,在针对RDMA应用进行事件通知过程中,可使用于向RDMA应用进行完成事件通知的CPU硬件资源在低功耗状态等待完成事件发生,以节约功耗,在完成事件发生的情况下,可使RDMA设备在用户态将该CPU硬件资源“唤醒”,CPU硬件资源被唤醒后可直接通知RDMA应用有完成事件发生,整个过程无需经过内核态,也就不用在内核态和用户态之间进行上下文切换,减少了内核态的代码处理逻辑,缩短了完成事件从RDMA设备向RDMA应用进行通知的路径和周期,降低了RDMA应用的网络通信延迟,提高RDMA的应用性能。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤301a至步骤303a的执行主体可以为设备A;又比如,步骤301a和302a的执行主体可以为设备A,步骤303a的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如301a、302a等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
图4A为本申请示例性实施例提供的一种RDMA事件管理装置的结构示意图,该装置可应用于任何包含RDMA应用和RDMA设备的计算机设备上,位于RDMA应用与RDMA设备之间,用于实现上述实施例中用户态事件管理实例的功能,如图4A所示,该装置包括:确定模块41a、控制模块42a和上报模块43a。
确定模块41a,用于响应RDMA应用发起的完成事件等待请求,确定RDMA应用对应的用户态内存区域,用户态内存区域用于供RDMA设备在RDMA应用对应的至少一个CQ队列中有完成事件发生时写入通知信息。
控制模块42a,用于控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,第一CPU硬件资源是分配给RDMA应用用于向其进行完成事件通知的CPU硬件资源。
上报模块42a,用于在用户态内存区域发生写入事件的情况下,将第一CPU硬件资源唤醒,并控制第一CPU硬件资源向RDMA应用上报与通知信息对应的目标CQ标识信息,以通知RDMA应用目标CQ标识信息对应的目标CQ队列中发生了完成事件。
在一实施例中,控制模块42a用于:控制第一CUP硬件资源执行一条或多条用户态控制指令,以控制第一CPU硬件资源以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件;其中,一条或多条用户态控制指令中包含用户态内存区域的描述信息,以使第一CPU资源确定需要监测的用户态内存区域。
在一实施例中,控制模块42a用于:控制第一CUP硬件资源执行第一用户态控制指令,第一用户态控制指令中包括用户态内存区域的描述信息,以供第一CPU硬件资源确定需要监测的用户态内存区域;控制第一CPU硬件资源执行第二用户态控制指令,以控制第一CPU硬件资源进入低功耗状态,并在低功耗状态下监测用户态内存区域中是否发生通知信息的写入事件。
在一实施例中,上报模块43a用于:根据通知信息的写入位置,控制第一CPU硬件资源从用户态内存区域中或用户态内存区域关联的队列缓冲区中,读取目标CQ标识信息,并向RDMA应用上报目标CQ标识信息。
在一实施例中,RDMA事件管理装置还包括:创建模块;创建模块,用于响应RDMA应用发起的RDMA资源初始化请求,至少为RDMA应用创建至少一个CQ队列和用户态内存区域,以供RDMA 设备在至少一个CQ队列中有完成事件发生时写入通知信息。
在一实施例中,用户态内存区域的数量为至少一个,且至少一个用户态内存区域与至少一个CQ队列一一对应;相应地上报模块43a用于:根据通知信息的写入位置,确定至少一个用户态内存区域中被写入通知信息的目标用户态内存区域;控制第一CPU硬件资源从目标用户态内存区域中读取目标CQ标识信息,目标CQ标识信息标识目标用户态内存区域对应的目标CQ队列中发生了完成事件。
在一实施例中,通知信息为目标CQ标识信息。
在一实施例中,每个用户态内存区域还用于供RDMA设备在对应CQ队列中有完成事件发生时写入目标CQ标识信息;相应地,通知信息不同于目标CQ标识信息。
在一实施例中,创建模块还用于:为RDMA应用创建队列缓冲区,并将用户态内存区域与队列缓冲区进行关联;其中,队列缓冲区用于供RDMA设备在至少一个CQ队列中有完成事件发生时写入发生完成事件的CQ队列对应的CQ标识信息;相应地,上报模块用于:根据通知信息的写入位置,控制第一CPU硬件资源从队列缓冲区中读取最新写入的CQ信息作为目标CQ标识信息。
在一实施例中,RDMA事件管理装置还包括:获取模块。获取模块,用于在为RDMA应用创建队列缓冲区域之前,获取RDMA应用选择使用的目标资源创建模式;创建模块,还用于在目标资源创建模式为第一资源创建模式的情况下,执行为RDMA应用创建队列缓冲区,并将用户态内存区域与队列缓冲区进行关联的操作;在目标资源创建模式为第二资源创建模式的情况下,为至少一个CQ队列创建一一对应的用户态内存区域,并禁止执行为RDMA应用创建队列缓冲区的操作。
在一实施例中,获取模块用于:从RDMA资源初始化请求中获取RDMA应用选择使用的目标资源创建模式;或者响应RDMA应用发起的资源创建模式选择请求,从资源创建模式选择请求中获取RDMA应用选择使用的目标资源创建模式。
在一实施例中,RDMA设备每次向用户态内存区域中写入的通知信息相同或不同。
在一实施例中,第一CPU硬件资源为超线程CPU中的一个CPU硬件线程,或者为多核CPU中的一个CPU核。
其中,关于RDMA事件管理装置的详细实施方式,可参见前述图2A所示实施例,在此不再赘述。
本申请实施例提供的RDMA事件管理装置,在RDMA应用与RDMA设备之间增设用于事件通知的用户态事件管理实例,基于该用户态事件管理实例,在针对RDMA应用进行事件通知过程中,可使用于向RDMA应用进行完成事件通知的CPU硬件资源在低功耗状态等待完成事件发生,以节约功耗,在完成事件发生的情况下,可使RDMA设备在用户态将该CPU硬件资源“唤醒”,CPU硬件资源被唤醒后可直接通知RDMA应用有完成事件发生,整个过程无需经过内核态,也就不用在内核态和用户态之间进行上下文切换,减少了内核态的代码处理逻辑,缩短了完成事件从RDMA设备向RDMA应用进行通知的路径和周期,降低了RDMA应用的网络通信延迟,提高RDMA的应用性能。
相应的,本申请实施例还提供一种计算机设备,包括:存储器、处理器和RDMA设备,存储器中存储有用户态事件管理实例和RDMA应用对应的程序代码,用户态事件管理实例位于RDMA应用与RDMA设备之间,处理器与存储器耦合,用于执行用户态事件管理实例对应的程序代码,以用于实现本申请实施例提供的RDMA事件管理方法中的步骤。
图4B为本申请示例性实施例提供的另一种RDMA设备的结构示意图,如图4B所示,该RDMA设备包括:监测模块41b和写入模块42b。
监测模块41b,用于在为RDMA应用进行数据传输过程中,监测RDMA应用对应的至少一个CQ队列中是否有完成事件发生;写入模块42b,用于在监测模块监测到目标CQ队列中有完成事件发生时,向RDMA应用对应的用户态内存区域中写入通知信息,以使用户态事件管理实例将第一CPU硬件资源唤醒并控制第一CPU硬件资源向RDMA应用上报与通知信息对应的目标CQ标识信息;其中,第一CPU硬件资源是分配给RDMA应用用于向其进行完成事件通知的CPU硬件资源,且在用户态管理实例的控制下以低功耗状态监测用户态内存区域中是否发生通知信息的写入事件,直至监测到发生写入事件时被唤醒。
其中,上述监测模块和写入模块的实现形态并不限定,例如,监测模块和写入模块可以是硬件实现形态,如,RDMA网卡,监测模块和写入模块也可以是软件实现形态,如,虚拟网卡,对此不做限定。
在一实施例中,RDMA设备还包括:接收模块和确定模块;接收模块,用于接收用户态事件管理实例发送的至少一个CQ队列的描述信息和用户态内存区域的描述信息;确定模块,用于根据至少一个CQ队列的描述信息和用户态内存区域的描述信息分别确定至少一个CQ队列和用户态内存区域;其中,至少一个CQ队列和用户态内存区域是用户态管理实例为RDMA应用创建的用于进行完成事件通知所需的RDMA资源。
其中,关于RDMA设备的详细实施方式,可参见前述实施例,在此不再赘述。
在本申请实施例中,在RDMA应用与RDMA设备之间增设用于事件通知的用户态事件管理实例,基于该用户态事件管理实例,在针对RDMA应用进行事件通知过程中,可使用于向RDMA应用进行完成事件通知的CPU硬件资源在低功耗状态等待完成事件发生,以节约功耗,在完成事件发生的情况下,可使RDMA设备在用户态将该CPU硬件资源“唤醒”,CPU硬件资源被唤醒后可直接通知RDMA应用有完成事件发生,整个过程无需经过内核态,也就不用在内核态和用户态之间进行上下文切换,减少了内核态的代码处理逻辑,缩短了完成事件从RDMA设备向RDMA应用进行通知的路径和周期,降低了RDMA应用的网络通信延迟,提高RDMA的应用性能。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被执行时能够实现上述图3A和图3B所示方法实施例中的各步骤。
上述实施例中的存储器可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
上述实施例中的通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G、3G、4G/LTE、5G等移动通信网络,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,通信组件还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
上述实施例中的显示器包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与触摸或滑动操作相关的持续时间和压力。
上述实施例中的电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
上述实施例中的音频组件,可被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(MIC),当音频组件所在设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌 入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (14)

  1. 一种RDMA事件管理方法,应用于用户态事件管理实例,所述用户态事件管理实例位于RDMA应用与RDMA设备之间,所述方法包括:
    响应RDMA应用发起的完成事件等待请求,确定所述RDMA应用对应的用户态内存区域,所述用户态内存区域用于供所述RDMA设备在所述RDMA应用对应的至少一个CQ队列中有完成事件发生时写入通知信息;
    控制第一CPU硬件资源以低功耗状态监测所述用户态内存区域中是否发生所述通知信息的写入事件,所述第一CPU硬件资源是分配给所述RDMA应用用于向其进行完成事件通知的CPU硬件资源;
    在所述用户态内存区域发生所述写入事件的情况下,将所述第一CPU硬件资源唤醒,并控制所述第一CPU硬件资源向所述RDMA应用上报与所述通知信息对应的目标CQ标识信息,以通知所述RDMA应用所述目标CQ标识信息对应的目标CQ队列中发生了完成事件。
  2. 根据权利要求1所述的方法,其中,所述控制第一CPU硬件资源以低功耗状态监测所述用户态内存区域中是否发生所述通知信息的写入事件,包括:
    控制所述第一CUP硬件资源执行一条或多条用户态控制指令,以控制所述第一CPU硬件资源以低功耗状态监测所述用户态内存区域中是否发生所述通知信息的写入事件;
    其中,所述一条或多条用户态控制指令中包含所述用户态内存区域的描述信息,以使所述第一CPU资源确定需要监测的所述用户态内存区域。
  3. 根据权利要求2所述的方法,其中,所述控制所述第一CUP硬件资源执行多条用户态控制指令,以控制所述第一CPU硬件资源以低功耗状态监测所述用户态内存区域中是否发生所述通知信息的写入事件,包括:
    控制所述第一CUP硬件资源执行第一用户态控制指令,所述第一用户态控制指令中包括所述用户态内存区域的描述信息,以供所述第一CPU硬件资源确定需要监测的所述用户态内存区域;
    控制所述第一CPU硬件资源执行第二用户态控制指令,以控制所述第一CPU硬件资源进入低功耗状态,并在低功耗状态下监测所述用户态内存区域中是否发生所述通知信息的写入事件。
  4. 根据权利要求1所述的方法,其中,所述控制所述第一CPU硬件资源向所述RDMA应用上报与所述通知信息对应的目标CQ标识信息,包括:
    根据所述通知信息的写入位置,控制所述第一CPU硬件资源从所述用户态内存区域中或所述用户态内存区域关联的队列缓冲区中,读取所述目标CQ标识信息,并向所述RDMA应用上报所述目标CQ标识信息。
  5. 根据权利要求4所述的方法,其中,还包括:
    响应RDMA应用发起的RDMA资源初始化请求,至少为所述RDMA应用创建至少一个CQ队列和用户态内存区域,以供所述RDMA设备在所述至少一个CQ队列中有完成事件发生时写入通知信息。
  6. 根据权利要求5所述的方法,其中,所述用户态内存区域的数量为至少一个,且所述至少一个用户态内存区域与所述至少一个CQ队列一一对应;
    相应地,根据所述通知信息的写入位置,控制所述第一CPU硬件资源从所述用户态内存区域中或所述用户态内存区域关联的队列缓冲区中,读取所述目标CQ标识信息,包括:
    根据所述通知信息的写入位置,确定所述至少一个用户态内存区域中被写入所述通知信息的目标用户态内存区域;
    控制所述第一CPU硬件资源从所述目标用户态内存区域中读取所述目标CQ标识信息,所述目标CQ标识信息标识所述目标用户态内存区域对应的目标CQ队列中发生了完成事件。
  7. 根据权利要求5所述的方法,其中,还包括:响应RDMA应用发起的RDMA资源初始化请求,为所述RDMA应用创建队列缓冲区,并将所述用户态内存区域与所述队列缓冲区进行关联;所述队列缓冲区用于供所述RDMA设备在所述至少一个CQ队列中有完成事件发生时写入发生完成事件的CQ队列对应的CQ标识信息;
    相应地,根据所述通知信息的写入位置,控制所述第一CPU硬件资源从所述用户态内存区域中或所述用户态内存区域关联的队列缓冲区中,读取所述目标CQ标识信息,包括:根据所述通知信息的写入位置,控制所述第一CPU硬件资源从所述队列缓冲区中读取最新写入的CQ信息作为所述目标CQ标识信息。
  8. 根据权利要求7所述的方法,其中,在为所述RDMA应用创建队列缓冲区域之前,还包括:
    获取RDMA应用选择使用的目标资源创建模式;
    在所述目标资源创建模式为第一资源创建模式的情况下,执行为所述RDMA应用创建队列缓冲区,并将所述用户态内存区域与所述队列缓冲区进行关联的操作;
    在所述目标资源创建模式为第二资源创建模式的情况下,为所述至少一个CQ队列创建一一对应的用户态内存区域,并禁止执行为所述RDMA应用创建队列缓冲区的操作。
  9. 根据权利要求8所述的方法,其中,获取RDMA应用选择使用的目标资源创建模式,包括:
    从所述RDMA资源初始化请求中获取所述RDMA应用选择使用的目标资源创建模式;
    或者
    响应RDMA应用发起的资源创建模式选择请求,从所述资源创建模式选择请求中获取所述RDMA应用选择使用的目标资源创建模式。
  10. 一种RDMA事件管理方法,应用于RDMA设备,所述方法包括:
    在为RDMA应用进行数据传输过程中,监测所述RDMA应用对应的至少一个CQ队列中是否有完成事件发生;
    在监测到目标CQ队列中有完成事件发生时,向所述RDMA应用对应的用户态内存区域中写入通知信息,以使用户态事件管理实例将第一CPU硬件资源唤醒并控制所述第一CPU硬件资源向所述RDMA应用上报与所述通知信息对应的目标CQ标识信息;
    其中,所述第一CPU硬件资源是分配给所述RDMA应用用于向其进行完成事件通知的CPU硬件资源,且在所述用户态管理实例的控制下以低功耗状态监测所述用户态内存区域中是否发生所述通知信息的写入事件,直至监测到发生所述写入事件时被唤醒。
  11. 根据权利要求10所述的方法,其中,还包括:
    接收用户态事件管理实例发送的所述至少一个CQ队列的描述信息和所述用户态内存区域的描述信息;
    根据所述至少一个CQ队列的描述信息和所述用户态内存区域的描述信息分别确定所述至少一个CQ队列和所述用户态内存区域;
    其中,所述至少一个CQ队列和用户态内存区域是所述用户态管理实例为所述RDMA应用创建的用于进行完成事件通知所需的RDMA资源。
  12. 一种计算机设备,包括:存储器、处理器和RDMA设备,所述存储器中存储有用户态事件管理实例和RDMA应用对应的程序代码,所述用户态事件管理实例位于RDMA应用与RDMA设备之间,所述处理器与所述存储器耦合,用于执行所述用户态事件管理实例对应的程序代码,以用于实现权利要求1-9任一项所述方法中的步骤。
  13. 一种RDMA设备,包括:
    监测模块,用于在为RDMA应用进行数据传输过程中,监测所述RDMA应用对应的至少一个CQ队列中是否有完成事件发生;
    写入模块,用于在所述监测模块监测到目标CQ队列中有完成事件发生时,向所述RDMA应用对应的用户态内存区域中写入通知信息,以使用户态事件管理实例将第一CPU硬件资源唤醒并控制所述第一CPU硬件资源向所述RDMA应用上报与所述通知信息对应的目标CQ标识信息;
    其中,所述第一CPU硬件资源是分配给所述RDMA应用用于向其进行完成事件通知的CPU硬件资源,且在所述用户态管理实例的控制下以低功耗状态监测所述用户态内存区域中是否发生所述通知信息的写入事件,直至监测到发生所述写入事件时被唤醒。
  14. 一种存储有计算机程序的计算机可读存储介质,当所述计算机程序被处理器执行时,致使所述处理器能够实现权利要求1-9以及权利要求10-11中任一项所述方法中的步骤。
PCT/CN2023/126279 2022-10-28 2023-10-24 Rdma事件管理方法、设备及存储介质 WO2024088268A1 (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202211338130.7A CN115640149A (zh) 2022-10-28 2022-10-28 Rdma事件管理方法、设备及存储介质
CN202211338130.7 2022-10-28

Publications (1)

Publication Number Publication Date
WO2024088268A1 true WO2024088268A1 (zh) 2024-05-02

Family

ID=84947229

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CN2023/126279 WO2024088268A1 (zh) 2022-10-28 2023-10-24 Rdma事件管理方法、设备及存储介质

Country Status (2)

Country Link
CN (1) CN115640149A (zh)
WO (1) WO2024088268A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115640149A (zh) * 2022-10-28 2023-01-24 阿里巴巴(中国)有限公司 Rdma事件管理方法、设备及存储介质
CN115801642B (zh) * 2023-02-13 2023-05-30 深圳市泛联信息科技有限公司 基于状态控制的rdma通讯管理模块、方法、设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110173423A1 (en) * 2008-02-01 2011-07-14 Arimilli Ravi K Look-Ahead Hardware Wake-and-Go Mechanism
CN104483871A (zh) * 2014-11-03 2015-04-01 天津理工大学 公路交通安全设施物联网系统实时监测设备及工作方法
CN114265713A (zh) * 2021-12-15 2022-04-01 阿里巴巴(中国)有限公司 Rdma事件管理方法、装置、计算机设备及存储介质
CN115640149A (zh) * 2022-10-28 2023-01-24 阿里巴巴(中国)有限公司 Rdma事件管理方法、设备及存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110173423A1 (en) * 2008-02-01 2011-07-14 Arimilli Ravi K Look-Ahead Hardware Wake-and-Go Mechanism
CN104483871A (zh) * 2014-11-03 2015-04-01 天津理工大学 公路交通安全设施物联网系统实时监测设备及工作方法
CN114265713A (zh) * 2021-12-15 2022-04-01 阿里巴巴(中国)有限公司 Rdma事件管理方法、装置、计算机设备及存储介质
CN115640149A (zh) * 2022-10-28 2023-01-24 阿里巴巴(中国)有限公司 Rdma事件管理方法、设备及存储介质

Also Published As

Publication number Publication date
CN115640149A (zh) 2023-01-24

Similar Documents

Publication Publication Date Title
WO2024088268A1 (zh) Rdma事件管理方法、设备及存储介质
KR101798369B1 (ko) 휴대용 디바이스에서 동기적 태스크 디스패치를 위한 시스템 및 방법
EP3462326B1 (en) Nvme device, and methods for reading and writing nvme data
WO2018082570A1 (zh) I/o请求的调度方法及装置
US8321876B2 (en) System and method of dynamically loading and executing module devices using inter-core-communication channel in multicore system environment
WO2023284699A1 (zh) 基于Linux系统的协议栈数据传输方法、计算机设备和存储介质
CN110300328B (zh) 一种视频播放控制方法、装置及可读存储介质
US20190227971A1 (en) Architecture for consolidating multiple sources of low-bandwidth data over a serial bus
AU2019256257B2 (en) Processor core scheduling method and apparatus, terminal, and storage medium
WO2018209614A1 (zh) 一种扩展设备的管理方法、终端设备及扩展设备
US9958933B2 (en) Opportunistic waking of an application processor
CN114817120A (zh) 一种跨域数据共享方法、系统级芯片、电子设备及介质
CN117539614A (zh) 资源调度方法和电子设备
CN113535425A (zh) 一种数据发送方法、装置、电子设备及存储介质
US10318362B2 (en) Information processing apparatus, information processing method, and non-transitory computer-readable storage medium
CN114265713A (zh) Rdma事件管理方法、装置、计算机设备及存储介质
WO2023087875A1 (zh) 进程调度方法和终端设备
WO2023030178A1 (zh) 一种基于用户态协议栈的通信方法及相应装置
US20230393782A1 (en) Io request pipeline processing device, method and system, and storage medium
EP4254207A1 (en) Data processing apparatus and method, and related device
WO2023029050A1 (zh) 一种资源协商方法
CN116055443B (zh) 识别社交场景的方法、电子设备及计算机可读存储介质
WO2022179427A1 (zh) 一种数据传输带宽的配置方法及相关设备
WO2023024922A1 (zh) 基于串口线程的信息传输方法、装置和系统
WO2023231768A1 (zh) 一种多核处理器及相关核间通信方法