使远程存储访问在虚拟化环境中显示为本地的硬件的制作方法

文档序号:17151743发布日期:2019-03-19 23:30阅读:241来源:国知局
使远程存储访问在虚拟化环境中显示为本地的硬件的制作方法

本公开涉及主机计算机系统,并且更具体地涉及包括虚拟机和硬件的主机计算机系统,以使远程存储访问在虚拟化环境中显示为本地。



背景技术:

本文提供的背景描述是为了总体上呈现本公开的背景的目的。目前被称为发明人的工作在本背景技术部分中对该工作进行描述的范围内、以及在申请时不能以其他方式证明是现有技术的本描述的多个方面,既不明确也不暗示地被承认是本公开的现有技术。

在主机操作系统(os)中运行的虚拟机(vm)通常经由主机os中的虚拟化层提供的软件仿真层来访问诸如存储的硬件资源。与直接访问硬件资源相比,仿真层增加了延迟并且通常降低了性能。

该问题的一个解决方案涉及单根输入输出虚拟化(sr-iov)的使用。sr-iov允许诸如附接pcie的存储控制器等的硬件设备针对每个vm创建虚拟功能。虚拟功能可以由vm直接访问,从而绕过主机os的软件仿真层。

虽然sr-iov允许硬件直接由vm使用,但硬件必须用于其特定目的。换句话说,存储设备必须用于存储数据。网络接口卡(nic)必须用于在网络上进行通信。虽然sr-iov有用,但它不允许更高级的存储系统通过网络而被访问。当访问远程存储时,vm想要使用的设备功能是存储,但是vm需要使用以访问远程存储的物理设备是nic。因此,使用逻辑以将存储命令转换为网络命令。在一种方式中,逻辑可以位于运行在vm中的软件中,并且vm可以使用sr-iov以与nic通信。备选地,逻辑可以由主机os运行,并且vm使用主机os的软件仿真层。



技术实现要素:

主机计算机包括虚拟机,其包括设备特定的非易失性存储器接口(nvmi)。非易失性存储器虚拟化抽象层(nvmval)硬件设备与虚拟机的设备特定的nvmi通信。nvmval驱动器由主机计算机执行并且与nvmval硬件设备通信。nvmval硬件设备将本地nvm设备通告给虚拟机的设备特定的nvmi。nvmval硬件设备和nvmval驱动器被配置为使虚拟机对远离虚拟机的远程nvm的访问虚拟化,使得远程nvm对于虚拟机就好像是本地的一样。

在其他特征中,nvmval硬件设备和nvmval驱动器被配置为安装远程存储卷并且使虚拟机对远程存储卷的访问虚拟化。nvmval驱动器从对应于远程存储卷的远程存储系统请求位置信息,将位置信息存储在nvmval硬件设备可访问的存储器中,并且将远程存储卷通知给nvmval硬件设备。nvmval硬件设备和nvmval驱动器被配置为卸装远程存储卷。

在其他特征中,nvmval硬件设备和nvmval驱动器被配置为向远程nvm写入数据。nvmval硬件设备访问存储器以确定写入的数据的存储位置是否已知,如果写入的数据的存储位置已知,则向远程nvm发送写入请求,并且如果写入的数据的存储位置未知,则联系nvmval驱动器。nvmval硬件设备和nvmval驱动器被配置为从远程nvm读取数据。

在其他特征中,nvmval硬件设备访问存储器以确定读取的数据的存储位置是否已知,如果读取的数据的存储位置已知,则向远程nvm发送读取请求,并且如果读取的数据的存储位置未知,则联系nvmval驱动器。nvmval硬件设备使用客户密钥执行加密。

在其他特征中,nvmi包括非易失性存储器快速(nvme)接口。

nvmi执行设备虚拟化。nvmi包括具有单根输入/输出虚拟化(sr-iov)的非易失性存储器快速(nvme)接口。在错误状况发生时,nvmval硬件设备通知nvmval驱动器。nvmval驱动器使用远程nvm的协议来执行错误处置。在错误状况被解决时,nvmval驱动器通知nvmval硬件设备。

在其他特征中,nvmval硬件设备包括:安装/卸装控制器,用以安装对应于远程nvm的远程存储卷并且卸装远程存储卷;写入控制器,用以向远程nvm写入数据;以及读取控制器,用以从远程nvm读取数据。

在其他特征中,主机计算机的操作系统包括监视器(hypervisor)和主机堆栈。nvmval硬件设备绕过监视器和主机堆栈以进行数据路径操作。nvmval硬件设备包括现场可编程门阵列(fpga)。nvmval硬件设备包括专用集成电路。

在其他特征中,nvmval驱动器针对来自虚拟机的从远程nvm的读取请求和来自虚拟机的向远程nvm的写入请求来处置控制路径处理。nvmval硬件设备针对来自虚拟机的从远程nvm的读取请求和来自虚拟机的向远程nvm的写入请求来处置数据路径处理。nvmi包括具有单根输入/输出虚拟化(sr-iov)的非易失性存储器快速(nvme)接口。

本公开的其他应用领域将根据详细描述、权利要求和附图而变得明显。详细描述和特定示例仅旨在用于说明的目的,并不旨在限制本公开的范围。

附图说明

图1是根据本公开的包括虚拟机和非易失性存储器虚拟化抽象层(nvmval)硬件设备的主机计算机的示例的功能性框图。

图2是根据本公开的nvmval硬件设备的示例的功能性框图。

图3是图示根据本公开的用于安装和卸装远程存储卷的方法的示例的流程图。

图4是图示根据本公开的用于将数据从虚拟机写入远程存储卷的方法的示例的流程图。

图5是图示根据本公开的用于从远程存储卷读取数据的方法的示例的流程图。

图6是图示根据本公开的用于读取或写入数据流期间的错误处置的方法的示例的流程图。

图7是根据本公开的包括nvmval硬件设备的系统架构的示例的功能性框图。

图8是根据本公开的虚拟机的虚拟化模型的示例的功能性框图。

图9是根据本公开的本地nvme设备的虚拟化的示例的功能性框图。

图10是根据本公开的命名空间虚拟化的示例的功能性框图。

图11是根据本公开的本地nvm的虚拟化的示例的功能性框图。

图12是根据本公开的nvm访问隔离的示例的功能性框图。

图13a和图13b是根据本公开的远程nvme访问的虚拟化的示例的功能性框图。

图14a和图14b是根据本公开的远程nvme访问的虚拟化的另一示例的功能性框图。

图15是图示根据本公开的对远程nvm的访问的虚拟化的示例的功能性框图。

图16a和图16b是图示根据本公开的远程nvm访问隔离的示例的功能性框图。

图17a和图17b是图示根据本公开的对本地nvme设备和远程nvme设备的复制的示例的功能性框图。

图18a和图18b是图示根据本公开的对本地nvm和远程nvm的复制的示例的功能性框图。

图19a和图19b是图示根据本公开的对用于分布式存储系统的服务器的虚拟化访问的示例的功能性框图。

图20a和20b是图示根据本公开的对用于具有高速缓存的分布式存储系统的服务器的虚拟化访问的示例的功能性框图。

图21是图示根据本公开的存储和转发模型的示例的功能性框图。

图22是图示根据本公开的rnic直接访问模型的示例的功能性框图。

图23是图示根据本公开的直通(cut-through)模型的示例的功能性框图。

图24是图示根据本公开的完全集成模型的示例的功能性框图。

图25a至图25c是图示根据本公开的高级别磁盘写入流程的示例的功能性框图和流程图。

图26a至图26c是图示根据本公开的高级磁盘读取流程的示例的功能性框图和流程图。

在附图中,附图标记可以被复用,以标识相似和/或相同的元件。

具体实施方式

数据中心要求对存储在诸如闪存存储和硬盘驱动(hdd)的永久存储器设备上的nvm的低延迟访问。数据中心中的闪存存储也可以用于存储数据以支持虚拟机(vm)。与hdd相比,闪存设备具有更高的吞吐量和更低的延迟。

针对hdd,最初对诸如windows或linux的主机操作系统(os)中已有的存储软件堆栈进行了优化。然而,hdd通常针对输入/输出(io)操作具有若干毫秒的延迟。由于hdd的高延迟,对存储软件堆栈的代码效率的关注不是最高优先级。随着闪存存储器的成本效率提高以及使用闪存存储和非易失性存储器作为主要后备存储以用于基础设施即服务(iaas)存储或iaas存储的高速缓存,转移关注点以改进io堆栈的性能可以为托管vm提供重要的优势。

诸如但不限于非易失性存储器快速(nvme)的设备特定标准存储接口已经被用于改进性能。设备特定的标准存储接口是提供对闪存存储设备和其他快速存储器设备的vm访问的相对快速的方式。windows和linux生态系统都包含设备特定的nvmi,以向vm和应用提供高性能存储。

利用设备特定的nvmi提供了进入主机os的存储堆栈的最快路径。使用设备特定的nvmi作为非易失性存储的前端将通过使用针对每个os的最优化的软件堆栈并且通过减少用于向vm传递存储功能的总本地cpu负载来改进vm托管的效率。

根据本公开的计算机系统使用硬件设备充当非易失性存储器存储虚拟化抽象层(nvmval)。在前文的描述中,图1至图6描述了架构的示例,非易失性存储器存储虚拟化抽象层(nvmval)硬件设备的功能性框图,以及用于安装/卸装,读取和写入以及错误处置过程的流程的示例。图7至图28c呈现了附加的用例。

现在参考图1至图2,示出了主机计算机60和一个或多个远程存储系统64。主机计算机60运行主机操作系统(os)。主机计算机60包括一个或多个虚拟机(vm)70-1、70-2、......(统称为vm70)。vm70-1和70-2分别包括设备特定的非易失性存储器接口(nvmi)74-1和74-2(统称为设备特定的nvmi74)。在一些示例中,设备特定的nvmi74执行设备虚拟化。

仅作为示例,设备特定的nvmi74可以包括非易失性存储器快速(nvme)接口,但是可以使用其他设备特定的nvmi。仅作为示例,可以使用单根输入/输出虚拟化(sr-iov)来执行设备特定的nvmi74中的设备虚拟化,但是可以使用其他设备虚拟化。

主机计算机60还包括非易失性存储器虚拟化抽象层(nvmval)硬件设备80。nvmmal硬件设备80通告将由与主机计算机60相关联的vm70使用的设备特定的nvmi。nvmval硬件设备80抽象实际的存储和/或联网硬件以及用于与实际的存储和/或联网硬件通信的协议。该方式去除了在vm70内部运行硬件和协议特定的驱动器的需要,同时仍允许vm70使用诸如sr-iov的设备虚拟化来利用直接硬件访问。

在一些示例中,nvmval硬件设备80包括附加卡,该附加卡向vm70提供具有设备虚拟化的设备特定nvmi。在一些示例中,附加卡是外围组件互连快速(pcie)附加卡。在一些示例中,具有设备虚拟化的设备特定nvmi包括具有使用sr-iov的直接硬件访问的nvme接口。在一些示例中,nvme接口允许vm绕过主机os监视器(诸如hyper-v)和主机堆栈而与硬件直接通信,以进行数据路径操作。

nvmval硬件设备80可以使用现场可编程门阵列(fpga)或专用集成电路(asic)来实现。nvmval硬件设备80被编程为通告一个或多个虚拟非易失性存储器接口(nvmi)设备82-1和82-2(统称为nvmi设备82)。在一些示例中,虚拟nvmi设备82是虚拟的非易失性存储器快速(nvme)设备。nvmval硬件设备80支持设备虚拟化,因此在主机os中运行的单独的vm70可以独立地访问nvmval硬件设备80。vm70可以使用诸如nvme驱动器的标准nvmi驱动器与nvmval硬件设备80交互。在一些示例中,vm70中不要求专用的软件。

nvmval硬件设备80与在主机os中运行的nvmval驱动器84一起工作,以将数据存储在远程存储系统64之一中。nvmval驱动器84处置控制流和错误处置功能。nvmval硬件设备80处置数据流功能。

主机计算机60还包括随机存取存储器88,其向nvmval硬件设备80和nvmval驱动器84提供存储。主机计算机60还包括网络接口卡(nic)92,其向网络(诸如向一个或多个远程存储系统64提供连接的本地网络、广域网、云网络、分布式通信系统等)提供网络接口。一个或多个远程存储系统64经由nic92与主机计算机60通信。在一些示例中,可以提供高速缓存94,以减少读取和写入访问期间的延迟。

在图2中,示出了nvmval硬件设备80的示例。nvmval硬件设备80分别向vm74-1和74-2通告虚拟nvmi设备82-1和82-2。加密和循环冗余校验(crc)设备110针对数据写入和读取路径进行加密并且生成和/或检查crc。安装和卸装控制器114安装一个或多个远程存储卷并且根据需要卸装远程存储卷。如下文将进一步描述的,写入控制器118处置向远程nvm的写入数据流期间的处理,并且读取控制器122处置从远程nvm的读取数据流期间的处理。可选的高速缓存接口126分别在写入高速缓存操作和读取高速缓存操作期间存储写入数据和读取数据,以改进延迟。错误控制器124标识错误状况并且启动由nvmval驱动器84进行的错误处置。驱动器接口128和ram接口130分别向nvmval驱动器84和ram88提供接口。ram88可以位于主机计算机中的nvmval驱动器84上,并且可以被高速缓存在nvmval驱动器84上。

现在参考图3至图6,示出了用于执行各种操作的方法。在图3中,示出了用于安装和卸装远程存储卷的方法。当在154处安装新的远程存储卷时,在158处,nvmval驱动器84联系远程存储系统64之一并且取回远程存储系统64中的各个存储块的位置信息。在160处,nvmval驱动器84将位置信息存储在由nvmval硬件设备80访问的ram88中。然后,在162处,nvmval驱动器84将新远程存储卷通知给nvmval硬件设备80并且指令nvmval硬件设备80开始服务针对新远程存储卷的请求。

在图3中,当在164处接收到卸装远程存储卷之一的请求时,在168处,nvmval驱动器84通知nvmval硬件设备80停止服务针对该远程存储卷的请求。在172处,nvmval驱动器84释放ram88中用于存储正被卸装的远程存储卷的位置信息的相应存储器。

在图4中,当在210处nvmval硬件设备80从vm70之一接收到写入请求时,在214处,nvmval硬件设备80查询被存储在ram88中的位置信息,以确定写入的远程位置是否已知。如果该远程位置已知,则在222处nvmval硬件设备80使用nic92将写入请求发送到对应的远程存储系统之一。在224处,nvmval硬件设备80可以可选地将写入数据存储在诸如高速缓存94(用作写入缓存)的本地存储设备中。

为了完成222和224,nvmval硬件设备80使用由nvmval驱动器84提供的控制信息与nic92和高速缓存94直接通信。如果在218处用于写入的远程位置信息未知,则在230处nvmval硬件设备80联系nvmval驱动器84并且使nvmval驱动器84处理该请求。nvmval驱动器84在234处从远程存储系统64之一取回远程位置信息,在238处更新ram88中的位置信息,并且然后通知nvmval硬件设备80再次尝试处理该请求。

在图5中,在254处,nvmval硬件设备80接收来自vm70之一的读取请求。如果在256处nvmval硬件设备80如所确定的正在使用高速缓存94,则在258处nvmval硬件设备80确定数据是否被存储在高速缓存94中。如果在262处数据被存储在高速缓存94中,则在260处利用从nvmval硬件设备80到高速缓存94的直接请求,读取从高速缓存94得以满足。

如果在262处数据未被存储在高速缓存94中,则在264处nvmval硬件设备80查询ram88中的位置信息,以在268处确定ram88是否存储了读取的远程位置。如果在268处ram88存储了读取的远程位置,则在272处nvmval硬件设备80使用nic92将读取请求发送到远程位置。在274处,当接收到数据时,nvmval硬件设备80可以可选地将读取数据存储在高速缓存94(用作读取高速缓存)中。如果用于读取的远程位置信息未知,则在280处nvmval硬件设备80联系nvmval驱动器84并且指令nvmval驱动器84处理该请求。nvmval驱动器84在284处从远程存储系统64之一取回远程位置信息,在286处更新ram88中的位置信息,并且指令nvmval硬件设备80再次尝试处理该请求。

在图6中,如果在310处nvmval硬件设备80在处理向远程存储系统64之一的读取请求或写入请求时遇到错误,则nvmval硬件设备80在314处发送指令nvmval驱动器84纠正错误状况的消息(如果可能的话)。在318处,nvmval驱动器84执行与远程存储系统64中的对应的远程存储系统的协议相对应的错误处置路径。

在一些示例中,nvmval驱动器84联系远程控制器服务以报告错误并且请求解决错误状况。仅作为示例,远程存储节点可能是不可访问的。nvmval驱动器84要求控制器服务将不可访问的节点的职责分配给不同的节点。一旦完成重新分配,nvmval驱动器84就更新ram88中的位置信息以指示新节点。当在322处解决了错误时,则nvmval驱动器84在326处通知nvmval硬件设备80重试该请求。

附加示例和用例

现在参考图7,主机计算机400运行主机os并且包括一个或多个vm410。主机计算机400包括nvmval硬件设备414,其向本地nvme设备420、一个或多个分布式存储系统服务器428、以及一个或多个远程主机430提供虚拟化的直接访问。虽然在以下的示例中示出了nvme设备,但可以使用nvmi设备。虚拟化的直接访问经由rnic434从vm410向远程存储集群424提供。虚拟化的直接访问还经由rnic434从vm410向分布式存储系统服务器428提供。虚拟化的直接访问和复制访问经由rnic434而被提供给远程nvm。虚拟化的直接访问和复制访问还经由rnic434而被提供给连接到远程主机430的远程nvme设备。

在一些示例中,nvmval硬件设备414允许对各种各样的存储技术进行高性能和低延迟的虚拟化的硬件访问,同时完全绕过数据路径上的本地软件堆栈和远程软件堆栈。在一些示例中,nvmval硬件设备414提供对本地附接的标准nvme设备和nvm的虚拟化的直接硬件访问。

在一些示例中,nvmval硬件设备414利用标准rdmanic(rnic)的高性能和低延迟的远程直接存储器访问(rdma)能力来提供对远程标准nvme设备和nvm的虚拟化的直接硬件访问。

在一些示例中,nvmval硬件设备使用本地和远程附接的标准nvme设备和非易失性存储器来提供对复制存储库的虚拟化的直接硬件访问。还提供了对诸如分布式存储系统服务器的高性能分布式存储堆栈的虚拟化的直接硬件访问。

nvmval硬件设备414不要求对nvme规范的sr-iov扩展。在一些部署模型中,nvmval硬件设备414被附接到托管vm410的计算节点上的pcie总线。在一些示例中,nvmval硬件设备414通告标准nvmi或nvme接口。vm认为它正在访问标准的直接附接的nvmi或nvme设备。

现在参考图8,更详细地示出了主机计算机400和vm410。vm410包括软件堆栈,其包括nvme设备驱动器450、队列452(诸如管理队列(admq)、提交队列(sq)和完成队列(cq))、消息信号中断(msix)454和nvme设备接口456。

主机计算机400包括nvmval驱动器460、诸如软件控制和异常队列的队列462、消息信号中断(msix)464和nvmval接口466。nvmval硬件设备414向vm410提供虚拟功能(vf)接口468并且向主机计算机400提供物理功能(pf)接口470。

在一些示例中,由nvmval硬件设备414向vm410暴露的虚拟nvme设备具有多个nvme队列和msix中断,以允许vm410的nvme堆栈利用可用的核心并且优化nvme堆栈的性能。在一些示例中,无需对vm410的nvme软件堆栈修改或增强。在一些示例中,nvmval硬件设备414支持多个vf468。vf468附接到vm410并且被vm410认为是标准的nvme设备。

在一些示例中,nvmval硬件设备414是存储虚拟化设备,其向vm410暴露nvme硬件接口,处理和解释nvme命令,并且与其他硬件设备直接通信以读取或写入vm410的非易失性vm数据。

nvmval硬件设备414不是nvme存储设备,不携带针对数据访问可用的nvm,并且不实现利用rdma联网进行远程访问的rnic功能。相反,nvmval硬件设备414利用已有和现场验证的硬件设备已经提供的功能,并且与这些设备直接通信以完成必要的任务而完全绕过热数据路径上的软件堆栈。

软件和驱动器被用于控制路径上并且执行硬件初始化和异常处置。解耦架构实现了提高的性能,并且专注于开发nvmval硬件设备414的增值特征,同时复用已经可用的硬件以用于商品功能。

现在参考图9至图20b,示出了由nvmval硬件设备414支持的各种部署模型。在一些示例中,模型利用nvmval硬件设备414的共享核心逻辑、处理原理和核心流。虽然下文示出了nvme设备和接口,但可以使用其他设备特定的nvmi或具有设备虚拟化的设备特定的nvmi。

在图9中,示出了本地nvme设备的虚拟化的示例。主机计算机400包括本地nvm480、nvme驱动器481、nvme队列483、msix485和nvme设备接口487。nvmval硬件设备414允许不支持sr-iov虚拟化的标准nvme设备473的虚拟化。图9中的系统去除了对nvme标准的sr-iov扩展的批准(以及nvme供应商的采用)的依赖性,并且将标准(已有)nvme设备的虚拟化带入市场。该方式假设使用一个或多个标准的本地附接的nvme设备,并且不要求任何设备修改。在一些示例中,修改了在主机计算机400上运行的nvme设备驱动器481。

nvme标准定义了提交队列(sq)、管理队列(admq)和完成队列(cq)。admq用于控制流和设备管理。sq和cq用于数据路径。nvmval硬件设备414暴露并且虚拟化sq、cq和admq。

以下是由vmnvme堆栈发布到nvmval硬件设备的nvme队列的nvme命令的高级别处理流程。被发布到admq452的命令由在主机计算机400上运行的nvmval硬件设备414的nvmval驱动器460转发和处置。nvmval驱动器460与主机nvme驱动器481通信,以将经处理的命令传播到本地nvme设备473。在一些示例中,该流程可能要求扩展主机nvme驱动器481。

被发布到nvme提交队列(sq)452的命令由nvmval硬件设备414处理和处置。nvmval硬件设备414解析应该处置nvme命令的本地nvme设备并且将命令发布到各个本地附接的nvme设备482的硬件nvmesq452。

由本地nvme设备487处理的nvme命令的完成被nvmval硬件设备414的nvmecq537拦截并且被传递到指示相应的nvme命令的完成的vmnvmecq。

在图10至图11所示的一些示例中,nvmval硬件设备414通过主机计算机400中的回弹(bounce)缓冲器491复制nvme命令的数据。该方式简化了实现并且减少了对rnic和本地nvme设备的行为和实现的依赖性。

在图10中,使用nvme命名空间启用本地nvme存储的虚拟化。本地nvme设备被配置有多个命名空间。管理堆栈将一个或多个命名空间分配给vm410。管理堆栈使用主机计算机400中的nvmval驱动器460来配置nvmval硬件设备414中的命名空间访问控制表493。管理堆栈经由主机计算机400的nvmval接口466向vm410暴露nvme设备473的命名空间495。nvmval硬件设备414还通过提供具有vm提供的加密密钥的数据加密来提供由vm410进行的本地nvme设备命名空间访问的性能和安全性隔离。

在图11中,示出了主机计算机400的本地nvm480的虚拟化。该方式允许本地nvm480的虚拟化。该模型的效率低于向vm410提供对映射到本地nvm480的文件的直接访问。然而,该方式允许更动态的配置,提供改进的安全性、服务质量(qos)和性能隔离。

nvmval硬件设备414使用客户提供的加密密钥来对vm410之一的数据进行加密。nvmval硬件设备414还提供nvm访问的qos以及性能隔离,并且去除噪声环境问题。

nvmval硬件设备414提供块级别访问和资源分配和隔离。利用对nvmeapi的扩展,nvmval硬件设备414提供字节级别访问。nvmval硬件设备414处理nvme命令,从vm地址空间中的缓冲器453读取数据,处理数据(加密、crc),并且将数据直接写入主机计算机400的本地nvm480。在完成对本地nvm480的直接存储器访问(dma)时,经由nvmval硬件设备414向vm410中的nvmecq452报告相应的nvme完成。nvme管理流被传播到在主机计算机400上运行的nvmval驱动器460,以进行进一步处理。

在一些示例中,nvmval硬件设备414去除了刷新主机cpu高速缓存以保持本地nvm480中的数据的需要。nvmval硬件驱动器414将数据传递到异步dram刷新(adr)域而不依赖于执行主机cpu上的特殊指令,并且不依赖于vm410执行动作以实现对本地nvm480的持续访问。

在一些示例中,在cpu将迅速消耗io的假设下,直接数据输入/输出(ddio)用于允许由主机cpu通过机会性地将io放置到cpu高速缓存来进行加速io处理。在一些示例中,当nvmval硬件设备414将数据写入本地nvm480时,以本地nvm480为目标的数据不被存储到cpu高速缓存。

在图12中,使用文件500来启用主机计算机400的本地nvm480的虚拟化,文件500经由针对本地nvm480的已有fs扩展而被创建。文件500被映射到nvme命名空间。管理堆栈针对vm410分配一个或多个nvm映射的文件,将一个或多个nvm映射的文件映射到对应的nvme命名空间,以及使用nvmval驱动器460来配置nvmval硬件设备414并且经由nvmval硬件设备414的nvme接口向vm410暴露/分配nvmval命名空间。

在图13a和图13b中,示出了远程主机计算机400r的远程nvme设备473的虚拟化。该模型允许经由远程主机计算机400r的rnic434和nvmval硬件设备414对远程nvme设备473进行虚拟化和直接vm访问。示出了诸如rnic434的附加设备。主机计算机400包括rnic驱动器476、rnic队列477、msix478和rnic设备接口479。该模型假设存在管理堆栈,其管理可用于远程访问的共享nvme设备并且处置远程nvme设备资源分配。

远程主机计算机400r的nvme设备473没有被要求支持除了由nvme标准当前定义的功能之外的附加功能,并且没有被要求支持sr-iov虚拟化。主机计算机400的nvmval硬件设备414使用rnic434。在一些示例中,rnic434是经由pcie总线可访问的,并且实现与远程主机计算机400r的nvme设备473的通信。

在一些示例中,用于通信的线路协议符合nvme-over-fabric的定义。对远程主机计算机400r的nvme设备473的访问不包括热数据路径上的软件。nvme管理命令由在主机计算机400上运行的nvmval驱动器460处置,并且经处理的命令在必要时被传播到远程主机计算机400r的nvme设备473。

使用nvme-over-fabric协议将nvme命令(例如磁盘读取/磁盘写入)发送到远程节点,由远程节点处的远程主机计算机400r的nvmval硬件设备414处置该nvme命令,并且将该nvme命令放置到远程主机计算机400r的nvme设备473的相应nvmeq483。

使用rdma读取/写入将数据传播到远程主机计算机400r中的回弹缓冲器491,并且由在远程主机计算机400r处发布到nvme设备473的nvmeq483的相应nvme命令引用该数据。

远程节点上的nvme操作的完成被远程主机计算机400r的nvmval硬件设备414的nvmecq536拦截并且被发送回起始节点。起始节点处的nvmval硬件设备414处理完成并且将nvme完成用信号通知给vm410中的nvmecq452。

nvmval硬件设备414负责对远程主机计算机400r的nvme设备473的qos、安全性和细粒度访问控制。如可以被理解的,nvmval硬件设备414与在不同节点上运行的多个vm共享标准nvme设备。在一些示例中,被存储在远程主机计算机400r的共享nvme设备473上的数据由nvmval硬件设备414使用客户提供的加密密钥加密。

现在参考图14a和图14b,可以以不同的方式执行远程主机计算机400r的nvme设备473的虚拟化。使用nvme命名空间实现远程和共享nvme存储的虚拟化。利用多个命名空间配置远程主机计算机400r的nvme设备473。管理堆栈将来自远程主机计算机400r的一个或多个nvme设备473的一个或多个命名空间分配给vm410。管理堆栈使用nvmval驱动器460来配置nvmval硬件设备414并且经由nvme接口456向vm410暴露/分配nvme命名空间。nvmval硬件设备414提供对远程主机计算机400r的nvme设备473的访问的性能和安全性隔离。

现在参考图15a和图15b,示出了远程nvm的虚拟化。该模型允许直接从虚拟机410对远程nvm进行虚拟化和访问。管理堆栈管理可用于远程访问的集群范围的nvm资源。

与本地nvm访问类似,该模型提供安全性和性能访问隔离。vm410的数据由nvmval硬件设备414使用客户提供的加密密钥来加密。nvmval硬件设备414使用经由pcie总线可访问的rnic434以进行与关联于远程主机计算机400r的nvm480的通信。

在一些示例中,用于通信的线路协议是标准rdma协议。分别使用rdma读取操作和rdma写入操作来访问远程nvm480,该远程nvm480被映射到向vm410中的nvmeq452发布的磁盘读取操作和磁盘写入操作。

nvmval硬件设备414处理由vm410发布的nvme命令,从vm地址空间中的缓冲器453读取数据,处理数据(加密、crc),并且使用rdma操作将数据直接写入远程主机计算机400r上的nvm480。在完成rdma操作后(可能涉及附加消息以确确保持续性),经由vm410中的nvmecq452报告相应的nvme完成。nvme管理流被传播到在主机计算机400上运行的nvmval驱动器460以进行进一步的处理。

nvmval硬件设备414仅在本地节点上使用,该本地节点向vm410提供支持sr-iov的nvme接口以允许直接硬件访问,并且与(附接pcie的)rnic434直接通信以使用rdma协议与远程节点通信。在远程节点上,远程主机计算机400r的nvmval硬件设备414不被用于提供对远程主机计算机400r的nvm480的访问。使用远程主机计算机400r的rnic434直接执行对nvm的访问。

在一些示例中,远程主机计算机400r的nvmval硬件设备414在一些情况下可以被用作临时解决方案。在一些示例中,nvmval硬件设备414提供块级别访问以及资源分配和隔离。在其他示例中,对nvmeapi的扩展用于提供字节级访问。

数据可以直接被传递到远程节点上的adr域,而不依赖于cpu上的特殊指令的执行,并且不依赖于vm410来实现对nvm的持续访问。

现在参考图16,示出了远程nvm访问隔离。远程nvm的虚拟化在概念上类似于对本地nvm的访问的虚拟化。虚拟化基于针对nvm的fs扩展和将文件映射到nvme命名空间。在一些示例中,管理堆栈分配和管理nvm文件和nvme命名空间、文件与命名空间的相关性、访问协调和nvmval硬件设备配置。

现在参考图17a和图17b,示出了对主机计算机400的本地nvme设备473和远程主机计算机400r的nvme设备473的复制。该模型允许直接从vm410虚拟化和访问本地和远程nvme设备473以及数据复制。

nvmval硬件设备414加速跨本地nvme设备473和远程主机计算机400r的一个或多个nvme设备473的数据路径操作和复制。管理、共享和分配本地和远程nvme设备473的资源以及健康监测和故障转移是管理堆栈与nvmval驱动器460协调的责任。

该模型依赖于在图9和图13a和图13b中描述的、由nvmval硬件设备414启用的技术和对本地和远程nvme设备473的直接硬件访问。

nvme命名空间是虚拟化和复制的单元。管理堆栈在本地和远程nvme设备473上分配命名空间,并且将命名空间的复制集合映射到向vm410暴露的nvmval硬件设备nvme命名空间。

现在参考图18a和图18b,示出了对本地和远程nvme设备473的复制。例如,示出了分别经由远程主机计算机400r1、400r2和400r3的远程rnic471对远程主机计算机400r1、400r2和400r3的复制。由vm410发布到nvmval硬件设备nvmecq452的磁盘写入命令由nvmval硬件设备414处理并且被复制到与对应的nvmval硬件设备nvme命名空间相关联的本地和远程nvme设备473。在完成复制的命令后,nvmval硬件设备414向vm410的地址空间中的nvmecq452报告磁盘写入操作的完成。

nvmval硬件设备414检测故障并且经由nvmval驱动器460将故障报告给管理堆栈。异常处置和故障恢复是软件堆栈的责任。

由vm410发布到nvmesq452的磁盘写入命令被转发到保存数据副本的本地和远程nvme设备473之一。经由nvmval硬件设备nvmecq537向vm410报告读取操作的完成。

该模型允许直接从vm410虚拟化和访问本地和远程nvm以及数据复制。该模型非常类似于图18a和图18b中描述的将数据复制到本地和远程nvme设备,仅替换为使用nvm技术。

该模型依赖于分别在图12和图16中描述的、由nvmval硬件设备414支持的技术和对本地和远程nvm的直接硬件访问。该模型还提供了分别在图12和图16中讨论的平台依赖性和解决方案。

现在参考图19a至图19b和图20a至图20b,示出了对分布式存储系统服务器后端的虚拟化的直接访问。该模型提供诸如microsoftazure等的分布式存储平台的虚拟化。

分布式存储系统服务器600包括堆栈602、rnic驱动器604、rnicq606、msix608和rnic设备接口610。分布式存储系统服务器600包括nvm614。图22a中的nvmval硬件设备414实现了分布式存储系统服务器协议的客户端端点的数据路径操作。控制操作由nvmval驱动器460与堆栈602协作来实现。

nvmval硬件设备414解释被发布到向vm410直接暴露的nvmesq452的磁盘读取命令和磁盘写入命令,将这些命令转换为分布式存储系统服务器600的相应命令,解析分布式存储系统服务器600,并且将命令发送到分布式存储系统服务器600以进行进一步的处理。

nvmval硬件设备414读取并且处理vm数据(加密、crc),并且使数据可用于分布式存储系统服务器600的远程访问。分布式存储系统服务器600使用rdma读取或rdma写入来访问由nvmval硬件设备414加密和crc化的vm数据,并且根据分布式存储系统服务器协议将vm410的数据可靠且持久地存储到多个副本。

一旦vm410的数据可靠且持久地被存储在多个位置,分布式存储系统服务器600就发送完成消息。完成消息由nvmval硬件设备414转换为vm410中的nvmecq452。

nvmval硬件设备414使用与rnic434的直接硬件通信来与分布式存储系统服务器600通信。nvmval硬件设备414不在分布式存储系统服务器600上部署并且使用远程主机计算机400r3的远程rnic434来完成所有通信。在一些示例中,nvmval硬件设备414使用线路协议来与分布式存储系统服务器600通信。

分布式存储系统服务器协议的虚拟化单元是虚拟磁盘(vdisk)。vdisk被映射到由nvmval硬件设备414向vm410暴露的nvme命名空间。单个vdisk可以由跨不同分布式存储系统服务器划分的多个分布式存储系统服务器片表示。nvme命名空间到vdisk的映射以及片分辨率由分布式存储系统服务器管理堆栈经由nvmval驱动器460来配置并且由nvmval硬件设备414执行。

nvmval硬件设备414可以与相同主机计算机上的分布式存储系统服务器协议的软件客户端端点共存,并且可以同时访问相同或不同的分布式存储系统服务器并且与其通信。特定vdisk由nvmval硬件设备414或软件分布式存储系统服务器客户端处理。在一些示例中,nvmval硬件设备414实现块高速缓存功能,其允许分布式存储系统服务器利用本地nvme存储作为直写式高速缓存。直写式高速缓存减少了针对磁盘读取操作的来自分布式存储系统服务器的联网和处理负载。高速缓存是可选特征并且可以按vdisk粒度启用和禁用。

现在参考图21至图24,示出了集成模型的示例。在图21中,示出了存储和转发模型。主机计算机400中的回弹缓冲器491用于将数据存储且转发到vm410以及存储且转发来自vm410的数据。nvmval硬件设备414被示为包括pcie接口660、nvmedma662、主机dma664和协议引擎668。下文将提供对存储和转发模型的进一步讨论。

在图22中,rnic434被提供对位于vm410中的数据缓冲器453的直接访问。由于数据不经过nvmval硬件设备414流动,所以在该模型中不能由nvmval硬件设备414进行数据处理。还存在若干需要被解决的技术挑战,并且可能需要rnic434或主机软件堆栈/监视器(诸如hyperv)的专门支持。

在图23中,示出了直通模型。该对等pcie通信模型类似于图21中示出的存储和转发模型,除了数据是根据来自rnic434或nvme设备的pcie请求而经过nvmval硬件设备414流式传输而不是通过主机计算机400中的回弹缓冲器491被存储和转发。

在图24中,示出了完全集成的模型。除了图21至图23示出的软件组件之外,nvmval还包括融合以太网(roce)引擎680上的rdma和以太网接口682。在该模型中,提供了所有组件到相同板/nvmval硬件设备414的完全集成。数据在内部经过不同组件流式传输,而不消耗系统存储器或pcie总线吞吐量。

在下文更详细的讨论中,rnic434被用作nvmval硬件设备414直接与之交互的本地附接的硬件设备的示例。

参见图21,该模型假设利用主机计算机400中的回弹缓冲器491在往返vm410途中存储和转发数据。从vm410中的数据缓冲器453将数据复制到主机计算机400中的回弹缓冲器491。然后,请求rnic434将数据从主机计算机400中的回弹缓冲器491发送到分布式存储系统服务器,反之亦然。在nvmval硬件设备414将数据复制到vm410中的数据缓冲器453之前,整个io由rnic434完全存储到回弹缓冲器491。rnicq477位于主机计算机400中并且由nvmval硬件设备414直接编程。

该模型以增加处理延迟为代价简化了实现。nvmval硬件设备414进行两次数据访问,并且rnic434进行一次数据访问。

针对短io,延迟增加是不显著的并且可以与nvmval硬件设备414中的其余处理被管线化。针对长io,可能存在处理延迟的显著增加。

从存储器和pcie吞吐量角度来看,nvmval硬件设备414处理vm数据(crc、压缩、加密)。将数据复制到回弹缓冲器491允许这发生,并且即使应用决定重写数据,所计算的crc仍然有效。该方式还允许在使用回弹缓冲器491作为平滑缓冲器的同时将nvmval硬件设备414和rnic434流解耦。

参见图22,rnic直接访问模型使rnic434能够直接访问位于vm410中的数据缓冲器453的数据。该模型避免了图21中的存储和转发模型的延迟和pcie/存储器开销。

rnicq477位于主机计算机400中,并且由nvmval硬件设备414以类似于图21中的存储和转发模型的方式编程。用rnic描述符提供的数据缓冲器地址是指vm410中的数据缓冲器453。rnic434可以直接访问vm410中的数据缓冲器453,而不要求nvmval硬件设备414将数据复制到主机计算机400中的回弹缓冲器491。

因为数据不是经过nvmval硬件设备414流式传输的,所以nvmval硬件设备414不能用于卸载数据处理(诸如压缩、加密和crc)。此选项的部署假设数据不要求附加处理。

参见图23,直通方式允许rnic434直接访问vm410中的数据缓冲器453,而不要求nvmval硬件设备414复制经过主机计算机400中的回弹缓冲器491的数据,同时保留nvmval硬件设备414的数据处理卸载能力。

rnicq477位于主机计算机400中并且由nvmval硬件设备414(类似于图21中的存储和转发模型)编程。用rnic描述符提供的数据缓冲器地址被映射到nvmval硬件设备414的地址空间。无论何时rnic434访问数据缓冲器,其pcie读取事务和写入事务都以nvmval硬件设备地址空间(pcie对等)为目标。nvmval硬件设备414解码这些访问,解析vm存储器中的数据缓冲器地址,并且发布以vm存储器中的数据缓冲器为目标的相应pcie请求。pcie事务的完成被解析并且作为rnic请求的完成被传播回来。

该模型避免了通过回弹缓冲器491的数据复制并且保留了nvmval硬件设备414的数据处理卸载能力,但是该模型具有一些劣势。因为rnic434进行的所有数据缓冲器访问都经过nvmval硬件设备414进行隧道传输,所以这些请求的完成延迟趋于增加并且可能影响rnic性能(例如,具体是pcie读取请求的延迟)。

参见图24,在完全集成的模型中,没有控制或数据路径通过主机计算机400,并且所有控制和数据处理完全被包含在nvmval硬件设备414内。从数据流的角度来看,该模型避免了通过主机计算机400的回弹缓冲器491的数据复制,保留了nvmval硬件设备414的数据处理卸载,不增加pcie访问延迟,并且不要求双端口pcie接口来解决写入到写入依赖性。然而,该模型是比图21至图23中的模型更复杂的模型。

现在参考图25a至图25c和图26a至图26c,示出了以分布式存储系统服务器后端存储平台为目标的磁盘读取操作和磁盘写入操作的高级别数据流的示例。类似的数据流适用于其他部署模型。

在图25a至图25c中,简化的数据流假设快速路径操作和请求的成功完成。在1a处,vm410中的nvme软件向nvmesq发布新的磁盘写入请求。在1b处,vm410中的nvme通知nvmval硬件设备414新工作可用(例如,使用门铃(db))。在2a处,nvmval硬件设备从vmnvmesq读取nvme请求。在2b处,nvmval硬件设备414从vm数据缓冲器读取磁盘写入数据。在2c处,nvmval硬件设备414加密数据、计算lbacrc、并且将数据和lbacrc写入主机计算机400中的回弹缓冲器。在一些示例中,在请求被发送分布式存储系统服务器后端700之前,整个io可以在主机计算机400中被存储和转发。

在2d处,nvmval硬件设备414将分布式存储系统服务器请求写入主机计算机400中的请求缓冲器。在2e处,nvmval硬件设备414向rnic434的sq写入引用分布式存储系统请求的写入队列元素(wqe)。在2f处,nvmval硬件设备414通知rnic434新工作可用(例如,使用db)。

在3a处,rnic434读取rnicsqwqe。在3b处,rnic434从主机计算机400中的请求缓冲器读取分布式存储系统服务器请求,并从回弹缓冲器491中的crc页面读取lbacrc。在3c处,rnic434将分布式存储系统服务器请求发送到分布式存储系统服务器后端700。在3d处,rnic434接收以临时被存储在回弹缓冲器491中的数据为目标的rdma读取请求。在3e处,rnic从回弹缓冲器读取数据,并且将数据流式传输到分布式存储系统服务器后端700作为rdma读取响应。在3f处,rnic434接收分布式存储系统服务器响应消息。

在3g处,rnic434将分布式存储系统服务器响应消息写入主机计算机400中的响应缓冲器。在3h处,rnic434将cqe写入主机计算机400中的rnicrcq。在3i处,rnic434将完成事件写入被映射到nvmval硬件设备414的pcie地址空间的rnic完成事件队列元素(ceqe)。

在4a处,nvmval硬件设备414从主机计算机400中的rnicrcq读取cqe。在4b处,nvmval硬件设备414从主机计算机400中的响应缓冲器读取分布式存储系统服务器响应消息。在4c处,nvmval硬件设备414将nvme完成写入vmnvmecq。在4d处,nvmval硬件设备414中断vm410的nvme堆栈。

在5a处,vm410的nvme堆栈处置中断。在5b处,vm410的nvme栈从nvmecq读取磁盘写入操作的完成。

现在参考图26a至26c,示出了高级别磁盘读取流程的示例。该流程假设快速路径操作和请求的成功完成。

在1a处,vm410的nvme堆栈向nvmesq发布新的磁盘读取请求。在1b处,vm410的nvme堆栈通知nvmval硬件设备414新工作可用(经由db)。

在2a处,nvmval硬件设备414从vmnvmesq读取nvme请求。在2b处,nvmval硬件设备414将分布式存储系统服务器请求写入主机计算机400中的请求缓冲器。在2c处,nvmval硬件设备414将引用分布式存储系统服务器请求的wqe写入rnic434的sq。在2d处,nvmval硬件设备414通知rnic434新工作可用。

在3a处,rnic434读取rnicsqwqe。在3b处,rnic434从主机计算机400中的请求缓冲器读取分布式存储系统服务器请求。在3c处,rnic434将分布式存储系统服务器请求发送到分布式存储系统服务器后端700。在3d处,rnic434接收以回弹缓冲器491中的数据和lbacrc为目标的rdma写入请求。在3e处,rnic434将数据和lbacrc写入回弹缓冲器491。在一些示例中,在处理分布式存储系统服务器响应之前,整个io在主机存储器中被存储和转发,并且数据被复制到vm410。

在3f处,rnic434接收分布式存储系统服务器响应消息。在3g处,rnic434将分布式存储系统服务器响应消息写入主机计算机400中的响应缓冲器。在3h处,rnic434将cqe写入rnicrcq。在3i处,rnic434将完成事件写入被映射到nvmval硬件设备414的pcie地址空间的rnicceqe。

在4a处,nvmval硬件设备414从主机计算机400中的rnicrcq读取cqe。在4b处,nvmval硬件设备414从主机计算机400中的响应缓冲器读取分布式存储系统服务器响应消息。在4c处,nvmval硬件设备414从回弹缓冲器491读取数据和lbacrc、解密数据并且验证crc。在4d处,nvmval硬件设备414将经解密的数据写入vm410中的数据缓冲器。在4e处,nvmval硬件设备414将nvme完成写入vmnvmecq。在4f处,nvmval硬件设备414中断vm410的nvme堆栈。

在5a处,vm410的nvme堆栈处置中断。在5b处,vm410的nvme堆栈从nvmecq读取磁盘读取操作的完成。

前面的描述本质上仅是说明性的,决不是旨在限制本公开、其应用或用途。本公开的广泛教导可以以各种形式实现。因此,尽管本公开包括特定示例,但是本公开的真实范围不应该如此限制,因为其他修改将在研究了附图、说明书和所附权利要求之后变得明显。应该理解,方法内的一个或多个步骤可以以不同的顺序(或同时)执行而不改变本公开的原理。此外,尽管上文将实施例中的每个描述为具有一定特征,但是关于本公开的任何实施例描述的那些特征中的任何一个或多个可以在任何其他实施例的特征中实现和/或与任何其他实施例的特征组合,即便该组合没有被明确描述。换句话说,所描述的实施例不是相互排斥的,并且一个或多个实施例彼此的交换仍然在本公开的范围内。

使用各种术语来描述元件之间(例如,模块、电路元件、半导体层等之间)的空间和功能性关系,术语包括“连接”、“接合”、“耦合”、“相邻”、“下一个”、“顶部”、“上方”、“下方”和“放置”。除非明确地被描述为“直接”,否则当在上述公开内容中描述第一元件和第二元件之间的关系时,该关系可以是在第一元件和第二元件之间不存在其他中间元件的直接关系,但也可以是在第一元件和第二元件之间(空间地或功能性地)存在一个或多个中间元件的间接关系。如本文所使用的,短语“a、b和c中的至少一个”应该被解释为使用非排他性逻辑“或”表示逻辑(a“或”b“或”c),并且不应该被解释为表示“a中的至少一个、b中的至少一个和c中的至少一个”。

在附图中,由箭头指示的箭头方向通常表示图示的感兴趣的信息(诸如数据或指令)的流动。例如,当元件a和元件b交换各种信息但从元件a传输到元件b的信息与图示相关时,箭头可以从元件a指向元件b。该单向箭头不意味着没有其他信息从元件b传输到元件a。此外,对于从元件a发送到元件b的信息,元件b可以向元件a发送对信息的请求或接收确认。

如上文所使用的,术语“代码”可以包括软件、固件和/或微代码,并且可以指程序、例程、函数、类、数据结构和/或对象。术语“共享处理器电路”包含单个处理器电路,其执行来自多个模块的一些或所有代码。术语“共享存储器电路”包含单个存储器电路,其存储来自多个模块的一些或所有代码。术语“群组存储器电路”包含存储器电路,其与附加的存储器组合以存储来自一个或多个模块的一些或所有代码。

术语“存储器电路”是术语“计算机可读介质”的子集。如本文所使用的,术语“计算机可读介质”不包含(例如在载波上的)通过介质传播的瞬时电信号或电磁信号;因此,术语“计算机可读介质”可以被认为是有形的和非瞬态的。非瞬态的有形计算机可读介质的非限制性示例是非易失性存储器电路(诸如闪存存储器电路、可擦除可编程只读存储器电路或掩模只读存储器电路)、易失性存储器电路(诸如静态随机存取存储器电路或动态随机存取存储器电路)、磁存储介质(诸如模拟或数字磁带或硬盘驱动器)和光存储介质(诸如cd、dvd或蓝光光盘)。

在本申请中,被描述为具有特定属性或执行特定操作的装置元件被具体配置为具有这些特定属性并且执行这些特定操作。具体地,对执行动作的元件的描述意味着该元件被配置为执行该动作。元件的配置可以包括对元件的编程,诸如通过在与元件相关联的非瞬态的有形计算机可读介质上编码指令。

本申请中描述的装置和方法可以部分地或全部地由专用计算机实现,该专用计算机通过配置通用计算机以执行被实施在计算机程序中的一个或多个特定功能而创建。上文描述的功能块、流程图组件和其他元件充当软件规范,其可以通过熟练的技术人员或程序员的日常工作转换成计算机程序。

计算机程序包括被存储在至少一个非瞬态的有形计算机可读介质上的处理器可执行指令。计算机程序还可以包括或依赖于所存储的数据。计算机程序可以包含与专用计算机的硬件交互的基本输入/输出系统(bios)、与专用计算机的特定设备交互的设备驱动器、一个或多个操作系统、用户应用、后台服务、后台应用等。

计算机程序可以包括:(i)待解析的描述性文本,例如json(javascript对象表示)、html(超文本标记语言)或xml(可扩展标记语言),(ii)汇编代码,(iii)由编译器从源代码生成的目标代码,(iv)由解释器执行的源代码,(v)由即时编译器编译和执行的源代码等。仅作为示例,可以使用来自包括以下的语言的语法来编写源代码:c、c++、c#、objectivec、haskell、go、sql、r、lisp、fortran、perl、pascal、curl、ocaml、html5、ada、asp(活动服务器页面)、php、scala、eiffel、smalltalk、erlang、ruby、lua和

除非使用短语“用于…的部件”来明确描述元件或在使用短语“用于…的操作”或“用于…的步骤”的方法权利要求的情况下,否则权利要求中所述的元件中没有一个旨在是35u.s.c§112(f)意义上的“部件加功能”的元件。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1