CN114741194A - I/o请求的处理方法及装置 - Google Patents
I/o请求的处理方法及装置 Download PDFInfo
- Publication number
- CN114741194A CN114741194A CN202210376965.5A CN202210376965A CN114741194A CN 114741194 A CN114741194 A CN 114741194A CN 202210376965 A CN202210376965 A CN 202210376965A CN 114741194 A CN114741194 A CN 114741194A
- Authority
- CN
- China
- Prior art keywords
- request
- host
- processing
- virtual
- issuing
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本说明书一个或多个实施例提供一种I/O请求的处理方法及装置,应用于主机CPU上运行的虚拟CPU线程,所述虚拟CPU线程被分配至所述主机上部署的虚拟机,所述方法包括:在接收到I/O请求的情况下,由Guest上下文转入Host上下文;将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
Description
技术领域
本说明书一个或多个实施例涉及计算机虚拟化技术领域,尤其涉及一种I/O请求的处理方法及装置。
背景技术
现有技术中,当运行于主机中的一个虚拟CPU(central processing unit,中央处理器)线程需要访问外部设备时,要通过I/O(IN/OUT,写/读)请求的形式实现,并且,在处理过程中,该虚拟CPU线程需要由Guest(客户机)上下文转到Host(宿主机)上下文对I/O请求进行虚拟化处理后,再返回Guest上下文。对于该虚拟CPU线程来说,在对I/O请求进行虚拟化处理的过程中,该虚拟CPU线程是处于暂停执行虚拟机代码的状态的,即虚拟CPU是处于阻塞状态的。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种I/O请求的处理方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种I/O请求的处理方法,应用于主机CPU上运行的虚拟CPU线程,所述虚拟CPU线程被分配至所述主机上部署的虚拟机,所述方法包括:
在接收到I/O请求的情况下,由Guest上下文转入Host上下文;
将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
根据本说明书一个或多个实施例的第二方面,提出了一种I/O请求的处理装置,应用于主机CPU上运行的虚拟CPU线程,所述虚拟CPU线程被分配至所述主机上部署的虚拟机,所述装置包括:
接收单元,用于在接收到I/O请求的情况下,由Guest上下文转入Host上下文;
下发单元,用于将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
根据本说明书一个或多个实施例的第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现如第一方面所述的方法的步骤。
根据本说明书一个或多个实施例的第四方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述的方法的步骤。
在本说明书所提供的技术方案中,将I/O请求下发至所述主机上运行的其他线程进行处理,通过主机上运行的其他线程代替访问外部设备的虚拟CPU线程对接收到的I/O请求进行虚拟化处理,而虚拟CPU线程直接返回Guest上下文,上述方法减少了虚拟CPU的阻塞时间,提高了虚拟CPU的处理效率。
附图说明
图1是本说明书一示例性实施例提供的一种I/O请求的处理设备架构示意图;
图2是本说明书一示例性实施例提供的一种虚拟机架构示意图;
图3是本说明书一示例性实施例提供的一种I/O请求的处理方法的流程示意图;
图4是本说明书一示例性实施例提供的一种I/O请求具体处理方法的流程示意图;
图5是本说明书一示例性实施例提供的一种电子设备的结构示意图;
图6是本说明书一示例性实施例提供的一种报文转发装置示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
为了减少虚拟CPU阻塞耗费的时间,释放虚拟CPU的处理能力至执行虚拟机程序上,从而提高虚拟CPU的处理效率,本说明书提出一种I/O请求的处理方法,应用于主机CPU上运行的虚拟CPU线程,该虚拟CPU线程被分配至主机上部署的虚拟机,该虚拟机上可能运行有数个虚拟CPU线程,虚拟机管理物理处理器,即主机CPU,负责虚拟CPU线程的调度与切换。虚拟CPU线程通过将I/O请求下发至主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文的方式,可以有效减少阻塞时间,通过其他线程完成对I/O请求的虚拟化处理,提高了虚拟CPU的处理效率。
图1是本说明书示出的一种I/O请求的处理设备的架构示意图。如图1所示,可以包括主机11及部署于该主机上的虚拟机12、网络13以及电子设备14和电子设备15。
主机11是一独立主机或主机集群承载的虚拟服务器,虚拟机12部署于该独立主机或主机集群中,其上被分配有至少一个虚拟CPU线程。在运行过程中,主机11上可以配置有I/O请求的处理装置,该装置可以采用软件和/或硬件的方式实现,对接收到的I/O请求进行处理。
电子设备14或电子设备15是指用户可以使用的一种类型的电子设备。实际上,用户显然还可以使用诸如下述类型的电子设备:手机、平板设备、笔记本电脑、掌上电脑(PDAs,Personal Digital Assistants)、可穿戴设备(如智能眼镜、智能手表等)等,本说明书一个或多个实施例并不对此进行限制。在运行过程中,电子设备14可以供用户下发针对外部设备资源的I/O请求。
而对于电子设备14或电子设备15与主机11之间进行交互的网络13,可以包括多种类型的有线或无线网络。在一实施例中,该网络13可以包括公共交换电话网络(PublicSwitched Telephone Network,PSTN)和因特网。
计算机虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互相不影响,从而显著提高计算机的工作效率。虚拟化技术可以使得一个或以上的客操作系统(Guest Operating System,Guest OS)在一个主操作系统(Host Operating System,Host OS)下运行。当前的虚拟化技术主要分为三种:全虚拟化,即针对计算机和操作系统的虚拟化;资源虚拟化,是指对特定的计算机系统资源的虚拟化,例如对内存、网络资源等等;以及应用程序虚拟化。在全虚拟化技术中,宿主机截获客户机对I/O设备的访问请求,然后通过软件模拟真实的硬件。这种方式对客户机而言非常透明,无需考虑底层硬件的情况,不需要修改操作系统。上述运行于一台计算机上的多个逻辑计算机的操作系统即Guest OS相当于运行于Host OS中的多个虚拟CPU线程。如图2所示为本说明书一示例性实施例中,通过全虚拟化技术在主机21中建立的虚拟机2111,在该虚拟机2111中被分配有虚拟CPU线程1、虚拟CPU线程2和虚拟CPU线程3。
在本说明书一示例性实施例中,上述三个虚拟CPU线程可以由虚拟机监视器(Hypervisor)通过全虚拟化技术将主机CPU进行分化形成,并由VMM(Virtual MachineMonitor,虚拟机管理控制软件)进行各个虚拟CPU线程之间的调度和切换。
在本说明书一示例性实施例中,上述VMM包括KVM(Kernel-based VirtualMachine,基于内核的虚拟机)和/或Qemu。其中,KVM,是Linux内核的一个可加载模块,通过调用Linux本身内核功能,实现对CPU的底层虚拟化和内存的虚拟化,使Linux内核成为虚拟化层,需要x86架构的,支持虚拟化功能的硬件,是一种全虚拟化架构。本质上,KVM是管理虚拟硬件设备的驱动,该驱动使用字符设备/dev/kvm(由KVM本身创建)作为管理接口,主要负责虚拟CPU的创建,虚拟内存的分配,虚拟CPU寄存器的读写以及虚拟CPU的运行。而Qemu是一套由Fabrice Bellard编写的模拟处理器的自由软件,它是一个完整的可以单独运行的软件,可以独立模拟出整台计算机,包括CPU,内存,I/O设备。QEMU有两种工作模式:系统模式,可以模拟出整个电脑系统,另一种是用户模式,可以运行不同于当前硬件平台的其他平台上的程序(比如在x86平台上运行跑在ARM平台上的程序)。
基于QEUM的上述特性,产生了一种新型的架构方式QEMU-KVM。通过上文中对KVM内核模块的介绍可知,KVM只负责CPU和内存的虚拟化,加载了KVM后,用户就可以进一步通过KVM提供的接口,由工具创建虚拟机。但仅有KVM还是不够的,用户无法直接控制内核进行虚拟机的创建、虚拟CPU的分配等,KVM只提供创建的接口,还必须有与之配合的运行于用户空间的工具才行。由QEMU作为这个工具,与KVM进行配合,最终形成了QEMU-KVM这一种新型的虚拟机架构方式。在QEMU-KVM中,KVM运行在内核空间,QEMU运行在用户空间,相互配合完成模拟、创建、管理各种虚拟硬件的任务。
下面结合图3对本说明书提供的I/O请求的处理方法进行具体说明。其中,图3是一示例性实施例提供的一种I/O请求的处理方法的流程示意图。
如图3所示中的方法主要应用于主机CPU上运行的虚拟CPU线程中,该虚拟CPU线程被分配至该主机上部署的虚拟机中。例如,在本申请一示例性实施例中,该方法可以应用于如图2所示的主机中的虚拟CPU线程1中。该方法主要包括以下步骤:
S301,在接收到I/O请求的情况下,由Guest上下文转入Host上下文。
由于虚拟CPU线程不具有直接访问外部设备的权限,因此,虚拟CPU线程在访问外部设备时,需要退出到Host上下文,由主机代为完成对该外部设备的访问。在接收到针对既定的目标外部设备的I/O请求时,本来运行在Guest上下文的虚拟CPU线程为访问外部设备,需要暂时停止对Guest上下文的执行,而转入Host上下文的执行,由主机代为访问该外部设备,获取访问结果反馈给虚拟CPU线程。只有当I/O请求被处理完成后,该虚拟CPU线程才会返回Guest上下文继续执行任务。在进行I/O请求的处理时,实际上,该虚拟CPU线程暂停了对Guest OS中任务的执行,因此,可以将由于I/O请求的处理导致的Guest上下文暂停执行的状态成为阻塞状态。
在本说明书一示例性实施例中,上述过程可以描述为:在接收到I/O请求的情况下,虚拟CPU退出到VMM。
S302,将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
为了可以成功访问外部设备,虚拟CPU线程需要对接收到的I/O请求进行处理,通常情况下,虚拟CPU线程转入Host上下文后,完成该I/O请求的处理后再转回到Guest上下文继续执行,但是为了节省I/O请求处理时间,减少虚拟CPU线程处于阻塞状态的时间,提高虚拟CPU的处理效率,在本说明书一示例性实施例中,虚拟CPU线程将接收到的I/O请求下发给其他线程进行处理,并在下发完成后直接返回Guest上下文,无需等待该I/O请求处理完成。上述方法可以有效降低虚拟CPU线程访问外部设备的延时,从而提高虚拟CPU线程的执行效率,进而提高该虚拟CPU的处理性能。
在本说明书一示例性实施例中,上述I/O请求可以包括PIO(Port IN/OUT,I/O端口)请求和/或MMIO(Memory Mapping I/O,存储映射I/O)请求。其中PIO请求通过IN/OUT指令访问设备的I/O端口地址空间,其中,IN指令为读请求,OUT指令为写请求。MMIO请求占用主机CPU的物理地址空间,通过访问内存一样的方式访问设备的I/O地址空间,可以使用主机CPU访问内存的指令进行访问。
在本说明书一示例性实施例中,将I/O请求下发至主机上运行的其他线程进行处理,其中,其他线程可以是处于主机上的虚拟I/O线程池中的虚拟I/O线程。主机上预先创建一个专门用于对虚拟机中虚拟CPU线程的I/O请求进行处理的虚拟I/O线程池,在该虚拟I/O线程池中,可以包含至少一个用于对虚拟CPU线程的I/O请求进行协助处理的虚拟I/O线程。该虚拟I/O线程池可以同时处理虚拟机中的各个虚拟CPU线程下发的I/O请求。
例如,在本说明书一示例性实施例中,假设一虚拟I/O线程池中有三个用于协助虚拟CPU线程处理I/O请求的虚拟I/O线程,分别为虚拟I/O线程1、虚拟I/O线程2和虚拟I/O线程3。如图2所示的虚拟CPU线程1接收到I/O请求1后,转入Host上下文,并将该I/O请求1下发至虚拟I/O线程池中的虚拟I/O线程1进行处理,虚拟CPU线程1直接返回Guest上下文。同时,主机CPU上的虚拟CPU线程2也接收到了I/O请求2,则虚拟CPU线程2转入Host上下文,并将所述I/O请求2下发至虚拟I/O线程池中的虚拟I/O线程2,虚拟I/O线程池中的虚拟I/O线程2进行处理。在本说明书一示例性实施例中,当任一虚拟CPU线程将I/O请求下发至虚拟I/O线程池后,该虚拟I/O线程池中没有未被占用的虚拟I/O线程,则需要等待虚拟I/O线程池中有虚拟I/O线程处理完成后,再由空闲的虚拟I/O线程处理该I/O请求。而虚拟CPU线程无需等待虚拟I/O线程池为其下发的I/O请求分配空闲的虚拟I/O线程进行处理,而是直接返回Guest上下文继续执行任务,可以最大程度地减少虚拟CPU线程的阻塞时间。
在本说明书一示例性实施例中,由于I/O请求既包括读请求又包括写请求,因此,可以根据读请求与写请求的区别,区分对读请求与写请求的处理方法。由于写请求只是将数据写入对应的I/O地址,因此,写请求无需在意对应地址是否存在其他未完成的请求,只需写入数据即可,可以将写请求直接交由其他线程进行处理。而对于读请求,由于涉及到数据的反馈,需要将读到的结果反馈给客户机,因此,在处理读请求时需要额外注意读取到的数据的准确性。为了保证反馈结果不存在错误与延迟,在接收到的I/O请求为读请求的情况下,若确定主机上运行的其他线程上不存在虚拟机下发且尚未处理完成的写请求,则将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。即需要确定写请求都被完成,读取到的数据为最新的、写入完成的数据。
当然,由于确定主机上运行的其他线程上不存在虚拟机下发且尚未处理完成的写请求可能存在一定的困难,且由其他线程完成的读请求在反馈读取结果时候也存在一定的困难,因此,在本说明书一示例性实施例中,虚拟CPU线程也可以自行处理读请求,并在处理完成后再返回Guest上下文。具体地,虚拟CPU线程可以按照如下的步骤完成对于读请求的处理。首先,由虚拟CPU线程解析接收到的读请求的地址;然后,判断所述地址上是否存在未完成的写请求,若所述地址存在未完成写请求,则等待所述未完成写请求完成后处理所述读请求。上述对读请求的处理方法,同样是为了保证读取到的数据的准确性,而且,相比直接确定主机上运行的其他线程上是否存在虚拟机下发且尚未处理完成的写请求,确定某个具体地址上是否存在未完成的写请求更加简单。通过将写请求下发至其他线程并进行处理,而由虚拟CPU线程自行完成对读请求的处理,节省了完成写请求的时间,同样可以减少虚拟CPU线程的阻塞时间,提高虚拟CPU线程的执行效率。
为了更清楚地描述本说明书提供的一种I/O请求的处理方法,本说明书提供如下的具体实施例。
如图4所示为一I/O请求具体处理方法的流程示意图。该方法可以应用于如图2中的虚拟CPU线程1、虚拟CPU线程2或者虚拟CPU线程3中。其中,各虚拟CPU线程运行于虚拟机2111上,虚拟CPU线程1、虚拟CPU线程2和虚拟CPU线程3具体由KVM实现并执行调度与切换。且,图2所示的主机上还设有一虚拟I/O线程池,该虚拟I/O线程池,如图4中的虚拟I/O线程池420所示,该虚拟I/O线程池中包含由主机上预先创建且用于对虚拟机进行协助处理的数个虚拟I/O线程,假设虚拟I/O线程池中的虚拟I/O线程的个数具体为三个,分别为虚拟I/O线程1、虚拟I/O线程2和虚拟I/O线程3。当然,在具有空闲资源的情况下,虚拟I/O线程池可以创建更多的虚拟I/O线程用于协助虚拟CPU线程进行写请求的模拟I/O处理,在本说明书中不做具体限制。
假设如图2所示的虚拟机2111中的虚拟CPU线程1接收到了I/O请求1,则虚拟CPU线程可以完成如下的步骤:
S401,当虚拟CPU线程1接收到I/O请求1时,由guest上下文转入Host上下文,即由执行虚拟机的代码转变为开始执行主机的代码。该过程也可以描述为虚拟CPU退出到KVM中,并转入步骤S402。
S402,判断该接收到的I/O请求是读请求还是写请求。由于读请求与写请求的性质上有区别,所以需要对读请求和写请求进行区别处理。假设,该I/O请求1为写请求。则转入S403。
S403,由虚拟CPU线程判断该I/O请求为写请求,根据写请求无需返回访问结果的特性,直接转入步骤S404。
S404,将写请求下发至虚拟线程池420中的虚拟I/O线程1进行处理。当该写请求即I/O请求1被下发至虚拟I/O线程1中后,转入步骤S410。
S410,虚拟CPU线程1直接返回Guest上下文,继续执行被暂停执行的虚拟机代码。而与此同时,I/O请求1由虚拟I/O线程池中的虚拟I/O线程1进行模拟I/O写请求的处理。相当于,虚拟I/O线程1承担了原本需要由虚拟CPU线程1承担的模拟写请求的任务,将串行处理转变为并行处理,省去了虚拟CPU线程对写请求进行处理的时间,提高了虚拟CPU线程的执行效率。
假设在上述虚拟CPU线程1返回Guest上下文继续执行后,又接收到了I/O请求2。该I/O请求2为读请求。此时假设I/O请求1与I/O请求2针对的地址为相同地址,且虚拟I/O线程池中的虚拟I/O线程1并未完成对I/O请求1的写入,即在该相同的地址上,还存在未完成的写请求。在此种情况下,再次完成如图4所示的各个步骤:
S401,虚拟CPU线程1在接收到I/O请求2后,再次暂停对虚拟机代码的执行,由Guest上下文再次转入Host上下文,并转入步骤S402。
S402,判断该I/O请求2为读请求,此时,由于该I/O请求2为读请求,则转入步骤S405,由步骤S405转入步骤S406。
S406,解析该读请求指向的地址,然后转入步骤S407。
S407,判断该地址上是否存在未完成的写请求。由于该地址上还存在未处理完成的写请求——I/O请求1。因此,转入步骤S408。
S408,等待I/O请求1完成,在I/O请求1完成后再转入步骤S409。在等待的过程中,虚拟CPU线程1可以进入等待、睡眠或者调度模式,在上述模式下等待位于该地址的写请求处理完毕,并转入步骤S409。
S409,处理读请求——I/O请求2,完成对该I/O请求2的模拟,并最终转入步骤S410。
S410,返回Guest上下文。
假设此时,虚拟CPU线程2也接收到了I/O请求3,该I/O请求3为写请求,但是该I/O请求3指向的地址与I/O请求1和I/O请求2均不相同,虚拟I/O线程池中的虚拟I/O线程1并未完成对I/O请求1的写入。在此种情况下,由虚拟CPU线程2完成如图4所示的步骤:
S401,在接收到I/O请求3后,暂停对虚拟机代码的执行,由Guest上下文转入Host上下文,并转入步骤S402。
S402,判断该I/O请求3为写请求还是写请求,由于I/O请求3为写请求,则转入步骤S403,由步骤S403转入步骤S404。
S404,将该I/O请求3下发至虚拟I/O线程池420中的其他线程进行处理,并直接转入步骤S410。但是由于虚拟I/O线程池420中的虚拟I/O线程1正在被I/O请求1占用,因此,可以将该I/O请求3下发至虚拟I/O线程池420中的其他虚拟I/O线程进行处理,例如将I/O请求3下发至虚拟I/O线程池中的虚拟I/O线程2,由虚拟I/O线程2对I/O请求3进行模拟I/O请求处理。
S410,返回Guest上下文。
同时,假设虚拟CPU线程3接收到了I/O请求4,该I/O请求为读请求,但是该I/O请求指向的地址与I/O请求1、I/O请求2和I/O请求3均不相同,且在该地址上并无任何写请求正在被处理。
此时,由虚拟CPU线程3完成图4所示的步骤:
S401,在接收到I/O请求4后,暂停对虚拟机代码的执行,由Guest上下文转入Host上下文,并转入步骤S402。
S402,判断该I/O请求4为读请求,转入步骤S405,由步骤S405转入步骤S406。
S406,解析该读请求指向的地址,并转入步骤S407。
S407,并判断该地址上是否存在未完成的写请求。由于该地址上并不存在未处理完成的写请求,因此,转入步骤S409。
S409,直接完成I/O请求后转入步骤S410。
S410,返回Guest上下文。
上述具体实施例根据I/O请求的类型不同,以及接收I/O请求时虚拟CPU线程的状态不同,分别列举了不同的示例性实施例进行了详细的解释,通过上述实施例可知,本说明书提供的I/O请求处理方法,可以减少虚拟CPU线程被阻塞的时间,提高虚拟CPU线程的执行效率。
图5是本说明书一示例性实施例的一种电子设备的结构示意图。请参考图5,在硬件层面,该设备包括处理器502、内部总线504、网络接口506、内存508及非易失性存储器510。当然还可能包括其他功能所需要的硬件。处理器502从非易失性存储器510中读取对应的计算机程序到内存508中然后运行,在逻辑层面上形成一种I/O请求的处理装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
相应于上述方法的实施例,本说明书还提供一种I/O请求的处理装置。
请参考图6,一种I/O请求的处理装置,应用于主机CPU上运行的虚拟CPU线程,所述虚拟CPU线程被分配至所述主机上部署的虚拟机,该装置可以装置包括:
接收单元610,用于在接收到I/O请求的情况下,由Guest上下文转入Host上下文;
下发单元620,用于将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
可选地,所述下发单元620可以具体用于:
从所述主机上的虚拟I/O线程池中选取所述其他线程,并将所述I/O请求下发至选取的所述其他线程;
其中,所述虚拟I/O线程池包含所述主机上预先创建且用于对所述虚拟机的I/O请求进行协助处理的至少一个线程。
可选地,所述下发单元620可以具体用于:
在所述I/O请求为写请求的情况下,将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
可选地,所述下发单元620可以具体用于:
在所述I/O请求为读请求的情况下,若确定所述主机上运行的其他线程上不存在所述虚拟机下发且尚未处理完成的写请求,则将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
可选地,所述I/O请求的处理装置还可以包括:
处理单元630,用于在所述I/O请求为读请求的情况下,处理所述读请求并在处理完成后返回Guest上下文。
可选地,所述处理单元630可以具体用于:
解析所述读请求的地址;
判断所述地址上是否存在未完成的写请求;
若所述地址存在未完成写请求,则等待所述未完成写请求完成后处理所述读请求。
可选地,所述I/O请求包括:PIO请求和/或MMIO请求。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
在本说明书一个或多个实施例中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (10)
1.一种I/O请求的处理方法,其特征在于,应用于主机CPU上运行的虚拟CPU线程,所述虚拟CPU线程被分配至所述主机上部署的虚拟机,所述方法包括:
在接收到I/O请求的情况下,由Guest上下文转入Host上下文;
将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
2.如权利要求1所述的方法,其特征在于,所述将所述I/O请求下发至所述主机上运行的其他线程进行处理,包括:
从所述主机上的虚拟I/O线程池中选取所述其他线程,并将所述I/O请求下发至选取的所述其他线程;
其中,所述虚拟I/O线程池包含所述主机上预先创建且用于对所述虚拟机的I/O请求进行协助处理的至少一个线程。
3.如权利要求1所述的方法,其特征在于,所述将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文,包括:
在所述I/O请求为写请求的情况下,将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
4.如权利要求1所述的方法,其特征在于,所述将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文,包括:
在所述I/O请求为读请求的情况下,若确定所述主机上运行的其他线程上不存在所述虚拟机下发且尚未处理完成的写请求,则将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
5.如权利要求1所述的方法,其特征在于,还包括:
在所述I/O请求为读请求的情况下,处理所述读请求并在处理完成后返回Guest上下文。
6.如权利要求5所述的方法,其特征在于,所述处理所述读请求并在处理完成后返回Guest上下文,包括:
解析所述读请求的地址;
判断所述地址上是否存在未完成的写请求;
若所述地址存在未完成写请求,则等待所述未完成写请求完成后处理所述读请求。
7.如权利要求1所述的方法,其特征在于,所述I/O请求包括:PIO请求和/或MMIO请求。
8.一种I/O请求的处理装置,其特征在于,应用于主机CPU上运行的虚拟CPU线程,所述虚拟CPU线程被分配至所述主机上部署的虚拟机,所述装置包括:
接收单元,用于在接收到I/O请求的情况下,由Guest上下文转入Host上下文;
下发单元,用于将所述I/O请求下发至所述主机上运行的其他线程进行处理,并在下发完成后返回Guest上下文。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现权利要求1-7中任意一项所述方法的步骤。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7中任意一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210376965.5A CN114741194A (zh) | 2022-04-11 | 2022-04-11 | I/o请求的处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210376965.5A CN114741194A (zh) | 2022-04-11 | 2022-04-11 | I/o请求的处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114741194A true CN114741194A (zh) | 2022-07-12 |
Family
ID=82281402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210376965.5A Pending CN114741194A (zh) | 2022-04-11 | 2022-04-11 | I/o请求的处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114741194A (zh) |
-
2022
- 2022-04-11 CN CN202210376965.5A patent/CN114741194A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5042848B2 (ja) | 仮想マシン・モニタの構成部分を特権化解除するためのシステム及び方法 | |
KR100885346B1 (ko) | 액티비티 정보를 이용한 가상 머신 관리 | |
Suzuki et al. | {GPUvm}: Why Not Virtualizing {GPUs} at the Hypervisor? | |
JP4769484B2 (ja) | 仮想計算機をマイグレーションするための方法およびシステム | |
US8166288B2 (en) | Managing requests of operating systems executing in virtual machines | |
US20170031699A1 (en) | Multiprocessing Within a Storage Array System Executing Controller Firmware Designed for a Uniprocessor Environment | |
JP6029550B2 (ja) | 計算機の制御方法及び計算機 | |
US8065441B2 (en) | Method and apparatus for supporting universal serial bus devices in a virtualized environment | |
JP2013516021A (ja) | プロセッサコアのハイパーバイザ離隔 | |
CN105830026A (zh) | 用于调度来自虚拟机的图形处理单元工作负荷的装置和方法 | |
JP2009506462A (ja) | 多層仮想化メカニズムを用いた階層的な仮想化 | |
JP2011100431A (ja) | 仮想マシン制御装置及び仮想マシン制御方法 | |
US20150020070A1 (en) | Accelerated data operations in virtual environments | |
US20110219373A1 (en) | Virtual machine management apparatus and virtualization method for virtualization-supporting terminal platform | |
US10346065B2 (en) | Method for performing hot-swap of a storage device in a virtualization environment | |
US11188365B2 (en) | Memory overcommit by speculative fault | |
US9699093B2 (en) | Migration of virtual machine based on proximity to peripheral device in NUMA environment | |
CN102428471A (zh) | 从系统管理模式确定信任级别的系统和方法 | |
US20150186180A1 (en) | Systems and methods for affinity dispatching based on network input/output requests | |
CN114741194A (zh) | I/o请求的处理方法及装置 | |
US11003488B2 (en) | Memory-fabric-based processor context switching system | |
US10795813B2 (en) | Implementing per-processor memory areas with non-preemptible operations using virtual aliases | |
US20230004417A1 (en) | Method and apparatus to select assignable device interfaces for virtual device composition | |
US10922149B2 (en) | System comprising a plurality of virtualization systems | |
CN116339757A (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 |