首页> 中国专利> 用于在多个虚拟机之间共享网络接口的方法

用于在多个虚拟机之间共享网络接口的方法

摘要

在计算系统中,在多个虚拟机之间共享物理NIC设备可以由用户虚拟机通过以下操作来实现:由在计算系统上的用户虚拟机中运行的用户操作系统(OS)的虚拟网络接口卡(NIC)驱动程序接收用于由物理NIC驱动程序通过耦合到计算系统的网络进行发送的用户OS请求分组,以及将用户OS请求分组的至少一部分复制到计算系统的共享存储器的空闲块中并且将所述块附加至共享存储器中的发送队列。接着,服务虚拟机可以通过以下操作来支持该实现:由在服务虚拟机中运行的服务OS的虚拟NIC驱动程序来从发送队列中提取所述块并且将所述部分封装为服务OS请求分组,将服务OS请求分组传送到服务OS的服务OS网络栈组件,由服务OS网络栈组件的桥驱动程序将服务OS请求分组路由到物理NIC驱动程序,以及由物理NIC驱动程序通过网络发送服务OS请求分组。

著录项

  • 公开/公告号CN102291428A

    专利类型发明专利

  • 公开/公告日2011-12-21

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN201110165550.5

  • 申请日2011-06-20

  • 分类号H04L29/08;H04L12/56;G06F9/455;

  • 代理机构永新专利商标代理有限公司;

  • 代理人刘瑜

  • 地址 美国加利福尼亚

  • 入库时间 2023-12-18 04:08:41

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-06-07

    未缴年费专利权终止 IPC(主分类):H04L29/08 专利号:ZL2011101655505 申请日:20110620 授权公告日:20140709

    专利权的终止

  • 2014-07-09

    授权

    授权

  • 2012-02-08

    实质审查的生效 IPC(主分类):H04L29/08 申请日:20110620

    实质审查的生效

  • 2011-12-21

    公开

    公开

说明书

技术领域

本发明的实施例总体上涉及计算系统,并且更具体地,涉及系统固件 和虚拟化。

背景技术

许多计算系统提供有网络接口卡(NIC)以用于通过网络与其他系统和 设备进行通信。在多个虚拟机上运行多个操作系统(OS)的计算系统中, 每一个OS一般需要与其自己的NIC进行通信。因此,需要在计算系统上 安装多个NIC以支持在虚拟机中运行的多个OS。然而,安装多个NIC可 能是不经济的并且可能是不切实际的。在一些情况下,计算系统没有空余 的外围组件互连(PCI)或PCI Express(PCIE)插槽来安装额外的NIC, 或在特定形状因数的计算系统中没有空间来安装额外的NIC。在其他的情 况中,对于计算系统的整体成本来说,额外NIC的成本可能过于昂贵。

附图说明

根据本发明的以下详细描述,本发明的特征和优点将会变得显而易见, 其中:

图1是根据本发明的实施例的计算系统中的安全孤岛会话的框图;

图2是根据本发明的实施例的计算系统的框图,其示出了多个虚拟机;

图3是根据本发明的实施例的计算系统的框图,其示出了虚拟机的网 络栈;

图4是根据本发明的实施例的网络请求分组的框图;

图5是根据本发明的实施例的虚拟机之间的通信和共享存储器的框图; 以及

图6-9是根据本发明的实施例的网络请求分组处理的流程图。

具体实施方式

本发明的实施例包括用于在计算系统中的多个虚拟机(VM)之间共享 一个物理网络接口卡(NIC)设备的系统和方法。在本发明的实施例中,在 第一VM中运行的被称为服务操作系统(OS)的一个OS控制对物理NIC 的访问,并且为来自被称为用户OS的一个或多个其他OS的通信请求提供 服务。用户OS在另一VM中运行并且经由应用程序与计算机系统的用户进 行交互。该应用程序与用户OS运行在在同一VM中。当用户OS需要通过 物理NIC设备进行通信时,该用户OS将网络请求分组发送到服务OS。服 务OS翻译该网络请求分组并且将该分组转发到物理NIC。因此,服务OS 为用户OS虚拟化了NIC,而不需要计算系统为每一个用户OS都包括一个 物理NIC。

本说明书中对本发明的“一个实施例”或者“实施例”的引用意味着 结合该实施例描述的特定的特征、结构或者特性包括在本发明的至少一个 实施例中。因此,贯穿本说明书的各个位置处出现的短语“在一个实施例 中”并不必然都指代同一实施例。

为了保护物理NIC的虚拟化,在本发明的实施例中,可以在计算系统 的处理器封装中的安全孤岛(Secure Enclave,SE)会话中执行运行着服务 OS的第一VM。图1是根据本发明的实施例的计算系统中的安全孤岛会话 的框图。为了解释的目的,计算系统100的一些部分在图1中以简化形式 示出。处理器封装102包括安全周界(security perimeter)内的一个或多个 处理内核。在一个实施例中,安全周界可以是处理器封装边界(在图1中 示出为粗线)。处理器封装与存储器104和平台控制中心(PCH)106通过 接口进行连接。PCH与一个或多个I/O设备108通过接口进行连接。安全 孤岛能力的实现涉及提供若干处理器指令,其中,所述若干处理器指令创 建安全孤岛、实施隔离并且提供对指令执行和数据访问的保护。处理器封 装外部的数据和代码可以是加密的和经过完整性检查的。处理器封装内部 的数据和代码可以是未经加密的并且受模式和高速缓存保护机制保护的。 在一个实施例中,数据不会从安全孤岛中“泄漏”。处理器封装内的微代码 在孤岛内保存了孤岛状态信息以用于中断、异常、陷阱和虚拟机管理器 (VMM)退出。在Francis X.McKeen等人的名称为“Method and Apparatus to Provide Secure Application Execution”的PCT专利申请(于2009年12月 22日向作为接收局的USPTO递交,PCT/US2009/069212)中描述了安全孤 岛能力,并将上述专利申请通过引用合并于此。

图2是根据本发明的实施例的计算系统的框图,其示出了多个虚拟机。 计算系统包括计算平台200,所述计算平台200包括图1的处理器封装102、 存储器104、PCH 106和I/O设备108,以及没有示出的其他传统组件。所 述I/O设备中的一个可以是NIC。被称为基本输入/输出系统(BIOS)202 的系统固件在系统引导时间启动的计算平台上执行,以识别、测试和初始 化计算平台组件,以及为计算系统的软件组件提供到计算平台硬件的接口。 在支持已知的虚拟化技术的本发明的实施例中,可以在BIOS完成计算平台 的初始化之后立即执行虚拟机管理器(VMM)。VMM支持计算平台上多个 虚拟机的并发执行。VMM为客户机操作系统提供虚拟平台并且监视客户机 操作系统的执行。以该方法,多个操作系统(包括相同操作系统的多个实 例)能够共享硬件资源。与同样允许应用程序共享硬件资源的多任务处理 不同,使用VMM的虚拟机方法将一个操作系统中的故障与共享硬件的其 他操作系统隔离开。VMM为系统中的VM准备执行环境。VMM按照需要 启动一个或多个VM。

在本发明的实施例中,可以并发地启动和执行多个VM,并且可以存在 至少两种类型的VM。一种类型的VM是运行服务OS(SOS)216的服务 VM 214。服务OS一般为在其他VM中运行的其他OS提供服务,并且与 VMM 204进行交互以提供这些服务。第二种类型的VM是在用户VM 206 中运行的用户OS(COS)210(还称为客户机OS)。用户OS支持与计算系 统的用户进行交互的应用程序(图2中未示出)。用户OS依赖于由VMM 204 和服务OS 216提供的服务。在用户VM中运行的应用程序不能直接地与在 服务VM中运行的服务OS进行交互。在本发明的实施例中,可以启动分别 运行有用户OS 1 210到用户OS N-1 212的多个用户VM 1 206到用户VM N-1 208。

图3是根据本发明的实施例的计算系统的框图,其示出了虚拟机的网 络栈。在一个实施例中,为了向由在用户VM 1206中执行的诸如COS 1304 之类的一个用户OS支持的应用程序304提供网络服务,VMM 204(图3 中未示出)创建COS虚拟NIC设备310。对于用户OS来说,该虚拟化的 NIC设备像物理NIC设备一样工作。可以在用户OS 1 304中创建COS虚 拟NIC驱动程序组件308。COS虚拟NIC驱动程序308可以负责对来自上 层COS网络栈306的网络请求进行处理并且用请求结果进行响应。当应用 程序304通过物理NIC设备请求I/O时,可以由COS网络栈306、COS虚 拟NIC驱动程序308以及COS虚拟NIC设备310来处理该请求。可以将由 COS虚拟NIC设备310处理的响应经由COS虚拟NIC驱动程序308和COS 网络栈306转发回该应用程序。

可以创建对应的服务OS(SOS)虚拟NIC设备320,以用于由服务VM 214进行访问。还可以在服务VM 214中运行的服务OS 216内创建对应的 SOS虚拟NIC驱动程序316。耦合到用户VM 206的COS虚拟NIC设备310 发出的请求可以被转发到耦合到服务VM 214的SOS虚拟NIC设备320以 进行处理。可以由SOS虚拟NIC设备320和服务OS中的SOS网络栈314 处理该请求。因为服务OS与物理NIC设备322交互,所以服务OS可以通 过物理NIC驱动程序318和物理NIC设备322来控制该请求的实现。对该 请求的响应可以以相反的方向流动,从物理NIC设备322到物理NIC驱动 程序318,经过SOS网络栈314、SOS虚拟NIC驱动程序316和SOS虚拟 NIC设备320,再返回到服务OS。因此,用户OS 210具有其正在与物理 NIC设备322进行通信的错觉。

当服务OS 216在安全孤岛会话中运行时,可以保护涉及物理NIC设备 322的I/O请求,而不受用户VM中的应用程序或用户OS中运行的其他程 序的恶意处理的影响。在系统初始化时间,或每当将物理NIC设备添加到 计算系统时,可以发起安全孤岛会话来保护对物理NIC设备的访问。

已经由诸如传输控制协议(TCP)、用户数据报协议(UDP)和网际协 议(IP)之类的网络协议层处理了从应用程序304经由COS网络栈306到 达COS虚拟NIC驱动程序308的网络请求分组形式的I/O请求。网络请求 分组包括通过网络进行发送所必需的信息,以使得该分组可以被提供给物 理NIC驱动程序以在物理NIC设备上进行发送。图4是根据本发明的实施 例的网络请求分组的框图。网络请求分组400包括OS相关信息402和介质 访问控制(MAC)帧信息404。OS相关信息402包括由网络栈驱动程序或 NIC设备驱动程序使用的信息和/或参数。该部分将不会在物理NIC设备的 网络接口上发送并且可能不被服务OS所理解,所以可以忽略网络请求分组 的该部分。MAC帧信息是在网络接口上发送的实际内容(例如,以太网网 络介质上的基本传输单元)。

根据本发明的实施例,没有对于用户OS来说直接可用的物理NIC设 备,因此,COS虚拟NIC驱动程序308依赖于服务VM的组件和VMM来 发送分组。VMM在有要处理的分组时通知服务OS并且创建共享存储区以 供在用户VM和服务VM之间交换数据时使用。可以使共享存储区对于用 户OS和服务OS二者都可见,以使得每一个VM中的虚拟NIC驱动程序能 够访问分组并且相应地处理它们。在一个实施例中,可以在存储器104中 实现共享存储器。

图5是根据本发明的实施例的虚拟机之间的通信和共享存储器的框图。 COS虚拟NIC驱动程序308可以从网络请求分组中抽取MAC帧404,从 共享存储器中分配存储块,将该MAC帧复制到共享存储块中,并且将该块 附加到指定的发送(TX)队列506中。TX队列506存在于共享存储器中, 以帮助管理输出的MAC帧。在相反的路径中,当由服务OS管理的物理 NIC设备322接收到分组时,服务OS的组件(即,物理NIC驱动程序318、 SOS网络栈314以及SOS虚拟NIC驱动程序316)抽取MAC帧,将该MAC 帧内容复制到共享存储器中的空闲存储块中,并且将该块附加到接收(RX) 队列508中。

COS虚拟NIC驱动程序308可以以下述方式向服务OS告知存在需要 发送的MAC帧。在本发明的实施例中,使用已知的虚拟化技术的消息通知 机制可以被使用。VMM 204可以作为用户OS和服务OS之间的媒介进行 操作,并且可以按照需要通知适当的OS。

例如,当用户OS 1 210想要与服务OS 216进行通信时,用户OS可以 执行名为VMCALL 510的特权指令。VMCALL指令用来退出当前VM环 境并且调用VMM 204中的所选择的服务。可以由VMM中的VMCALL指 令的处理机来提供这些服务。VMCALL处理机(图5中未示出)可以检查 VMCALL的输入参数并且确定VMM是否应当告知服务OS。如果是,那 么VMM记录该消息,并且将控制返回给用户OS。因为VMM是一直在计 算系统中运行的进程,所以当VMM转向用于服务OS执行的时隙时,VMM 尝试使用中断516来告知服务OS。类似地,当服务OS想要与用户OS进 行通信时,服务OS可以执行VMCALL 514并且VMM可以使用中断512 来通知用户OS。

在服务OS一端,因为服务OS是用户OS进行网络发送和接收的代理, 所以本发明的实施例提供两个驱动程序组件来支持该代理安排。一个是 SOS虚拟NIC驱动程序316。另一个是桥驱动程序组件502。服务OS中的 SOS虚拟NIC驱动程序316负责经由共享存储器504中的发送TX队列506 收集来自用户OS的输出MAC帧,并且通过桥驱动程序将这些输出MAC 帧传送到物理NIC驱动程序318。桥驱动程序还从物理NIC驱动程序318 接收旨在去往用户OS的进入分组,并且将这些分组放入到共享存储器504 中的接收RX队列508中以供用户OS进行访问。详细地说,当VMM 204 向SOS虚拟NIC驱动程序316告知在发送TX队列506中存在输出的分组 时,服务OS中的SOS虚拟NIC驱动程序从发送TX队列中抽取MAC帧, 将该帧重新封装为新的网络请求分组,并且将该新的分组提交到SOS网络 栈314。另一方面,当SOS虚拟NIC驱动程序316从SOS网络栈接收前往 用户OS的分组时,SOS虚拟NIC驱动程序移除OS相关部分并且将MAC 帧放入到接收RX队列508中以供由用户OS进行访问。所描述的该消息通 知方法可以用于告知用户OS来处理进入的分组。

在本发明的实施例中,桥驱动程序502在IP协议层中实现了过滤器驱 动程序,因此桥驱动程序检查从物理NIC设备经由物理NIC驱动程序318 的所有入站分组并且将它们路由到正确的目的地。例如,如果桥驱动程序 发现从SOS虚拟NIC驱动程序316接收的分组,那么桥驱动程序将该分组 转发到物理NIC驱动程序318。如果桥驱动程序发现从物理NIC驱动程序 318接收的分组,那么桥驱动程序将检查该分组中的IP地址信息,并且确 定该分组应当去往用户OS 210还是服务OS 216。如果桥驱动程序确定该分 组是去往用户OS 210的,那么桥驱动程序将该分组转发到SOS虚拟NIC 驱动程序308,以用于进一步将信息转发到用户OS。

可以用至少两种方法来在用户OS和服务OS之间区分从物理NIC驱动 程序318接收的分组的目的地。一种方法是用户OS和服务OS使用不同的 IP地址,以使得桥驱动程序502可以参考所接收的网络分组中的IP地址信 息,并且确定哪个OS是该分组的接收者。第二种方法是用户OS和服务 OS可以使用相同的IP地址,但是使用不同范围的TCP或UDP端口。第一 种方法可以使分组路由逻辑简单,但是花费更多的IP地址资源。第二种方 法可以节省IP地址资源,但是可能导致桥驱动程序中的分组路由逻辑更加 复杂。这两种方法之间的选择取决于预期的使用模型并且是实现决策。

图6和图7是根据本发明的实施例的网络请求分组发送处理的流程图。 在框600处,当从用户OS(COS)网络栈306接收到将要通过物理NIC设 备进行发送的网络请求分组时,可以由COS虚拟NIC驱动程序308在602 处进行检查以确定服务OS(SOS)216和VMM 204是否准备就绪。如果服 务OS或VMM中的任意一个(或二者)没有准备就绪,那么处理继续到框 604,在框604中可以报告错误消息并且可以将控制返回给用户OS。如果 在框602处服务OS和VMM准备就绪,那么可以在框612处检查共享存储 器中是否存在可用的空闲块。如果不存在可用的空闲块,那么处理继续到 框604,在框604中可以报告错误。如果存在可用的空闲块,那么处理继续 到图7中的框702。

在图7的框702处,COS虚拟NIC驱动程序308将网络请求分组的 MAC帧复制到共享存储器504中的空闲块中。在框704处,可以将新填充 的块附加到发送队列TX 506。然后在框706处,COS虚拟NIC驱动程序 308调用VMCALL指令510以经由VMM 204通知服务OS 216。在框708 处,VMM将中断516注入到服务OS中。作为响应,在框710处,服务 OS中的SOS虚拟NIC驱动程序316接收中断,并且在框712处,提取发 送队列TX 506中的下一个节点。在框714处,SOS虚拟NIC驱动程序316 将来自发送队列TX中的下一个节点的MAC帧信息封装为新的服务OS请 求分组。然后在框716处,SOS虚拟NIC驱动程序316将该新的服务OS 请求分组传送到服务OS网络栈314。接着,在框718处,桥驱动程序502 将该新的服务OS请求分组路由到物理NIC驱动程序318。在框720处,由 物理NIC驱动程序将该新的服务OS请求分组通过网络接口进行发送。

图8和图9是根据本发明的实施例的网络请求分组接收处理的流程图。 在框800处,物理NIC驱动程序318从物理NIC设备322接收至少一个网 络分组,并且将该网络分组传送到服务OS 216中的SOS网络栈314。在框 802处,网络栈中的桥驱动程序502将进入的分组路由到服务OS中的SOS 虚拟NIC驱动程序316。然后在框804处,可以由SOS虚拟NIC驱动程序 316进行检查以确定用户OS(COS)210和VMM 204是否准备就绪。如果 用户OS或VMM中的任意一个(或二者)没有准备就绪,那么处理继续到 框806,在框806中可以报告错误消息并且将控制返回给服务OS。如果用 户OS和VMM准备就绪,那么在框814处,可以检查共享存储器中是否存 在可用的空闲块。如果不存在可用的空闲块,那么处理继续到框806并且 可以报告错误消息。如果存在可用的空闲块,那么处理继续到图9中的框 902。

在图9的框902处,SOS虚拟NIC驱动程序316将所接收的网络分组 的MAC帧复制到共享存储器504中的空闲块中。在框904处,可以将该新 填充的块附加到接收队列RX 508。然后在框906处,SOS虚拟NIC驱动程 序316调用VMCALL指令514以经由VMM 204通知用户OS 210。在框 908处,VMM将中断512注入到用户OS中。作为响应,在框910处,用 户OS中的COS虚拟NIC驱动程序308接收该中断,并且在框912处,提 取接收队列RX 508中的下一个节点。在框914处,COS虚拟NIC驱动程 序308将来自接收队列RX中的下一个节点的MAC帧信息封装为新的用户 OS响应分组。然后在框916处,COS虚拟NIC驱动程序308将该新的响 应分组传送到用户OS网络栈306,并且向上传到应用程序304。

因此,本发明的实施例可以在运行在用户OS中的用户的应用程序需要 访问网络时在多个虚拟机之间共享一个物理NIC设备。不需要安装额外的 物理NIC设备。

本领域中的技术人员将认识到,可以选择实现不同的方案来提供多个 虚拟机对单个物理NIC设备的安全访问,而不脱离本发明的范围。本领域 中的技术人员还将认识到,所公开的发明可以应用到不同类型的虚拟化环 境和虚拟化系统,这样的环境和系统是纯软件的或硬件辅助的,可以使用 部分或全部虚拟化的计算机系统或编程环境。

本领域中的技术人员还将认识到,用户OS和对应的用户VM的数量 可以大于2并且是取决于实现的。此外,当两个或更多用户VM并发地运 行时,一个用户VM可以运行一种类型的OS(例如,微软的Windows 7), 而另一用户VM可以运行另一种类型的OS(例如,Linux)。

此外,本领域中的技术人员将认识到,可以以其他方式以及使用各种 编程语言来实现本发明的实施例。

本文描述的技术并不受限于任何特定的硬件或软件配置;它们可以适 用于任何计算或处理环境。可以用体现为硬件、软件或固件组件或上述组 合的逻辑来实现该技术。可以在可编程机器上执行的程序中实现该技术, 其中,所述可编程机器例如是移动或固定计算机、个人数字助理、机顶盒、 蜂窝电话和寻呼机以及其他电子设备,这些设备中的每一个均包括处理器、 处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件)、至 少一个输入设备和一个或多个输出设备。程序代码可以应用于使用输入设 备输入的数据,以执行所描述的功能以及生成输出信息。输出信息可以应 用于一个或多个输出设备。本领域中的普通技术人员可以理解,可以用包 括多核处理器、多处理器系统、微型计算机、大型计算机等的各种计算机 系统配置来实施本发明。还可以在分布式计算环境中实施本发明,其中, 在所述分布式计算环境中,可以由通过通信网络链接的远程处理设备来执 行任务。

可以用高级的过程或面向对象的编程语言来实现每一个程序以与处理 系统进行通信。然而,如果需要的话,可以用汇编或机器语言实现程序。 无论如何,语言可以是编译型的或解释型的。

程序指令可以用来使利用所述指令编程的通用或专用处理系统执行本 文描述的操作。可替换地,可以由包括用于执行操作的硬连线逻辑的专用 硬件组件或由编程的计算机组件和定制硬件组件的任意组合来执行所述操 作。可以将本文描述的方法提供为计算机程序产品,其可以包括存储有指 令的机器可读介质,其中所述指令可以用来将处理系统或其他电子设备编 程为执行所述方法。本文所使用的术语“机器可读介质”应当包括能够对 供机器执行的指令序列进行存储或编码并且使机器执行本文描述的任意一 种方法的任何介质。因此,术语“机器可读介质”应当包括但不限于:固 态存储器、光盘和磁盘。此外,在本领域中常见的是,将一种形式或另一 种形式的软件(例如,程序、过程、处理、应用、模块、逻辑等等)表述 为采取动作或引起结果。这种表达仅是用来描述由处理系统执行该软件以 使处理器执行动作或产生结果的一种简略方式。

尽管已经参考示例性实施例描述了本发明,但是本说明书并不是要被 限制性地进行解释。对于本发明所属技术领域中的技术人员而言显而易见 是,对示例性实施例以及本发明其他实施例的各种修改均被认为是落在本 发明的范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号