CN108845863B - 用于虚拟机与宿主机的通信方法、装置和系统 - Google Patents

用于虚拟机与宿主机的通信方法、装置和系统 Download PDF

Info

Publication number
CN108845863B
CN108845863B CN201810600242.2A CN201810600242A CN108845863B CN 108845863 B CN108845863 B CN 108845863B CN 201810600242 A CN201810600242 A CN 201810600242A CN 108845863 B CN108845863 B CN 108845863B
Authority
CN
China
Prior art keywords
command
queue
executed
identification
virtual machine
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.)
Active
Application number
CN201810600242.2A
Other languages
English (en)
Other versions
CN108845863A (zh
Inventor
倪勋
谢永吉
张宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
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 Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201810600242.2A priority Critical patent/CN108845863B/zh
Publication of CN108845863A publication Critical patent/CN108845863A/zh
Priority to US16/351,272 priority patent/US10846124B2/en
Application granted granted Critical
Publication of CN108845863B publication Critical patent/CN108845863B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请实施例公开了用于虚拟机与宿主机的通信方法、装置和系统。用于虚拟机与宿主机的通信方法一实施例包括:轮询设置在共享内存中的第一命令完成标识队列;响应于检测到第一命令完成标识队列存在更新,将第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;以及基于当前已完成命令的标识,更新第二命令完成标识队列。该实施方式有利于降低系统访问延迟。

Description

用于虚拟机与宿主机的通信方法、装置和系统
技术领域
本申请实施例涉及计算机技术领域,具体涉及虚拟机与宿主机通信的技术领域,尤其涉及用于虚拟机与宿主机的通信方法、装置和系统。
背景技术
虚拟机(Virtual Machine),是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
Virtio是一种处理虚拟机中的程序和宿主机程序进行通讯的协议。具体地,首先,虚拟机中的前端程序接受命令并把相应的命令放入virtio中的vring。接着,通过eventfd机制通知后端程序进行处理。其中,eventfd机制是一种可以让内核和用户态程序通信的机制。后端程序通过vring收到前端程序发送的命令,然后发送到对应的硬件完成处理。在完成的时候通过eventfd将结果返回给前端程序。
在利用Virtio进行虚拟机上的前端程序与宿主机上的后端程序之间的通信时,需要进行vmentry/vmexit的动作。在这里,vmentry指从宿主机进入虚拟机,vmexit是指从虚拟机退出到宿主机。
发明内容
本申请实施例提出了用于虚拟机与宿主机的通信方法、装置和系统。
第一方面,本申请实施例提供了一种用于虚拟机与宿主机的通信方法,包括:轮询设置在共享内存中的第一命令完成标识队列;响应于检测到第一命令完成标识队列存在更新,将第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;以及基于当前已完成命令的标识,更新第二命令完成标识队列。
在一些实施例中,方法还包括:向待执行命令队列发送输入输出端口读写请求,并更新与待执行命令队列相对应的待执行命令标识队列,以使轮询待执行命令标识队列的宿主机获取当前待执行命令,并在当前待执行命令执行完毕后,更新第一命令完成标识队列。
在一些实施例中,方法还包括:基于当前已完成命令的标识,从命令队列中获取当前已完成命令所对应的返回数据;以及调用函数对返回数据进行处理。
第二方面,本申请实施例还提供了一种用于虚拟机与宿主机的通信系统,包括:包括宿主机以及部署在宿主机上的至少一个虚拟机,其中:对于其中至少一个虚拟机,该虚拟机被配置成:轮询设置在共享内存中的第一命令完成标识队列;响应于检测到第一命令完成标识队列存在更新,将第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;以及基于当前已完成命令的标识,更新第二命令完成标识队列。
在一些实施例中,其中至少一个虚拟机还被配置成:向待执行命令队列发送输入输出端口读写请求,并更新与待执行命令队列相对应的待执行命令标识队列。
在一些实施例中,宿主机被配置成:轮询共享内存中的待执行命令标识队列;响应于检测到待执行命令标识队列存在更新,从待执行命令队列中确定出输入输出端口读写请求作为当前待执行命令;将当前待执行命令发送至硬件设备以使硬件设备执行当前待执行命令;响应于接收到硬件设备返回的命令执行完成消息,向命令完成队列添加当前待执行命令的返回数据,并更新第一命令完成标识。
在一些实施例中,其中至少一个虚拟机,还被配置成:基于当前已完成命令的标识,从命令队列中获取当前已完成命令所对应的返回数据;以及调用函数对返回数据进行处理。
第三方面,本申请实施例还提供了一种用于虚拟机与宿主机的通信装置,包括:轮询单元,被配置成轮询设置在共享内存中的第一命令完成标识队列;确定单元,被配置成响应于检测到第一命令完成标识队列存在更新,将第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;以及更新单元,被配置成基于当前已完成命令的标识,更新第二命令完成标识队列。
在一些实施例中,装置还包括:发送单元,被配置成向待执行命令队列发送输入输出端口读写请求,并更新与待执行命令队列相对应的待执行命令标识队列,以使轮询待执行命令标识队列的宿主机获取当前待执行命令,并在当前待执行命令执行完毕后,更新第一命令完成标识队列。
在一些实施例中,装置还包括:获取单元,被配置成基于当前已完成命令的标识,从命令队列中获取当前已完成命令所对应的返回数据;以及调用单元,被配置成调用函数对返回数据进行处理。
第四方面,本申请实施例还提供了一种服务器,其上设置有至少一个虚拟机,所述服务器还包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如第一方面任一的方法。
第五方面,本申请实施例还提供一种计算机可读存储介质,其上存储有计算机程序,其中,程序被处理器执行时实现如第一方面任一的方法。
本申请实施例提供的用于虚拟机与宿主机的通信方法、系统和装置,首先,轮询设置在共享内存中的第一命令完成标识队列,接着,响应于检测到第一命令完成标识队列存在更新,将第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;最后,基于当前已完成命令的标识,更新第二命令完成标识队列。这样一来,通过主动轮询的方式来判断是否有新的已完成任务,避免了通过vmentry指令来从宿主机进入虚拟机时,需要对虚拟环境进行初始化所导致的系统访问延迟。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请可以应用于其中的示例性系统架构图;
图2是根据本申请的用于虚拟机与宿主机的通信方法的一个实施例的流程图;
图3是根据本申请的用于虚拟机与宿主机的通信方法的一个应用场景的示意图;
图4是根据本申请的用于虚拟机与宿主机的通信方法的另一个实施例的流程图;
图5是根据本申请的虚拟机与宿主机的通信系统的一个实施例的结构图;
图6是根据本申请的用于虚拟机与宿主机的通信装置的一个实施例的结构图;
图7是适于用来实现本申请实施例的虚拟机与宿主机的通信方法的服务器的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的用于虚拟机与宿主机的通信方法或用于虚拟机与宿主机的通信装置的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括虚拟机(guest kernel)101、虚拟机部署其上的宿主机内核(host kernel)102、SPDK(Storage Performance Development Kit,存储性能优化工具包)103和宿主机硬件104。宿主机内核102中还设置有用于行在宿主机内核102和虚拟机101中间软件层hypervisor 105。hypervisor 105可允许多个虚拟机101和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统。本申请中,hypervisior 105例如可以是KVM(Kernel Based Virtual Machine)。
当虚拟机101产生IO(input output,输入输出)读写请求时,虚拟机101可以与SPDK 103交互,从而向SPDK 103发送IO读写命令。SPDK 103接收到IO读写命令之后,可以通过运行在用户控件中的IO技术来将IO读写命令发送至宿主机硬件104,以执行IO命令,并将IO命令的执行结果向虚拟机101反馈。
需要说明的是,本申请实施例所提供的用于虚拟机与宿主机的通信方法一般由虚拟机101执行。相应地,用于虚拟机与宿主机的通信装置也可以设置于虚拟机101中。
应该理解,图1中的虚拟机101的数目仅仅是示意性的。根据实现需要,同一个宿主内核102上可以部署任意数目的虚拟机101。
继续参考图2,示出了根据本申请的用于虚拟机与宿主机的通信方法的一个实施例的流程200。该用于虚拟机与宿主机的通信方法,包括以下步骤:
步骤201,轮询设置在共享内存中的第一命令完成标识队列。
本实施例的用于虚拟机与宿主机的通信方法的执行主体(例如,图1所示的虚拟机101)可以轮询由虚拟机和SPDK共享的共享内存。
在这里,轮询可以理解为定时发出询问。例如,虚拟机可以每间隔一段时间,向共享内存发出询问,来获取设置的共享内存中的第一命令完成标识队列。可以理解的是,虚拟机相邻两次发出询问的时刻之间的时间间隔可以是预先设置,或者,也可以是根据虚拟机当前所处的状态由虚拟机自主设置和/或调节的。
第一命令完成标识队列中,存储有已由宿主机硬件执行完成的IO命令的标识。在一些应用场景中,每当确定有新的由宿主机硬件执行完成的IO命令时,SPDK可以将该IO命令的标识写入第一命令完成标识队列中。例如,每当SPDK接收到宿主机硬件反馈的IO命令执行结果时,可以确定该IO命令自行完成。此时,SPDK可以更新共享内存中存储的第一命令完成标识队列。
这样一来,虚拟机通过轮询该第一命令完成标识队列,便可以每隔一段时间获取到当前的第一命令完成标识队列。
步骤202,响应于检测到第一命令完成标识队列存在更新,将第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识。
本实施例中,虚拟机侧也可以同时维护一命令完成标识队列(即,第二命令完成标识队列)。这样一来,通过比较第一命令完成标识队列和第二命令完成标识队列,便可以确定出二者的差别。
在一些应用场景中,可以在初始化时使得初始的第一命令完成标识队列和初始的第二命令完成标识队列完全一致。例如,初始的第一命令完成标识队列和初始的第二命令完成标识队列具有相等的长度并且其中存储的内容相同(例如,都为空)。
在这些应用场景中,可以分别为第一命令完成标识队列和第二命令完成标识队列设置一标识(flag)以指示二者的队尾所在位置。可以理解的是,若初始化之后,二者均为空,则此时,flag指向队首,即:flag=0。
可以理解的是,当第一个IO命令完成时,第一命令完成标识队列的flag将更新为flag=1,而此时第二命令完成标识队列的flag仍指向队首,即flag=0。此时,由于两个队列的flag值不同,虚拟机可以确定第一命令完成标识队列存在更新。此时,可以通过两个flag值之差,来比对第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列,从而确定出第一命令完标识成队列中当前已完成命令的标识。
具体地,虚拟机通过比较第一命令完成标识队列的flag和存储在本地的第二命令完成标识队列的flag,可以确定两个flag的差为1,也即,通过本次轮询,可确定存在一个当前已完成命令。
进一步地,由于第二命令完成标识队列的flag=0,且第一命令完成标识队列的flag和第二命令完成标识队列的flag之差为1,可以确定,当前已完成命令标识位于第一命令完成标识队列中的第二个存储位置。
步骤203,基于当前已完成命令的标识,更新第二命令完成标识队列。
通过以上的步骤202,虚拟机可以确定出第一命令完成标识队列中,对应于当前已完成命令的标识在该队列中所处的位置。那么,在步骤203中,例如可以将当前已完成命令的标识复制并存入第二命令完成标识队列的队首,从而完成第一命令完成标识队列和第二命令完成标识队列的同步。
本实施例提供的用于虚拟机与宿主机的通信方法,通过轮询设置在共享内存中的第一命令完成标识队列,接着,响应于检测到第一命令完成标识队列存在更新,将第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;最后,基于当前已完成命令的标识,更新第二命令完成标识队列。这样一来,通过主动轮询的方式来判断是否有新的已完成任务,避免了通过vmentry指令来从宿主机进入虚拟机时,需要对虚拟环境进行初始化所导致的系统访问延迟。
参见图3所示,为本申请的用于虚拟机与宿主机的通信方法的另一个实施例的示意性流程图。
本实施例的用于虚拟机与宿主机的通信方法,包括:
步骤301,向待执行命令队列发送输入输出端口读写请求,并更新与待执行命令队列相对应的待执行命令标识队列,以使轮询待执行命令标识队列的宿主机获取当前待执行命令,并在当前待执行命令执行完毕后,更新第一命令完成标识队列。
本实施例中,用于虚拟机与宿主机的通信方法的执行主体(例如,图1所示的虚拟机101)可以在需要对IO端口进行访问时,向待执行命令队列发送输入输出端口读写请求,并更新与待执行命令队列相对应的待执行命令标识队列。
这样一来,轮询待执行命令标识队列的SPDK便可以主动获知是否有新的待执行命令到来。若通过轮询发现有新的待执行命令到来,SPDK可以将该待执行命令向宿主机的硬件发送。若该待执行命令执行完毕,SPDK便可以更新第一命令完成标识队列。
步骤302,轮询设置在共享内存中的第一命令完成标识队列。
步骤303,响应于检测到第一命令完成标识队列存在更新,将第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识。
步骤304,基于当前已完成命令的标识,更新第二命令完成标识队列。
本实施例的上述步骤302~步骤304可以采用与图2所示实施例中的步骤201~步骤203类似的方式执行,在此不再赘述。
本实施例的用于虚拟机与宿主机的通信方法,与图2所示的方法相比,在向待执行命令队列发送输入输出端口读写请求时,通过更新与待执行命令队列相对应的待执行命令标识队列,从而使得轮询待执行命令标识队列的SPDK可以主动获知新的当前待执行命令并发送至宿主机硬件执行,可以避免自虚拟机至宿主机时,通过vmexit指令保护现场,进而进一步降低了系统访问延迟。
此外,在本申请各实施例的用于虚拟机与宿主机的通信方法的一些可选的实现方式中,在确定出当前已完成命令的标识之后,虚拟机还可以基于当前已完成命令的标识,从命令队列中获取当前已完成命令所对应的返回数据。这样一来,便可以调用相应的函数对该返回数据进行处理,从而得到期望获得的处理结果。
此外在本申请上述实施例的用于虚拟机与宿主机的通信方法的一些可选的实现方式中,第一命令完成标识队列、第二命令完成标识队列、待执行命令队列以及待执行命令标识队列等均可以是环形队列。通过将上述队列设置为环形队列,可以避免队列的“假溢出”现象。
参见图4所示,为本实施例的用于虚拟机与宿主机的通信方法的一个应用场景的示意图。
在本应用场景中,首先,虚拟机401产生IO读写请求,并通过virtio协议将该IO命令发送至virtqueue队列402中,同时更新该virtqueue队列402的待执行命令标识队列403。
接着,SPDK中轮询待执行命令标识队列403的程序SPDK poller404通过轮询待执行命令标识队列403并与保存在SPDK本地的待执行命令标识队列相比较,发现有新的待执行命令,便通知SPDK 405从virtqueue队列402中获取该待执行命令,并发送至宿主机硬件执行。
接着,若命令执行完成,SPDK 405更新virtqueue队列402以及第一命令完标识成队列406。
同时,虚拟机端的轮询程序virtio poller 407通过轮询第一命令完标识成队列406并与保存在虚拟机本地的第二命令完标识成队列相比较,发现有新的已完成命令,便通知虚拟机从virtqueue队列402中获取当前已完成命令所对应的返回数据,并调用函数对该返回数据进行处理。
通过以上流程可以看出,通过设置在SPDK端的轮询程序SPDK plloer 404以及设置在虚拟机端的轮询程序virtio poller 407,可以分别避免在从虚拟机进入宿主机时所执行的vmexit指令和vmentry指令,从而提升IO性能、降低系统延迟。
参见图5所示,其示出了本申请一个实施例的虚拟机与宿主机的通信系统。
图5所示的虚拟机与宿主机的通信系统,包括宿主机501以及部署在宿主机501上的至少一个虚拟机502。
对于该通信系统中的其中至少一个虚拟机,该虚拟机可以被配置成:轮询设置在共享内存中的第一命令完成标识队列;响应于检测到第一命令完成标识队列存在更新,将第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;以及基于当前已完成命令的标识,更新第二命令完成标识队列。
这样一来,通过主动轮询的方式来判断是否有新的已完成任务,避免了通过vmentry指令来从宿主机进入虚拟机时,需要对虚拟环境进行初始化所导致的系统访问延迟。
在本实施例的一些可选的实现方式中,其中至少一个虚拟机还可以被配置成:向待执行命令队列发送输入输出端口读写请求,并更新与待执行命令队列相对应的待执行命令标识队列。
在本实施例的一些可选的实现方式中,宿主机还可以被配置成:轮询共享内存中的待执行命令标识队列;响应于检测到待执行命令标识队列存在更新,从待执行命令队列中确定出输入输出端口读写请求作为当前待执行命令;将当前待执行命令发送至硬件设备以使硬件设备执行当前待执行命令;响应于接收到硬件设备返回的命令执行完成消息,向命令完成队列添加当前待执行命令的返回数据,并更新第一命令完成标识。
在这些可选的实现方式中,宿主机可以通过SPDK来主动轮询共享内存中的待执行命令标识队列。若待执行命令标识队列存在更新,则SPDK可以从待执行命令队列中确定出虚拟机发出的输入输出端口读写请求作为当前待执行命令,并将当前待执行命令发送至宿主机硬件执行。这样一来,轮询待执行命令标识队列的SPDK可以主动获知新的当前待执行命令并发送至宿主机硬件执行,从而避免了自虚拟机至宿主机时,通过vmexit指令保护现场,进而进一步降低了系统访问延迟。
在本实施例的一些可选的实现方式中,其中至少一个虚拟机,还被配置成:基于当前已完成命令的标识,从命令队列中获取当前已完成命令所对应的返回数据;以及调用函数对返回数据进行处理。
可以理解的是,本实施例的虚拟机与宿主机的通信系统中,第一命令完成标识队列、第二命令完成标识队列、待执行命令队列以及待执行命令标识队列等均可以是环形队列。通过将上述队列设置为环形队列,可以避免队列的“假溢出”现象。
进一步参考图6,作为对上述各图所示方法的实现,本申请提供了一种用于虚拟机与宿主机的通信装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图6所示,本实施例的用于虚拟机与宿主机的通信装置可以包括轮询单元601、确定单元602和更新单元603。
轮询单元601可被配置成轮询设置在共享内存中的第一命令完成标识队列。
确定单元602可被配置成响应于检测到所述第一命令完成标识队列存在更新,将所述第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识。
更新单元603可被配置成基于当前已完成命令的标识,更新所述第二命令完成标识队列。
在一些可选的实现方式中,本实施例的用于虚拟机与宿主机的通信装置还可以包括发送单元(图中未示出)。
在这些可选的实现方式中,发送单元可被配置成向待执行命令队列发送输入输出端口读写请求,并更新与所述待执行命令队列相对应的待执行命令标识队列,以使轮询所述待执行命令标识队列的宿主机获取当前待执行命令,并在所述当前待执行命令执行完毕后,更新所述第一命令完成标识队列。
在一些可选的实现方式中,本实施例的用于虚拟机与宿主机的通信装置还可以包括获取单元(图中未示出)和调用单元(图中未示出)。
在这些可选的实现方式中,获取单元可被配置成基于所述当前已完成命令的标识,从命令队列中获取所述当前已完成命令所对应的返回数据。
调用单元可被配置成调用函数对所述返回数据进行处理。
下面参考图7,其示出了适于用来实现本申请实施例的用于虚拟机与宿主机的通信方法的服务器的计算机系统700的结构示意图。图7示出的服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,计算机系统700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括硬盘等的存储部分706;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分707。通信部分707经由诸如因特网的网络执行通信处理。驱动器708也根据需要连接至I/O接口705。可拆卸介质709,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器708上,以便于从其上读出的计算机程序根据需要被安装入存储部分706。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分707从网络上被下载和安装,和/或从可拆卸介质709被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括轮询单元、确定单元和更新单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,轮询单元还可以被描述为“轮询设置在共享内存中的第一命令完成标识队列的单元”。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的装置中所包含的;也可以是单独存在,而未装配入该装置中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该装置执行时,使得该装置:轮询设置在共享内存中的第一命令完成标识队列;响应于检测到第一命令完成标识队列存在更新,将第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;以及基于当前已完成命令的标识,更新第二命令完成标识队列。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (9)

1.一种用于虚拟机与宿主机的通信方法,包括:
轮询设置在共享内存中的第一命令完成标识队列;所述第一命令完成标识队列中存储有已由宿主机硬件执行完成的输入输出命令的标识;
响应于检测到所述第一命令完成标识队列存在更新,将所述第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;以及
基于当前已完成命令的标识,更新所述第二命令完成标识队列;
所述方法还包括:
向待执行命令队列发送输入输出端口读写请求,并更新与所述待执行命令队列相对应的待执行命令标识队列,以使轮询所述待执行命令标识队列的宿主机获取当前待执行命令,并在所述当前待执行命令执行完毕后,更新所述第一命令完成标识队列。
2.根据权利要求1的方法,其中,所述方法还包括:
基于所述当前已完成命令的标识,从命令队列中获取所述当前已完成命令所对应的返回数据;以及
调用函数对所述返回数据进行处理。
3.一种虚拟机与宿主机的通信系统,包括宿主机以及部署在所述宿主机上的至少一个虚拟机,其中:
对于其中至少一个虚拟机,该虚拟机被配置成:
轮询设置在共享内存中的第一命令完成标识队列;
响应于检测到所述第一命令完成标识队列存在更新,将所述第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;以及
基于当前已完成命令的标识,更新所述第二命令完成标识队列;
所述其中至少一个虚拟机还被配置成:
向待执行命令队列发送输入输出端口读写请求,并更新与所述待执行命令队列相对应的待执行命令标识队列。
4.根据权利要求3所述的系统,其中,所述宿主机被配置成:
轮询所述共享内存中的待执行命令标识队列;所述第一命令完成标识队列中存储有已由宿主机硬件执行完成的输入输出命令的标识;
响应于检测到所述待执行命令标识队列存在更新,从待执行命令队列中确定出所述输入输出端口读写请求作为当前待执行命令;
将所述当前待执行命令发送至硬件设备以使所述硬件设备执行所述当前待执行命令;
响应于接收到所述硬件设备返回的命令执行完成消息,向所述命令完成队列添加所述当前待执行命令的返回数据,并更新所述第一命令完成标识队列。
5.根据权利要求4所述的系统,其中,所述其中至少一个虚拟机,还被配置成:
基于所述当前已完成命令的标识,从命令队列中获取所述当前已完成命令所对应的返回数据;以及
调用函数对所述返回数据进行处理。
6.一种用于虚拟机与宿主机的通信装置,包括:
轮询单元,被配置成轮询设置在共享内存中的第一命令完成标识队列;所述第一命令完成标识队列中存储有已由宿主机硬件执行完成的输入输出命令的标识;
确定单元,被配置成响应于检测到所述第一命令完成标识队列存在更新,将所述第一命令完标识成队列与保存在虚拟机中的第二命令完成标识队列进行比对,以确定出当前已完成命令的标识;以及
更新单元,被配置成基于当前已完成命令的标识,更新所述第二命令完成标识队列;
所述装置还包括:
发送单元,被配置成向待执行命令队列发送输入输出端口读写请求,并更新与所述待执行命令队列相对应的待执行命令标识队列,以使轮询所述待执行命令标识队列的宿主机获取当前待执行命令,并在所述当前待执行命令执行完毕后,更新所述第一命令完成标识队列。
7.根据权利要求6的装置,其中,所述装置还包括:
获取单元,被配置成基于所述当前已完成命令的标识,从命令队列中获取所述当前已完成命令所对应的返回数据;以及
调用单元,被配置成调用函数对所述返回数据进行处理。
8.一种服务器,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-2中任一所述的方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其中,所述程序被处理器执行时实现如权利要求1-2中任一所述的方法。
CN201810600242.2A 2018-06-12 2018-06-12 用于虚拟机与宿主机的通信方法、装置和系统 Active CN108845863B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201810600242.2A CN108845863B (zh) 2018-06-12 2018-06-12 用于虚拟机与宿主机的通信方法、装置和系统
US16/351,272 US10846124B2 (en) 2018-06-12 2019-03-12 Communication method, apparatus and system for virtual machine and host machine

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810600242.2A CN108845863B (zh) 2018-06-12 2018-06-12 用于虚拟机与宿主机的通信方法、装置和系统

Publications (2)

Publication Number Publication Date
CN108845863A CN108845863A (zh) 2018-11-20
CN108845863B true CN108845863B (zh) 2022-08-26

Family

ID=64210739

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810600242.2A Active CN108845863B (zh) 2018-06-12 2018-06-12 用于虚拟机与宿主机的通信方法、装置和系统

Country Status (2)

Country Link
US (1) US10846124B2 (zh)
CN (1) CN108845863B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11055022B2 (en) * 2019-03-25 2021-07-06 Western Digital Technologies, Inc. Storage system and method for early host command fetching in a low queue depth environment
CN110377106B (zh) * 2019-06-21 2021-01-19 湖南麒麟信安科技股份有限公司 一种时统卡虚拟化方法、系统及介质
CN110262875B (zh) * 2019-06-25 2021-04-27 苏州浪潮智能科技有限公司 基于补丁机制的Windows虚拟机与KVM宿主机的通信方法及系统
CN112306918A (zh) * 2019-07-31 2021-02-02 北京百度网讯科技有限公司 数据访问方法、装置、电子设备和计算机存储介质
CN111143032A (zh) * 2019-12-20 2020-05-12 上海交通大学 一种基于请求应答的半虚拟化i/o系统和方法
CN113377277A (zh) * 2020-03-09 2021-09-10 伊姆西Ip控股有限责任公司 管理存储器的方法、设备和计算机程序产品
CN114785714B (zh) * 2022-03-01 2023-08-22 阿里巴巴(中国)有限公司 一种报文传输时延检测方法、存储介质及设备
CN116932234A (zh) * 2022-03-29 2023-10-24 华为技术有限公司 应用程序间通信方法、装置、存储介质及程序产品
CN117573294B (zh) * 2024-01-16 2024-04-09 麒麟软件有限公司 基于virtio的虚拟机CPU stall检测方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130111351A (ko) * 2012-03-29 2013-10-10 후지쯔 가부시끼가이샤 액세스 제어 방법, 서버 장치 및 스토리지 장치
CN105700826A (zh) * 2015-12-31 2016-06-22 华为技术有限公司 虚拟化方法和装置
CN107918555A (zh) * 2017-11-23 2018-04-17 北京百度网讯科技有限公司 基于物理主机的用于处理数据的方法和装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6857057B2 (en) * 2002-10-03 2005-02-15 Hewlett-Packard Development Company, L.P. Virtual storage systems and virtual storage system operational methods
KR100827704B1 (ko) * 2006-11-29 2008-05-07 삼성전자주식회사 포트별 데이터 입출력 단위가 독립적인 경우에도 데이터 호환을 보장하는 멀티패쓰 억세스블 반도체 메모리 장치 및 그에 따른 데이터 호환방법
US9535798B1 (en) * 2014-12-19 2017-01-03 Amazon Technologies, Inc. Systems and methods for maintaining virtual component checkpoints on an offload device
US10515038B2 (en) * 2016-09-26 2019-12-24 Red Hat, Inc. Input/output command rebalancing in a virtualized computer system

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130111351A (ko) * 2012-03-29 2013-10-10 후지쯔 가부시끼가이샤 액세스 제어 방법, 서버 장치 및 스토리지 장치
CN105700826A (zh) * 2015-12-31 2016-06-22 华为技术有限公司 虚拟化方法和装置
CN106201349A (zh) * 2015-12-31 2016-12-07 华为技术有限公司 一种在物理主机中处理读/写请求的方法和装置
CN107918555A (zh) * 2017-11-23 2018-04-17 北京百度网讯科技有限公司 基于物理主机的用于处理数据的方法和装置

Also Published As

Publication number Publication date
US20190377593A1 (en) 2019-12-12
CN108845863A (zh) 2018-11-20
US10846124B2 (en) 2020-11-24

Similar Documents

Publication Publication Date Title
CN108845863B (zh) 用于虚拟机与宿主机的通信方法、装置和系统
CN108984312B (zh) 数据读写的方法和设备
US8544010B2 (en) Providing notification to speculatively waking up target virtual machine for an I/O event using multiple virtual machines and processors
US10564889B2 (en) Method and apparatus for processing data based on physical host
US11853767B2 (en) Inter-core data processing method, system on chip and electronic device
CN111737564B (zh) 一种信息查询方法、装置、设备及介质
US11210127B2 (en) Method and apparatus for processing request
US11038783B2 (en) Method and apparatus for managing network connection, and storage medium
KR20200018234A (ko) 인공지능 칩 및 인공지능 칩에 사용되는 명령 실행 방법
US9606827B2 (en) Sharing memory between guests by adapting a base address register to translate pointers to share a memory region upon requesting for functions of another guest
CN107220375B (zh) 数据读写方法和服务器
JP2021022379A (ja) ハードウェアアクセラレータの自律ジョブキューイングシステム
CN114625480A (zh) 数据处理方法、装置、可读介质以及计算设备
CN111026532B (zh) 用于语音数据的消息队列管理方法
US9612860B2 (en) Sharing memory between guests by adapting a base address register to translate pointers to share a memory region upon requesting for functions of another guest
US10025605B2 (en) Message handler compiling and scheduling in heterogeneous system architectures
US20220261489A1 (en) Capability management method and computer device
CN117132446A (zh) Gpu的数据访问处理方法、装置及存储介质
CN114518833B (zh) 用于存储管理的方法、电子设备和计算机程序产品
CN114595011A (zh) 一种基于Web Worker的前端多进程计算方法和系统
CN108874560B (zh) 进行通信的方法和通信设备
CN113760631A (zh) 页面加载时长确定方法、装置、设备和存储介质
US20170322893A1 (en) Computing node to initiate an interrupt for a write request received over a memory fabric channel
US9959055B2 (en) Placement of a processing unit in unfair lock mode in response to a queue in a fair lock mode
CN114356834A (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
GR01 Patent grant
GR01 Patent grant