利用virtio驱动实现请求的方法、装置和存储介质与流程

文档序号:18100749发布日期:2019-07-06 11:20阅读:276来源:国知局
利用virtio驱动实现请求的方法、装置和存储介质与流程

本发明涉及利用virtio驱动实现请求的方法、装置和存储介质。



背景技术:

virtio驱动是目前虚拟化环境中常用的驱动,该驱动用于将虚机内的i/o请求发送给后端的存储系统。virtio驱动分为两部分,在虚机内的来宾操作系统(guestos)中的是前端驱动部分,在宿主机上的是后端驱动部分,通常由前端驱动部分将i/o请求发送给后端驱动部分进行处理。

在实际生产环境中,后端驱动部分往往对应复杂的存储系统的接入端,拥有复杂的业务逻辑,也经常需要进行版本升级或者会发生意外崩溃(crash)的情况。目前在发生这种情况时,通过重启虚拟机的方式来进行恢复。然而,这样会对用户业务造成严重影响。



技术实现要素:

本发明提供一种利用virtio驱动实现请求的方法,该方法包括:

接收步骤,接收一个或多个请求,每个请求对应的描述符被记录到所述virtio驱动的可用环中;

信息生成和存储步骤,在所述每个请求被处理时,生成所述对应的描述符的处理信息,得到一个或多个描述符各自的一个或多个处理信息,并进行存储;

信息获取步骤,在对所述一个或多个请求的处理中断后,获取存储的所述一个或多个处理信息;

检索步骤,根据所述一个或多个处理信息,从所述一个或多个描述符中检索出未处理描述符,并根据所述未处理描述符各自的处理信息,取出所述可用环的当前环索引;

指示步骤,指示对所述一个或多个请求中与所述未处理描述符对应的请求进行处理,并指示从所述当前环索引的下一个环索引开始处理所述可用环中的描述符所对应的请求。

其中,所述一个或多个处理信息中的每个处理信息包括描述符的处理状态、描述符在所述可用环中对应的环索引、以及所述对应的环索引的进位。

其中,当请求已经处理完成或尚未开始处理时,所述处理状态为第一符号,当请求正在处理中时,所述处理状态为第二符号。

其中,在所述检索步骤中,从所述一个或多个描述符中检索出所述处理状态为所述第二符号的描述符作为所述未处理描述符,并根据所述未处理描述符各自的处理信息中的所述环索引和所述进位,取出所述当前环索引。

本发明还提供一种利用virtio驱动实现请求的装置,该装置包括:

接收单元,接收一个或多个请求,每个请求对应的描述符被记录到所述virtio驱动的可用环中;

信息生成和存储单元,在所述每个请求被处理时,生成所述对应的描述符的处理信息,得到一个或多个描述符各自的一个或多个处理信息,并进行存储;

信息获取单元,在对所述一个或多个请求的处理中断后,获取存储的所述一个或多个处理信息;

检索单元,根据所述一个或多个处理信息,从所述一个或多个描述符中检索出未处理描述符,并根据所述未处理描述符各自的处理信息,取出所述可用环的当前环索引;

指示单元,指示对所述一个或多个请求中与所述未处理描述符对应的请求进行处理,并指示从所述当前环索引的下一个环索引开始处理所述可用环中的描述符所对应的请求。

其中,所述一个或多个处理信息中的每个处理信息包括描述符的处理状态、描述符在所述可用环中对应的环索引、以及所述对应的环索引的进位。

其中,当请求已经处理完成或尚未开始处理时,所述处理状态为第一符号,当请求正在处理中时,所述处理状态为第二符号。

其中,所述检索单元从所述一个或多个描述符中检索出所述处理状态为所述第二符号的描述符作为所述未处理描述符,并根据所述未处理描述符各自的处理信息中的所述环索引和所述进位,取出所述当前环索引。

其中,所述装置进一步包括处理单元,用于对所述一个或多个请求进行处理。

本发明还提供一种存储介质,在所述存储介质上存储有利用virtio驱动实现请求的程序,所述程序被计算机执行以实施利用virtio驱动实现请求的方法,该程序包括:

接收指令,接收一个或多个请求,每个请求对应的描述符被记录到所述virtio驱动的可用环中;

信息生成和存储指令,在所述每个请求被处理时,生成所述对应的描述符的处理信息,得到一个或多个描述符各自的一个或多个处理信息,并进行存储;

信息获取指令,在对所述一个或多个请求的处理中断后,获取存储的所述一个或多个处理信息;

检索指令,根据所述一个或多个处理信息,从所述一个或多个描述符中检索出未处理描述符,并根据所述未处理描述符各自的处理信息,取出所述可用环的当前环索引;

指示指令,指示对所述一个或多个请求中与所述未处理描述符对应的请求进行处理,并指示从所述当前环索引的下一个环索引开始处理所述可用环中的描述符所对应的请求。

通过本发明,即使在后端驱动部分进行版本升级或者发生意外崩溃的情况下,也可以在重启后继续处理尚未处理完成的所有请求,不会遗漏请求或重复处理请求,实现快速自动地恢复,避免对用户业务造成严重影响,同时可以实现virtio驱动的无感知热升级。

附图说明

图1是根据本发明实施例的利用virtio驱动实现请求的装置的结构图;

图2是根据本发明实施例的利用virtio驱动实现请求的方法的流程图。

具体实施方式

下面结合附图,对本发明的实施例进行详细说明。

图1是根据本发明实施例的利用virtio驱动实现请求的装置1的结构图。该装置1包括接收单元10、信息生成和存储单元11、信息获取单元12、检索单元13、指示单元14。该装置1例如是virtio驱动中的后端驱动部分。

图2是根据本发明实施例的利用virtio驱动实现请求的方法的流程图,如图2所示,在接收步骤s20,接收单元10接收一个或多个请求,每个请求对应的描述符被记录到virtio驱动的可用环中。

在virtio驱动中,前端驱动部分通过vring将一个或多个请求(即,i/o请求)发送给后端驱动部分进行处理。vring包括描述符数组(desc)、可用环(availablering)和已用环(usedring)。描述符数组存储有多个描述符,每个描述符对应于一个缓冲器(buffer)。每个请求对应于一个描述符,并且对应的描述符被记录到可用环中。

在信息生成和存储步骤s21,在每个请求被处理时,信息生成和存储单元11生成对应的描述符的处理信息,得到一个或多个描述符各自的一个或多个处理信息,并进行存储。

如图1所示,该装置10还包括处理单元15,处理单元15对接收到的一个或多个请求分别进行处理。当处理单元15开始处理一个请求时,信息生成和存储单元11就会生成与该请求对应的描述符的处理信息。

其中,每个描述符的处理信息包括该描述符的处理状态、该描述符在可用环中对应的环索引、以及对应的环索引的进位。

可用环例如是16位的,具有16个环索引,例如0-15。记录在可用环中的每个描述符对应于一个环索引。这里,由于16位的环索引很容易回绕,因此处理信息中包括了环索引的进位,以便区分每个环索引的实际大小。

每个描述符的处理信息例如是32位的无符号整型,例如分别由0-31位表示。其中,0位表示该描述符的处理状态,1-15位表示该描述符在可用环中对应的环索引的进位、16-31位表示该描述符在可用环中对应的环索引。其中,无符号整型是一次写入,对齐的32位无符号整型的一次写入可以保证处理信息的原子性,因此可以避免非原子性操作带来的歧义。

当请求已经被处理单元15处理完成或尚未开始处理时,处理状态为第一符号,例如“0”,当请求正在被处理单元15处理中时,处理状态为第二符号,例如“1”。

也就是说,每个描述符的处理信息的0位是“0”,表示与该描述符对应的请求已处理完成或尚未开始处理,每个描述符的处理信息的0位是“1”,表示与该描述符对应的请求正在处理中,即,已经开始处理但尚未处理完成。另外,在请求被处理完成后,该请求对应的描述符的处理信息的0位被设置为“0”,然后将该请求对应的描述符加入到已用环中。

在处理单元15对一个或多个请求进行处理的过程中,当后端驱动部分出现崩溃或需要正常退出来进行升级时,对这些请求的处理会中断,后端驱动部分需要进行重启,以便继续处理请求。

在信息获取步骤s22,在处理单元15对一个或多个请求的处理中断后,信息获取单元12获取存储的一个或多个处理信息。

接着,在检索步骤s23,检索单元13根据上述一个或多个处理信息,从一个或多个描述符中检索出未处理描述符,并根据这些未处理描述符各自的处理信息,取出可用环的当前环索引。

其中,检索单元23从描述符数组中存储的一个或多个描述符中检索出处理状态为第二符号“1”的描述符,作为未处理描述符。也就是说,从这些描述符中取出处理信息的0位是“1”的描述符,作为未处理描述符,例如描述符d1和d5。

然后,检索单元23根据这些未处理描述符各自的处理信息中的环索引和进位,取出当前环索引。其中,当进位不同时,取出值最大的进位所对应的环索引作为当前环索引,当进位相同时,取出值最大的环索引作为当前环索引。例如,检索单元23检索出了2个未处理描述符d1和d5,描述符d1的处理信息中的进位是“2”,环索引是“4”,描述符d5的处理信息中的进位是“1”,环索引是“5”。其中,描述符d1的进位大于描述符d5的进位,因此将描述符d1的环索引“4”作为当前环索引。也就是说,通过进位的设置,可以清楚地区分每个环索引的实际大小。

在指示步骤s24,指示单元14指示对一个或多个请求中与未处理描述符对应的请求进行处理,并指示从当前环索引的下一个环索引开始处理可用环中的描述符所对应的请求。

本例中,处理单元15根据指示单元14的指示,例如对一个或多个请求中与描述符d1、d5对应的2个请求进行处理,如此,可以对中断时正在处理的那些请求继续处理,从而避免遗漏未处理完成的请求。另外,处理单元15从当前环索引“4”的下一个环索引“5”开始处理可用环中的描述符所对应的请求,如此,可以对中断时处理的请求的下一个请求开始继续处理,从而避免重复处理已处理过的请求。

其中,当处理单元15根据指示单元14的指示继续处理请求的过程中,信息生成和存储单元11同样会为处理的请求所对应的描述符生成处理信息,并进行存储。

通过本发明,在对接收到的一个或多个请求进行处理时,即使在后端驱动部分进行版本升级或者发生意外崩溃的情况下中断了处理,也可以在重启后继续处理尚未处理完成的所有请求,不会遗漏请求或重复处理请求,实现快速自动地恢复,避免对用户业务造成严重影响,同时可以实现virtio驱动的无感知热升级。

本发明还提供一种存储介质,在所述存储介质上存储有利用virtio驱动实现请求的程序,所述程序被计算机执行以实施利用virtio驱动实现请求的方法,该程序包括:

接收指令,接收一个或多个请求,每个请求对应的描述符被记录到所述virtio驱动的可用环中;

信息生成和存储指令,在所述每个请求被处理时,生成所述对应的描述符的处理信息,得到一个或多个描述符各自的一个或多个处理信息,并进行存储;

信息获取指令,在对所述一个或多个请求的处理中断后,获取存储的所述一个或多个处理信息;

检索指令,根据所述一个或多个处理信息,从所述一个或多个描述符中检索出未处理描述符,并根据所述未处理描述符各自的处理信息,取出所述可用环的当前环索引;

指示指令,指示对所述一个或多个请求中与所述未处理描述符对应的请求进行处理,并指示从所述当前环索引的下一个环索引开始处理所述可用环中的描述符所对应的请求。

虽然经过对本发明结合具体实施例进行描述,对于本领域的技术技术人员而言,根据上文的叙述后作出的许多替代、修改与变化将是显而易见。因此,当这样的替代、修改和变化落入附后的权利要求的精神和范围之内时,应该被包括在本发明中。

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