一种事件处理方法、装置、设备及可读存储介质与流程

文档序号:16262909发布日期:2018-12-14 21:43阅读:277来源:国知局
一种事件处理方法、装置、设备及可读存储介质与流程

本发明涉及计算机应用技术领域,特别是涉及一种事件处理方法、装置、设备及可读存储介质。

背景技术

infiniband(ib)作为i/o技术领域的一种新型体系结构,专为rdma设计的网络,具有低延时、高带宽的特性。其中,远程直接内存访问(remotedirectmemoryaccess,rdma)技术能够通过网络把数据直接传入计算机的存储区,从而消除了外部存储器复制和文本交换操作,解放了内存带宽和cpu周期,可以有效改进应用系统的性能。

在ib体系结构之上应用rdma协议进行消息通信,可以充分利用两者的优势,有效的提高集群通信性能。在ceph开发平台基础上实现rdma通讯,需要兼容现有的以太网通讯模式。现有的,以太网的通讯模式以套接字注册到epoll中进行数据接收和事件处理。rdma通讯模式不同于以太网,rdma通讯模式没有套接字的概念。

综上所述,如何在兼容现有以太网的机制下利用rdma协议进行消息通信等问题,是目前本领域技术人员急需解决的技术问题。



技术实现要素:

本发明的目的是提供一种事件处理方法、装置、设备及可读存储介质,以在兼容现有以太网的机制下,在事件处理中利用rdma协议进行消息通信。

为解决上述技术问题,本发明提供如下技术方案:

一种事件处理方法,利用rdma协议进行消息通信,包括:

利用目标eventfd句柄对ib体系结构进行监测;

当监测到所述ib体系结构接收到目标事件时,利用所述目标eventfd句柄向epoll发送与所述目标事件对应的事件通知消息;

利用所述epoll对所述目标事件进行处理。

优选地,利用所述epoll对所述目标事件进行处理,包括:

利用所述epoll调用的预设回调接口对所述目标事件进行处理。

优选地,利用所述目标eventfd句柄向epoll发送事件通知消息,包括:

调用write(fd,1)接口向epoll发送事件通知消息,其中所述fd为所述目标eventfd句柄。

优选地,所述利用目标eventfd句柄对ib体系结构进行监测,包括:

建立rdma连接对象之间的通信连接;

调用libverbs接口,创建目标eventfd句柄;

利用系统接口epoll_ctl将所述目标eventfd句柄注册到epoll句柄集合;

利用所述目标eventfd句柄对ib体系结构进行监测。

一种事件处理装置,利用rdma协议进行消息通信,包括:

监测模块,用于利用目标eventfd句柄对ib体系结构进行监测;

事件通知消息发送模块,用于当监测到所述ib体系结构接收到目标事件时,利用所述目标eventfd句柄向epoll发送与所述目标事件对应的事件通知消息;

目标事件处理模块,用于利用所述epoll对所述目标事件进行处理。

优选地,所述目标事件处理模块,具体用于利用所述epoll调用的预设回调接口对所述目标事件进行处理。

优选地,所述事件通知消息发送模块,具体用于调用write(fd,1)接口向epoll发送事件通知消息,其中所述fd为所述目标eventfd句柄。

优选地,所述监测模块,包括:

通信连接建立单元,用于建立rdma连接对象之间的通信连接;

目标eventfd句柄创建单元,用于调用libverbs接口,创建目标eventfd句柄;

目标eventfd句柄注册单元,用于利用系统接口epoll_ctl将所述目标eventfd句柄注册到epoll句柄集合;

监测单元,用于利用所述目标eventfd句柄对ib体系结构进行监测。

一种事件处理设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现上述事件处理方法的步骤。

一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述事件处理方法的步骤。

应用本发明实施例所提供的方法,利用rdma协议进行消息通信,包括:利用目标eventfd句柄对ib体系结构进行监测;当监测到ib体系结构接收到目标事件时,利用目标eventfd句柄向epoll发送与目标事件对应的事件通知消息;利用epoll对目标事件进行处理。利用目标eventfd句柄对ib体系结构进行监测,可以在监测到ib体系结构接收到目标事件时,向epoll发送事件通知消息,以便epoll及时对目标事件进行处理。也就是说,在ib体系结构和epoll之间,利用目标eventfd句柄建立消息通知机制,可将ib体系结构与cdma进行有效地结合,并兼容现有的以太通讯模式,解放内存带宽和cpu周期,提升并发处理能力,使得事件处理效果更高,可以有效改进应用系统的性能。

相应地,本发明实施例还提供了与上述事件处理方法相对应的事件处理装置、设备和可读存储介质,具有上述技术效果,在此不再赘述。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中一种事件处理方法的实施流程图;

图2为本发明实施例一中步骤s101的具体实施流程示意图;

图3为本发明实施例中一种事件处理装置的结构示意图;

图4为本发明实施例中一种事件处理设备的结构示意图。

具体实施方式

需要说明的是,在本发明实施例中应用到的epoll为应用于ceph中以太通讯模式下,对事件进行处理。epoll指linux内核为处理大批量文件描述符而作了改进的poll,是linux下多路复用io接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统cpu利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核io事件异步唤醒而加入ready队列的描述符集合就行了。epoll除了提供select/poll那种io事件的水平触发(leveltriggered)外,还提供了边缘触发(edgetriggered),这就使得用户空间程序有可能缓存io状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。具体的,epoll的处理流程可参见现有技术,在此不再赘述。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一:

请参考图1,图1为本发明实施例中一种事件处理方法的流程图,该方法利用rdma协议进行消息通信,该方法包括以下步骤:

s101、利用目标eventfd句柄对ib体系结构进行监测。

其中,eventfd用于进程或者线程间的通信(如通知/等待机制的实现)。其函数原型:

#include<sys/eventfd.h>/**function:创建eventfd*@initval:信号量的初始值*@flags:(版本2.6.27以上内核有效)可以设置一下标志位,如果是2.6.26或之前版本的内核,flags必须设置为0。*efd_nonblock是否阻塞*efd_cloexecclose-on-exec标记,当exec时是否关闭该文件*returnvalue:文件描述符fdinteventfd(unsignedintinitval,intflags)。eventfd在内核里的核心是一个计数器(counter),它是一个uint64_t的无符号整形变量counter,初始值为initval。具体的,包括read(eventfd_read)和write(eventfd_write),

其中,read(eventfd_read),消费者需要对信号量进行down操作时,调用read从eventfd读即可。read返回值:如果当前counter>0,那么read返回counter值,并重置counter为0;如果当前counter等于0,那么read1,阻塞直到counter大于0;如果设置了nonblock,那么返回-1,并设置errno为eagain。可以看到,eventfd实现的资源是一次性消耗品,只允许一次read。

write(eventfd_write),生产者需要执行up操作时,调用write写一个64bit的整数value到eventfd即可。write返回值:counter最大能存储的值是0xfffffffffffffffe(以max表示此值),那么write尝试将value加到counter上,如果结果超过max,那么write一直阻塞直到有read操作发生,或者返回-1并设置errno为eagain。所以write可以多次连续调用,但read读一次即可清零。实质上它应该是一个二元信号量,只有0和非0两种状态。但是应用程序也可以利用counter的值实现相应逻辑。比如每次write都加1,那么read就能够知道在两次调用之间有多少次write操作发生,也就表示对应的事件发生了多少次。

在本实施例中,可以预先建立一个目标eventfd句柄,该目标eventfd句柄用于监测ib体系结构,并将监测到的事件信息发送给epoll,以便epoll对事件进行处理。目标eventfd句柄的监测过程可参照上述的eventfd函数介绍,在此不再赘述。相应地,对应ib体系结构的具体架构以及工作流程可参见现有技术,在此同样不再赘述。

s102、当监测到ib体系结构接收到目标事件时,利用目标eventfd句柄向epoll发送与目标事件对应的事件通知消息。

当目标eventfd句柄监测到ib体系结构接收到目标事件时,可以利用目标eventfd句柄向epoll发送与目标事件对应的事件通知消息。具体的,目标事件为ib体系结构接收用户发送的要求增加、删除、修改和参看指定数据的数据操作事件。优选地,当监测到ib体系结构接收到目标事件时,调用write(fd,1)接口向epoll发送事件通知消息,其中fd为目标eventfd句柄。即目标eventfd句柄可以利用其write操作向epoll发送与目标事件对应的事件通知消息。从上文的eventfd的函数介绍可知,write可以多次连续调用,即使在事件繁忙时,也可及时将事件通知信息发送至epoll而无需等待。

s103、利用epoll对目标事件进行处理。

当epoll接收到事件通知消息时,可以对目标事件进行处理。具体的,epoll如何对目标数据进行处理可参照现有的数据接收和事件回调的方式进行处理。优选地,利用epoll调用的预设回调接口对目标事件进行处理。其中,回调指一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口。可以预先设置事件的回调接口,当发生事件时,直接调用回调接口对事件进行处理,可减短事件处理时延。

应用本发明实施例所提供的方法,利用rdma协议进行消息通信,包括:利用目标eventfd句柄对ib体系结构进行监测;当监测到ib体系结构接收到目标事件时,利用目标eventfd句柄向epoll发送与目标事件对应的事件通知消息;利用epoll对目标事件进行处理。利用目标eventfd句柄对ib体系结构进行监测,可以在监测到ib体系结构接收到目标事件时,向epoll发送事件通知消息,以便epoll及时对目标事件进行处理。也就是说,在ib体系结构和epoll之间,利用目标eventfd句柄建立消息通知机制,可将ib体系结构与cdma进行有效地结合,并兼容现有的以太通讯模式,解放内存带宽和cpu周期,提升并发处理能力,使得事件处理效果更高,可以有效改进应用系统的性能。

需要说明的是,基于上述实施例一,本发明实施例还提供了相应的改进方案。在后续实施例中涉及与上述实施例一中相同步骤或相应步骤之间可相互参考,相应的有益效果也可相互参照,在下文的改进实施例中不再一一赘述。

实施例二:

为便于本领域人员更好的实施本发明实施例所提供的技术方案,下面结合图2,对上述实施例一中的步骤s101的实现过程进行详细描述。

s201、建立rdma连接对象之间的通信连接。

在本实施例中,因利用rdma协议进行消息通信,因而,需建立rdma连接对象之间的通信连接。具体的,可通过调用libverbs接口创建qp,其中libverbs接口为封装了rdma协议的接口,pq指rdma连接对象。

s202、调用libverbs接口,创建目标eventfd句柄。

建立rdma连接对象之间的通信连接之后,可以调用libverbs接口创建一个可对ib体系结构进行监测的目标eventfd句柄。

s203、利用系统接口epoll_ctl将目标eventfd句柄注册到epoll句柄集合。

创建好目标eventfd句柄之后,需将目标eventfd句柄注册到epoll句柄集合,以便利用该目标eventfd句柄向epoll传递事件消息。

s204、利用目标eventfd句柄对ib体系结构进行监测。

具体的,即通过对目标eventfd句柄进行监测,进一步确定ib体系结构是否接收到事件数据。ib体系结构接收到事件数据指通过接口调用写操作,将数据写入接收缓存区里面。

通过上述步骤,接可将ib体系结构与现有的以太网通讯模式中的epoll建立消息通知机制。即,在ib体系结构上实现可兼容以太网通讯模式的rdma。需要注意的是,在实际应用中,仅在首次实施时,执行步骤s201-s203的操作,即在执行一次步骤s201-s203之后,便可将目标eventfd句柄长期存储在系统(ceph系统)中,相应的,所建立的通信关系也不必每次进行监测时都重新创建。即在非首次实施本发明实施例所提供的技术方案时,上述的步骤s201-s203可无需执行,仅执行步骤s204的操作即可对ib体系系统进行监测。

也就是说,本发明实施例所提供的技术方案,通过采用eventfd通知机制,实现了rdma高效地通讯模式。其中,eventfd技术为目前的常用的主流技术,相对于select,poll而言,其性能表现更高。且,可以以较小的代码改动实现兼容以太网通讯模式。

相应于上面的方法实施例,本发明实施例还提供了一种事件处理装置,下文描述的利用rdma协议进行消息通信的事件处理装置与上文描述的事件处理方法可相互对应参照。

参见图3所示,该装置包括以下模块:

监测模块101,用于利用目标eventfd句柄对ib体系结构进行监测;

事件通知消息发送模块102,用于当监测ib体系结构接收到目标事件时,利用目标eventfd句柄向epoll发送与目标事件对应的事件通知消息;

目标事件处理模块103,用于利用epoll对目标事件进行处理。

应用本发明实施例所提供的装置,利用rdma协议进行消息通信,包括:利用目标eventfd句柄对ib体系结构进行监测;当监测到ib体系结构接收到目标事件时,利用目标eventfd句柄向epoll发送与目标事件对应的事件通知消息;利用epoll对目标事件进行处理。利用目标eventfd句柄对ib体系结构进行监测,可以在监测到ib体系结构接收到目标事件时,向epoll发送事件通知消息,以便epoll及时对目标事件进行处理。也就是说,在ib体系结构和epoll之间,利用目标eventfd句柄建立消息通知机制,可将ib体系结构与cdma进行有效地结合,并兼容现有的以太通讯模式,解放内存带宽和cpu周期,提升并发处理能力,使得事件处理效果更高,可以有效改进应用系统的性能。

在本发明的一种具体实施方式中,目标事件处理模块103,具体用于利用epoll调用的预设回调接口对目标事件进行处理。

在本发明的一种具体实施方式中,事件通知消息发送模块102,具体用于调用write(fd,1)接口向epoll发送事件通知消息,其中fd为目标eventfd句柄。

在本发明的一种具体实施方式中,监测模块101,包括:

通信连接建立单元,用于建立rdma连接对象之间的通信连接;

目标eventfd句柄创建单元,用于调用libverbs接口,创建目标eventfd句柄;

目标eventfd句柄注册单元,用于利用系统接口epoll_ctl将目标eventfd句柄注册到epoll句柄集合;

监测单元,用于利用目标eventfd句柄对ib体系结构进行监测。

相应于上面的方法实施例,本发明实施例还提供了一种事件处理设备,下文描述的一种事件处理设备与上文描述的一种事件处理方法可相互对应参照。

参见图4所示,该事件处理设备包括:

存储器d1,用于存储计算机程序;

处理器d2,用于执行计算机程序时实现上述方法实施例的事件处理方法的步骤。

相应于上面的方法实施例,本发明实施例还提供了一种可读存储介质,下文描述的一种可读存储介质与上文描述的一种事件处理方法可相互对应参照。

一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例的事件处理方法的步骤。

该可读存储介质具体可以为u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可存储程序代码的可读存储介质。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1