在虚拟化环境中动态分配物理存储设备资源的机制转让专利

申请号 : CN201910159331.2

文献号 : CN110275774A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : O.P.平托

申请人 : 三星电子株式会社

摘要 :

公开了一种存储设备。存储设备可以包括用于数据的存储装置和用于来自主机设备上的至少一个虚拟机(VM)的请求的至少一个输入/输出(I/O)队列。存储设备可以支持I/O队列创建命令,以请求为VM分配I/O队列。I/O队列创建命令可以包括要与I/O队列相关联的逻辑块地址(LBA)的范围的LBA范围属性。存储设备可以将LBA的范围映射到存储装置中的物理块地址(PBA)的范围。

权利要求 :

1.一种用于在虚拟化环境中动态分配物理存储设备资源的存储设备,包括:用于数据的存储装置;以及

至少一个输入/输出I/O队列,用于来自主机设备上的至少一个虚拟机VM的请求,其中所述存储设备支持I/O队列创建命令,以请求为所述至少一个VM的VM分配所述至少一个I/O队列的I/O队列,所述I/O队列创建命令包括要与所述I/O队列相关联的逻辑块地址LBA的范围的LBA范围属性,并且其中所述存储设备将LBA的范围映射到所述用于数据的存储装置中的物理块地址PBA的范围。

2.根据权利要求1所述的存储设备,其中:

所述存储设备包括固态驱动器SSD存储设备;并且

所述SSD存储设备使用到主机设备的非易失性存储器快速NVMe接口。

3.根据权利要求2所述的存储设备,其中,所述存储设备从所述主机设备上的管理程序接收所述I/O队列创建命令。

4.根据权利要求2所述的存储设备,其中,所述LBA范围属性包括开始LBA和结束LBA。

5.根据权利要求2所述的存储设备,其中,所述I/O队列创建命令包括用于所述VM的服务质量QoS参数的服务质量属性。

6.根据权利要求2所述的存储设备,其中,所述I/O队列创建命令包括共享命名空间属性,所述属性指定共享对所述LBA的范围的访问的命名空间的阵列。

7.根据权利要求2所述的存储设备,还包括将多个虚拟I/O队列映射到所述I/O队列的现场可编程门阵列FPGA,其中:所述FPGA支持虚拟I/O队列创建命令,以请求分配所述多个虚拟I/O队列的第一虚拟I/O队列,所述虚拟I/O队列创建命令包括要与所述第一虚拟I/O队列相关联的逻辑块地址LBA的第二范围的第二LBA范围属性,所述第一虚拟I/O队列与所述I/O队列相关联。

8.根据权利要求2所述的存储设备,还包括门铃分布逻辑,用于在与第二I/O队列的第二门铃不同的存储器页面中定位所述I/O队列的第一门铃。

9.一种用于在虚拟化环境中动态分配物理存储设备资源的现场可编程门阵列FPGA,包括:至少一个虚拟输入/输出I/O队列,用于来自主机设备上的至少一个虚拟机VM的请求;

以及

映射逻辑,用于将所述至少一个虚拟I/O队列的虚拟I/O队列映射到存储设备上的I/O队列,使得所述虚拟I/O队列中的从VM接收的I/O请求经由所述I/O队列被传递到所述存储设备,并且所述I/O队列中的从存储设备接收的结果经由所述虚拟I/O队列被传递到所述VM,其中所述FPGA支持虚拟I/O队列创建命令,以请求为所述至少一个VM的VM分配所述至少一个虚拟I/O队列的虚拟I/O队列,所述虚拟I/O队列创建命令包括要与所述虚拟I/O队列相关联的逻辑块地址LBA的范围的LBA范围属性,并且其中与所述FPGA分离但连接到所述FPGA的存储设备将所述LBA的范围映射到所述存储设备中的物理块地址PBA的范围。

10.根据权利要求9所述的FPGA,其中所述LBA范围属性包括开始LBA和结束LBA。

11.根据权利要求9所述的FPGA,其中所述虚拟I/O队列创建命令包括用于所述VM的服务质量QoS参数的服务质量属性。

12.根据权利要求9所述的FPGA,其中所述虚拟I/O队列创建命令包括共享命名空间属性,所述属性指定共享对所述LBA的范围的访问的命名空间的阵列。

13.根据权利要求9的FPGA,其中所述FPGA将多个虚拟I/O队列映射到所述存储设备上的I/O队列。

14.根据权利要求13所述的FPGA,其中所述FPGA可操作以调用所述存储设备上的I/O队列创建命令来创建所述I/O队列。

15.根据权利要求9所述的FPGA,还包括门铃分布逻辑,用于在与第二虚拟I/O队列的第二门铃不同的存储器页面中定位所述虚拟I/O队列的第一虚拟门铃。

16.一种用于在虚拟化环境中动态分配物理存储设备资源的包括非暂时性存储介质的物品,所述非暂时性存储介质上存储有指令,当所述指令被机器执行时,使得:从主机设备上的虚拟机VM接收第一请求,所述第一请求去往存储设备;

捕获所述第一请求防止其到达所述存储设备;

向现场可编程门阵列FPGA发送第二请求,所述第二请求模拟所述第一请求;

从所述FPGA接收所述第二请求的结果;以及

向所述VM发送所述第二请求的结果。

17.根据权利要求16所述的物品,其中:

所述第一请求包括对于所述存储设备创建I/O队列的I/O队列创建请求;并且所述第二请求包括对于所述FPGA创建虚拟I/O队列的虚拟I/O队列创建请求。

18.根据权利要求17所述的物品,其中所述第二请求还包括要与所述虚拟I/O队列相关联的LBA的范围的逻辑块地址LBA属性。

19.根据权利要求18所述的物品,其中所述虚拟I/O队列创建请求包括共享命名空间属性,所述属性指定共享对所述LBA的范围的访问的命名空间的阵列。

20.根据权利要求17所述的物品,其中所述第二请求还包括用于所述VM的服务质量QoS参数的服务质量属性。

说明书 :

在虚拟化环境中动态分配物理存储设备资源的机制

[0001] 相关申请数据
[0002] 本申请要求于2018年3月13日提交的美国临时专利申请序列号62/642,596的权益,该申请出于所有目的通过引用并入本文。
[0003] 本申请与2018年4月20日提交的、现处于待决状态的美国专利申请序列号15/959,108相关,该申请出于所有目的在此通过引用并入本文。

技术领域

[0004] 本发明构思一般涉及存储设备,更具体地,涉及支持由可能彼此隔离的虚拟机对存储设备的访问。

背景技术

[0005] 单根输入/输出虚拟化(Single Root Input/Output Virtualization,SR-IOV)是一种规范支持的接口机制,该机制允许单个物理外围组件互连快速(Peripheral Component Interconnect Express,PCIe)设备呈现为多个分离的(separate)物理PCIe设备。出于性能和可管理性原因,SR-IOV有助于共享和隔离PCIe资源,同时促进互操作性。
[0006] SR-IOV已经存在了十年用于网络适配器。最近,SR-IOV已经开始包括存储装置(storage)。中央处理单元(Central Processing Unit,CPU)处理已经提供了资源隔离,这有助于通过管理程序(hypervisor)作为主设备和虚拟机(Virtual Machine,VM)作为辅助设备的快速虚拟化采用。使用SR-IOV,网络和存储设备会暴露物理功能设备(Physical Function,PF)和虚拟功能设备(Virtual Function,VF)。这些共同地提供设备隔离,足以将物理服务器转变为多个虚拟服务器,这样全部应用都可以各自在它们自己的隔离的空间中运行。
[0007] 尽管计算处理、网络和存储装置构成了三个虚拟化支柱,但存储设备和存储设备供应商在符合SR-IOV方面仍然滞后。这个事实可能是因为,与网络化(networking)不同,存储装置定义了由一定范围的逻辑块地址(Logical Block Address,LBA)引用的数据地址空间。这个LBA范围只能被细分为有限数量的单元。此外,存储设备需要物理硬件门来支持额外的VF,因为VF是直接暴露于VM的外围组件互连(Peripheral Component Interconnect,PCI)空间的硬件功能。将SR-IOV添加到存储/网络设备会增加其门数量和芯片大小,并消耗更多功率。
[0008] SR-IOV解决了硬件隔离问题,同时提供了裸机(bare-metal)性能,因为与超虚拟化(para-virtualized)设备不同,I/O不必通过管理程序。非易失性存储器快速(Non-Volatile Memory Express,NVMe)存储设备是最新采用SR-IOV的。但是对于存储装置,可能还有其他机制为多个VM提供隔离的访问。
[0009] 仍然需要一种方法来提供类似SR-IOV所提供的功能,但没有SR-IOV强加的硬件要求和限制。

发明内容

[0010] 本公开的一方面提供一种用于在虚拟化环境中动态分配物理存储设备资源的存储设备,包括:用于数据的存储装置;以及至少一个输入/输出(I/O)队列,用于来自主机设备上的至少一个虚拟机(VM)的请求,其中所述存储设备支持I/O队列创建命令,以请求为所述至少一个VM的VM分配所述至少一个I/O队列的I/O队列,所述I/O队列创建命令包括要与所述I/O队列相关联的逻辑块地址(LBA)的范围的LBA范围属性,并且,其中所述存储设备将LBA的范围映射到所述用于数据的存储装置中的物理块地址(PBA)的范围。
[0011] 本公开的另一方面提供一种用于在虚拟化环境中动态分配物理存储设备资源的现场可编程门阵列(FPGA),包括:至少一个虚拟输入/输出(I/O)队列,用于来自主机设备上的至少一个虚拟机(VM)的请求;以及映射逻辑,用于将所述至少一个虚拟I/O队列的虚拟I/O队列映射到存储设备上的I/O队列,使得所述虚拟I/O队列中的从VM接收的I/O请求经由所述I/O队列被传递到所述存储设备,并且所述I/O队列中的从存储设备接收的结果经由所述虚拟I/O队列被传递到所述VM,其中所述FPGA支持虚拟I/O队列创建命令,以请求为所述至少一个VM的VM分配所述至少一个虚拟I/O队列的虚拟I/O队列,所述虚拟I/O队列创建命令包括要与所述虚拟I/O队列相关联的逻辑块地址(LBA)的范围的LBA范围属性,并且,其中与所述FPGA分离但连接到所述FPGA的存储设备将所述LBA的范围映射到所述存储设备中的物理块地址(PBA)的范围。
[0012] 本公开的又一方面提供一种用于在虚拟化环境中动态分配物理存储设备资源的包括非暂时性存储介质的物品,所述非暂时性存储介质上存储有指令,当所述指令被机器执行时,使得:从主机设备上的虚拟机(VM)接收第一请求,所述第一请求去往存储设备;捕获所述第一请求防止其到达所述存储设备;向现场可编程门阵列(FPGA)发送第二请求,所述第二请求模拟所述第一请求;从所述FPGA接收所述第二请求的结果;以及向所述VM发送所述第二请求的结果。

附图说明

[0013] 图1示出了根据本发明构思的实施例的支持隔离的虚拟机(VM)访问存储设备的设备。
[0014] 图2示出了图1的设备的额外的细节。
[0015] 图3示出了图1的VM和图1的存储设备之间的通信路径,其中图1的存储设备仅暴露一个物理功能。
[0016] 图4示出了图1的VM和图1的存储设备之间的通信路径,其中图1的存储设备暴露了多个物理功能。
[0017] 图5示出了图1的存储设备的细节。
[0018] 图6示出了用于图1的存储设备的扩展I/O队列创建命令。
[0019] 图7示出了被划分为多个命名空间的图1的存储设备的物理存储装置。
[0020] 图8示出了图1的存储设备中的门铃的存储器映射,以支持VM隔离。
[0021] 图9示出了用于图3的现场可编程门阵列(Field Programmable Gate Array,FPGA)的扩展虚拟I/O队列创建命令。
[0022] 图10示出了支持映射到图1的存储设备中的I/O队列的虚拟I/O队列的图3的FPGA。
[0023] 图11示出了根据本发明构思的实施例的用于图1的存储设备为VM分配I/O队列的示例过程的流程图。
[0024] 图12示出了根据本发明构思的实施例的用于图3的FPGA为VM分配虚拟I/O队列的示例过程的流程图。
[0025] 图13示出了根据本发明构思的实施例的用于图3的管理程序处理来自图3的虚拟机的管控请求的示例过程的流程图。
[0026] 图14示出了根据本发明构思的实施例的用于图1的存储设备或图3的FPGA将门铃的存储器地址映射到不同操作系统页面以支持VM隔离的示例过程的流程图。

具体实施方式

[0027] 现在将详细参考本发明构思的实施例,其示例在附图中示出。在下面的详细描述中,阐述了许多具体细节,以便能够彻底理解本发明构思。然而,应当理解,本领域普通技术人员可以在没有这些具体细节的情况下实践本发明构思。在其他情况下,没有详细描述公知的方法、过程、组件、电路和网络,以免不必要地模糊实施例的方面。
[0028] 应当理解,尽管术语第一、第二等可以在本文用于描述各种元件,但是这些元件不应受到这些术语的限制。这些术语仅用于区分一个元件和另一个元件。例如,在不脱离本发明构思的范围的情况下,第一模块可以被称为第二模块,类似地,第二模块可以被称为第一模块。
[0029] 在本文对本发明构思的描述中使用的术语仅出于描述特别实施例的目的,并不意图限制本发明构思。如在本发明构思和所附权利要求的描述中所使用的,单数形式“一”、“一个”和“该”也意图包括复数形式,除非上下文清楚地另有指示。还应当理解,本文使用的术语“和/或”是指并涵盖相关联的列出项目中的一个或多个的任何和所有可能的组合。还应当理解,当在本说明书中使用时,术语“包括(comprise)”和/或“包括了”指定所述特征、整数、步骤、操作、元件和/或组件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组的存在或添加。附图的组件和特征不一定按比例绘制。
[0030] 目前,单根输入/输出虚拟化(SR-IOV)用于非易失性存储器快速(NVMe)存储设备的早期采用者已经采取了提供每一物理功能(PF)有限数量的虚拟功能(VF)和相关联的命名空间的路线。逻辑地址空间范围的分配取决于命名空间分配,而对VM的裸机直接访问取决于支持的VF的数量。这种实施方式给支持大容量的存储设备创造了问题,因为它必须以功率和裸芯(die)大小为代价来支持额外的硬件,以满足直接支持多个VM的性能要求。在最低限度上,支持SR-IOV功能需要设备为每个VF提供分离的外围组件互连(PCI)配置空间、I/O条(bar)、用于提交和完成队列的I/O队列、消息信号中断(Message Signaled Interrupt,MSI-X)以及支持的队列的门铃地址。
[0031] 第一SR-IOV存储设备中可用的固定分配方法的不足促使NVMe委员会开发消除了实施方式限制的另一个规范,诸如将固定资源分配改为动态资源分配以及管理。许多当前开放和主动提议的改变正在试图解决资源分配问题。然而,它们受到物理设备限制的约束,诸如支持的VF,这增加了不可避免地出现的规格复杂性。
[0032] 尽管市场上有少数领先的管理程序,诸如VMWare、Microsoft、Citrix XenServer、KVM、Qemu和Oracle VM,但当前只有来自该集合中的很少管理程序正在积极适应市场改变。通过这样做,它们夺得了大多数市场份额。由于它们的编程环境的本质,每个管理程序环境都可以被视为自定义实施方式。因此,支持这种实施方式的变化可能很重要。
[0033] 本发明构思的实施例定义了更简单的机制来对SR-IOV存储设备进行编程,以提供VM隔离和性能。本发明构思的实施例通过依靠管理程序来映射资源,遵循了更简单的方法。本发明构思的实施例可以包括策略用于:
[0034] 1)通过提供对VM的I/O队列(提交和完成队列对)的直接应用访问,将性能扩展到VM。
[0035] 2)直接将I/O队列(提交和完成队列)的能力(capability)映射到VM。
[0036] 3)将控制器细节封装在管理程序中用于管理路径。
[0037] 4)动态隔离每一分离的VM要求的物理资源。
[0038] 本发明构思的实施例可以通过添加新的NVMe存储设备支持作为特征来有效地提供SR-IOV类型的功能。
[0039] 本发明构思的实施例定义了以下新特征:
[0040] 1)一种出于性能目的,将NVMe I/O提交队列和I/O完成队列(一起被称为I/O队列对)直接重新映射到VM的高级管理机制。
[0041] 2)一种管理程序中用于实施虚拟化控制器的机制,该机制将硬件I/O队列动态映射到VM,作为虚拟化控制器的集合。
[0042] 3)一种将逻辑地址空间映射为逻辑单元或命名空间的机制。
[0043] 4)一种使用额外的方法映射在存储设备中不可用的额外的I/O队列的机制。
[0044] 5)一种为共享资源提供VM特定隔离的方法。
[0045] 本发明构思的实施例提供了优于传统技术的以下优点:
[0046] 1)提供类SR-IOV功能,而无需昂贵的SR-IOV硬件要求。
[0047] 2)提供超越设备规范的VM额外的I/O资源隔离和性能优势。
[0048] 3)提供可以被完全虚拟化以避免操作系统(Operating System,O/S)内置驱动程序改变的硬件能力。
[0049] 4)在存储设备和管理程序之间创建服务质量(Quality of Service,QoS)通道。
[0050] 5)简化存储虚拟化的硬件要求。
[0051] 本发明构思的实施例提供了一种将存储设备I/O资源直接重新映射到VM的机制。本发明构思的实施例使用用于存储器和中断的现有重新映射资源,包括用于x86架构的输入-输出存储器管理单元(Input-Output Memory Management Unit,IOMMU)和额外的硬件资源,以映射到存储设备通常不支持的大量VM。
[0052] 为了实现这些优势,存储设备(可能包括固态驱动器(Solid State Drive,SSD))应当:
[0053] 1)支持扩展I/O队列创建属性。
[0054] 2)支持I/O队列级别的简单逻辑地址重新映射。
[0055] 3)支持O/S页面边界处的门铃,为了VM安全性。
[0056] 4)按照NVMe规范标准通过一个或多个字段公布这些扩展属性。
[0057] 5)可选地提供额外的队列优先级等级仲裁机制,而不是默认应用QoS。
[0058] 将NVMe I/O队列对直接映射到VM
[0059] I/O提交队列和I/O完成队列可以一起被称为I/O队列对,因为它们一起工作,并且当资源受限时,将自动应用1:1映射。大多数(如果不是全部)内置NVMe驱动程序创建这些队列的1:1映射。本发明构思的实施例把这种用法作为目标,因为这些是在VM中运行的设备驱动程序实施方式。
[0060] 支持本发明构思的实施例的存储设备可以提供用于提交和完成队列的扩展I/O创建命令。命令可以通过分离的操作码来应用,其可以被标记为可选的(optional)或者可以被定义为供应商特定(vendor-specific)的命令。扩展命令可以支持NVMe规范定义的基本NVMe队列创建命令细节,诸如队列大小、队列标识符、队列优先级等级、队列缓冲区是否物理上连续、中断向量和中断使能字段。但是除这些之外,扩展命令还可以支持设备的地址空间内的逻辑块寻址偏移。这些机制工作如下:
[0061] 1)当创建了VM时,管理程序在VM的PCI空间中暴露虚拟化的NVMe存储设备。设备最初可以被完全虚拟化,以便在访问其PCI配置和I/O存储器映射区域时采用客户机(guest)退出。对于中断,管理程序可以设置特定的MSI-X中断,以按照管理程序的实施方式,根据需要直接中断客户机VM。
[0062] 2)在I/O存储器映射空间中,管理程序可以捕获任何NVMe配置空间改变,并根据需要虚拟化访问请求。管理程序可以在O/S页面级别粒度上暴露门铃作为I/O存储器的一部分,以便管理程序可以在VM级别上映射每个门铃。存储设备也可以支持此功能。
[0063] 3)当VM创建I/O提交队列时,管理程序捕获请求并使用“扩展创建I/O提交队列(Extended Create I/O Submission Queue)”命令将其映射到存储设备的物理I/O提交队列。管理程序和存储设备可以使用VM提供的值,并改变/添加以下内容:
[0064] a)将队列存储器映射到其(多个)物理页面,以便存储设备可以直接访问它。这种机制可以由基于英特尔x86的架构上的IOMMU提供。
[0065] b)添加队列优先级(如果支持的话),该队列优先级将此队列相对于其他VM进行优先级排序。
[0066] c)将VM的空间中的先前创建的I/O完成队列ID绑定到针对存储设备I/O队列的此提交队列。
[0067] d)添加将物理地址空间的一部分映射到VM的逻辑块地址开始和结束值。
[0068] e)应用对于最小或最大I/O操作、或者每秒粒度传输的最小或最大字节的适当的QoS要求。
[0069] f)另外,如果VM需要,则存储设备可以提供全局命名空间访问权限。这些全局命名空间访问权限可以在列出命名空间id的阵列中指定。
[0070] g)另外,如果存储设备提供这种支持,则存储设备可以提供命名空间访问类型的权限,诸如只读、读写、独占访问。
[0071] 4)管理程序还可能捕获I/O完成队列创建请求并且改为(instead):
[0072] a)将队列存储器映射到其(多个)物理页面,以便存储设备可以直接访问它。在基于英特尔x86的架构上,IOMMU可以提供这种机制。
[0073] b)通过已经就位用于虚拟化的系统架构机制(诸如IOMMU)映射在实际存储设备向量与VM之间提供的中断向量。
[0074] 5)取决于管理的VM复杂性和管理程序实施方式,本发明构思的实施例可以将多个I/O创建请求映射到单个物理队列。如果实施了,则FPGA可以处置I/O完成队列,并且可以中断回到VM客户机。该机制可以解决动态队列分配机制。
[0075] 6)在动态队列分配机制的另一用法中,管理程序可以基于VM服务级别协议(Service Level Agreement,SLA)仅暴露所需的I/O队列。
[0076] 一旦建立,可以将硬件I/O队列动态映射到VM的管理程序辅助机制可以提供与SR-IOV提供的那些类似的必要的隔离和性能优势,但是具有更低的制造、测试和调试成本。管理程序也可能需要一些改变,但这些改变是独自的(self-contained),并且局限于可用的管理程序,从而减少总体影响。如果存储设备安装在不支持虚拟化的系统中,则该存储设备应作为常规NVMe存储设备来运行。
[0077] 管理地址空间隔离
[0078] NVMe可以通过使用像小型计算机系统接口(Small  Computer  Systems Interface,SCSI)逻辑单元号(Logical Unit Number,LUN)一样工作的命名空间来共享单个、唯一的逻辑地址空间。给定命名空间ID,逻辑地址块可以用命名空间在整个逻辑地址映射中开始的地址来偏移。
[0079] 在传统存储设备中,物理地址空间可以通过创建命名空间及其坐标来被细分为逻辑单元。在传统存储设备中,这种细分可能需要额外的命名空间支持来创建多个命名空间。本发明构思的实施例通过将创建的I/O队列直接附加到逻辑单元空间来绕过这个要求。例如,扩展属性可以被定义为I/O队列的逻辑可寻址空间的一部分,因此默认的命名空间映射到它。此修改将对齐每个I/O队列,使VM可以直接访问适当的空间。通常,VM要么请求只访问私有命名空间,要么请求访问共享命名空间。I/O队列创建中的扩展属性可以指定相对于全局物理地址空间的默认命名空间开始和结束LBA。此机制解决了硬件命名空间管理要求。任何传入的I/O请求必须经过I/O队列。由于I/O队列已经保持默认的命名空间映射偏移,所以它可以直接使用这个编程的偏移来转换LBA地址。
[0080] 如果需要访问多个命名空间,则扩展I/O队列创建可能具有一个额外的定义来支持全局命名空间访问。例如,I/O队列23:访问的全局命名空间:3。
[0081] 映射存储设备中不可用的额外的I/O队列的机制
[0082] 这种机制涉及使用在分离的空间中提供I/O队列的额外的现场可编程门阵列(FPGA)逻辑。使用该机制,本发明构思的实施例可以支持可以直接映射到VM的明显更多的I/O队列。FPGA可以支持NVMe规范或规范的子集,通过该规范对该机制进行仲裁。
[0083] 完全规范支持:在该机制中,FPGA可以完全模仿NVMe规范,并提供完全规范级别的功能。FPGA可以以O/S页面粒度为相关联的I/O队列门铃提供存储器映射,提供对设备中不可用的额外的I/O队列的支持,提供对所支持的I/O队列的完全MSI-X中断支持,以及提供每一I/O队列的逻辑地址空间的映射。在该机制中,存储设备根本不需要支持扩展I/O队列功能,这可以在额外的可编程硬件中完全实施。
[0084] 部分规范支持:如果可以预测VM的数量不大于存储设备支持的I/O队列的数量,则部分或全部功能可以在存储设备内实施。FPGA然后可以用作对于由VM的I/O请求的“直通”设备,或者使用虚拟I/O队列到存储设备I/O队列的一对一映射。FPGA仍可以用于减少用于在存储设备中实施功能的硬件的数量。
[0085] 在任一情况下,FPGA逻辑可以为每个VM提供必要的隔离粒度。为了提供大量的I/O队列,FPGA可以将许多其暴露的I/O队列映射到单个存储设备I/O队列。
[0086] FPGA可以提供逻辑地址空间映射结构和相关联的类命名空间的隔离。FPGA还可以提供必要的MSI-X中断映射能力,以使该设备完全正常工作。
[0087] 服务质量
[0088] 当多个VM执行访问单个存储设备的I/O操作时,由于混合器效应(blender effect),它们会抑制性能。当在VM级别共享设备而不隔离时,存储设备无法访问特定VM。对于SR-IOV,隔离是在PF映射级别提供的,但其优势没有公布或未知。本发明构思的实施例可以支持将I/O队列资源绑定到VM,该VM不仅在资源级别上提供自然隔离,而且也提供给流中的VMI/O请求。通过配置I/O队列标识,存储设备具有完全的VM知识。如果存储设备支持额外的优先级等级仲裁机制(如NVMe规范或供应商特定命令的一部分中定义的),管理程序可以在创建时间将这些机制应用于I/O队列。管理程序可以基于VM的要求选择应用这些不同的优先级等级支持。
[0089] 基于所提供的存储设备功能,本发明构思的实施例还可以在扩展I/O队列创建命令中暴露额外的字段,该字段提供应用于存储设备所需的性能限制或最小服务。所需的性能限制或最小服务可以在读写I/O计数或传输的字节中量化。这种所需的性能限制或最小服务也可以是基于设备支持和由管理程序应用于VM的可设置选项。
[0090] 本发明构思的实施例的典型用法可以直接应用于大量利用虚拟机(VM)的企业市场(enterprise segment)中的存储虚拟化。
[0091] 图1示出了根据本发明构思的实施例的支持隔离的虚拟机(VM)访问存储设备的设备。在图1中,示出了设备105,其也可以被称为主机计算机或主机设备。设备105可以包括处理器110。处理器110可以是任何种类的处理器:例如,英特尔至强(Xeon)、赛扬(Celeron)、安腾(Itanium)或凌动(Atom)处理器、AMD皓龙(Opteron)处理器、ARM处理器等。虽然图1示出了设备105中的单个处理器110,但是设备105可以包括任何数量的处理器,每个处理器可以是单核或多核处理器,并且可以以任何期望的组合混合。处理器110可以运行设备驱动程序115,这可以支持对存储设备120的访问:不同的设备驱动可以支持对设备105的其他组件的访问。
[0092] 设备105还可以包括存储器控制器125,其可以用于管理对主存储器130的访问。存储器130可以是任何种类的存储器,诸如闪存、动态随机存取存储器(Dynamic Random Access Memory,DRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、永久随机存取存储器、铁电随机存取存储器(Ferroelectric Random Access Memory,FRAM)或诸如磁阻随机存取存储器(Magnetoresistive Random Access Memory,MRAM)等的非易失性随机存取存储器(Non-Volatile Random Access Memory,NVRAM)。存储器130也可以是不同存储器类型的任何期望的组合。
[0093] 尽管图1将设备105描绘为服务器(其可以是独立式或机架式服务器),但是本发明构思的实施例可以包括任何期望类型的设备105,而没有限制。例如,设备105可以用台式或膝上型计算机或可以受益于本发明构思的实施例的任何其他设备来替换。设备105还可以包括专用便携式计算设备、平板电脑、智能手机和其他计算设备。
[0094] 图2示出了图1的设备105的额外的细节。在图2中,典型地,设备105包括一个或多个处理器110,处理器110可以包括存储器控制器125和时钟205,时钟205可以用于协调设备105的组件的操作。处理器110还可以耦合到存储器130,存储器130可以包括作为示例的随机存取存储器(Random Access Memory,RAM)、只读存储器(Read-only Memory,ROM)或其他状态保持介质。处理器110还可以耦合到存储设备120和网络连接器210,网络连接器210可以是例如以太网连接器或无线连接器。处理器110还可以连接到总线215,用户接口220和可以使用输入/输出引擎225管理的输入/输出接口端口以及其他组件可以被附着到总线215。
[0095] 图3示出了图1的VM和图1的存储设备120之间的通信路径,其中图1的存储设备120仅暴露一个物理功能。在图3中,示出了三个VM 305-1、305-2和305-3,它们可以在图1的主机设备105上实例化。虽然图3示出了三个VM 305-1、305-2和305-3,但是本发明构思的实施例可以包括支持任意数量的VM的图1的主机设备105。
[0096] VM 305-1、305-2和305-3可以与管理程序310通信。管理程序310可以创建、管理和运行VM 305-1、305-2和305-3。管理程序310通常被实施为在图1的主机设备105的处理器110上运行的软件。
[0097] 为了实现与硬件设备的交互,特别是实施单根输入/输出虚拟化(SR-IOV)的硬件,这样的硬件设备可能会暴露各种物理功能。例如,图3示出了暴露一个物理功能(PF)320的现场可编程门阵列(FPGA)315。
[0098] 为了使VM 305-1、305-2和305-3能够与硬件设备交互,也可以暴露各种虚拟功能(VF)。VM 305-1、305-2和305-3可以与VF 325-1、325-2和325-3交互,而不是必须与硬件直接交互。VF 325-1、325-2和325-3提供PF 320的虚拟化版本,使使用不同操作系统(O/S)的VM能够与底层硬件设备有效交互(例如,使用本机O/S驱动程序)。虽然图3示出了PF 320的三个VF,但是本发明构思的实施例可以包括每一PF任意数量的VF;并且如果FPGA 315(或存储设备120)暴露多于一个PF,则每一PF可能有不同数量的VF。暴露的每个VF可能需要来自底层设备的一些硬件支持。例如,为存储设备120暴露的每个VF可能需要额外的端阱(endtrap)和门铃,这需要额外的硬件实施方式。
[0099] 如上所述,PF 320可以由FPGA 315暴露,而不是由存储设备120暴露,其是实施PF 320的底层硬件。FPGA 315可以询问存储设备120以确定哪个(那些)PF由存储设备120暴露,然后FPGA 315自己暴露可比较的(多个)PF,这些PF可以直接跨FPGA 315映射到存储设备
120的对应的PF。
[0100] 可替代地,PF 320可以由存储设备120直接暴露,而VF 325-1、325-2和325-3可以由FPGA 315暴露。使用这种实施方式操作的本发明构思的实施例可以避免FPGA 315不得不实施已经由存储设备120实施的硬件PF功能,但用数量可能大于存储设备120本身可以提供的VF来补充该硬件实施方式。
[0101] 不管是存储设备120还是FPGA 315实施PF 320,FPGA 315可以被插入在一方面的处理器110(和管理程序310)和在另一方面的存储设备120之间。管理程序310(因而VM 305-1、305-2和305-3)和存储设备120之间的任何通信都将经过FPGA 315,从而允许FPGA315增强存储设备120提供的功能(或者当存储设备120本身不提供SR-IOV类型的实施方式时,潜在地为存储设备120提供SR-IOV类型的支持)。
[0102] 就实施方式而言,FPGA 315可以是存储设备120内的硬件(也就是说,存储设备120可以在其结构内部包括FPGA 315),或者FPGA 315可以是存储设备120外部的额外硬件,但是仍然沿着处理器110和存储设备120之间的通信路径。例如,FPGA 315可以被实施为安装在图1的主机设备105内的电路板,该电路板通过从FPGA 315到存储设备120的连接从外围组件互连快速(PCIe)总线接收数据。不管FPGA 315是如何实施的,FPGA 315应该在处理器110和存储设备120之间的某个地方,以捕捉管理程序310发送的信息并执行FPGA 315的功能。
[0103] 管理程序310可以捕获来自VM 305-1、305-2和305-3的管控请求,以管理它们的处理。例如,管理程序310可以捕获发送到外围组件互连(PCI)配置空间的信息或发往存储设备120的管控队列的请求,并且本地处理它们,将请求重定向到FPGA 315,或者生成类似于原始请求的新请求(虽然取决于特定请求而具体方式不同)。
[0104] FPGA 315提供了优于在存储设备120内实施SR-IOV功能的优点,其中FPGA 315可以作为安装过程的一部分在现场编程:存储设备120通常在制造期间被编程。例如,FPGA 315可能能够支持比如存储设备的100个VF,但是在安装时,客户可能希望仅暴露比如50个VF(因为图1的主机设备105可能不能支持那么多VM)。FPGA 315然后可以使用传统技术被编程,以仅暴露50个VF,留下未使用的剩余门(gate)(因此不消耗功率)。例如,FPGA 315可以在制造时被编程为具有一个外壳,该外壳提供使用非易失性存储器快速(NVMe)命令的接口。在将FPGA 315安装到图1的主机设备105中之后,客户可以使用这些NVMe命令按照期望定制FPGA 315。
[0105] FPGA 315也可以在可以支持哪些参数方面按照期望被编程。例如,如下面参考图9所讨论的,QoS要求上有许多不同的变化。但是FPGA 315可以被编程为只考虑带宽,而忽略与每秒处理的I/O请求的数量或字节的数量相关的参数。对于扩展I/O队列创建命令的其他参数,同样的可能性也成立。
[0106] 图4示出了图1的VM和图1的存储设备120之间的通信路径,其中图1的存储设备120暴露了多个物理功能。图4与图3相同,除了不是暴露一个PF 320,而是在图4中暴露三个PF 320、405和410,其中对于每个PF暴露一个VF 325-1、325-2和325-3。虽然图4示出了FPGA 
315暴露三个PF 320、405和410,但是本发明构思的实施例可以支持暴露任意数量的PF,并且对于每个PF可以暴露任意数量的VF 325-1、325-2和325-3。由于许多原因,可能会暴露多个PF:例如,存储设备120提供的存储量对单个PF来说可能太大而无法充分支持。每个PF通常需要一些特别的硬件支持。因此,要暴露的PF越多,底层设备中通常需要越多的硬件,从而增加了芯片大小和功耗,并潜在地降低其由单个VM查看的性能。每个PF可以提供不同的功能,或者多个PF可以提供相同的功能(使单个设备能够一次向多于一个的VM提供支持)。
[0107] 在图3-图4中,本文描述的提供SR-IOV类型的支持的所有功能可以在FPGA 315中实施,或者一些(或全部)可以在存储设备120中实施。例如,在本发明构思的一些实施例中,存储设备120可以是传统存储设备,不提供对任何SR-IOV类型的功能的内置支持,其中FPGA 315负责所有SR-IOV类型的功能。在本发明构思的其他实施例中,存储设备120可以提供对扩展I/O队列创建命令的支持(下面参考图5-图6讨论的),并且如果存储设备120包括足够的I/O队列来支持预期数量的VM,则FPGA 315可以仅提供VF 325-1、325-2和325-3,并且将来自VM的I/O请求管理为“直通”设备。在本发明构思的又一实施例中,存储设备120可以提供对扩展I/O队列创建命令的支持,但是因为VM的数量预期将超过存储设备120的I/O队列的数量,所以FPGA 315仍然可能在内部管理I/O队列创建:然后存储设备120可能被视为传统存储设备,尽管支持扩展I/O队列创建命令。
[0108] 图5示出了图1的存储设备120的细节。在图5中,存储设备120可以包括主机接口505,其管理与图1的主机设备105的通信。存储设备120还可以包括存储装置510,其存储由图3的VM 305-1、305-2和305-3访问的实际数据。存储器510可以采取任何期望的形式:例如,如果存储设备120是固态驱动器(SSD),则存储装置510可以采取闪存的形式,而如果存储设备120是硬盘驱动器,则存储装置510可以采取磁盘的形式。存储设备120还可以包括门铃分布逻辑515,门铃分布逻辑515可以跨存储设备120的内部存储器分布门铃,使得每个门铃位于内部存储器的不同页面中(其中页面的大小可以根据图1的存储器130的页面大小来确定)。通过将门铃放置在不同的页面中,不同的VM访问不同的页面以访问它们的(多个)门铃,从而避免了多个VM可能需要访问同一存储器页面以访问它们的门铃的可能性(这将违背VM隔离的目标)。并且虽然图5示出门铃分布逻辑515作为存储设备120的一部分,但是本发明构思的实施例也可以将门铃分布逻辑515放置在图3的FPGA 315中。门铃分布将在下面参考图8进一步讨论。
[0109] 图5没有示出可以包括在存储设备120中的其他传统硬件和/或电路,诸如用于SSD的闪存转换层(Flash Translation Layer,FTL)和读/写电路,或者用于硬盘驱动器的读/写标头(head)。图5也没有示出可以包括在存储设备120中的额外的可选组件,诸如高速缓存。本发明构思的实施例扩展到包括所有这样的传统组件。
[0110] 存储设备120可以使用任何期望的接口来与图1的主机设备105通信。例如,存储设备120可以使用NVMe接口,或者存储设备120可以使用串行AT附接接口。类似地,存储设备120可以使用任何期望的连接机制来连接到主机设备105,包括例如PCI或PCIe(使用4、8或任何其他数量的PCI通道)、M.2和SATA以及其他可能。本发明构思的实施例意图包括连接和接口上的所有变化。
[0111] 存储设备120还可以包括可以用于请求提交和响应返回的I/O队列(也称为I/O队列对):提交队列(submission queue,SQ)可以被图3的VM 305-1用来提交I/O请求(诸如读或写请求),并且完成队列(completion queue,CQ)可以被存储设备120用来将结果返回给图3的VM 305-1。在图5中,存储设备120被示出为包括三个I/O队列520-1、520-2和520-3,分别具有提交队列525-1、525-2和525-3以及分别具有完成队列530-1、530-2和530-3。虽然图5建议每个提交队列520-1、520-2和520-3具有对应的完成队列525-1、525-2和525-3,但是本发明构思的实施例可以支持包括来自多个提交队列的结果的单个完成队列。
[0112] 存储设备120可以包括支持可以由存储设备120提供的I/O队列创建命令535的电路。使用I/O队列创建命令535,图3的管理程序310或图3的FPGA 315可以请求建立I/O队列以供使用。但是,尽管传统存储设备(诸如那些支持NVMe接口的存储设备)可以提供标准化形式的I/O队列创建命令535,但是所示的I/O队列创建命令535代表扩展的I/O队列创建命令,从而提供传统I/O队列创建命令不提供或不支持的额外的属性。
[0113] 图6示出了用于图1的存储设备120的图5的扩展I/O队列创建命令535。在图6中,示出了I/O队列创建命令535。I/O队列创建命令535可以包括作为传统NVMe规范定义的I/O队列创建命令的一部分的参数,诸如队列大小603(应为正在建立的队列分配多少空间)、队列标识符606(正在建立的提交队列的标识符)、完成队列标识符609(完成队列的标识符)、队列优先级612(正在建立的提交队列的相对优先级)和物理连续标志615(指示提交队列和完成队列是否在物理上连续)。但是另外,I/O队列创建命令535可以包括其他属性。这些属性包括逻辑块地址(LBA)范围属性618、服务质量(QoS)属性621和共享命名空间属性624。LBA范围属性618可以指定与VM 305-1相关联的LBA的范围。使用LBA范围属性618,图3的FPGA 315或图1的存储设备120可以分配图1的存储设备120上的物理块地址(Physical Block Address,PBA)的一部分供该VM使用,而不被其他VM使用(尽管下面讨论了该规则的例外)。
通过隔离LBA的范围和PBA的对应的范围,可以提供VM隔离。
[0114] 图7示出了图1的存储设备120的物理存储装置如何划分为多个命名空间的示例。在图7中,示出了图5的1TB的存储装置510,尽管本发明构思的实施例可以支持具有任何总容量的存储设备。图5的这个1TB的存储装置510被示为划分为三个命名空间705-1、705-2和
705-3,但是本发明构思的实施例可以将图5的存储装置510划分为任意数量的命名空间。
[0115] 每个命名空间都有LBA的相关联的范围。因此,命名空间705-1包括LBA的范围710-1,命名空间705-2包括LBA的范围710-2,以及命名空间705-3包括LBA的范围710-3。对应于LBA的每个范围710-1、710-2和710-3,PBA的范围715-1、715-2和715-3可以建立在图5的存储装置510中。PBA的每个范围715-1、715-2和715-3应至少与LBA的对应的范围一样大,以便给定LBA范围中的每个LBA都具有对应的PBA。注意的是,LBA和PBA不一定是相符的(coincidental):例如,LBA的范围710-2从开始LBA0到结束LBA 134,217,727(这可以是例如块地址,其中每个块包括4096字节的数据:这个块地址对应字节地址549,755,813,887),而PBA的范围715-2从开始PBA 67,108,864(字节地址274,877,906,944)到结束PBA 201、
326、591(字节地址824,633,720,831)。
[0116] 将LBA范围映射到PBA并将这些范围中的一个(或两个)与I/O队列相关联的一个优点是,这样的映射可以避免混合器效应。混合器效应是传统存储设备如何处理I/O请求的结果。在I/O请求仍在I/O队列内时,I/O请求有一些残留上下文。但是,一旦I/O请求到达FTL,任何这样的上下文都会丢失:所有I/O请求在那时看起来都是一样的。结果,图1的存储设备120将不能保证特别的VM的QoS要求。但是如果PBA可以经由LBA-PBA映射(其本身是可逆的)被联结(tied)回特别的I/O队列,则该I/O队列的QoS要求仍然可以被图1的存储设备120定位和满足。
[0117] 值得注意的是,每个命名空间705-1、705-2和705-3都有其自己的命名空间标识符(ID)。在本发明构思的一些实施例中,这些命名空间ID可以对应于作为图6的队列标识符606提供的队列标识符。
[0118] 返回图6,LBA范围属性618可以用多种方式表示。例如,LBA范围属性618可以包括LBA开始627和LBA结束630,它们提供了在图7的LBA的范围710-1、710-2和710-3中的LBA的开始和结束地址。可替代地,给定LBA开始627和队列大小603,有可能推断LBA结束630,这将准许省略LBA结束630。扩展I/O队列创建命令535的结构可以被建立以支持LBA范围属性618上的任何期望的变化,根据需要包括和/或省略参数。
[0119] QoS属性621可以表示任何期望的QoS规定。例如,正在由I/O队列创建命令535建立的队列可以与具有服务级别协议(SLA)的VM相关联,该服务级别协议试图保证VM用户的特别服务级别。QoS属性621可以使用任何期望的形式来表示。图6所示的一些示例形式包括最小保证带宽633、最大保证带宽636、每秒读取请求的最小数量639、每秒读取请求的最大数量642、每秒读取字节的最小数量645、每秒读取字节的最大数量648、每秒写入请求的最小数量651、每秒写入请求的最大数量654、每秒写入字节的最小数量657和每秒写入字节的最大数量660。注意的是,传统SR-IOV解决方案依赖于图3的管理程序310以管理QoS要求;本发明构思的实施例可以将这种管理转移到图3的FPGA 315或图1的存储设备120,从而减少图3的管理程序310上的负载和主机CPU负载,并由此提高整体系统性能。扩展I/O队列创建命令535的结构可以被建立以支持QoS属性621上任何期望的变化,根据需要包括和/或省略参数。
[0120] 最后,共享命名空间属性624可以表示意图为请求创建I/O队列的VM共享对物理存储装置的访问的命名空间的列表。共享命名空间属性的概念代表VM隔离的概念的例外:如果虚拟机共享对公共数据集的访问,则它们可能不会被隔离。但是,由于可能存在多个VM需要共享信息的情形,并且对他们来说共享对公共数据集的访问比对VM之间的消息数据的访问更有效,共享命名空间属性624提供了这种解决方法。共享命名空间属性624可以以任何期望的方式实施:一个示例是I/O队列创建命令535包括共享命名空间ID阵列663,该阵列列出了要对数据集进行共享访问的VM的命名空间ID。
[0121] 图8示出了图1的存储设备120中的门铃的存储器映射,以支持VM隔离。在使用门铃在图1的主机设备105和图1的存储设备120之间通信的传统存储设备中,可以有多个门铃:例如,图5的I/O队列520-1、520-2和520-3中的每一个都有一个门铃。为了支持VM 305-1、
305-2和305-3访问这些门铃,图1的存储设备120可以请求将图1的主机设备105的地址空间的一部分分配给存储设备120。然后,图1的主机设备105的地址空间中的地址可以映射到存储设备105的存储器地址。然后,图3的管理程序310可以向图3的VM 305-1、305-2和305-3提供门铃的地址,使得图3的VM 305-1、305-2和305-3能够通过使用图1的主机设备105的地址空间中的地址来访问门铃。
[0122] 但是在图1的存储设备120的传统实施方式中,这些门铃可以驻留在存储器的连续部段中:图8说明了这一点。在图8中,示出了存储器805,其表示图1的存储设备120或图3的FPGA 315内的存储器。图5的I/O队列520-1、520-2和520-3的门铃的存储器地址810-1、810-2和810-3被示出占据存储器的连续部段,并且全部位于存储器805的单个页面内。虽然图8示出了三个门铃占据存储器地址810-1、810-2和810-3,但是本发明构思的实施例可以包括任何数量的门铃。在图1的主机设备105作为单个设备操作(没有虚拟化)的情形下,这种布置工作良好。但是,在图1的主机设备105支持需要隔离的多个虚拟机的情况下,使所有门铃都驻留在存储器805的同一页面中意味着VM必须共享对存储器的同一页面的访问,这违反了VM隔离的要求。
[0123] 为了解决这个困难,图1的存储设备120或图3的FPGA 315,取决于哪个设备提供门铃,可以在图1的存储器130的不同页面中定位门铃存储器地址,如存储器815中所示。图1的存储设备120或图3的FPGA 315如何在不同页面中定位门铃存储器地址的示例在2015年9月22日提交的美国专利申请序列号14/862,145中示出,该申请现在处于待决状态,该申请已经作为美国专利公开号2016/0306580公开,通过引用合并于此。通过使用门铃跨度值(stride value),门铃存储器地址可以被移位,使得每个门铃位于图1的存储设备120或图3的FPGA 315的不同页面中(在此上下文中,术语“不同页面”意图描述间隔,使得图1的主机设备105的地址空间中的对应的门铃地址基于O/S存储器中页面的大小而位于不同页面中)。然后,因为门铃位于图1的存储设备120或图3的FPGA 315中的不同页面中,所以图1的主机设备105的地址空间中的对应的地址也位于O/S存储器的不同页面中。因此,例如,存储器地址810-1可以映射到存储器地址820-1,存储器地址810-2可以映射到存储器地址820-
2,存储器地址810-3可以映射到存储器地址820-3,等等。由于页面825-1、825-2、825-3和
825-4可以代表存储器的不同页面,在这种映射之后,每个门铃可以驻留在存储器815的不同页面中。结果,VM不共享对图1的存储器130的单个页面的访问来访问门铃,从而支持VM隔离。
[0124] 在图5-图7中,描述集中在提供图5的扩展I/O队列创建命令535的图1的存储设备120和实现VM隔离的图1的存储设备120上。虽然图1的存储设备120可以包括支持VM隔离的必要硬件,但并非每个存储设备都必须包括该硬件。但是通过在系统中包括图3的FPGA 
315,即使当图1的存储设备120不包括SR-IOV所需的硬件时,本发明构思的实施例也可以支持VM隔离和对图1的存储设备120的SR-IOV类型的访问。此外,即使当图1的存储设备120本机支持SR-IOV时,在系统中包括图3的FPGA 315也可以增强图1的存储设备120的功能。
[0125] 首先,FPGA 315可以包括支持VM隔离的必要硬件。参考回图3,由于将被发送到图1的存储设备120的每个请求都可以经过图3的FPGA 315,所以FPGA 315可以拦截打算由图1的存储设备120接收的请求。例如,如果图1的存储设备120不支持图5的扩展I/O队列创建命令535,则图3的FPGA 315可以拦截任何这样的请求,并且自己处置I/O队列创建。图3的FPGA 315可以向图1的存储设备120发送传统I/O队列创建命令,同时自己管理VM隔离,从而提供QoS保证,并在适当时共享命名空间。为此,图3的FPGA 315可以包括类似于图1的存储设备
120中可能以其他方式包括的硬件。图3的FPGA 315可以确定I/O队列中的特别的I/O请求是否在与该I/O队列相关联的LBA 710的范围内(或共享命名空间的一部分)。图3的FPGA315可以组织和排序要发送到图1的存储设备120的I/O请求,以便提供QoS保证。
[0126] 为了支持I/O队列创建和VM隔离,图3的FPGA315可以包括虚拟I/O队列创建命令903,如图9所示。虚拟I/O队列创建命令903非常类似于图6的I/O队列创建命令535,并且包括类似的参数和属性。主要不同在于,鉴于图6的I/O队列创建命令535意图由图1的存储设备120处理(尽管如上所述,图3的FPGA 315可以拦截图6的I/O队列创建命令535,并代之以内部处理),而虚拟I/O队列创建命令903指向图3的FPGA315,而不是意图由图1的存储设备
120处理。
[0127] 因为虚拟I/O队列创建命令903意图实现类似于I/O队列创建命令535的结果,所以虚拟I/O队列创建命令903可以包括与图9的I/O队列创建命令535的属性/参数类似的属性/参数。因此,虚拟I/O队列创建命令可以包括作为传统I/O队列创建命令的一部分的参数,诸如队列大小906(应为正在建立的队列分配多少空间)、队列标识符909(正在建立的提交队列的标识符)、完成队列标识符912(完成队列的标识符)、队列优先级915(正在建立的提交队列的相对优先级)和物理连续标志918(指示提交队列和完成队列是否在物理上连续)。虚拟I/O队列创建命令903还可以包括扩展属性,诸如LBA范围属性921、QoS属性924和共享命名空间属性927。
[0128] 就像图5的I/O队列创建命令535一样,LBA范围属性921可以用多种方式表示。例如,LBA范围属性921可以包括LBA开始930和LBA结束933,它们提供了在图7的LBA范围710-1、710-2和710-3内的LBA的开始和结束地址。可替代地,给定LBA开始930和队列大小906,有可能推断LBA结束933,这将准许省略LBA结束933。扩展虚拟I/O队列创建命令903的结构可以被建立以支持LBA范围属性921上的任何期望的变化,根据需要包括和/或省略参数。
[0129] 类似地,QoS属性924可以表示任何期望的QoS规定。例如,正在由虚拟I/O队列创建命令903建立的队列可以与具有SLA的VM相关联,该SLA试图保证VM用户的特别服务级别。QoS属性924可以使用任何期望的形式来表示。图9所示的一些示例形式包括最小保证带宽
936、最大保证带宽939、每秒读取请求的最小数量942、每秒读取请求的最大数量945、每秒读取字节的最小数量948、每秒读取字节的最大数量951、每秒写入请求的最小数量954、每秒写入请求的最大数量957、每秒写入字节的最小数量960和每秒写入字节的最大数量963。
扩展虚拟I/O队列创建命令903的结构可以被建立以支持QoS属性924上的任何期望的变化,根据需要包括和/或省略参数。
[0130] 最后,共享命名空间属性927可以表示意图为请求创建I/O队列的VM共享对物理存储装置的访问的命名空间的列表。共享命名空间属性的概念代表VM隔离的概念的例外:如果虚拟机共享对公共数据集的访问,则它们可能不会被隔离。但是,由于可能存在多个VM需要共享信息的情形,并且对他们来说共享对公共数据集的访问比对VM之间的消息数据的访问更有效,共享命名空间属性927提供了这种解决方法。共享命名空间属性927可以以任何期望的方式实施:一个示例是虚拟I/O队列创建命令903包括共享命名空间ID阵列966,该阵列列出了要对数据集进行共享访问的VM的命名空间ID。
[0131] 注意的是,在本发明构思的一些实施例中,图1的存储设备120可以包括图6的I/O队列创建命令535,并且因此可以支持创建I/O队列并将其分配给VM 305-1、305-2和305-3。在本发明构思的这样的实施例中,图3的FPGA 315可以简单地接受(take)虚拟I/O队列创建命令903,并将其作为图5的I/O队列创建命令535发送到图1的存储设备120,而不是在图3的FPGA 315中处理虚拟I/O队列创建命令903以创建虚拟I/O队列。
[0132] 但是图3的FPGA 315可以做的不仅仅是卸载(offload)支持SR-IOV类型的操作的硬件(准许图3的FPGA 315与本身不包括SR-IOV类型的硬件的存储设备一起使用)。图3的FPGA 315还可以扩展由图1的存储设备120“提供”的I/O队列的数量。因为图7的主机设备105上的每个VM需要其自己对图1的存储设备120的访问,所以图1的主机设备105上的每个VM需要访问其自己在图1的存储设备120上的VF和I/O队列。但是图1的存储设备120支持的VF和I/O队列的数量可以表示在任何时间点可以访问图1的存储设备120的VM的数量的上界。这个上界可能远低于图3的管理程序310(以及图1的处理器110)可以支持的VM的数量,这意味着要么VM将不能访问图1的存储设备120,要么图1的主机设备105的资源将被闲置。
[0133] 图3的FPGA 315可以通过提供额外的虚拟I/O队列来解决这个问题,该虚拟I/O队列的数量可能远远高于由图1的存储设备120直接提供的I/O队列(以及PF/VF)的数量。图10示出了这种情况。
[0134] 在图10中,假设I/O队列520-1、520-2和520-3表示由图1的存储设备120提供的唯一I/O队列(实际上,I/O队列的数量大于三个,但一般仍小于图1的主机设备105可以同时支持的VM的数量)。如果图1的主机设备105正在运行超过三个VM,那么如果图1的存储设备120是I/O队列的唯一源,则一个或多个VM将没有可用的I/O队列。但是在FPGA 315支持虚拟I/O队列的情况下,这些额外的VM仍然可以访问图1的存储设备120。
[0135] 当图3的管理程序310发出由FPGA 315提供的虚拟I/O队列创建命令903时,FPGA 315可以建立新的虚拟I/O队列。图10示出了五个虚拟I/O队列1005-1、1005-2、1005-3、
1005-4和1005-5,但是FPGA 315可以支持任意数量的虚拟I/O队列(限制由FPGA 315中的门的数量界定)。每个虚拟I/O队列都包括自己的提交队列和完成队列。因此,虚拟I/O队列
1005-1、1005-2、1005-3、1005-4和1005-5分别包括提交队列1010-1、1010-2、1010-3、1010-
4和1010-5,以及分别包括完成队列1015-1、1015-2、1015-3、1015-4和1015-5。
[0136] 每个虚拟I/O队列然后可以与图1的存储设备120的(硬件)I/O队列相关联。FPGA 315可以使用映射逻辑1020,其可以使用任何期望的方法将虚拟I/O队列1005-1至1005-5组织成组,并将它们映射到(硬件)I/O队列520-1、520-2和520-3。例如,在图10中,映射逻辑
1020可以选择虚拟I/O队列1005-1和1005-2以形成与I/O队列520-1相关联的组1025-1,选择虚拟I/O队列1005-3(自身)以形成与I/O队列520-2相关联的组1025-2,以及选择虚拟I/O队列1005-4和1005-5以形成与I/O队列520-3相关联的组1025-3。因此,FPGA 315从图3的VM 
305-1、305-2和305-3接收的任何I/O请求可以被“放置”在适当的虚拟提交队列中,然后被传递到图1的存储设备120的正确(硬件)提交队列。类似地,从(硬件)完成队列接收的响应可以被“放置”在正确的虚拟完成队列中,并“返回”到适当的VM。
[0137] 映射逻辑1020可以使用任何期望的方法将虚拟I/O队列1005-1至1005-5组织成组,其中每个组与特别的(硬件)I/O队列相关联。例如,映射逻辑1020可以将虚拟I/O队列随机分配给组。或者,映射逻辑1020可以以循环(round-robin)方式将虚拟I/O队列分配给组:第一虚拟I/O队列分配给第一组,第二虚拟I/O队列分配给第二组,依此类推,直到所有组都有一个虚拟I/O队列,此后,又从第一组开始,将虚拟I/O队列分配给组。或者,映射逻辑1020可以基于图3的VM 305-1、305-2和305-3的预期I/O负载将虚拟I/O队列分配给组,以尝试平衡组间的I/O负载。或者,映射逻辑1020可以基于为图3的VM 305-1、305-2和305-3指定的相对优先级将虚拟I/O队列分配给组(注意的是,图6的队列优先级612是传统NVMe规范定义的I/O队列创建命令的一部分,以及图9的队列优先级915是图9的虚拟I/O队列创建命令903的一部分)。或者,映射逻辑1020可以基于图9的QoS属性924将虚拟I/O队列分配给组,以试图满足VM 305-1、305-2和305-3的QoS要求。本发明构思的实施例还可以采用其他方法来确定将哪些虚拟I/O队列分配给哪些组。
[0138] 由于FPGA 315知道哪些LBA与每个虚拟I/O队列相关联(经由图9的LBA范围属性921和/或图9的共享命名空间属性927),所以FPGA 315可以通过拒绝不适合该虚拟I/O队列的I/O请求来强制VM隔离。类似地,因为FPGA 315知道VM的QoS要求(经由图9的QoS属性
924),所以FPGA 315可以以满足每个VM的QoS要求的方式将I/O请求转发到I/O队列520-1、
520-2和520-3。因此,例如,如果VM已经建立了每秒至少10个I/O请求的QoS要求(假设可能I/O请求正在等待处理(pending)),则FPGA 315可以在转发来自其他虚拟I/O队列的I/O请求之前优先处理来自对应的虚拟I/O队列的I/O请求。(这个示例有些随意,因为它暗示没有其他VM具有QoS要求:在多个VM具有QoS要求的情况下,FPGA 315可以以满足所有VM QoS要求的方式管理I/O请求)。其他QoS要求,诸如带宽要求,可以经由FPGA 315类似地处置。
[0139] 图11示出了根据本发明构思的实施例的图1的存储设备120为图3的VM 305分配图5的I/O队列520的示例过程的流程图。在图11中,在块1105处,图1的存储设备120可以从图3的管理程序310接收图5的I/O队列创建命令535。可替代地,在块1110处,图1的存储设备120可以从图3的FPGA 315接收图5的I/O队列创建命令535。在任一情况下,图5的I/O队列创建命令535可以包括图7的LBA的范围710。不管图5的I/O队列创建命令535的源如何,在块1115处,图1的存储设备120可以建立图5的I/O队列520。在块1120处,图1的存储设备120可以选择足够大以支持接收到的图7的LBA的范围710的图7的PBA的范围715。在块1125处,图1的存储设备120可以将图7的LBA的范围710映射到图7的PBA的范围715。这样,当图1的存储设备
120接收到I/O请求时,可以仅访问对应于图3的VM 305的图7的PBA的范围715,从而将每个VM与其他VM隔离。以类似的方式,由于图7的LBA的范围710和图7的PBA的范围715之间的映射是可逆的,因此,给定特别的物理地址,可以确定I/O请求的适当上下文,使得能够选择适当的完成队列来通知图3的VM 305I/O请求被完成,如图11的块1130中所建议的(其中I/O请求的成功可以返回到图3的VM 305)。
[0140] 注意的是,块1105和1110建议使用图5的扩展I/O队列创建命令535,而不管图5的I/O队列创建命令535的源如何。虽然本发明构思的实施例包括这样的可能性,但是本发明构思的其他实施例可以包括图1的存储设备120,其不支持图5的扩展I/O队列创建命令535。在本发明构思的这些实施例中,图3的FPGA 315可以支持利用图1的存储设备120模拟SR-IOV的所有功能,并且图1的存储设备120在没有I/O请求的任何上下文的情况下处理I/O请求。换句话说,图3的FPGA 315可以支持所有上下文管理和VM隔离,使图1的存储设备120作为传统存储设备操作,而不实施本发明构思的任何功能。
[0141] 图12示出了根据本发明构思的实施例的图3的FPGA 315为图3的VM 305分配图10的虚拟I/O队列1005的示例过程的流程图。在图12中,在块1205处,图3的FPGA 315可以从图3的管理程序310接收图10的虚拟I/O队列创建命令903。在块1210处,图3的FPGA 315可以为图3的VM 305建立图10的虚拟I/O队列1005。在块1215处,图3的FPGA 315可以向图1的存储设备120发送图5的I/O队列创建命令535。注意的是,如果图1的存储设备120支持,则发送到图1的存储设备120的图5的I/O队列创建命令535可以是该命令的扩展版本,或者如果不支持,则可以是传统I/O队列创建命令。在块1220处,图3的FPGA 315可以从图1的存储设备120接收图5的I/O队列创建命令535的结果。
[0142] 在块1225处,图10的映射逻辑1020可以将图10的虚拟I/O队列1005映射到由图1的存储设备120建立的图5的I/O队列520。在块1230处,图3的FPGA 315可以将图7的LBA的范围710与图10的虚拟I/O队列1005相关联。最后,在块1235处,图3的FPGA 315可以向图3的管理程序310返回成功指示符。
[0143] 图12上面的几个注释是有序的。首先,请注意,虽然在图11的块1105和1110中,图1的存储设备120可能不接收图5的扩展I/O队列创建命令535(在图3的FPGA 315实施本发明构思的所有功能并且图1的存储设备120是传统存储设备的本发明构思的实施例中),但是图3的FPGA 315却不是这样。从图3的管理程序310发送到图1的存储设备120的任何命令,或者从图3的VM 305发送到图1的存储设备120的任何I/O请求,都经过图3的FPGA 315。由于这样的命令将包括I/O队列创建命令(或实际的或虚拟的),所以可以期望图3的FPGA 315接收扩展的I/O队列创建命令。如果图1的存储设备120可以实施图5的I/O队列创建命令535,则图3的FPGA 315根本不需要接收图10的虚拟I/O队列创建命令903(尽管本发明构思的实施例可以包括图3的管理程序310向图3的FPGA 315发送图10的虚拟I/O队列创建命令903,将其留给图3的FPGA 315来自己执行命令或者向图1的存储设备120发出图5的I/O队列创建命令535)。并且如果图3的FPGA 315执行队列到VM分配和上下文管理,则图3的FPGA 315将希望接收图9的虚拟I/O队列创建命令903。
[0144] 第二,请注意,块1215和1220假设图5的I/O队列520尚未在存储设备120上建立。如果在执行期间,图5的I/O队列520已经在图1的存储设备120上建立(例如,如果图3的FPGA 315正在将图10的多个虚拟I/O队列1005映射到图5的存储设备120上的图5的单独I/O队列
520),则块1215和1220可以被省略,如虚线1240所示。
[0145] 第三,图3的FPGA 315可能不需要存储图10的虚拟I/O队列1005的上下文信息。例如,如果图1的存储设备120将图7的LBA的范围710映射到图7的PBA的范围715,并且存储关于图5的I/O队列520的图3的VM 305的上下文信息,则块1230可以被省略,如虚线1245所示。
[0146] 图13示出了根据本发明构思的实施例的图3的管理程序310处理来自图3的VM 305-1、305-2和305-3的管控请求的示例过程的流程图。在图13中,在块1305处,图3的管理程序310可以从图3的VM 305接收管控请求。在块1310处,图3的管理程序310可以捕获该请求。然后,在块1315处,图3的管理程序310可以向图3的FPGA 315发送不同的(如果类似的话)请求:该第二请求可以模拟原始请求。在块1320处,图3的管理程序310可以从图3的FPGA 
315接收结果。注意的是,图3的FPGA 315可能已经在内部处理了第二请求,或者图3的FPGA 
315可能已经将其自己的请求转发到图1的存储设备120:图3的管理程序310不关心图3的FPGA 315如何处理第二请求。最后,在块1325处,图3的管理程序310可以将结果返回到图3的VM 305。
[0147] 图14示出了根据本发明构思的实施例的用于图1的存储设备120或图3的FPGA 315将门铃的图8的存储器地址810映射到图8的不同操作系统页面825以支持VM隔离的示例过程的流程图。注意的是,无论示例过程是由图1的存储设备120还是图3的FPGA 315来实施,示例过程都是相同的。出于描述性的目的,图3的FPGA 315将被描述为执行示例过程,但是本发明构思的实施例扩展到也执行示例过程的图1的存储设备120。
[0148] 在图14中,在块1405处,图3的FPGA 315可以识别用于管理图3的FPGA 315和图3的VM 305之间的通信的门铃。在块1410处,图3的FPGA 315可以基于图1的主机设备105中的图1的存储器130的页面大小,在不同的存储器页面上分布图8的存储器地址820。例如,图3的FPGA 315可以使用门铃跨度值来在不同页面中定位图8的门铃存储器地址820。在块1415处,图3的FPGA 315可以向图1的主机设备105请求地址空间。在块1420处,FPGA 315可以将图8的存储器地址820映射到所请求的地址空间中的存储器地址。以这种方式,可以保持VM隔离,因为没有两个VM 305可以访问它们在公共存储器页面上的门铃。在块1425处,图3的FPGA 315可以向图3的VM 305提供图8的新的存储器地址820。
[0149] 在块1430处,图3的FPGA 315可以从图3的VM 305接收请求以访问在映射的存储器地址处的门铃。在块1435处,图3的FPGA 315可以将映射反转,恢复图8的原始存储器地址820。在块1440处,图3的FPGA 315可以将请求发送到图8的原始存储器地址820。
[0150] 在图11-图14中,示出了本发明构思的一些实施例。但是本领域技术人员将认识到,通过改变块的顺序、省略块或通过包括附图中未示出的块,本发明构思的其他实施例也是可能的。流程图的所有这些变化被认为是本发明构思的实施例,无论是否明确描述。
[0151] 本发明构思的实施例提供了现有技术之上的几个技术优势。首先,通过去除图1的存储设备120中的硬件的要求以支持VM隔离并使用图3的FPGA 315,理论上任何存储设备都可以用于需要SR-IOV类型的功能的系统中,因为图3的FPGA 315可以强制VM隔离。第二,由于图3的FPGA 315可以在安装时编程,所以要由系统提供的特定期望功能可以在安装时建立,而不是在存储设备120的制造点固定(这可能不会为所有安装提供最佳解决方案)。第三,图3的FPGA 315可以提供比图1的存储设备120更多的VF,使得能够在具有更多数量的VM的系统中使用图1的存储设备120。第四,尽管VM隔离由图3的FPGA 315提供,但是对于I/O请求,每个VM仍然可以对图1的存储设备120进行“裸机”访问。第五,门铃存储器地址可以重新映射到不同的O/S存储器页面,进一步增强VM隔离。以及第六,因为I/O请求的上下文可以追溯到特别的I/O队列,即使在从该I/O队列中移除之后,图1的存储设备120仍然可以支持VM的QoS要求,从而避免了混合器效应。
[0152] 下面的讨论意图提供对其中可以实施本发明构思的某些方面的一个或多个合适的机器的简要、一般描述。一个或多个机器可以至少部分地由来自传统输入设备(诸如键盘、鼠标等)的输入、以及通过从另一个机器接收到的指令、与虚拟现实(Virtual Reality,VR)环境的交互、生物反馈或其他输入信号来控制。如本文所使用的,术语“机器”意图广泛地涵盖单个机器、虚拟机或通信耦合的机器、虚拟机或一起操作的设备的系统。示例性机器包括计算设备,诸如个人计算机、工作站、服务器、便携式计算机、手持设备、电话、平板电脑等,以及运输设备,诸如私人或公共交通,例如,汽车、火车、出租车等。
[0153] 一个或多个机器可以包括嵌入式控制器,诸如可编程或非可编程逻辑设备或阵列、专用集成电路(Application Specific Integrated Circuit,ASIC)、嵌入式计算机、智能卡等。一个或多个机器可以利用到一个或多个远程机器的一个或多个连接,诸如通过网络接口、调制解调器或其他通信耦合。机器可以通过物理和/或逻辑网络互连,诸如内部网、互联网、局域网、广域网等。本领域技术人员将理解,网络通信可以利用各种有线和/或无线短程或远程载波和协议,包括射频(Radio Frequency,RF)、卫星、微波、电气和电子工程师协会(Institute of Electrical and Electronics Engineer,IEEE)802.11、 光学、红外、电缆、激光等。
[0154] 本发明构思的实施例可以通过参考或结合相关联的数据来描述,相关联的数据包括功能、过程、数据结构、应用程序等,当相关联的数据被机器访问时,使得机器执行任务或定义抽象数据类型或低级别硬件上下文。相关联的数据可以存储在例如易失性和/或非易失性存储器(例如,RAM、ROM等)中,或其它存储设备及其相关联的存储介质(包括硬盘驱动器、软盘、光学存储装置、磁带、闪存、记忆棒、数字视频盘、生物存储装置等)中。相关联的数据可以以分组、串行数据、并行数据、传播信号等的形式在包括物理和/或逻辑网络的传输环境上传递。并且可以以压缩或加密格式使用。相关联的数据可以在分布式环境中使用,并且在本地和/或远程存储以供机器访问。
[0155] 本发明构思的实施例可以包括包括由一个或多个处理器可执行的指令的有形的、非暂时性的机器可读介质,该指令包括用于执行如本文所述的本发明构思的元素的指令。
[0156] 上述方法的各种操作可以通过能够执行这些操作的任何合适的装置来执行,诸如各种(多个)硬件和/或软件组件、电路和/或(多个)模块。该软件可以包括用于实施逻辑功能的可执行指令的有序列表,并且可以体现在任何“处理器可读介质”中,以供指令执行系统、装置或设备(诸如单核或多核处理器或包含处理器的系统)使用或与指令执行系统、装置或设备结合使用。
[0157] 结合本文公开的实施例描述的方法或算法和功能的块或步骤可以直接体现在硬件中、由处理器执行的软件模块中、或者两者的组合中。如果以软件实施,则这些功能可以作为一个或多个指令或代码存储在有形的、非暂时性的计算机可读介质上或在其上传输。软件模块可以驻留在随机存取存储器(Random Access Memory,RAM)、闪存、只读存储器(ROM)、电可编程ROM(Electrically Programmable ROM,EPROM)、电可擦除可编程ROM(Electrically Erasable Programmable ROM,EEPROM)、寄存器、硬盘、可移动盘、CD ROM或本领域已知的任何其他形式的存储介质中。
[0158] 已经参考示出的实施例描述和示出了本发明构思的原理,应当认识到,示出的实施例可以在不脱离这些原理的情况下在布置和细节上进行修改,并且可以以任何期望的方式组合。并且,尽管前面的讨论集中在特别的实施例上,但是也可以考虑其他配置。特别地,即使在本文使用诸如“根据本发明构思的实施例”等表达方式,这些短语也意味着一般参考实施例可能性,并且不意味着将本发明构思限制于特别的实施例配置。如本文所使用的,这些术语可以参考可组合成其他实施例的相同或不同的实施例。
[0159] 前述说明性实施例不应被解释为限制其发明构思。尽管已经描述了一些实施例,但是本领域技术人员将容易理解,在实质上不脱离本公开的新颖教导和优点的情况下,可以对这些实施例进行许多修改。因此,所有这样的修改都意图包括在权利要求中定义的本发明构思的范围内。
[0160] 本发明构思的实施例可以扩展到以下声明,但不限于此:
[0161] 声明1.本发明构思的实施例包括一种存储设备,包括:
[0162] 用于数据的存储装置;以及
[0163] 至少一个输入/输出(I/O)队列,用于来自主机设备上的至少一个虚拟机(VM)的请求,
[0164] 其中存储设备支持I/O队列创建命令,以请求为至少一个VM中的VM分配至少一个I/O队列的I/O队列,该I/O队列创建命令包括要与I/O队列相关联的逻辑块地址(LBA)的范围的LBA范围属性,并且
[0165] 其中存储设备将LBA的范围映射到存储装置中的物理块地址(PBA)的范围。
[0166] 声明2.本发明构思的实施例包括根据声明1的存储设备,其中:
[0167] 存储设备包括固态驱动器(SSD)存储设备;并且
[0168] SSD存储设备使用到主机设备的非易失性存储器快速(NVMe)接口。
[0169] 声明3.本发明构思的实施例包括根据声明2的存储设备,其中I/O队列包括提交队列和完成队列。
[0170] 声明4.本发明构思的实施例包括根据声明2的存储设备,其中存储设备从主机设备上的管理程序接收I/O队列创建命令。
[0171] 声明5.本发明构思的实施例包括根据声明2的存储设备,其中LBA范围属性包括开始LBA和结束LBA。
[0172] 声明6.本发明构思的实施例包括根据声明2的存储设备,其中:
[0173] LBA范围属性包括开始LBA;并且
[0174] I/O队列创建命令还包括队列大小。
[0175] 声明7.本发明构思的实施例包括根据声明2的存储设备,其中I/O队列创建命令包括用于VM的服务质量(QoS)参数的服务质量属性。
[0176] 声明8.本发明构思的实施例包括根据声明7的存储设备,其中QoS属性从包括最小带宽、最大带宽、每秒读取请求的最小数量、每秒读取请求的最大数量、每秒读取字节的最小数量、每秒读取字节的最大数量、每秒写入请求的最小数量、每秒写入请求的最大数量、每秒写入字节的最小数量和每秒写入字节的最大数量的集合中提取。
[0177] 声明9.本发明构思的实施例包括根据声明2的存储设备,其中I/O队列创建命令包括共享命名空间属性,该属性指定共享对LBA的范围的访问的命名空间的阵列。
[0178] 声明10.本发明构思的实施例包括根据声明2的存储设备,还包括门铃分布逻辑,用于在与第二I/O队列的第二门铃不同的存储器页面中定位I/O队列的第一门铃。
[0179] 声明11.本发明构思的实施例包括根据声明2的存储设备,还包括将多个虚拟I/O队列映射到I/O队列的现场可编程门阵列(FPGA),其中:
[0180] FPGA支持虚拟I/O队列创建命令,以请求分配多个虚拟I/O队列的第一虚拟I/O队列,虚拟I/O队列创建命令包括要与第一虚拟I/O队列相关联的逻辑块地址(LBA)的第二范围的第二LBA范围属性,第一虚拟I/O队列与I/O队列相关联。
[0181] 声明12.本发明构思的实施例包括根据声明11的存储设备,其中FPGA包括映射逻辑,用于将第一虚拟I/O队列映射到存储设备上的I/O队列,使得第一虚拟I/O队列中的从VM接收的I/O请求经由I/O队列被传递到存储设备,并且I/O队列中的从存储设备接收的结果经由第一虚拟I/O队列被传递到VM。
[0182] 声明13.本发明构思的实施例包括根据声明11的存储设备,其中FPGA的第二虚拟I/O队列与I/O队列相关联。
[0183] 声明14.本发明构思的实施例包括根据声明11的存储设备,其中FPGA可操作来调用存储设备上的I/O队列创建命令。
[0184] 声明15.本发明构思的实施例包括根据声明11的存储设备,其中FPGA可操作来从主机设备上的管理程序接收虚拟I/O队列创建命令。
[0185] 声明16.本发明构思的实施例包括根据声明15的存储设备,其中FPGA可操作来从主机设备上的VM的管理程序接收虚拟I/O队列创建命令。
[0186] 声明17.本发明构思的实施例包括根据声明11的存储设备,其中第二LBA范围属性包括第二开始LBA和第二结束LBA。
[0187] 声明18.本发明构思的实施例包括根据声明11的存储设备,其中:
[0188] 第二LBA范围属性包括第二开始LBA;并且
[0189] 虚拟I/O队列创建命令还包括第二队列大小。
[0190] 声明19.本发明构思的实施例包括根据声明11的存储设备,其中虚拟I/O队列创建命令包括用于VM的服务质量参数的第二QoS属性。
[0191] 声明20.本发明构思的实施例包括根据声明19的存储设备,其中第二QoS属性从包括第二最小带宽、第二最大带宽、第二每秒读取请求的最小数量、第二每秒读取请求的最大数量、第二每秒读取字节的最小数量、第二每秒读取字节的最大数量、第二每秒写入请求的最小数量、第二每秒写入请求的最大数量、第二每秒写入字节的最小数量和第二每秒写入字节的最大数量的集合中提取。
[0192] 声明21.本发明构思的实施例包括根据声明11的存储设备,其中虚拟I/O队列创建命令包括第二共享命名空间属性,该属性指定共享对LBA的范围的访问的命名空间的第二阵列。
[0193] 声明22.本发明构思的实施例包括根据声明2的存储设备,其中FPGA还包括门铃分布逻辑,用于在与第二虚拟I/O队列的第二门铃不同的存储器页面中定位第一虚拟I/O队列的第一虚拟门铃。
[0194] 声明23.本发明构思的实施例包括现场可编程门阵列(FPGA),包括:
[0195] 至少一个虚拟输入/输出(I/O)队列,用于来自主机设备上的至少一个虚拟机(VM)的请求;以及
[0196] 映射逻辑,用于将至少一个虚拟I/O队列的虚拟I/O队列映射到存储设备上的I/O队列,使得虚拟I/O队列中的从VM接收的I/O请求经由I/O队列被传递到存储设备,并且I/O队列中的从存储设备接收的结果经由虚拟I/O队列被传递到VM,
[0197] 其中FPGA支持虚拟I/O队列创建命令,以请求为至少一个VM的VM分配至少一个虚拟I/O队列的虚拟I/O队列,该虚拟I/O队列创建命令包括要与虚拟I/O队列相关联的逻辑块地址(LBA)的范围的LBA范围属性,并且
[0198] 其中与FPGA分离但连接到FPGA的存储设备将LBA的范围映射到存储设备中的物理块地址(PBA)的范围。
[0199] 声明24.本发明构思的实施例包括根据声明23的FPGA,其中虚拟I/O队列包括提交队列和完成队列。
[0200] 声明25.本发明构思的实施例包括根据声明23的FPGA,其中FPGA从主机设备上的VM的管理程序接收虚拟I/O队列创建命令。
[0201] 声明26.本发明构思的实施例包括根据声明23的FPGA,其中LBA范围属性包括开始LBA和结束LBA。
[0202] 声明27.本发明构思的实施例包括根据声明23的FPGA,其中:
[0203] LBA范围属性包括开始LBA;并且
[0204] 虚拟I/O队列创建命令还包括队列大小。
[0205] 声明28.本发明构思的实施例包括根据声明23的FPGA,其中虚拟I/O队列创建命令包括用于VM的服务质量(QoS)参数的服务质量属性。
[0206] 声明29.本发明构思的实施例包括根据声明28的FPGA,其中QoS属性从包括最小带宽、最大带宽、每秒读取请求的最小数量、每秒读取请求的最大数量、每秒读取字节的最小数量、每秒读取字节的最大数量、每秒写入请求的最小数量、每秒写入请求的最大数量、每秒写入字节的最小数量和每秒写入字节的最大数量的集合中提取。
[0207] 声明30.本发明构思的实施例包括根据声明23的FPGA,其中虚拟I/O队列创建命令包括共享命名空间属性,该属性指定共享对LBA的范围的访问的命名空间的阵列。
[0208] 声明31.本发明构思的实施例包括根据声明23的FPGA,其中FPGA将多个虚拟I/O队列映射到存储设备上的I/O队列。
[0209] 声明32.本发明构思的实施例包括根据声明31的FPGA,其中FPGA可操作以调用存储设备上的I/O队列创建命令来创建I/O队列。
[0210] 声明33.本发明构思的实施例包括根据声明32的FPGA,其中I/O队列创建命令包括要与I/O队列相关联的LBA的第二范围的第二LBA属性。
[0211] 声明34.本发明构思的实施例包括根据声明23的FPGA,还包括门铃分布逻辑,用于在与第二虚拟I/O队列的第二门铃不同的存储器页面中定位虚拟I/O队列的第一虚拟门铃。
[0212] 声明35.本发明构思的实施例包括一种方法,包括:
[0213] 在存储设备处接收用于主机设备上的第一VM的I/O队列创建命令,该I/O队列创建命令至少包括要与存储设备上的I/O队列相关联的逻辑块地址(LBA)的范围的LBA范围属性;
[0214] 在存储设备上建立I/O队列;
[0215] 在存储设备上选择至少与LBA的范围一样大的物理块地址(PBA)的范围;
[0216] 将LBA的范围映射到PBA的范围;以及
[0217] 返回成功指示符,
[0218] 其中主机设备上的第二VM因此被拒绝访问PBA的范围。
[0219] 声明36.本发明构思的实施例包括根据声明35的方法,其中:
[0220] 存储设备包括固态驱动器(SSD)存储设备;并且
[0221] SSD存储设备使用到主机设备的非易失性存储器快速(NVMe)接口。
[0222] 声明37.本发明构思的实施例包括根据声明36的方法,其中I/O队列包括提交队列和完成队列。
[0223] 声明38.本发明构思的实施例包括根据声明36的方法,其中接收主机设备上的第一VM的I/O队列创建命令包括从主机设备上的第一VM的管理程序接收I/O队列创建命令。
[0224] 声明39.本发明构思的实施例包括根据声明36的方法,其中接收主机设备上的第一VM的I/O队列创建命令包括从主机设备上的第一VM的现场可编程门阵列(FPGA)接收I/O队列创建命令。
[0225] 声明40.本发明构思的实施例包括根据声明39的方法,其中FPGA被包括在存储设备中。
[0226] 声明41.本发明构思的实施例包括根据声明39的方法,其中FPGA与存储设备分离但连接到存储设备。
[0227] 声明42.本发明构思的实施例包括根据声明36的方法,其中LBA范围属性包括开始LBA和结束LBA。
[0228] 声明43.本发明构思的实施例包括根据声明36的方法,其中:
[0229] LBA范围属性包括开始LBA;并且
[0230] I/O队列创建命令还包括队列大小。
[0231] 声明44.本发明构思的实施例包括根据声明36的方法,其中I/O队列创建命令包括用于第一VM的服务质量(QoS)参数的服务质量属性。
[0232] 声明45.本发明构思的实施例包括根据声明44的方法,其中QoS属性从包括最小带宽、最大带宽、每秒读取请求的最小数量、每秒读取请求的最大数量、每秒读取字节的最小数量、每秒读取字节的最大数量、每秒写入请求的最小数量、每秒写入请求的最大数量、每秒写入字节的最小数量和每秒写入字节的最大数量的集合中提取。
[0233] 声明46.本发明构思的实施例包括根据声明36的方法,其中I/O队列创建命令包括共享命名空间属性,该属性指定共享对LBA的范围的访问的命名空间的阵列。
[0234] 声明47.本发明构思的实施例包括根据声明36的方法,还包括:
[0235] 识别与多个I/O队列相关联的多个门铃;
[0236] 将多个门铃中的每一个分配给存储设备中的第一多个存储器地址中的存储器地址,第一多个存储器地址分布在多个存储器页面上;
[0237] 向主机设备请求地址空间;
[0238] 将第一多个存储器地址映射到地址空间中的第二多个存储器地址,第二多个存储器地址分布在多个存储器页面上;以及
[0239] 向第一VM至少提供第二多个存储器地址的门铃地址。
[0240] 声明48.本发明构思的实施例包括根据声明47的方法,还包括:
[0241] 接收门铃请求以访问门铃地址;
[0242] 将门铃地址映射回第一多个存储器地址中的地址;以及
[0243] 将门铃请求发送到第一多个存储器地址中的地址。
[0244] 声明49.本发明构思的实施例包括一种方法,包括:
[0245] 在现场可编程门阵列(FPGA)处从主机设备上的第一VM的管理程序接收虚拟I/O队列创建命令,该虚拟I/O队列创建命令至少包括要与存储设备上的I/O队列相关联的逻辑块地址(LBA)的范围的LBA范围属性;
[0246] 在FPGA上建立第一虚拟I/O队列;
[0247] 向存储设备发送I/O队列创建命令,以在存储设备上建立I/O队列;
[0248] 从存储设备接收结果;
[0249] 将第一虚拟I/O队列映射到I/O队列;
[0250] 将LBA的范围与第一虚拟I/O队列相关联;以及
[0251] 向管理程序返回成功指示符,
[0252] 其中LBA的范围映射到存储设备上的物理块地址(PBA)的范围,并且
[0253] 其中主机设备上的第二VM因此被拒绝访问PBA的范围。
[0254] 声明50.本发明构思的实施例包括根据声明49的方法,其中第一虚拟I/O队列包括提交队列和完成队列。
[0255] 声明51.本发明构思的实施例包括根据声明49的方法,其中FPGA将第一虚拟I/O队列和第二虚拟I/O队列两者映射到I/O队列。
[0256] 声明52.本发明构思的实施例包括根据声明49的方法,其中I/O队列创建命令包括LBA的范围的LBA范围属性。
[0257] 声明53.本发明构思的实施例包括根据声明49的方法,其中LBA范围属性包括开始LBA和结束LBA。
[0258] 声明54.本发明构思的实施例包括根据声明49的方法,其中:
[0259] LBA范围属性包括开始LBA;并且
[0260] 虚拟I/O队列创建命令还包括队列大小。
[0261] 声明55.本发明构思的实施例包括根据声明49的方法,其中虚拟I/O队列创建命令包括用于第一VM的服务质量(QoS)参数的服务质量属性。
[0262] 声明56.本发明构思的实施例包括根据声明55的方法,其中QoS属性从包括最小带宽、最大带宽、每秒读取请求的最小数量、每秒读取请求的最大数量、每秒读取字节的最小数量、每秒读取字节的最大数量、每秒写入请求的最小数量、每秒写入请求的最大数量、每秒写入字节的最小数量和每秒写入字节的最大数量的集合中提取。
[0263] 声明57.本发明构思的实施例包括根据声明49的方法,其中虚拟I/O队列创建命令包括共享命名空间属性,该属性指定共享对LBA的范围的访问的命名空间的阵列。
[0264] 声明58.本发明构思的实施例包括根据声明49的方法,还包括:
[0265] 识别与多个I/O队列相关联的多个门铃;
[0266] 将多个门铃中的每一个分配给FPGA中的第一多个存储器地址中的存储器地址,第一多个存储器地址分布在多个存储器页面上;
[0267] 向主机设备请求地址空间;
[0268] 将第一多个存储器地址映射到地址空间中的第二多个存储器地址,第二多个存储器地址分布在多个存储器页面上;以及
[0269] 向第一VM至少提供第二多个存储器地址的门铃地址。
[0270] 声明59.本发明构思的实施例包括根据声明58的方法,还包括:
[0271] 接收门铃请求以访问门铃地址;
[0272] 将门铃地址映射回第一多个存储器地址中的地址;以及
[0273] 将门铃请求发送到第一多个存储器地址中的地址。
[0274] 声明60.本发明构思的实施例包括一种方法,包括:
[0275] 从主机设备上的虚拟机(VM)接收第一请求,该第一请求去往存储设备;
[0276] 捕获第一请求防止其到达存储设备;
[0277] 向现场可编程门阵列(FPGA)发送第二请求,该第二请求模拟第一请求;
[0278] 从FPGA接收第二请求的结果;以及
[0279] 向VM发送第二请求的结果。
[0280] 声明61.本发明构思的实施例包括根据声明60的方法,其中:
[0281] 第一请求包括访问第一PCI配置空间的第一PCI配置空间请求;并且
[0282] 第二请求包括访问第二PCI配置空间的第二PCI配置空间请求。
[0283] 声明62.本发明构思的实施例包括根据声明60的方法,其中:
[0284] 第一请求包括对于存储设备创建I/O队列的I/O队列创建请求;并且
[0285] 第二请求包括对于FPGA创建虚拟I/O队列的虚拟I/O队列创建请求。
[0286] 声明63.本发明构思的实施例包括根据声明62的方法,其中第二请求还包括要与虚拟I/O队列相关联的LBA的范围的逻辑块地址(LBA)属性。
[0287] 声明64.本发明构思的实施例包括根据声明63的方法,其中虚拟I/O队列创建请求包括共享命名空间属性,该属性指定共享对LBA的范围的访问的命名空间的阵列。
[0288] 声明65.本发明构思的实施例包括根据声明62的方法,其中第二请求还包括用于VM的服务质量(QoS)参数的服务质量属性。
[0289] 声明66.本发明构思的实施例包括根据声明65的方法,其中QoS属性从包括最小带宽、最大带宽、每秒读取请求的最小数量、每秒读取请求的最大数量、每秒读取字节的最小数量、每秒读取字节的最大数量、每秒写入请求的最小数量、每秒写入请求的最大数量、每秒写入字节的最小数量和每秒写入字节的最大数量的集合中提取。
[0290] 声明67.本发明构思的实施例包括一种包括非暂时性存储介质的物品,该非暂时性存储介质上存储有指令,当由机器执行这些指令时,使得:
[0291] 在存储设备处接收用于主机设备上的第一VM的I/O队列创建命令,该I/O队列创建命令至少包括要与存储设备上的I/O队列相关联的逻辑块地址(LBA)的范围的LBA范围属性;
[0292] 在存储设备上建立I/O队列;
[0293] 在存储设备上选择至少与LBA的范围一样大的物理块地址(PBA)的范围;
[0294] 将LBA的范围映射到PBA的范围;以及
[0295] 返回成功指示符,
[0296] 其中主机设备上的第二VM因此被拒绝访问PBA的范围。
[0297] 声明68.本发明构思的实施例包括根据声明67的物品,其中:
[0298] 存储设备包括固态驱动器(SSD)存储设备;并且
[0299] SSD存储设备使用到主机设备的非易失性存储器快速(NVMe)接口。
[0300] 声明69.本发明构思的实施例包括根据声明68的物品,其中I/O队列包括提交队列和完成队列。
[0301] 声明70.本发明构思的实施例包括根据声明68的物品,其中接收主机设备上的第一VM的I/O队列创建命令包括从主机设备上的第一VM的管理程序接收I/O队列创建命令。
[0302] 声明71.本发明构思的实施例包括根据声明68的物品,其中接收主机设备上的第一VM的I/O队列创建命令包括从主机设备上的第一VM的现场可编程门阵列(FPGA)接收I/O队列创建命令。
[0303] 声明72.本发明构思的实施例包括根据声明71的物品,其中FPGA被包括在存储设备中。
[0304] 声明73.本发明构思的实施例包括根据声明71的物品,其中FPGA与存储设备分离但连接到存储设备。
[0305] 声明74.本发明构思的实施例包括根据声明68的物品,其中LBA范围属性包括开始LBA和结束LBA。
[0306] 声明75.本发明构思的实施例包括根据声明68的物品,其中:
[0307] LBA范围属性包括开始LBA;并且
[0308] I/O队列创建命令还包括队列大小。
[0309] 声明76.本发明构思的实施例包括根据声明68的物品,其中I/O队列创建命令包括用于第一VM的服务质量(QoS)参数的服务质量属性。
[0310] 声明77.本发明构思的实施例包括根据声明76的物品,其中QoS属性从包括最小带宽、最大带宽、每秒读取请求的最小数量、每秒读取请求的最大数量、每秒读取字节的最小数量、每秒读取字节的最大数量、每秒写入请求的最小数量、每秒写入请求的最大数量、每秒写入字节的最小数量和每秒写入字节的最大数量的集合中提取。
[0311] 声明78.本发明构思的实施例包括根据声明68的物品,其中I/O队列创建命令包括共享命名空间属性,该属性指定共享对LBA的范围的访问的命名空间的阵列。
[0312] 声明79.本发明构思的实施例包括根据声明68的物品,还包括:
[0313] 识别与多个I/O队列相关联的多个门铃;
[0314] 将多个门铃中的每一个分配给存储设备中的第一多个存储器地址中的存储器地址,第一多个存储器地址分布在多个存储器页面上;
[0315] 向主机设备请求地址空间;
[0316] 将第一多个存储器地址映射到地址空间中的第二多个存储器地址,第二多个存储器地址分布在多个存储器页面上;以及
[0317] 向第一VM至少提供第二多个存储器地址的门铃地址。
[0318] 声明80.本发明构思的实施例包括根据声明79的物品,还包括:
[0319] 接收门铃请求以访问门铃地址;
[0320] 将门铃地址映射回第一多个存储器地址中的地址;以及
[0321] 将门铃请求发送到第一多个存储器地址中的地址。
[0322] 声明81.本发明构思的实施例包括一种包括非暂时性存储介质的物品,该非暂时性存储介质上存储有指令,当由机器执行这些指令时,使得:
[0323] 在现场可编程门阵列(FPGA)处从主机设备上的第一VM的管理程序接收虚拟I/O队列创建命令,该虚拟I/O队列创建命令至少包括要与存储设备上的I/O队列相关联的逻辑块地址(LBA)的范围的LBA范围属性;
[0324] 在FPGA上建立第一虚拟I/O队列;
[0325] 向存储设备发送I/O队列创建命令,以在存储设备上建立I/O队列;
[0326] 从存储设备接收结果;
[0327] 将第一虚拟I/O队列映射到I/O队列;
[0328] 将LBA的范围与第一虚拟I/O队列相关联;以及
[0329] 向管理程序返回成功指示符,
[0330] 其中LBA的范围映射到存储设备上的物理块地址(PBA)的范围,并且
[0331] 其中主机设备上的第二VM因此被拒绝访问PBA的范围。
[0332] 声明82.本发明构思的实施例包括根据声明81的物品,其中第一虚拟I/O队列包括提交队列和完成队列。
[0333] 声明83.本发明构思的实施例包括根据声明81的物品,其中FPGA将第一虚拟I/O队列和第二虚拟I/O队列两者映射到I/O队列。
[0334] 声明84.本发明构思的实施例包括根据声明81的物品,其中I/O队列创建命令包括LBA的范围的LBA范围属性。
[0335] 声明85.本发明构思的实施例包括根据声明81的物品,其中LBA范围属性包括开始LBA和结束LBA。
[0336] 声明86.本发明构思的实施例包括根据声明81的物品,其中:
[0337] LBA范围属性包括开始LBA;并且
[0338] 虚拟I/O队列创建命令还包括队列大小。
[0339] 声明87.本发明构思的实施例包括根据声明81的物品,其中虚拟I/O队列创建命令包括用于第一VM的服务质量(QoS)参数的服务质量属性。
[0340] 声明88.本发明构思的实施例包括根据声明87的物品,其中QoS属性从包括最小带宽、最大带宽、每秒读取请求的最小数量、每秒读取请求的最大数量、每秒读取字节的最小数量、每秒读取字节的最大数量、每秒写入请求的最小数量、每秒写入请求的最大数量、每秒写入字节的最小数量和每秒写入字节的最大数量的集合中提取。
[0341] 声明89.本发明构思的实施例包括根据声明81的物品,其中虚拟I/O队列创建命令包括共享命名空间属性,该属性指定共享对LBA的范围的访问的命名空间的阵列。
[0342] 声明90.本发明构思的实施例包括根据声明81的物品,还包括:
[0343] 识别与多个I/O队列相关联的多个门铃;
[0344] 将多个门铃中的每一个分配给FPGA中的第一多个存储器地址中的存储器地址,第一多个存储器地址分布在多个存储器页面上;
[0345] 向主机设备请求地址空间;
[0346] 将第一多个存储器地址映射到地址空间中的第二多个存储器地址,第二多个存储器地址分布在多个存储器页面上;以及
[0347] 向第一VM至少提供第二多个存储器地址的门铃地址。
[0348] 声明91.本发明构思的实施例包括根据声明90的物品,还包括:
[0349] 接收门铃请求以访问门铃地址;
[0350] 将门铃地址映射回第一多个存储器地址中的地址;以及
[0351] 将门铃请求发送到第一多个存储器地址中的地址。
[0352] 声明92.本发明构思的实施例包括一种物品,该物品包括非暂时性存储介质,该非暂时性存储介质上存储有指令,当由机器执行这些指令时,使得:
[0353] 从主机设备上的虚拟机(VM)接收第一请求,该第一请求去往存储设备;
[0354] 捕获第一请求防止其到达存储设备;
[0355] 向现场可编程门阵列(FPGA)发送第二请求,该第二请求模拟第一请求;
[0356] 从FPGA接收第二请求的结果;以及
[0357] 向VM发送第二请求的结果。
[0358] 声明93.本发明构思的实施例包括根据声明92的物品,其中:
[0359] 第一请求包括访问第一PCI配置空间的第一PCI配置空间请求;并且
[0360] 第二请求包括访问第二PCI配置空间的第二PCI配置空间请求。
[0361] 声明94.本发明构思的实施例包括根据声明92的物品,其中:
[0362] 第一请求包括对于存储设备创建I/O队列的I/O队列创建请求;并且
[0363] 第二请求包括对于FPGA创建虚拟I/O队列的虚拟I/O队列创建请求。
[0364] 声明95.本发明构思的实施例包括根据声明94的物品,其中第二请求还包括要与虚拟I/O队列相关联的LBA的范围的逻辑块地址(LBA)属性。
[0365] 声明96.本发明构思的实施例包括根据声明95的物品,其中虚拟I/O队列创建请求包括共享命名空间属性,该属性指定共享对LBA的范围的访问的命名空间的阵列。
[0366] 声明97.本发明构思的实施例包括根据声明94的物品,其中第二请求还包括用于VM的服务质量(QoS)参数的服务质量属性。
[0367] 声明98.本发明构思的实施例包括根据声明97的物品,其中QoS属性从包括最小带宽、最大带宽、每秒读取请求的最小数量、每秒读取请求的最大数量、每秒读取字节的最小数量、每秒读取字节的最大数量、每秒写入请求的最小数量、每秒写入请求的最大数量、每秒写入字节的最小数量和每秒写入字节的最大数量的集合中提取。
[0368] 因此,考虑到本文描述的实施例的各种各样的置换,该详细描述和所附材料仅意图说明性的,并且不应被视为限制本发明构思的范围。因此,作为本发明构思要求保护的是所有这样的修改,这些修改可以落入所附权利要求及其等同物的范围和精神内。