CN118069285A - 一种连接恢复方法、装置、卸载卡及*** - Google Patents
一种连接恢复方法、装置、卸载卡及*** Download PDFInfo
- Publication number
- CN118069285A CN118069285A CN202211474963.6A CN202211474963A CN118069285A CN 118069285 A CN118069285 A CN 118069285A CN 202211474963 A CN202211474963 A CN 202211474963A CN 118069285 A CN118069285 A CN 118069285A
- Authority
- CN
- China
- Prior art keywords
- virtio
- end driver
- request
- driver
- processing
- 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
Links
- 238000000034 method Methods 0.000 title claims description 69
- 238000011084 recovery Methods 0.000 title description 9
- 238000012545 processing Methods 0.000 claims abstract description 150
- 239000000872 buffer Substances 0.000 claims description 85
- 230000003993 interaction Effects 0.000 claims description 29
- 230000008569 process Effects 0.000 claims description 23
- 230000006870 function Effects 0.000 description 21
- 238000004590 computer program Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 8
- 230000006399 behavior Effects 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 239000007787 solid Substances 0.000 description 4
- 230000009286 beneficial effect Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000012937 correction Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Landscapes
- Computer And Data Communications (AREA)
Abstract
一种连接恢复方法、装置、卸载卡及***,本申请中,第一设备部署virtIO后端驱动,第二设备部署virtIO前端驱动。virtIO后端驱动从虚拟队列获取virtIO前端驱动发送的IO请求,将IO请求交由第一设备的处理模块处理。virtIO后端驱动发生故障或完成升级后,第一设备获取virtIO后端驱动预先保存的运行数据,运行数据为virtIO后端驱动发生故障或升级之前运行所需的数据;virtIO后端驱动重启,基于运行数据恢复virtIO后端驱动的配置。virtIO后端驱动获取IO请求的处理结果,将IO请求的处理结果添加到虚拟队列。virtIO后端驱动利用运行数据恢复配置,无需重新协商、建立连接。
Description
技术领域
本申请涉及通信技术领域,尤其涉及一种连接恢复方法、装置、卸载卡及***。
背景技术
借助虚拟化技术,主机能够部署虚拟机、容器等计算实例,这些计算实例具有独立的运行环境,相互隔离。为了能够使得这些计算实例与主机底层硬件能够实现更高效的数据交互,针对输入输出(input/output,I/O)提出的一种半虚拟化解决方案---虚拟化输入输出协议(virtual input output,virtio)协议。
virtio协议定义了一套通用架构、以及标准接口。基于该通用架构、以及标准接口下,通信双方(如计算实例与主机)建立连接,并能够进行更加高效的交互。
但当通信双方中的任一方发生故障或关机时,通信双方之间的建立的连接会中断。该通信双方需要在故障恢复或重启后,需要重新建立连接,才能继续进行交互,但连接的重新建立会消耗较长的时间,导致通信双方无法及时恢复正常的交互。
发明内容
本申请提供一种连接恢复方法、装置、卸载卡及***,用以在virtio后端驱动断开连接后尽快恢复到连接断开前的状态。
第一方面,本申请实施例提供了一种连接恢复方法,该方法可以由与第二设备基于virtIO协议交互的第一设备执行。其中,第一设备中部署有virtIO后端驱动,第二设备部署有virtIO前端驱动。在该方法中:
virtIO后端驱动可以从虚拟队列中获取virtIO前端驱动发送的IO请求,将该IO请求交由第一设备中的处理模块处理。若该virtIO后端驱动在获取该IO请求后,发生故障或完成升级,该virtIO后端驱动与virtIO前端驱动之间的连接会断开。第一设备获取virtIO后端驱动预先保存的运行数据,运行数据为virtIO后端驱动发生故障或升级之前运行所需的数据;该virtIO后端驱动重启,virtIO后端驱动基于运行数据恢复virtIO后端驱动的配置。virtIO后端驱动可以继续执行连接断开之前的操作,获取IO请求的处理结果,将IO请求的处理结果添加到虚拟队列。
通过上述方法,该virtIO后端驱动与virtIO前端驱动之间的连接会断开后,能够利用之前已保存的运行数据恢复配置,无需重新进行协商、建立连接,就可以继续执行连接断开之前的操作。
在一种可能的实施方式中,第一设备与第二设备之间可以通过***总线连接,第一设备包括DPU。例如第二设备可以为主机,第一设备可以为卸载卡。
通过上述方法,第一设备与第二设备位于同一装置,第一设备能够协助第二设备承担一些数据处理操作。另外,第一设备中部署virtIO后端驱动,第二设备部署virtIO前端驱动,第一设备与第二设备之间能够进行较为高效的交互。
在一种可能的实施方式中,virtIO后端驱动在与virtIO前端驱动建立连接、以及与virtIO后端驱动交互的过程中,保存运行数据。
通过上述方法,virtIO后端驱动能够主动保存运行数据,便于后续在与virtIO前端驱动连接断开后,快速恢复到之前的状态。
在一种可能的实施方式中,virtIO后端驱动可以申请存储空间,将运行数据保存在存储空间,存储空间为virtIO后端驱动发生故障或升级时不会被回收的、第一设备的存储空间。
通过上述方法,由于存储空间为virtIO后端驱动发生故障或升级时不会被回收的、第一设备的存储空间,使得存储空间中保存的运行数据在virtIO后端驱动发生故障或升级时不会丢失,保证virtIO后端驱动在与virtIO前端驱动连接断开后,能够成功恢复到之前的状态。
在一种可能的实施方式中,运行数据包括virtIO连接信息,virtIO连接信息为virtIO后端驱动与第二设备中的virtIO前端驱动建立连接所需的信息,virtIO后端驱动使用virtIO连接信息,恢复virtIO前端驱动与virtIO后端驱动之间的连接。
通过上述方法,virtIO后端驱动能够利用virtIO连接信息恢复连接,不再需要与virtIO前端驱动重新进行协商、建立连接。
在一种可能的实施方式中,运行数据包括virtIO后端驱动的上下文信息,上下文信息描述了virtIO后端驱动发生故障或升级之前的运行环境,virtIO后端驱动使用上下文信息,将virtIO后端驱动的运行环境恢复为virtIO后端驱动发生故障或升级之前的运行环境。
通过上述方法,virtIO后端驱动能够利用上下文信息恢复运行环境,virtIO后端驱动可以恢复到之前的处理进度,无需再重复从虚拟队列获取之前已获取的IO请求。
在一种可能的实施方式中,运行数据包括IO请求处理信息,IO请求处理信息指示virtIO后端驱动获取的来自第二设备的IO请求的处理状态,virtIO后端驱动基于IO请求处理信息校正可用环的头指针以及使用环的索引,其中,可用环的头指针用于指示virtIO后端驱动下次需读取的IO请求所在的缓存buffer的描述符,使用环的索引指示virtIO后端驱动最近一次处理完成的IO请求的处理结果所在的缓存buffer的描述符。
通过上述方法,virtIO后端驱动能够利用IO请求处理信息校正可用环的头指针以及使用环的索引,保证可用环的头指针以及使用环的索引与实际的IO请求的处理进度一致,保证可用环的头指针以及使用环的索引的准确性。
第二方面,本申请实施例还提供了一种连接恢复装置,该连接恢复装置具有实现上述第以方面的方法实例中第一设备行为的功能,有益效果可以参见第一方面的描述此处不再赘述。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。在一个可能的设计中,所述连接恢复装置的结构中包括virtIO后端驱动以及处理模块。这些模块可以执行上述第一方面方法示例中的相应功能,具体参见方法示例中的详细描述,此处不做赘述。
第三方面,本申请实施例还提供了一种卸载卡,该卸载卡具有实现上述第一方面的方法实例中行为的功能,有益效果可以参见第一方面的描述此处不再赘述。所述卸载卡的结构中包括DPU和供电电路,供电电路用于为所述DPU供电,可选的,还可以包括存储器和通信接口。所述DPU与主机通过***总线连接,DPU被配置为支持所述卸载卡执行上述第一方面方法中第一设备相应的功能。存储器与DPU通过***总线连接,其保存所述通信装置必要的计算机程序指令和数据(如运行数据)。本申请并不限定该DPU与主机的连接方式,例如DPU通过PCIe总线或其他类型的总线连接在所述主机的背板或主板上。
第四方面,本申请实施例还提供了一种计算***,该计算***包括卸载卡和主机,卸载卡包括DPU,DPU与主机通过***总线连接,例如,所述DPU通过PCIe总线连接在所述主机的背板或主板上。DPU具有实现上述第一方面的方法实例中第一设备行为的功能,有益效果可以参见第一方面的描述此处不再赘述。
在具体实现中,卸载卡可以作为主机的一部分,部署在该主机的内部。例如,DPU通过PCIe总线连接在所述主机的背板或主板上。
第五方面,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面以及第一方面的各个可能的实施方式中所述的方法。
第六方面,本申请还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面以及第一方面的各个可能的实施方式中所述的方法。
第七方面,本申请还提供一种计算机芯片,所述芯片与存储器相连,所述芯片用于读取并执行所述存储器中存储的软件程序,执行上述第一方面以及第一方面的各个可能的实施方式中所述的方法。
附图说明
图1为本申请提供的一种***的架构示意图;
图2为本申请提供的一种虚拟输入输出前后端驱动的交互示意图;
图3为本申请提供的一种连接恢复方法示意图;
图4为本申请提供的一种连接恢复装置的结构示意图。
具体实施方式
在对本申请实施例提供的一种连接恢复方法及设备介绍之前,先对本申请实施例涉及的虚拟化输入输出协议(virtual input output,virtio)协议进行说明。
在一些虚拟化场景中,虚拟机要使用主机的资源(如内存、硬盘)等,需要超级监控器(Hypervisor)来截获所有虚拟机发起的请求,然后模拟出这些请求的行为,这样会带来很多性能上的开销。为此,提出了virtio协议。
virtio协议是针对输入输出(input/output,I/O)提出的一种半虚拟化解决方案。在半虚拟化解决方案中,将计算实例(如虚拟机或容器)发出的部分没必要虚拟化的指令通过硬件来完成,只负责完成部分指令的虚拟化。这里需要计算实例实现virtio协议中定义的虚拟输入输出前端驱动(virtual I/O frontend driver)。Hypervisor配合计算实例完成相应的虚拟输入输出后端驱动(virtual I/O backend driver),虚拟输入输出前端驱动与虚拟输入输出后端驱动之间通过特定的交互机制可以实现高效的虚拟化过程。
virtio协议则定义了一套通用架构、以及标准接口,在该通用架构、以及标准接口下,实现虚拟输入输出前端驱动与虚拟输入输出后端驱动之间的交互。virtio协议的核心功能是实现计算实例内外的事件通知和数据传递。例如,虚拟机内部的虚拟输入输出前端驱动将准备好待处理的IO请求存放到虚拟队列后,通知虚拟机外部的虚拟输入输出后端驱动;虚拟机外部的虚拟输入输出后端驱动获取待处理的IO请求并交给IO请求处理模块,IO请求处理模块在处理IO请求后,虚拟输入输出后端驱动将处理结果通过虚拟队列通知虚拟输入输出前端驱动。
virtio协议的类型有很多种,较为常见的有virtio-blk、virtio-小型计算机***接口(Small Computer System Interface,SCSI)。在本申请实施例中并不区分virtio协议的类型。
虽然,virtio协议是基于虚拟机与Hypervisor之间的输入输出(input/output,I/O)提出的一种半虚拟化解决方案。实际上,virtio协议不仅适用于虚拟机与Hypervisor之间的交互,还适用于其他交互场景。
为了能够释放主机中处理器的算力,会将一些数据处理任务交给连接主机的卸载卡处理,virtio协议也同样适用于卸载卡与主机或与主机上计算实例的交互场景中。例如,主机与主机的卸载卡之间可以基于virtio协议进行交互。其中,卸载卡连接到主机上,主机上部署虚拟输入输出前端驱动,卸载卡上部署虚拟输入输出后端驱动。又例如,主机中的计算实例与主机的卸载卡之间也可以基于virtio协议进行交互。主机中的计算实例部署虚拟输入输出前端驱动,卸载卡上部署虚拟输入输出后端驱动。
在本申请中以主机与主机的卸载卡之间基于virtio协议进行交互的场景为例进行说明。在本申请中,虚拟输入输出后端驱动能够在与虚拟输入输出前端驱动建立连接时,会保存virtio协议的连接信息,其中,该连接信息为虚拟输入输出后端驱动与虚拟输入输出前端驱动建立连接所需的信息,虚拟输入输出后端驱动与虚拟输入输出前端驱动交互的过程中,还会保存虚拟输入输出后端驱动的上下文信息,该上下文信息描述了虚拟输入输出后端驱动的运行环境。虚拟输入输出后端驱动发生故障或需要升级时,基于预先保存的virtio协议的连接信息以及上下文信息,重新启动虚拟输入输出后端驱动。virtio协议的连接信息以及上下文信息为虚拟输入输出后端驱动发生故障或需要升级之前,虚拟输入输出后端驱动运行所需的信息,而在基于这些信息重新启动的虚拟输入输出后端驱动不需要重新与虚拟输入输出前端驱动重新协商virtio协议的连接信息以建立连接;鉴于上下文信息的存在,虚拟输入输出后端驱动能够及时恢复到虚拟输入输出后端驱动发生故障或需要升级之前的运行环境,不会需要丢失掉之前与虚拟输入输出前端驱动交互的信息,快速恢复虚拟输入输出后端驱动与虚拟输入输出前端驱动之间的交互。
应需理解的是,上述提及的虚拟输入输出后端驱动重新启动的方式也适用于其他基于virtio协议的交互场景中。其他基于virtio协议的交互场景与所列举的主机与主机的卸载卡之间基于virtio协议进行交互的场景的区别主要在于虚拟输入输出后端驱动与虚拟输入输出前端驱动所部署的位置不同。
如图1所述为本申请实施例提供的一种***结构示意图,该***10包括主机20、卸载卡30。主机20是一个常见的计算机设备。主机20包括但不限于个人电脑、服务器、手机、平板电脑或者智能车等。
主机20具备数据处理能力,为该***中主要的卸载卡。主机20所具备的数据处理能力的类型与该主机20部署的位置有关。例如,主机20可以部署在云端,主机20能够面向用户提供资源、完成用户配置的业务(如数据分析、音视频处理等)。又例如,主机20可以是存储***中的节点,主机20能够实现数据存储。又例如,主机20可以部署在用户侧,主机20通过接收用户触发的指令处理该指令。凡是具备数据处理能力的装置均可作为主机20。
卸载卡30与主机20连接,该卸载卡30可以作为该主机20的外接设备,也可以部署在该主机20内部,如卸载卡30位于在主机20的主板或背板上,卸载卡30(如卸载卡30中的DPU301)通过总线与主机20(如主机20中的处理器201)交换数据,总线204可以为快捷***部件互连标准(peripheral component interconnect express,PCIe)总线,也可以为计算快速互联(compute express link,CXL)、通用串行总线(universal serial bus,USB)协议或其他协议的总线。
该卸载卡30可以作为主机20附带的具有数据处理功能的模块,承担该主机20的部分功能。也就是说,主机20的部分功能卸载到该卸载卡30上,由该卸载卡30代替主机20处理数据,执行部分的任务,以减轻主机20的压力,尤其是,对主机20中处理器201的压力,释放该处理器201的算力。本申请实施例并不限定该卸载卡30代替主机20所能实现的功能。
举例来说,卸载卡30能够作为主机20的网卡安插在主机20上。该卸载卡30作为网卡,能够基于网络协议完成对数据包的处理,如实现数据的封装、传输等。该卸载卡30还能够用于支持数据安全,能够对数据包括进行加解密。该卸载卡30还能够作为存储的入口,通过卸载卡30实现数据的分布式存储以及数据的远程访问,如卸载卡30可以访问该主机20的一些本地存储设备(如硬盘等用于持久化存储的设备)。还可以通过网络,访问远端的存储设备(如远端存储***中的设备)。
在本申请实施例中,主机20与卸载卡30之间基于virtio协议进行交互。主机20基于virtio协议将一些IO请求发送给卸载卡30,由卸载卡30协助主机20完成该IO请求。本申请中主机20向卸载卡30发送的IO请求可以理解为主机20向卸载卡30发送的任意消息,该IO请求可以是用于对存储装置进行数据读写的情况,该存储装置可以为主机20内部的存储器202(也即内存),还可以为主机20的外存(如主机20的固态硬盘等),还可以是主机20外部的存储装置,如通过网络连接的存储装置、部署在云端的存储装置等。该IO请求还可以是主机20向卸载卡30发送的控制命令。
下面对主机20与卸载卡30之间基于virtio协议进行交互的方式进行说明。
主机20中部署虚拟输入输出前端驱动。卸载卡30部署虚拟输入输出后端驱动。
初始时,主机20侧的虚拟输入输出前端驱动与卸载卡30侧的虚拟输入输出后端驱动之间会进行协商以建立连接,在这个过程中,主机20侧的虚拟输入输出前端驱动与卸载卡30侧的虚拟输入输出后端驱动之间会约定或协商一些信息,以保证虚拟输入输出前端驱动与虚拟输入输出后端驱动能够建立连接,进而进行交互。为了方便说明,将这些信息称为virtio协议的连接信息。virtio协议的连接信息是虚拟输入输出前端驱动与虚拟输入输出后端驱动建立连接所必须的信息。virtio协议的连接信息包括但不限于:虚拟队列(virtqueue)的信息(如虚拟队列的地址、大小等)、描述符数组(description,desc)的信息(如desc的地址、大小等),可用环(available ring)的地址、使用环(used ring)的地址。
虚拟输入输出前端驱动与虚拟输入输出后端驱动建立连接后,卸载卡30与主机20之间可以进行交互。
卸载卡30与主机20之间的交互主要是利用通过虚拟输入输出后端驱动以及虚拟输入输出前端驱动共同维护的虚拟队列实现。虚拟队列所承载的是卸载卡30与主机20之间交互的数据,如IO请求或IO请求的处理结果。
虚拟队列可以理解为多个缓存(buffer),每个buffer可用于缓存IO请求或IO请求的处理结果。该多个buffer为主机20与卸载卡30所共同维护的,主机20与卸载卡30均从该buffer中读取数据或写入数据。
如图2所示,虚拟队列的维护涉及到三个基本元素,分别为描述符数组(description,desc),可用环(available ring)和使用环(used ring)。
描述符数组包括多个描述符,每个描述符用于描述缓存(buffer),该描述符数组中记录了每个描述符的标识以及每个描述符所描述的内容,如记录该buffer的地址或与buffer关联的buffer的地址。
可用环可以理解为一个环状的结构,该可用环中包括多个描述符,该可用环用于指示主机20侧当前可用的描述符。类似的,使用环也可以理解为一个环状结构。使用环指示哪些描述符已被卸载卡30侧使用。
主机20在需要向卸载卡30发起IO请求时,通过虚拟输入输出前端驱动,将该IO请求添加到虚拟队列中。主机20将该IO请求添加到虚拟队列中实际上是将IO请求写入到buffer中。主机20在将IO请求写入到buffer中时,从描述符组中找到可用的描述符,该描述符用于描述该buffer,在可用环中添加该描述符。主机20通知卸载卡30存在待处理的IO请求。卸载卡30在接收到主机20的通知后,从可用环中找到该描述符,根据描述符数组确定该描述符所描述的buffer,从该buffer中读取该IO请求。卸载卡30在读取IO请求后可以处理该IO请求,也即完成对存储设备的数据读取或写入。卸载卡30可以将IO请求的处理结果写入到虚拟队列中,也即将IO请求的处理结果写入到buffer中,并将描述该buffer的该描述符更新到使用环中,以标识该描述符中的IO请求已处理完毕。
其中,当主机20将一个IO请求写入到buffer时,该IO请求可以写入到一个buffer中,可用环中添加的描述符,即为该buffer的描述符,该IO请求的处理结果可以写入到一个buffer中,使用环中添加的描述符,即为该buffer的描述符。而实际场景中,一个IO请求中携带的数据较大,该IO请求会被写入到多个关联的buffer中。这种情况下,可用环中添加的描述符为该多个buffer中首个buffer的描述符。一个IO请求的处理结果的数据量较大,处理结果该被写入到多个关联的buffer中,使用环中添加的描述符为该多个关联的buffer中首个buffer的描述符。
另外,卸载卡30在从可用环中获取描述符时,通常是批量获取,也即一次性确定多个缓存有IO请求的buffer的描述符。之后从该多个buffer中读取该多个IO请求,处理该多个IO请求。
从上述描述可知,可用环的作用是记录主机20向卸载卡30发起的IO请求卸载卡30侧可以维护一个头指针,该头指针用于指示卸载卡30侧下次需要读取的IO请求所在的buffer的描述符。也就是说,每次卸载卡30在读取IO请求后,仅将该头指针指向可用环中当前已读取的IO请求所在的buffer的描述符之后的描述符,这样当卸载卡30下次需要读取IO请求时,可以从该头指针所指示的描述符所描述的buffer读取IO请求。在本申请实施例中仅涉及到对卸载卡30侧所维护的头指针的更新。
使用环的作用是记录卸载卡30已处理的IO请求,主机20侧为该使用环维护一个索引(index),该索引用于指示主机20侧记录的卸载卡30最近一次处理的IO请求的处理结果所在的buffer的描述符。对于卸载卡30侧也可以维护一个索引,该索引用于指示卸载卡30侧记录的最近一次处理的IO请求的处理结果所在的buffer的描述符。
而实际场景中,由于一个IO请求的处理结果的数据量较大,处理结果该被写入到多个关联的buffer中,使用环中添加的描述符为该多个关联的buffer首个buffer的描述符。卸载卡30侧所维护的索引所指示的卸载卡30侧记录的最近一次处理的IO请求的处理结果所在的buffer中首个buffer的描述符。
目前,卸载卡30侧的虚拟输入输出后端驱动发生故障或者需要升级时,卸载卡30侧的虚拟输入输出后端驱动会停止运行。卸载卡30侧的虚拟输入输出后端驱动的一些运行所需的运行数据(如上下文信息、virtio的连接信息)会随着虚拟输入输出后端驱动故障或者升级而丢失。这种因为这些数据是保存在虚拟输入输出后端驱动所申请的内存空间中的,虚拟输入输出后端驱动故障或者升级,该内存空间会被回收,内存空间中的数据会被丢弃。虚拟输入输出后端驱动重动时,只能与虚拟输入输出前端驱动重新建立连接。
在本申请中,卸载卡30可以将虚拟输入输出后端驱动的运行数据保存预先申请的存储空间中,该存储空间为在虚拟输入输出后端驱动发生故障或升级时不会被回收的存储空间。该运行数据包括下列的部分或全部:上下文信息、virtio的连接信息、IO请求处理信息。
其中,上下文信息描述了虚拟输入输出后端驱动的运行环境,virtio的连接信息为虚拟输入输出前端驱动与虚拟输入输出后端驱动建立连接所需的信息。IO请求处理信息描述了虚拟输入输出后端驱动对所获取的IO请求的处理状态。
在虚拟输入输出后端驱动故障恢复或升级完成后,基于该运行数据重新启动该虚拟输入输出后端驱动。这样,虚拟输入输出后端驱动能够保存在虚拟输入输出后端驱动故障或升级之前的运行状态,无须与虚拟输入输出前端驱动重新建立连接。
下面对主机20以及卸载卡30的内部结构进行说明。
主机20包括I/O接口203、处理器201、存储器202。I/O接口203用于与位于主机20外部的设备通信。例如,外部设备可以通过I/O接口203向主机20发送数据,主机20对输入的数据进行处理之后,再通过I/O接口203向该外部设备发送对该数据处理后的输出结果。
处理器201是主机20的运算核心和控制核心,它可以是中央处理器(centralprocessing unit,CPU),也可以是其他特定的集成电路。处理器201还可以是其他通用处理器、数字信号处理器(digital signal processing,DSP)、专用集成电路(applicationspecific integrated circuit,ASIC)、现场可编程门阵列(field programmable gatearray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
存储器202通常用来存放主机20中各种正在运行的计算机程序指令(如虚拟输入输出前端驱动的相关计算机程序指令)等。存储器202可以采用动态随机存取存储器(dynamic random access memory,DRAM)作为存储器202。除了DRAM之外,存储器202还可以是其他随机存取存储器,例如静态随机存取存储器(Static random access memory,SRAM)等。另外,存储器202也可以是只读存储器(read only memory,ROM)。而对于只读存储器,举例来说,可以是可编程只读存储器(programmable read only memory,PROM)、可抹除可编程只读存储器(erasable programmable read only memory,EPROM)等。存储器202还可以为闪存介质(FLASH)、硬盘驱动器(hard disk drive,HDD)或固态驱动器(solid statedisk,SSD)等。处理器201通过调用该存储器202中的计算机程序指令执行如下文中图3所示的实施例中主机20需执行的一些方法。
卸载卡30包括数据处理单元(data process unit,DPU)301以及存储器302,DPU301与存储器302通过***总线连接,该***总线可以为快捷***部件互连标准(peripheral component interconnect express,PCIe)总线,也可以为计算快速互联(compute express link,CXL)、通用串行总线(universal serial bus,USB)协议或其他协议的总线。
DPU301为卸载卡30的主要运算单元,是卸载卡30的核心单元,DPU301承担了卸载卡30的主要功能。例如主机20的部分功能可以卸载到DPU301上,由DPU301处理数据,执行主机20交由卸载卡30的任务。DPU301通过调用该存储器302中的计算机程序指令执行如下文中图3所示的实施例中卸载卡30需执行的一些方法。
存储器302能够支持DPU301的数据处理操作,为DPU301提供数据存储空间,与存储器202类似,存储器302用于存储DPU301需要调用的计算机程序指令(如虚拟输入输出后端驱动的相关计算机程序指令),虚拟输入输出后端驱动的运行数据等。存储器302的类型与存储器202的类型类似,具体可以参见前述内容,此处不再赘述。存储器302理解为卸载卡30的内存。
下面结合图3对本申请实施例提供的一种连接恢复方法进行说明,该方法包括两部分内容,一部分为虚拟输入输出后端驱动重启前,虚拟输入输出前端驱动与虚拟输入输出后端驱动之间建立连接以及进行交互的过程,具体可以参见步骤301~步骤305。另一部分为虚拟输入输出后端驱动重启,恢复与虚拟输入输出前端驱动的连接的过程,具体可以参见步骤306~步骤307。
步骤301:主机20侧虚拟输入输出前端驱动与卸载卡30侧虚拟输入输出后端驱动之间进行协商,以建立连接。
在步骤301中,主机20加载虚拟输入输出前端驱动,卸载卡30侧加载虚拟输入输出后端驱动,主机20侧的虚拟输入输出前端驱动与卸载卡30侧的虚拟输入输出后端驱动之间通过协商确定virtio协议的连接信息,基于该virtio协议的连接信息建立连接。
virtio协议的连接信息包括但不限于:虚拟队列的信息、描述符数组的信息,可用环的地址、使用环的地址。
步骤302:卸载卡30侧虚拟输入输出后端驱动将virtio协议的连接信息保存在预先申请的存储空间中。该存储空间为在虚拟输入输出后端驱动在发生故障或升级时不会被回收的存储空间。也就是说,该存储空间中的数据不会因为虚拟输入输出后端驱动故障或升级而丢失。
步骤303:主机20侧虚拟输入输出前端驱动与卸载卡30侧虚拟输入输出后端驱动之间建立连接后,主机20与卸载卡30基于virtio协议进行交互,主机20向卸载卡30发起IO请求,卸载卡30处理IO请求,并向主机20反馈IO请求的处理结果。主机20与卸载卡30基于virtio协议的交互过程可以参见前述内容,此处不再赘述。
步骤304:卸载卡30侧,虚拟输入输出后端驱动在运行过程中,会将该虚拟输入输出后端驱动的上下文信息保存在该存储空间中。上下文信息描述了虚拟输入输出后端驱动的运行环境。从应用程序角度,上下文信息指的是虚拟输入输出后端驱动正常运行所需要的外部变量的值的集合。这些外部变量的值包括维护虚拟队列所需的一些值,例如,卸载卡30侧虚拟输入输出后端驱动针对可用环维护的头指针(简称为可用环的头指针)、卸载卡30侧虚拟输入输出后端驱动针对使用环维护的索引(简称为使用环的索引)。
虚拟输入输出后端驱动在运行过程中,虚拟输入输出后端驱动的运行环境是会始终发生变化的,虚拟输入输出后端驱动实时更新保存在该存储空间中的上下文信息。
例如,虚拟输入输出后端驱动在运行过程中,卸载卡30侧虚拟输入输出后端驱动针对可用环维护的头指针、以及卸载卡30侧虚拟输入输出后端驱动针对使用环维护的索引会随着IO请求的获取或处理发生变化,相应的该上下文信息也会发生变化。虚拟输入输出后端驱动实时更新保存在该存储空间中保存的可用环的头指针、使用环的索引。
步骤305:主机20与卸载卡30基于virtio协议进行交互的过程中,卸载卡30侧虚拟输入输出后端驱动将IO请求处理信息保存在存储空间中。IO请求处理信息描述了卸载卡30获取的IO请求的处理状态。
IO请求的处理信息包括IO请求、可用环中该IO请求所在buffer的描述符的位置、以及使用环中该IO请求的处理结果所在buffer的描述符的位置、IO请求的处理进度。
其中,IO请求的处理信息所包括的IO请求是指该IO请求的内容。IO请求的处理进度描述了该IO请求的处理过程已进行到哪一步。
从前述关于主机20与卸载卡30基于virtio协议的交互过程的描述可知,IO请求从发起到反馈处理结果需要依次经过:主机20侧的虚拟输入输出前端驱动将IO请求写入buffer、主机20侧的虚拟输入输出前端驱动在可用环中添加buffer的描述符(这里添加的描述符即为可用环中该IO请求所在buffer的描述符)、卸载卡30侧的虚拟输入输出后端驱动根据该buffer的描述符读取IO请求、卸载卡30侧的虚拟输入输出后端驱动更新可用环的头指针(更新是指使该头指针指向该描述符)、卸载卡30处理IO请求、卸载卡30侧的虚拟输入输出后端驱动将处理结果写入到buffer中、卸载卡30侧的虚拟输入输出后端驱动在使用环中添加buffer的描述符(这里添加的描述符即为使用环中该IO请求的处理结果所在buffer的描述符)、卸载卡30侧的虚拟输入输出后端驱动更新使用环的索引(更新索引是指使该头指针指向该描述符)。
那么,对于卸载卡30侧IO请求的处理进度可以为:读取IO请求、更新可用环的头指针、处理进行中、处理完成、更新使用环、或更新使用环的索引。
其中,读取IO请求是指已经从buffer中读取了该IO请求,处理进行中是指读取的IO请求正在处理,处理完成是指IO请求是指IO请求已经处理完成,更新使用环是指IO请求处理完成后已在使用环中添加了相应的描述符。
在一些场景中,如虚拟输入输出后端驱动发生故障或者需要升级时,虚拟输入输出后端驱动在故障恢复或升级的过程中,主机20侧虚拟输入输出前端驱动与卸载卡30侧虚拟输入输出后端驱动之间连接会暂时断开。在虚拟输入输出后端驱动故障恢复或升级后,需要重新启动虚拟输入输出后端驱动,也即需要执行步骤306。
步骤306:卸载卡30侧,基于存储空间中的virtio协议的连接信息、以及上下文信息重新启动虚拟输入输出后端驱动。
虚拟输入输出后端驱动故障恢复或升级完成后,卸载卡30侧可以重新加载虚拟输入输出后端驱动,基于存储空间中的virtio协议的连接信息、以及上下文信息重新启动虚拟输入输出后端驱动。
重新启动的虚拟输入输出后端驱动根据virtio协议的连接信息可以获知虚拟队列(virtqueue)的信息(如虚拟队列的地址、大小等)、描述符数组(description,desc)的信息(如desc的地址、大小等),可用环(available ring)的地址、使用环(used ring)的地址,恢复虚拟输入输出后端驱动与虚拟输入输出前端驱动之间的连接。
重新启动的虚拟输入输出后端驱动根据上下文信息恢复到虚拟输入输出后端驱动故障或升级之前的运行环境,获知虚拟输入输出后端驱动维护的可用环的头指针、使用环的索引。
重新启动的虚拟输入输出后端驱动可以恢复到虚拟输入输出后端驱动故障或升级之前的运行状态,继续根据可用环的头指针指示的描述符读取IO请求,处理IO请求;还可以将IO请求的处理结果写入到buffer中,在使用环中增加该buffer的描述符,更新该使用环的索引,使得使用环的索引指示该描述符。
然而,由于卸载卡30侧的虚拟输入输出后端驱动会根据可用环批量的读取多个IO请求,并行的处理该多个IO请求,虚拟输入输出后端驱动在读取该多个IO请求中有的可能已读取但未更新可用环的头指针,有的可能已处理完成但未更新使用环的索引。这样,将存在上下文信息中记录的可用环的头指针、使用环的索引与实际IO请求的读取或IO请求的实际处理过程不一致导致的情况。
当卸载卡30侧的虚拟输入输出后端驱动批量获取了多个IO请求,但还未全部处理完成,卸载卡30侧所维护可用环的头指针会不准确,这是因为,头指针指示的是下次需要读取的IO请求所在的buffer对应的描述符,这样在虚拟输入输出后端驱动重启后,虚拟输入输出后端驱动从头指针指示的描述符开始读取IO请求,这样将虚拟输入输出后端驱动重启之前虚拟输入输出后端驱动可能会重复读取在重启之前已读取的IO请求。
另外,虚拟输入输出后端驱动批量获取了多个IO请求后,若IO请求已处理完成,但还未更新使用环的索引,也即使用环的索引并未指向该IO请求的处理结果所在的buffer的描述符,也会导致主机20所维护的索引与实际IO请求的处理情况不符。
为此,虚拟输入输出后端驱动可以利用存储空间保存的IO请求处理信息对虚拟输入输出后端驱动维护的可用环的头指针以及使用环的索引进行校正,也即执行步骤307。
步骤307:卸载卡30侧虚拟输入输出后端驱动根据存储空间中的IO请求处理信息校正该卸载卡30侧的虚拟输入输出后端驱动所维护可用环的头指针以及使用环的索引。
虚拟输入输出后端驱动根据可用环中的描述符从描述符所描述buffer中批量读取多个IO请求。例如,虚拟输入输出后端驱动可以获取可用环的头指针所指向的描述符为首的10个描述符,根据描述符数组确定该十个描述符所描述buffer,从该10个描述符所描述buffer中批量读取10个IO请求。也就是说,虚拟输入输出后端驱动获取可用环中的描述符时,是按照一定顺序读取的,虚拟输入输出后端驱动需要根据头指针所指向的描述符按照描述符在可用环中排列次序,读取描述符。
针对可用环的头指针,卸载卡30侧的虚拟输入输出后端驱动从已保存的IO请求处理信息确定最近一次已读取、且未更新可用环的头指针的首个IO请求。
这里,虚拟输入输出后端驱动所读取的IO请求的顺序并不是指IO请求的处理顺序,所指示的是该IO请求所在的buffer的描述符在可用环中的各个描述符中顺序。也就是说,这里首个IO请求指示的可用环中IO请求所在的buffer的描述符顺序在最前的、已读取但并未更新可用环的头指针的IO请求。换个角度来说,IO请求的顺序是指该IO请求所在的buffer的描述符在可用环中的顺序。
卸载卡30侧的虚拟输入输出后端驱动在确定了最近一次已读取、且未更新可用环的头指针的首个IO请求之后,更新可用环的头指针,使得该可用环的头指针指向该首个IO请求所在buffer的描述符。
例如,卸载卡30在虚拟输入输出后端驱动重启或者升级之前,从可用环中批量获取了10个IO请求,并在获取10个IO请求后,更新了可用环的头指针。
但卸载卡30侧的虚拟输入输出后端驱动重启或者升级之前,只处理了该10个IO请求中的5个IO请求。
当该10个IO请求中的前五个IO请求的处理进度为更新可用环的头指针,第六个IO请求的处理状态为读取IO请求,第六个IO请求到第十个IO请求即为最近一次已读取、且未更新可用环的头指针的IO请求。第6个IO请求为最近一次已读取、且未更新可用环的头指针的首个IO请求。虚拟输入输出后端驱动更新可用环的头指针,使得该可用环的头指针指向该第6个IO请求所在buffer的描述符。
当该10个IO请求中的第1、2、3、5、6个IO请求的处理进度为更新可用环的头指针,第4、7、8、9、10个IO请求的处理状态为读取IO请求,第4个IO请求为最近一次已读取、且未更新可用环的头指针的首个IO请求。虚拟输入输出后端驱动更新可用环的头指针,使得该可用环的头指针指向该第4个IO请求所在buffer的描述符。
这样,卸载卡30虚拟输入输出后端驱动在下次读取并处理IO请求时,可以先读取该未处理的首个IO请求,并处理该首个IO请求。
针对使用环的索引,卸载卡30从已保存的IO请求处理信息确定最近一次已读取、且未处理完成的首个IO请求,那么该IO请求之前相邻的IO请求即为已处理完成的IO请求。更新使用环的索引,使得使用环的索引指向该IO请求之前相邻的IO请求的处理结果所在的buffer的描述符。
仍以卸载卡30在主机20重启或者软件升级之前,只处理了10个IO请求中的五个IO请求为例。
卸载卡30虚拟输入输出后端驱动从这10个IO请求中找到已读取、且未处理完成的IO请求。
当该10个IO请求中的前五个IO请求的处理进度为处理完成或更新可用环,第六个IO请求的处理状态为处理进行中或读取IO请求,第六个IO请求到第十个IO请求即为最近一次已读取、且未处理完成的IO请求。第6个IO请求为最近一次已读取、且未处理完成的首个IO请求,第5个IO请求为最近一次已读取、且未处理完成的首个IO请求之前相邻的IO请求,那么,该第5个IO请求的处理结果已经写入到buffer中。虚拟输入输出后端驱动更新使用环的索引,使得该使用环的索引指向该第5个IO请求的处理结果所在buffer的描述符。
当该10个IO请求中的第1、2、3、5、6个IO请求的处理进度为处理完成或更新使用环,第4、7、8、9、10个IO请求的处理状态为处理进行中或读取IO请求,第4个IO请求为最近一次已读取、且未处理完成的首个IO请求。第3个IO请求为最近一次已读取、且未处理完成的首个IO请求之前相邻的IO请求,那么,该第3个IO请求的处理结果已经写入到buffer中,虚拟输入输出后端驱动更新使用环的索引,使得该使用环的索引指向该第3个IO请求的处理结果所在buffer的描述符。第5、6个IO请求的处理进度为处理完成或更新可用环,由于第4个IO请求的处理状态为处理进行中或读取IO请求。鉴于第4个IO请求的顺序位于第5个IO请求之前,若该使用环的索引指向该第5个或第6个IO请求的处理结果所在buffer的描述符,将导致第4个IO请求被遗漏,主机侧20的虚拟输入输出前端驱动将无法及时获取第4个IO请求的处理结果。故而将使得使用环的索引指向该首个IO请求之前相邻的IO请求的处理结果所在的buffer的描述符,也即第3个IO请求的处理结果所在buffer的描述符。这样,当后续第4个IO请求处理完成后,检测到第5、6个IO请求也已处理完成,可以再将该使用环的索引指向该6个IO请求的处理结果所在的buffer的描述符。
需要说明的是,在上述说明中,是以卸载卡30侧的虚拟输入输出后端驱动每读取一个IO请求,就更新可用环的头指针为例进行说明。事实上,在更新可用环的头指针时,卸载卡30侧的虚拟输入输出后端驱动也可以在多个IO请求均读取后,再更新可用环的头指针,该可用环的头指针指向该多个IO请求中最后一个IO请求所在buffer的描述符。若卸载卡30侧的虚拟输入输出后端驱动采用这种方式更新可用环的头指针,也可能导致在虚拟输入输出后端驱动重启后,可用环的头指针与卸载卡30侧的虚拟输入输出后端驱动读取IO请求的情况不一致,同样需要对可用环的头指针进行校正,校正的方式与前述方式类似,此处不再赘述。
类似的,在上述说明中,是以卸载卡30侧的虚拟输入输出后端驱动每处理完成一个IO请求,就更新使用环的索引为例进行说明。事实上,在更新使用环的索引时,卸载卡30侧的虚拟输入输出后端驱动也可以在多个IO请求均处理完成后,再更新使用环的索引,该使用环的索引指向该多个IO请求中最后一个IO请求的处理结果所在buffer的描述符。若卸载卡30侧的虚拟输入输出后端驱动采用这种方式更新使用环的索引,也可能导致在虚拟输入输出后端驱动重启后,可用环的头指针与卸载卡30侧的虚拟输入输出后端驱动对IO请求的处理情况不一致,同样需要对使用环的索引进行校正,校正的方式与前述方式类似,此处不再赘述。
步骤308:卸载卡30侧的虚拟输入输出后端驱动通知主机20侧的虚拟输入输出前端驱动更新后的使用环的索引,也即卸载卡30侧的虚拟输入输出后端驱动通知主机20侧的虚拟输入输出前端驱动告知使用环中最后处理的IO请求的处理结果所在的buffer的描述符。主机20侧的虚拟输入输出前端驱动可以根据卸载卡30侧的虚拟输入输出后端驱动通知的更新后的使用环的索引,更新主机20所维护的使用环的索引。
至此,主机20侧虚拟输入输出前端驱动与卸载卡30侧虚拟输入输出后端驱动之间重新建立了连接,主机20侧虚拟输入输出前端驱动与卸载卡30侧虚拟输入输出后端驱动继续进行交互。
基于与方法实施例同一发明构思,本申请实施例还提供了一种连接恢复装置,该连接恢复装置用于执行上述如图3所示的方法实施例中所卸载卡执行的方法,相关特征可参见上述方法实施例,此处不再赘述。该数据处理装置可理解为前述说明提及的管理单元的一种软件形态。如图4所示,连接恢复装置400包括virtIO后端驱动401以及处理模块402。
virtIO后端驱动401,用于在从虚拟队列中获取virtIO前端驱动发送的IO请求。
处理模块402,用于处理IO请求。
virtIO后端驱动401,还用于在从虚拟队列中获取virtIO前端驱动发送的IO请求后,若发生故障或完成升级,获取virtIO后端驱动401预先保存的运行数据,运行数据为virtIO后端驱动401发生故障或升级之前运行所需的数据;在发生故障或完成升级重启,基于运行数据恢复virtIO后端驱动401的配置;从处理模块402获取IO请求的处理结果,将IO请求的处理结果添加到虚拟队列。
在一种可能的实施方式中,第一设备与第二设备通过***总线连接,virtIO后端驱动401以及处理模块402部署在第一设备的DPU上。
在一种可能的实施方式中,virtIO后端驱动401在与virtIO前端驱动建立连接、以及与virtIO后端驱动401交互的过程中,保存运行数据。
在一种可能的实施方式中,virtIO后端驱动401申请存储空间,将运行数据保存在存储空间,存储空间为virtIO后端驱动401发生故障或升级时不会被回收的、第一设备的存储空间。
在一种可能的实施方式中,运行数据包括virtIO连接信息,virtIO连接信息为virtIO后端驱动401与第二设备中的virtIO前端驱动建立连接所需的信息,virtIO后端驱动401使用virtIO连接信息,恢复virtIO前端驱动与virtIO后端驱动401之间的连接。
在一种可能的实施方式中,运行数据包括virtIO后端驱动401的上下文信息,上下文信息描述了virtIO后端驱动401发生故障或升级之前的运行环境,virtIO后端驱动401使用上下文信息,将virtIO后端驱动401的运行环境恢复为virtIO后端驱动401发生故障或升级之前的运行环境。
在一种可能的实施方式中,运行数据包括IO请求处理信息,IO请求处理信息指示virtIO后端驱动401获取的来自第二设备的IO请求的处理状态,virtIO后端驱动401基于IO请求处理信息校正可用环的头指针以及使用环的索引,其中,可用环的头指针用于指示virtIO后端驱动401下次需读取的IO请求所在的缓存buffer的描述符,使用环的索引指示virtIO后端驱动401最近一次处理完成的IO请求的处理结果所在的缓存buffer的描述符。
根据本申请实施例的连接恢复装置400可对应于执行本申请实施例中描述的装置,并且连接恢复装置400中的各个模块的上述和其它操作和/或功能分别为了实现图3中的各个装置的相应流程,为了简洁,在此不再赘述。
需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。在本申请的实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机程序指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机程序指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机程序指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state drive,SSD)。
本领域内的技术人员应明白,本申请的实施例可提供为装置、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的装置、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (16)
1.一种连接恢复方法,其特征在于,所述方法应用于与第二设备基于虚拟输入输出virtIO协议交互的第一设备,所述第一设备中部署有virtIO后端驱动,所述第二设备部署有virtIO前端驱动,所述方法包括:
所述virtIO后端驱动在从虚拟队列中获取所述virtIO前端驱动发送的IO请求后,发生故障或完成升级,
所述第一设备获取所述virtIO后端驱动预先保存的运行数据,所述运行数据为所述virtIO后端驱动发生故障或升级之前运行所需的数据;
所述第一设备重启所述virtIO后端驱动,基于所述运行数据恢复所述virtIO后端驱动的配置;
所述virtIO后端驱动获取所述IO请求的处理结果,将所述IO请求的处理结果添加到所述虚拟队列。
2.如权利要求1所述的方法,其特征在于,所述第一设备与所述第二设备通过***总线连接,所述第一设备包括数据处理单元DPU。
3.如权利要求1或2所述的方法,其特征在于,所述方法还包括:
所述virtIO后端驱动在与所述virtIO前端驱动建立连接、以及与所述virtIO后端驱动交互的过程中,保存所述运行数据。
4.如权利要求3所述的方法,其特征在于,所述virtIO后端驱动保存所述运行数据,包括:
所述virtIO后端驱动申请存储空间,将所述运行数据保存在所述存储空间,所述存储空间为所述virtIO后端驱动发生故障或升级时不会被回收的、所述第一设备的存储空间。
5.根据权利要求1~4任一项所述的方法,其特征在于,所述运行数据包括virtIO连接信息,所述virtIO连接信息为所述virtIO后端驱动与所述第二设备中的virtIO前端驱动建立连接所需的信息,所述基于所述运行数据恢复所述virtIO后端驱动的配置,包括:
所述virtIO后端驱动使用所述virtIO连接信息,恢复所述virtIO前端驱动与所述virtIO后端驱动之间的连接。
6.如权利要求1~5任一项所述的方法,其特征在于,所述运行数据包括virtIO后端驱动的上下文信息,所述上下文信息描述了所述virtIO后端驱动发生故障或升级之前的运行环境,所述基于所述运行数据恢复所述virtIO后端驱动的配置,包括:
所述virtIO后端驱动使用所述上下文信息,将所述virtIO后端驱动的运行环境恢复为所述virtIO后端驱动发生故障或升级之前的运行环境。
7.如权利要求1~6任一项所述的方法,其特征在于,所述运行数据包括IO请求处理信息,所述IO请求处理信息指示所述virtIO后端驱动获取的来自第二设备的IO请求的处理状态,所述基于所述运行数据恢复所述virtIO后端驱动的配置,包括:
所述virtIO后端驱动基于所述IO请求处理信息校正可用环的头指针以及使用环的索引,其中,所述可用环的头指针用于指示所述virtIO后端驱动下次需读取的IO请求所在的缓存buffer的描述符,所述使用环的索引指示所述virtIO后端驱动最近一次处理完成的IO请求的处理结果所在的缓存buffer的描述符。
8.一种连接恢复装置,其特征在于,所述装置部署在与第二设备基于虚拟输入输出virtIO协议交互的第一设备,所述第二设备部署有virtIO前端驱动,所述装置包括virtIO后端驱动以及处理模块:
所述virtIO后端驱动,用于在从虚拟队列中获取所述virtIO前端驱动发送的IO请求后,发生故障或完成升级;获取所述virtIO后端驱动预先保存的运行数据,所述运行数据为所述virtIO后端驱动发生故障或升级之前运行所需的数据;在发生故障或完成升级重启,基于所述运行数据恢复所述virtIO后端驱动的配置;从所述处理模块获取所述IO请求的处理结果,将所述IO请求的处理结果添加到所述虚拟队列
所述处理模块,用于处理所述IO请求。
9.如权利要求8所述的装置,其特征在于,所述第一设备与所述第二设备通过***总线连接,所述virtIO后端驱动以及所述处理模块部署在所述第一设备的数据处理单元DPU上。
10.如权利要求8或9所述的装置,其特征在于,所述virtIO后端驱动,还用于:
在与所述virtIO前端驱动建立连接、以及与所述virtIO后端驱动交互的过程中,保存所述运行数据。
11.如权利要求10所述的装置,其特征在于,所述virtIO后端驱动,还用于:
申请存储空间,将所述运行数据保存在所述存储空间,所述存储空间为所述virtIO后端驱动发生故障或升级时不会被回收的、所述第一设备的存储空间。
12.根据权利要求8~11任一项所述的装置,其特征在于,所述运行数据包括virtIO连接信息,所述virtIO连接信息为所述virtIO后端驱动与所述第二设备中的virtIO前端驱动建立连接所需的信息,所述virtIO后端驱动,还用于:
使用所述virtIO连接信息,恢复所述virtIO前端驱动与所述virtIO后端驱动之间的连接。
13.如权利要求8~12任一项所述的装置,其特征在于,所述运行数据包括virtIO后端驱动的上下文信息,所述上下文信息描述了所述virtIO后端驱动发生故障或升级之前的运行环境,所述virtIO后端驱动,还用于:
使用所述上下文信息,将所述virtIO后端驱动的运行环境恢复为所述virtIO后端驱动发生故障或升级之前的运行环境。
14.如权利要求8~13任一项所述的装置,其特征在于,所述运行数据包括IO请求处理信息,所述IO请求处理信息指示所述virtIO后端驱动获取的来自第二设备的IO请求的处理状态,所述virtIO后端驱动,还用于:
基于所述IO请求处理信息校正可用环的头指针以及使用环的索引,其中,所述可用环的头指针用于指示所述virtIO后端驱动下次需读取的IO请求所在的缓存buffer的描述符,所述使用环的索引指示所述virtIO后端驱动最近一次处理完成的IO请求的处理结果所在的缓存buffer的描述符。
15.一种卸载卡,其特征在于,所述卸载卡包括数据处理单元DPU以及供电电路,所述供电电路用于为所述DPU供电,所述DPU与第二设备连接,用于执行如权利要求1~7任一项所述的方法。
16.一种计算***,其特征在于,所述计算***包括第二设备、以及DPU,所述DPU与第二设备通过***总线连接,所述DPU用于执行如权利要求1~7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211474963.6A CN118069285A (zh) | 2022-11-23 | 2022-11-23 | 一种连接恢复方法、装置、卸载卡及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211474963.6A CN118069285A (zh) | 2022-11-23 | 2022-11-23 | 一种连接恢复方法、装置、卸载卡及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118069285A true CN118069285A (zh) | 2024-05-24 |
Family
ID=91100909
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211474963.6A Pending CN118069285A (zh) | 2022-11-23 | 2022-11-23 | 一种连接恢复方法、装置、卸载卡及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118069285A (zh) |
-
2022
- 2022-11-23 CN CN202211474963.6A patent/CN118069285A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10102170B2 (en) | System and method for providing input/output functionality by an I/O complex switch | |
CN108616382B (zh) | 升级网卡固件的方法、装置、网卡和设备 | |
US9612846B2 (en) | Out-of-band (OOB) real-time inventory and configuration of original equipment manufacturer (OEM) devices using advanced configuration and power interface (ACPI) and unified extensible firmware interface (UEFI) services | |
US9081709B2 (en) | Virtualizable and forward-compatible hardware-software interface | |
WO2015101128A1 (zh) | 虚拟机热迁移的方法、虚拟机内存数据处理方法、服务器和虚拟机*** | |
US11194589B2 (en) | Information handling system adaptive component reset | |
US11681455B2 (en) | Shadow live migration over a smart network interface card | |
WO2023109880A1 (zh) | 一种业务恢复方法、数据处理单元及相关设备 | |
CN103677870A (zh) | ***升级方法及采用该方法升级的*** | |
US11755364B2 (en) | Transferral of process state and/or components in computing environments | |
US20170337064A1 (en) | System and method for booting an information handling system | |
CN110968392A (zh) | 一种升级虚拟化模拟器的方法和装置 | |
US10437754B1 (en) | Diagnostic fault management controller for distributed computing | |
US8954631B2 (en) | Continuously transferring data using a USB mass storage device | |
CN116257276B (zh) | 支持虚拟化硬件加速的虚拟宿主机用户后端升级方法 | |
WO2020000947A1 (zh) | 实现封装形式的bios数据刷写的方法、装置及设备 | |
CN112099916B (zh) | 虚拟机数据的迁移方法、装置、计算机设备及存储介质 | |
US11740969B2 (en) | Detecting and recovering a corrupted non-volatile random-access memory | |
CN118069285A (zh) | 一种连接恢复方法、装置、卸载卡及*** | |
CN109308232B (zh) | 虚拟机热迁移故障后回滚的方法、装置以及*** | |
CN113722147A (zh) | 一种保持业务连接方法及相关设备 | |
CN114968314B (zh) | 显示设备的固件升级方法、装置、电子设备及存储介质 | |
JP6822706B1 (ja) | クラスタシステム、サーバ装置、引継ぎ方法、及びプログラム | |
EP3977275B1 (en) | Connectivity migration in a virtual execution system | |
CN117687706A (zh) | 基于输入输出虚拟化的配置和请求处理方法、装置和设备 |
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 |