用于远程客户端访问存储设备的命令验证的技术的制作方法

文档序号:6532714阅读:162来源:国知局
用于远程客户端访问存储设备的命令验证的技术的制作方法【专利摘要】本发明公开了用于访问被维持在服务器处的存储设备的命令验证的示例。在一些示例中,耦合到所述服务器的网络输入/输出设备可以从远离所述服务器的客户端接收命令。对于这些示例,所述网络输入/输出设备的元件或模块可以能够验证所述命令并且向所述客户端报告所接收的命令的状态。描述和请求保护了其它示例。【专利说明】用于远程客户端访问存储设备的命令验证的技术[0001]相关案例[0002]本申请要求享有2012年1月17日递交的美国临时专利申请号61/587,541的优先权。【
背景技术
】[0003]在示例的常规计算装置中,客户端和服务器包括能够使用远程直接存储器存取(RDM)协议与彼此进行通信的各自的网络接口控制器(NIC)或网络(NW)输入/输出(1/〇)设备。服务器包括执行服务器的操作系统和相关联的驱动器的主机处理器。服务器还可以包括管理对在服务器处或由服务器维持的存储装置的访问的存储控制器。客户端的NWI/O设备向服务器的NWI/O设备发出请求以便将数据写入到由服务器维持的存储装置并且从该存储装置读取数据。服务器的操作系统、相关联的驱动器和主机处理器处理由服务器的NWI/O设备接收的请求,并且向存储控制器发出相对应的请求。存储控制器接收并且执行这些相对应的请求。在执行相对应的请求之后,存储控制器向服务器的操作系统和相关联的驱动器发出请求完成信息(以及相关联的数据,如果已经从存储装置读取了数据)。由此,服务器的操作系统、相关联的驱动器和主机处理器生成相对应的请求完成信息和相关联的数据,并且向服务器的NWI/O设备发出相对应的请求完成信息和相关联的数据。服务器的NWI/O设备接着向客户端的NWI/O设备发出相对应的请求完成信息和相关联的数据。[0004]因而,在前述的常规布置中,服务器的操作系统、相关联的驱动器和主机处理器处理由服务器的NWI/O设备接收的请求以及来自存储装置的完成信息和数据。这会消耗相当大数量的操作系统和主机处理器处理带宽。它也会增加由主机处理器消耗的能量和耗散的热量的量。而且,它会增加在处理由客户端的NWI/O设备发出的请求时涉及的等待时间。【专利附图】【附图说明】[0005]图1说明了第一示例系统。[0006]图2说明了示例完成队列要素。[0007]图3说明了第二示例系统。[0008]图4说明了NVMe命名空间的示例分配方案。[0009]图5说明了第一示例回弹缓冲器分配。[0010]图6说明了第二示例回弹缓冲器分配。[0011]图7说明了示例命名空间上下文索引。[0012]图8说明了示例通信流。[0013]图9说明了示例读取命令格式。[0014]图10说明了示例写入和比较命令格式。[0015]图11说明了示例冲洗和写入坏轨(writeuncorrectable)命令格式。[0016]图12说明了示例NVMe命令完成格式。[0017]图13说明了示例NVMe命令验证表。[0018]图14说明了装置的示例方框图。[0019]图15说明了逻辑流程的示例。[0020]图16说明了存储介质的示例。[0021]图17说明了不例网络输入/输出设备。【具体实施方式】[0022]如在本公开中考虑的,在客户端和服务器之间的常规布置中,当客户端尝试访问由服务器维持的存储装置时,会消耗相当大数量的操作系统和主机处理器处理带宽。近来,服务器包括具有试图最小化操作系统和主机处理器加入的增强能力的NWI/O设备和存储控制器二者。例如,诸如命令提交和命令完成队列的硬件元件可以由服务器的NWI/O设备和存储控制器利用以便使远程客户端能够经由被已知为远程直接存储器存取(RDM)的过程来访问存储装置。[0023]存储控制器还被设计为根据可以与RDM很好地工作的相对新的互连通信协议进行操作。进而,这些存储控制器可以控制对硬盘驱动器(HDD)、固态驱动器(SSD)的访问。SSD可以包括但不局限于各种类型的非易失性存储器,例如3维交叉点存储器、闪存、铁电存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)存储器、聚合物存储器、纳米线、铁电晶体管随机存取存储器(FeTRAM或FeRAM)、纳米线或电可擦除可编程只读存储器(EEPROM)。在一些示例中,对HDD或SSD的访问可以包括在诸如2010年11月发布的外围部件互连(PCI)Express基本规范版本3.0("PCIExpress"或"PCIe")和/或2012年10月发布的非易失性存储器Express(NVMe)规范版本I.1的工业标准或规范(包括后代或变形)中描述的互连通信协议的使用。[0024]根据NVMe规范操作的存储控制器("NVMe控制器")可以能够在允许远程客户端访问诸如SSD或HDD的存储装置时最小化操作系统和主机处理器加入。这些类型的NVMe控制器可能不具有内置的安全检查来控制客户端对SSD或HDD的访问。典型地,访问检查由操作系统处理,并且这会摧毁或降低经过RDMA过程获得的可能效率。然而,NWI/O设备可以具有内置的安全检查,并且可以具有验证客户端以便确保客户端访问SSD的请求被允许或者有效。相对于这些和其它挑战,需要本文描述的示例。[0025]在一些示例中,可以实现与远程客户端访问存储设备的命令验证相关联的技术。对于这些示例,在服务器处用于NWI/O设备的电路可以能够支持与接收、验证和指示对于客户端访问由被维持在服务器处的NVWe控制器控制的存储设备的所接收的命令的状态相关联的一个或多个模块。例如,用于客户端访问存储设备的命令可以在NWI/O设备处被接收。由NWI/O的电路执行的特征和/或逻辑可以基于在命令中指示的操作码(Opcode)是否被NWI/O设备支持来验证该命令。也可以基于在命令中指示的索引标识符是否使客户端与被分配到该客户端的NVMe命名空间标识符相关联来验证该命令。由电路执行的特征和/或逻辑可以接着向客户端指示所接收的命令的状态,作为无效命令(例如,未被授权)或已完成命令(例如,访问被许可并且命令由NVMe控制器执行)中的一个。[0026]图1说明了第一示例系统。如图1所示,第一示例系统包括具有客户端10的系统100,客户端10经由网络50通过通信的方式耦合到服务器20。根据一些示例,术语"主机计算机"、"主机"、"服务器"、"客户端"、"网络节点"和"节点"可以互换地使用,并且可以例如没有限制地意指一个或多个端站、移动互联网设备、智能电话、媒体设备、输入/输出(1/〇)设备、平板计算机、设备、中间站、网络接口、客户端、服务器和/或其部分。尽管以单数形式参照客户端10、服务器20和网络50,但是应该理解,每一个这样的各自部件可以包括多个这样的各自部件,而不偏离这些示例。根据一些示例,"网络"可以是或者包括至少部分地准许、促进和/或允许两个或更多个实体通过通信的方式耦合到一起的任何机制、媒介、模态和/或其部分。并且在一些示例中,如果第一实体能够将一个或多个命令和/或数据发送到第二实体和/或从第二实体接收一个或多个命令和/或数据,则第一实体可以"通过通信的方式耦合"到第二实体。并且,数据和信息可以互换地使用,并且可以是或者包括一个或多个命令(例如,一个或多个程序指令),和/或一个或多个这样的命令可以是或者包括数据和/或信息。并且对于这些示例,"指令"可以包括数据和/或一个或多个命令。[0027]客户端10可以包括在本文被称为网络(NW)I/O设备106的远程直接存储器存取(RDM)使能的网络接口控制器(RNIC)和/或一个或多个(并且在图1所示的示例中是多个)缓冲器13。[0028]如图1所示,服务器20可以包括一个或多个集成电路(IC)芯片180、存储器21和/或存储装置150。一个或多个芯片180可以具有可以包括诸如NWI/O设备108的NW1/〇设备和/或NVMe控制器112的电路118。尽管在图1中没有示出,但是在一些示例中,NWI/O设备108可以是耦合到服务器20并且包括如下面进一步描述的其自己的电路的单独可附接的设备。[0029]并且如图1所示,一个或多个芯片180可以合并在一个或多个多核主机处理器(HP)和/或中央处理单元(CPU)12内。尽管在附图中没有示出,但是服务器20还可以包括一个或多个芯片组或者设备以便包括但不局限于存储器或输入/输出控制器电路。NW1/0设备108、NVMe控制器112和/或HP/CPU12可以能够与彼此进行通信。此外,NWI/O设备108、NVMe控制器112和/或HP/CPU12可以能够访问服务器20的一个或多个其它部件(例如存储器21和/或存储装置150)和/或经由一个或多个这样的芯片组与该一个或多个其它部件进行通信。在一些示例中,客户端10和/或NWI/0设备106可以至少部分地远离(例如在地理上远离)服务器20和/或NWI/O设备108。[0030]根据一些示例,"电路"可以例如单独地或者按照任何组合地包括模拟电路、数字电路、硬连线电路、可编程电路、协处理器电路、状态机电路和/或可以包括可以由可编程电路执行的程序指令的存储器。并且,在一些示例中,处理器、HP、CPU、处理器核心(PC)、核心和控制器分别可以包括能够至少部分地执行一个或多个算术和/或逻辑运算和/或能够至少部分地执行一个或多个指令的各自的电路。集成电路芯片可以包括一个或多个微电子设备、衬底和/或裸片。尽管在图1中没有示出,但是服务器20可以具有可以例如包括各自的键盘、指向设备和显示设备的图形用户接口系统,该图形用户接口系统可以允许人类用户将命令输入到服务器20和/或系统100并且监控服务器20和/或系统100的操作。并且,存储器可以包括下列类型的存储器中的一个或多个:半导体固件存储器、可编程存储器、非易失性存储器、只读存储器、电可编程存储器、随机存取存储器、闪存、磁盘存储器、光盘存储器和/或其它或以后发展的计算机可读和/或可写存储器。[0031]在一些示例中,存储装置150可以包括海量存储装置156。对于这些示例,存储装置150可以包括一个或多个设备,数据可以分别存储在这些设备中和/或从这些设备取回。并且,对于这些示例,海量存储装置可以包括能够进行数据的非易失性存储的存储装置。例如,海量存储装置156可以没有限制地包括一个或多个非易失性机电、磁、光学和/或半导体存储设备。这些设备可以包括硬盘驱动(HDD)或固态驱动(SSD)。SSD可以具有非易失性类型的存储器,例如3维交叉点存储器、闪存、铁电存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)存储器、聚合物存储器、纳米线、铁电晶体管随机存取存储器(FeTRAM或FeRAM)、纳米线或电可擦除可编程只读存储器(EEPROM)。[0032]根据一些示例,NVMe控制器112、存储装置150或海量存储装置156可以能够根据PCIe规范和/或NVMe规范进行操作。[0033]-个或多个机器可读程序指令可以至少部分地存储在存储器21中。在服务器20的操作中,这些机器可读指令可以由一个或多个主机处理器12、NWI/O设备108和/或NVMe控制器112访问和执行。当由一个或多个HP12执行时,这些一个或多个机器可读指令可以导致一个或多个操作系统环境(OSE)32至少部分地由一个或多个HP12执行,并且变得至少部分地驻留在存储器21中。并且当这些机器可读指令由NWI/O设备108和/或NVMe控制器112执行时,这些一个或多个指令可以导致NVMe控制器112的一个或多个命令接口110、一个或多个门铃192、一个或多个指示器202、一个或多个代理194、一个或多个完成队列124和/或一个或多个提交队列126由NWI/O设备108和/或NVMe控制器112建立和/或执行,和/或变得驻留在存储器21中。[0034]根据一些示例,一个或多个0SE32可以包括一个或多个操作系统(OS)31和/或一个或多个NWI/O设备和/或NVMe控制器驱动器33。这些一个或多个驱动器33可以至少部分地相互远离一个或多个0S31。可选地或此外,在不偏离这些示例的情况下,一个或多个0S32和/或驱动器33的一个或多个各自的部分可以不至少部分地相互远离彼此,和/或可以至少部分地包括在彼此中。同样,在不偏离这些示例的情况下,电路118、NWI/O设备108和/或NVMe控制器112可以远离一个或多个未示出的芯片组和/或HP12或者可选地可以包括在该一个或多个未示出的芯片组和/或HP12中。并且在不偏离这些示例的情况下,存储器21的一个或多个部分可以被包括在NWI/O设备108、NVMe控制器112、电路118、HP12和/或IC180中或者被维持在NWI/O设备108、NVMe控制器112、电路118、HP12和/或IC180处。[0035]在一些示例中,实体的一部分或子集可以包括实体的全部或者少于全部。并且对于这些示例,过程、线程、守护程序(daemon)、程序、驱动器、操作系统、应用、内核和/或虚拟机监控器分别可以(1)至少部分地包括和/或(2)至少部分地导致一个或多个操作和/或程序指令的执行和/或由该一个或多个操作和/或程序指令的执行产生。[0036]根据一些示例,命令接口可以至少部分地促进、准许和/或实现数据和/或一个或多个命令的交换、发射和/或接收。对于这些示例,队列、缓冲器和/或门铃可以是数据和/或一个或多个命令可以至少临时地存储在其中的存储器中的一个或多个位置(例如,至少部分地由一个或多个地址指定和/或指示)。并且,队列要素可以包括将被存储和/或存储在一个或多个队列中的数据和/或一个或多个命令,例如以一个或多个描述符和/或一个或多个命令为例。此外,对于这些示例,指示器可以至少部分地指示、处理和/或指定存储器中的一个或多个位置和/或一个或多个项目。[0037]在一些示例中,NWI/O设备106和NWI/O设备108可以根据一个或多个协议经由网络50交换数据和/或命令,这些协议可以符合和/或兼容诸如互联网广域RDMA协议(iWARP)、Infiniband(IB)协议、以太网协议、传输控制协议/互联网协议(TCP/IP)协议和/或融合以太网上RDMA(RoCE)协议的RDMA协议。例如,iWARP协议可以符合和/或兼容Reci〇等人的"AnRDMAProtocolSpecification"(互联网草案规范,互联网工程任务组(IETF),2002年10月21日)。并且例如,以太网协议可以符合和/或兼容2008年12月26日的电气与电子工程师协会公司(IEEE)标准802.3-2008。此外例如,TCP/IP协议可以符合和/或兼容1981年9月公布的互联网工程任务组(IETF)请求评论(RFC)791和793中描述的协议。并且,IB协议可以符合和/或兼容2012年11月公布的Infinband?体系结构规范第二卷版本1.3。此外例如,RoCE协议可以符合和/或兼容2010年4月公布的对Infinband体系结构规范第1卷版本I.2.1的补充,附录A16:"RDMAoverConvergedEthernet(RoCE)"。许多不同的、额外的和/或其它协议可以用于这样的数据和/或命令交换而不偏离这些示例(例如前述、有关和/或其它协议的较早和/或以后发展的版本)。[0038]根据一些示例,电路118可以至少部分地准许和/或促进NW1/0设备106经由NW1/0设备108对一个或多个命令接口110的访问。例如,电路118可以至少部分地准许和/或促进NW1/0设备106能够按照独立于服务器20中的0SE32的方式来访问一个或多个命令接口110。这一访问可以例如包括至少一个队列要素(例如,一个或多个队列要素(QE)116)到一个或多个命令接口110中的一个或多个提交队列114的写入。这可以命令NVMe控制器112至少部分地执行涉及与NVMe控制器112相关联的存储装置150和/或海量存储装置156的一个或多个操作。NVMe控制器112可以至少部分地对一个或多个队列要素116做出响应来执行这些一个或多个操作(例如,至少部分地在一个或多个队列要素116被写入到一个或多个提交队列114之后并且对一个或多个队列要素116被写入到一个或多个提交队列114做出响应)。涉及存储装置150和/或海量存储装置156的这些一个或多个操作可以包括至少部分地涉及存储装置150和/或海量存储装置156的一个或多个写入操作和/或一个或多个读取操作。对于这些示例,客户端10因而可以能够经由由NVMe控制器112执行的一个或多个读取操作和/或一个或多个写入操作来访问存储装置150和/或海量存储装置156。[0039]通过示例的方式,在系统100的操作中,客户端10和/或NW1/0设备106可以向服务器20和/或在NW1/0设备108处的逻辑和/或特征认证客户端10和/或NW1/0设备106。这会导致客户端10和/或NW1/0设备106被许可对至少部分地访问被维持在服务器20的元件处或由该服务器20的元件控制(例如经由NW1/0设备108)的设备的准许。至少部分地与此同时,在此之后或之前,NW1/0设备108、NVMe控制器112、一个或多个代理194和/或0SE32可以至少部分地在存储器21中生成、建立和/或维持一个或多个接口110和/或一个或多个指示器181,该一个或多个接口110和/或一个或多个指示器181可以至少部分地指示一个或多个接口110和/或其部件可以位于存储器21中的哪里(例如,一个或多个位置)。例如,一个或多个指示器181可以至少部分地指示一个或多个提交队列114、一个或多个完成队列120、一个或多个门铃170和/或一个或多个缓冲器130A…130N可能位于其中的存储器21中的一个或多个位置。NW1/0设备108可以经由网络50向NW1/0设备106提供一个或多个指示器181。之后,NW1/0设备106可以使用一个或多个指示器181中的一个或多个来访问一个或多个命令接口110和/或该一个或多个命令接口110的一个或多个部件。一个或多个指示器181可以至少部分地是或者包括存储器21中的一个或多个区域的一个或多个句柄(例如,被指派给事务上下文),例如在这一实施例中可以符合和/或可以兼容RDMA(例如iWARP、IB、R〇CE)协议的一个或多个服务标签(Stag)或事务标签(TTag)。在一些示例中,存储器21中的一个或多个区域可以被包括在被维持用于促进客户端10对存储装置150或海量存储装置156的远程访问的一个或多个回弹缓冲器中。[0040]在接收到一个或多个指示器181之后,客户端10和/或NWI/O设备106可以经由网络50和NWI/O设备108按照旁路和/或独立于0SE32的加入的方式向NVMe控制器112发出对于服务器20的一个或多个命令105。一个或多个命令105可以命令NVMe控制器112执行涉及存储装置150和/或海量存储装置156的一个或多个操作。[0041]根据一些示例,一个或多个命令105可以符合和/或兼容RDMA(例如iWARP、IB、RoCE)协议。一个或多个命令105可以至少部分地包括和/或指定一个或多个队列要素116,该一个或多个队列要素可以至少部分地体现和/或指示涉及被命令的存储装置150和/或海量存储装置156的一个或多个操作。尽管在图1中没有示出,但是一个或多个命令105可以至少部分地包括、指定和/或指示一个或多个指示器181,该一个或多个指示器181可以将一个或多个提交队列114中的一个或多个位置指示为一个或多个队列要求116的一个或多个预期目的地。[0042]在一些示例中,一个或多个队列要素116可以命令NVMe控制器112执行涉及存储装置150和/或海量存储装置156的一个或多个写入操作。因此,一个或多个命令105还可以至少部分地包括和/或指定要由NVMe控制器112写入到存储装置150和/或海量存储装置156的数据199,作为执行一个或多个队列要素116的结果。一个或多个命令105可以至少部分地包括、指定和/或指示指示器181中的一个或多个,该指示器181可以向客户端10指示数据199将被(至少暂时)写入到的一个或多个缓冲器(例如,缓冲器13)的一个或多个位置。[0043]至少部分地对一个或多个命令105的接收做出响应,NWI/O设备108可以按照由一个或多个命令105命令的方式将一个或多个队列要素116和数据199直接分别地写入(例如,根据RDMA(例如iWARP、IB、RoCE)协议和/或按照旁路和/或独立于0SE32的方式)到一个或多个提交队列114以及一个或多个缓冲器130A。因而实际上,通过向NWI/O设备108发出一个或多个命令105,NWI/O设备106可以将一个或多个队列要素116和数据199分别写入到一个或多个提交队列114以及一个或多个缓冲器130A。[0044]一个或多个命令105还可以包括和/或指定一个或多个值201以及一个或多个指示器181,该一个或多个指示器181可以指示一个或多个值201可以被写入到的一个或多个门铃170的一个或多个位置。至少部分地对一个或多个命令105中的这些一个或多个值201以及这些一个或多个指示器181做出响应,NWI/O设备108可以按照由一个或多个命令105命令的方式直接将一个或多个值201写入在门铃170中(例如,根据RDM(例如iWARP、IB、R〇CE)协议和/或按照旁路和/或独立于0SE32的方式)。一个或多个值201在门铃170中的写入可以使门铃170鸣响。因而实际上,通过向NWI/O设备108发出一个或多个命令105,NWI/O设备106可以使门铃170鸣响。[0045]根据一些示例,与实体相关联的门铃的鸣响可以至少部分地包括和/或涉及将一个或多个值写入到一个或多个存储器位置(例如,与门铃相关联、包括和/或体现门铃),这可以至少部分地导致和/或触发实体至少部分地执行一个或多个操作和/或动作。在一些示例中,门铃170和/或192可以对CPU12和/或服务器20表现为分别在NVMe控制器112和/或NWI/O设备108中的各自存储器(未示出)中的一个或多个各自的存储器位置(未示出)。[0046]至少部分地对门铃170的鸣响做出响应,NVMe控制器112可以返回到完全操作状态(例如,如果NVMe控制器112以前进入相对于这一完全操作状态的降低功率状态),并且可以读取被写入到一个或多个提交队列114中的一个或多个队列要素116。NVMe控制器112可以接着至少部分地执行由一个或多个队列要素116指定和/或体现的一个或多个命令。这可以导致NVMe控制器112至少部分地执行涉及存储装置150和/或海量存储装置156的一个或多个操作(例如,存储在一个或多个缓冲器130A中的数据199到存储装置150和/或海量存储装置156的一个或多个写入)。[0047]在涉及存储装置150和/或海量存储装置156的这些一个或多个操作的至少部分完成之后,NVMe控制器112可以至少部分地生成一个或多个完成队列要素(CQE)129并且将该一个或多个完成队列要素(CQE)129写入到一个或多个完成队列124。并且在涉及存储装置150和/或海量存储装置156的这些一个或多个操作的至少部分完成之后,NVMe控制器112也可以至少部分地将一个或多个值写入到与NWI/O设备108相关联的一个或多个门铃192。这可以使一个或多个门铃192鸣响。至少部分地对一个或多个门铃192的鸣响做出响应,NWI/O设备108可以(例如,经由一个或多个RDMA写入操作)将一个或多个完成队列要素190写入到一个或多个完成队列120,并且接着将该一个或多个完成队列要素190转发到客户端10中的一个或多个缓冲器13(例如,经由一个或多个响应197)。[0048]在涉及存储装置150和/或海量存储装置156的一个或多个(例如几个)这样的写入和/或读取操作至少部分地被执行之后,一个或多个代理194可以执行某些管理功能。例如,一个或多个代理194可以至少部分地建立位于与NWI/O设备108相关联的一个或多个提交队列126中的一个或多个提交队列条目/要素(E)196A···196N和/或位于表250(见图2)中的一个或多个提交队列条目/要素QEA…QEN。如下面讨论的,这些要素196A…196N和/或QEA…QEN在被NWI/O设备108至少部分地执行时可以准许和/或促进一个或多个其它队列条目(例如,一个或多个NVMe控制器112完成条目190)至少部分地拷贝或转发到客户端10和/或NWI/O设备106和/或至少部分地拷贝或转发由NVMe控制器112读取的数据。[0049]这些管理功能还可以包括由与一个或多个队列对(例如,提交/完成队列对114、120和/或提交/完成队列对126U24)相关联的一个或多个指示器(例如,振铃指示器PNTR202)的一个或多个代理194至少部分地更新(例如,适当地推进),该一个或多个队列对与NWI/O控制器108和NVMe控制器112相关联。这可以准许队列对的新条目存储在将不导致该队列对中的其它条目的错误覆写的位置处。此外,作为这些管理功能的一部分,一个或多个代理194可以指示可以用来被重新使用的一个或多个缓冲器130A…130N。[0050]作为另一示例,一个或多个队列要素116可以命令NVMe控制器112执行涉及存储装置150和/或海量存储装置156的一个或多个读取操作。因此,一个或多个命令105还可以至少部分地包括和/或指定存储装置150和/或海量存储装置156中的一个或多个位置(例如,命名空间),NVMe控制器112将从这些位置读取数据199,作为执行一个或多个队列要素116的结果。[0051]至少部分地对一个或多个命令105的接收做出响应,NWI/O设备108可以按照由一个或多个命令105命令的方式将一个或多个队列要素116直接写入到(例如,根据RDMA(例如iWARP、IB、RoCE)协议和/或按照旁路和/或独立于0SE32的方式)一个或多个提交队列114。因而实际上,通过向NWI/O设备108发出一个或多个命令105,NWI/O设备106可以将一个或多个队列要素116分别写入到一个或多个提交队列114以及一个或多个缓冲器130A。[0052]在这一示例中,一个或多个命令105也可以包括和/或指定一个或多个值201以及一个或多个指示器181,该一个或多个指示器181可以指示一个或多个值201将被写入到的一个或多个门铃170的一个或多个位置。至少部分地对一个或多个命令105中的这些一个或多个值201以及这些一个或多个指示器181做出响应,NWI/O设备108可以按照由一个或多个命令105命令的方式直接(例如,根据RDMA(例如iWARP、IB、R〇CE)协议和/或按照旁路和/或独立于0SE32的方式)将一个或多个值201写入到门铃170中。一个或多个值201到门铃170中的写入可以使门铃170鸣响。因而实际上,通过向NWI/O设备108发出一个或多个命令105,NWI/O设备106可以使门铃170鸣响。[0053]至少部分地对门铃170的鸣响做出响应,NVMe控制器112可以返回到完全操作状态(例如,如果NVMe控制器112先前进入了相对于这一完全操作状态的降低功率状态),并且可以读取被写入到一个或多个提交队列114中的一个或多个队列要素116。NVMe控制器112可以接着至少部分地执行由一个或多个队列要素116指定和/或体现的一个或多个命令。这可以导致NVMe控制器112至少部分地执行涉及存储装置150和/或海量存储装置156的一个或多个操作(例如,存储装置150和/或海量存储装置156的一个或多个读取以便获得数据199)并且将数据199存储在一个或多个缓冲器(例如一个或多个缓冲器130A)中。[0054]在涉及存储装置150和/或海量存储装置156的这些一个或多个操作的至少部分完成之后,NVMe控制器112可以至少部分地生成一个或多个完成队列要素129并且将该一个或多个完成队列要素129写入到一个或多个完成队列124。并且在涉及存储装置150和/或海量存储装置156的这些一个或多个操作的至少部分完成之后,NVMe控制器112也可以至少部分地将一个或多个值写入到与NWI/O设备108相关联的一个或多个门铃192。这可以使一个或多个门铃192鸣响。至少部分地对一个或多个门铃192的鸣响做出响应,NWI/O设备108可以从一个或多个完成队列124获得队列要素129并且将一个或多个完成队列要素190转发或写入到一个或多个完成队列120以便促进数据199(例如,使用NWI/O设备106经由一个或多个RDM写入操作)传送到客户端10中的一个或多个缓冲器13(例如,经由一个或多个响应197)。[0055]根据一些示例,命令接口110可以是异步的,因为例如完成队列要素可以不按照某一顺序被存储在一个或多个完成队列120中,该顺序与下列项目相对应(1)命令队列要素被存储在一个或多个提交队列114中的顺序,(2)这样的命令队列要素由NVMe控制器112执行和/或完成的顺序,和/或(3)完成队列要素190被存储在一个或多个完成队列120中和/或被提供到NWI/O设备106和/或客户端10的顺序。在操作中,NWI/O设备106和/或客户端10可以在从客户端10和/或NWI/O设备106发出的写入命令的情况下对从NWI/O设备108接收的相对应的完成队列要素190适当地重新排序。然而,在读取命令的情况下,在这一实施例中,为了准许从存储装置150和/或海量存储装置156读取的各自数据与用于传输到客户端10和/或NWI/O设备106的相对应的完成队列要素适当地相关联,由NWI/O设备108根据放置在完成队列120中的完成指示产生的每一个完成队列要素(例如,完成队列要素190)可以包括在图2中说明的要素。[0056]如图2所示,完成队列要素(例如,完成队列要素190)可以包括一个或多个命令参数304、一个或多个命令队列标识符306、一个或多个命令队列头部位置指示器308、状态信息310、一个或多个队列定相位(P)312和/或一个或多个命令标识符302。一个或多个命令参数304可以是和/或指示可以与一个或多个完成队列要素190相对应和/或相关联的一个或多个队列要素116和/或命令105的一个或多个命令特定参数。一个或多个命令队列标识符306可以指示和/或指定一个或多个队列要素116被写入到的一个或多个提交队列114。一个或多个命令队列头部位置指示器308可以指示一个或多个队列要素116可以位于的当前位置(例如,在由一个或多个命令队列标识符306表示的一个或多个提交队列114中)。状态信息310可以指示一个或多个命令105和/或一个或多个队列要素116是否成功地由NVMe控制器112执行。一个或多个定相位312可以指示一个或多个完成队列要素190是否构成在一个或多个完成队列120中的最近添加的有效条目(例如,以便进行服务)。一个或多个命令标识符302可以至少部分地指示和/或与相对应的一个或多个队列要素116中的一个或多个相对应的命令标识符相同。命令标识符302可以准许一个或多个完成队列要素190与一个或多个相对应的队列要素116和/或与从存储装置150和/或海量存储装置156读取的各自数据199正确地相关联,作为这些一个或多个相对应的队列要素116的执行的结果。[0057]在一些示例中,一个或多个命令标识符302可以被选择为不与目前可以由还没有由NWI/O设备108提供到客户端10和/或NWI/O设备106的任何完成队列要素使用的任何其它命令标识符相冲突和/或相同。可以在系统100中使用的命令标识符可以被计算和/或预生成,并且可以用作可以至少部分地存储在存储器21中的表250中的各自条目,条目A……条目N,的各自索引,索引A……索引N。表250中的每一个条目,条目A……条目N可以存储可以与NWI/O设备108相关联的一个或多个各自的预计算的和/或预生成的命令队列要素QEA…QEN。每一个各自的要素QEA…QEN可以与一个或多个缓冲器130A…130N中的一个或多个各自的缓冲器相关联。NVMe控制器112可以将从存储装置150和/或海量存储装置156读取的数据存储到其中的该一个或多个缓冲器130A…130N中的每一个缓冲器也可以与系统100中的一个或多个各自的提交标识符和/或各自的条目,条目A……条目N,相关联。[0058]命令队列要素QEA…QEN可以由客户端10和/或一个或多个代理194存储和/或维持在表250中。如果一个或多个缓冲器130A…130N被静态地分配,则表250可以是静态的,并且可以就分配特性方面来说对应到可以在客户端10中被分配的一个或多个缓冲器13。[0059]作为示例,在NVMe控制器112从存储装置150和/或海量存储装置156读取数据199之后,NVMe控制器112可以将数据199存储在可以与一个或多个命令标识符302相关联的一个或多个缓冲器(例如,一个或多个缓冲器130A)中,并且可以将一个或多个队列要素129存储在一个或多个完成队列124中。至少部分地对NVMe控制器112使一个或多个门铃192鸣响做出响应,NWI/O设备108可以至少部分地基于一个或多个队列定相位312来确定一个或多个完成队列120或124中的一个或多个最近添加的有效完成队列。NW1/O设备108可以使用一个或多个完成队列要素190中的一个或多个命令标识符302来在表250中进行索引以便定位表250中可以至少部分地与一个或多个命令标识符302相关联和/或由该一个或多个命令标识符302标识的一个或多个条目(例如,一个或多个条目,条目A)以及一个或多个命令队列要素(例如,一个或多个队列要素QEA)。NWI/O设备108可以至少部分地执行可以与这些一个或多个命令队列要素QEA相关联和/或由这些一个或多个命令队列要素QEA体现的一个或多个命令。这可以至少部分地导致NW1/0108读取一个或多个缓冲器130A以便获得数据199并且将数据199和一个或多个完成队列要素190传输到NWI/0设备106和/或客户端10(例如,经由一个或多个响应197)。结果,数据199和一个或多个完成队列要素190可以被拷贝到一个或多个客户端缓冲器13中。[0060]可选地,在一些示例中,NWI/O设备108可以至少部分地包括状态机(未示出)。这一状态机可以至少部分地独立于可以与NWI/O设备108相关联和/或由NWI/O设备108利用的一个或多个提交队列126和/或与该一个或多个提交队列126分离。这一状态机可以至少部分地基于一个或多个命令标识符302来定位表250中的一个或多个命令队列要素QEA,并且可以将一个或多个队列要素QEA拷贝到一个或多个提交队列126中的一个或多个相对应的提交队列要素196A中。状态机接着可以使用信号通知NWI/0设备108至少部分地访问并且执行一个或多个提交队列126中的一个或多个提交队列要素196A。[0061]进一步可选地,在不偏离这些示例的情况下,在完成涉及存储装置150和/或海量存储装置156的一个或多个读取操作之前,NVMe控制器112可以至少部分地基于一个或多个命令标识符302来至少部分地定位和/或选择表250中和/或来自表250的一个或多个队列要素QEA。NVME控制器112接着可以将一个或多个完成队列要素190写入到一个或多个完成队列120中,并且可以将一个或多个队列要素QEA写入到一个或多个提交队列126中的一个或多个相对应的提交队列要素196A中。NVME控制器112接着可以使一个或多个门铃192鸣响。这可以导致NWI/O设备108至少部分地访问和执行一个或多个提交队列126中的一个或多个提交队列要素196A。这可以至少部分地导致NWI/O设备108读取一个或多个缓冲器130A以便获得数据199并且将数据199和一个或多个完成队列要素190传输到NWI/0设备106和/或客户端10(例如,经由一个或多个响应197)。结果,数据199和/或一个或多个完成队列要素190可以被拷贝到一个或多个客户端缓冲器13中。[0062]在这一可选方案中,至少部分地由NVMe控制器112执行的固件和/或一个或多个代理194可以维持每队列对上下文信息以便指示用于RDMA事务的一个或多个队列。这一上下文信息还可以包括各种指示器(例如,对于提交队列要素196A…196N的一个或多个阵列,以便将数据从一个或多个缓冲器130A…130N移动到一个或多个缓冲器13,和/或一个或多个提交队列126的头部)、一个或多个门铃192的一个或多个位置以及使一个或多个门铃192鸣响的一个或多个值、和/或一个或多个提交队列126的头部和/或指示器的本地拷贝。各种这些指示器(例如,头部和尾部指示器)可以由NVMe控制器112执行的固件动态地更新。[0063]此外或可选地,在不偏离这些示例的情况下,NWI/O设备108和/或NVMe控制器112可以至少部分地被包括在未示出的芯片组中或者未示出的电路板或设备中。并且此外或可选地,在不偏离本实施例的情况下,存储装置150和/或海量存储装置156可以至少部分地被包括在服务器20内部中或者在服务器20外部。[0064]进而,尽管参照作为RNIC的NWI/O设备108和作为NVMe兼容存储控制器的NVMe控制器112进行了前述描述,但是这一实施例的原理可以应用于下列情况,其中可以采用不同于和/或除了RDM或NVMe以外的协议,和/或其中NVMe控制器112可以在执行和/或促进不涉及存储装置150的操作(例如,其它和/或额外的输入/输出和/或通信相关操作)时被涉及。因此,在不偏离上面提到的示例的情况下,NWI/O设备108可以利用和/或客户端10和服务器20之间的通信可以使用不同于和/或除了RDM以外的协议。并且,在不偏离这一实施例的情况下,NWI/O设备108或NVMe控制器112可以在执行可以使用除了PCIe或NVMe协议以外的协议的这样的其它和/或额外的操作时被涉及和/或可以促进这样的其它和/或额外的操作的执行。在这些额外和/或可选的布置中,硬件和/或固件电路(未示出)可以包括在电路118中,该电路118可以至少部分地准许例如经由一个或多个中断机制(例如,一个或多个消息信号通知中断(MSI/MSI-X)和/或其它机制)写入到门铃170和/或192。这一实施例应该被广泛地视为涵盖所有这样的修改、变化和变更。[0065]因而,在一些示例中,电路可以至少部分地被布置为使客户端中的第一NWI/O设备能够经由远离客户端的服务器中的第二NWI/O设备并且按照独立于服务器中的操作系统环境的方式访问服务器的另一(例如,存储装置和/或另一/额外类型的)控制器的至少一个命令接口。客户端中的NWI/0设备以及服务器中的NWI/O可以是或者包括各自的远程直接存储器存取使能的网络接口控制器(例如,能够至少部分地利用RDM和/或经由RDM进行通信的控制器)。命令接口可以包括至少一个(例如,存储装置和/或其它/额外类型的)控制器命令队列。这样的访问可以包括将至少一个队列要素写入到至少一个提交队列以便命令另一控制器执行与另一控制器(例如,NVMe控制器)相关联的至少一个操作(例如,涉及存储装置和/或涉及一个或多个其它和/或额外类型的操作,例如其它和/或额外的输入/输出操作)。另一控制器可以至少部分地对至少一个队列要素做出响应来执行至少一个操作。许多可选形式、变化和修改是可能的。[0066]因而,在一些示例中,服务器20中的NVMe控制器112的一个或多个命令接口110可以由客户端的NWI/O设备106经由一个或多个RDM事务按照旁路、独立于和/或不涉及服务器的0SE32和/或CPU12的方式进行直接访问。有利地,这可以准许存储命令、数据和完成消息在客户端和服务器之间非常快速而有效地并且以减小的等待时间被传递。而且,在这一实施例中,NWI/O设备108和NVMe控制器112之间的交互可以完全或几乎完全由硬件(例如,利用对等存储器和门铃写入)并且也按照旁路、独立于和/或不涉及服务器的0SE32和/或CPU12的方式执行。有利地,这可以准许这样的交互非常快速而有效地并且以减小的等待时间被执行。此外,这一实施例的上述特征可以减小服务器的功率消耗、热耗散和由0SE32和CPU12消耗的带宽的量。[0067]许多其它修改是可能的。例如,如前面陈述的,在这一实施例中,客户端10可以包括多个客户端。如果RDM用于服务器20和客户端10之间的通信,则在这一实施例中,有利地,客户端10可以在执行它们与服务器20、NWI/O设备108和/或NVMe控制器112的通信时在客户端10之间或当中动态地共享缓冲器130A…130N作为缓冲器的公共池。为了准许这样的缓冲器共享,NWI/O设备108可以能够至少部分地操控、调整和/或修改缓冲器指定的信息,该缓冲器指定的信息可以在由客户端10提供到服务器20的命令105中至少部分地被指示,以便允许缓冲器130A…130N和/或其它服务器资源在客户端10当中被共享,而不导致例如竞争相关的问题。[0068]例如,代替和/或除了一个或多个存储器区句柄以外,一个或多个指示器181和/或由一个或多个指示器181指示的STag/TTag还可以包括NWI/O设备108可以将其与一个或多个缓冲器和/或缓冲器130A…130N中的缓冲器池相关联的各自的信息。在这一布置中,客户端10可以利用这样的指示器181执行RDMA读取操作,并且NWI/O设备108可以执行到由各自的信息和/或指示器181指示的一个或多个缓冲器和/或缓冲器池的写入操作。在执行它的操作时,NWI/O设备108可以适当地调整被提供到NVMe控制器112的实际命令和/或命令队列,以便当NVMe控制器112执行这样的命令和/或命令队列要素时导致正确的缓冲器被NVMe控制器112写入,等等。[0069]可选地或此外,在不偏离上述示例的情况下,NWI/O设备108可以包括共享接收队列(未示出)和/或与该共享接收队列相关联以便例如从多个客户端10接收命令105。NWI/O设备108可以能够将一个或多个适当的服务器缓冲器地址、值和/或其它信息至少部分地代替到所接收的命令105的一个或多个部分(例如,队列要素116、值201、指示器181和/或其它信息)中,以便准许一个或多个命令接口110中的结构在多个客户端10之间或当中的共享,而不导致竞争或者性能上的其它降低。在这一布置中,客户端可以不被提供和/或利用存储器控制器的命令队列和/或门铃的一个或多个STag,并且写入到这些结构可以由服务器的NWI/O设备108执行。有利地,这可以准许可以与共享接收队列相关联和/或利用该共享接收队列的多个客户端10至少部分地利用和/或共享相同的存储控制器命令队列、门铃和/或其它结构。[0070]例如,在写入操作的情况下,一个或多个指示器181、一个或多个值201和/或在一个或多个命令105中的其它信息可以至少部分地指示用于写入操作的一个或多个存储控制器STag或TTag(和相关信息)和/或一个或多个完成队列要素可以被写入的一个或多个缓冲器的一个或多个RDMSTag或TTag。至少部分地基于一个或多个所接收的命令105和/或存储在NWI/O设备108中的其它信息,NWI/O设备108可以选择缓冲器130A…130N中的一个或多个缓冲器以及待写入的数据199和到NVMe控制器112的一个或多个相对应的命令队列要素要张贴到的提交队列114中的一个或多个位置。NWI/O设备108可以根据这样的选择来张贴数据199和一个或多个相对应的命令队列要素,并且之后,可以使门铃170鸣响。如由NWI/O设备108张贴的,一个或多个命令队列要素可以指示在一个或多个命令105中提供的一个或多个存储控制器STag或TTag、命令标识符302、安全上下文信息(例如,以便准许一个或多个存储控制器STag或TTag的验证)和/或数据199被张贴到的一个或多个缓冲器的一个或多个STag或TTag。在NVMe控制器112至少部分地完成所请求的一个或多个写入操作并且张贴了一个或多个完成队列要素之后,NVMe控制器112可以使门铃192鸣响。至少部分地基于表125中的信息,NWI/O设备108可以生成一个或多个适当的响应197并且将该一个或多个适当的响应197转发到提供所接收的命令105的一个或多个客户端。[0071]在读取操作的情况下,通常模拟信息可以在命令105中被提供,并且通常模拟操作可以由NWI/O设备108和/或NVMe控制器112执行。然而,在读取操作的情况下,由NVMe控制器112读取的数据199可以由NVMe控制器112存储到由NWI/O设备108指定的一个或多个缓冲器130A…130N,并且可以由NWI/O设备108读取,而不是反之亦然(例如,如在写入操作中的情况)。NWI/O设备108可以在一个或多个响应197中将所读取的数据199传输到提供所接收的命令105的一个或多个客户端。在前述布置中,命令105可以与可以由客户端利用来访问客户端本地的存储装置的命令类似或相同,至少从发起这样的访问的一个或多个客户端执行的应用的观点看。有利地,这可以准许先前被描述为实质上对这些一个或多个客户端执行的应用透明的类型的远程操作和/或RDM事务。[0072]因而,在一些示例中,有利地,多个客户端能够共享存储控制器的命令队列、门铃和/或服务器的缓冲器,和/或使用RDM协议写入到这些结构(经由服务器的NWI/O设备),而不遭受否则可能发生的资源竞争问题(和/或其它缺点)。服务器的NWI/O设备可以能够至少部分地修改与客户端的命令105相关联和/或包括在该客户端的命令105中的信息以便促进这样的共享和/或RDMSTag/TTag信息在客户端之间或当中的共享。有利地,这可以准许RDM协议用于服务器和多个客户端之间的命令通信和/或完成信息,具有改善的可扩充性,同时减小存储器消耗以便实现这样的特征,并且没有通信线路速率的降低。[0073]图3说明了第二示例系统。如图3所示,第二示例系统包括系统300。根据一些示例,系统300可以包括多个客户端节点310-1到310-n(其中"η"表示大于3的任何正整数)和服务器305。对于这些示例,NWI/O设备330、NVMe控制器350和回弹缓冲器360可以与服务器305定位在一起和/或被维持在服务器305处。[0074]在一些示例中,由网络I/O设备330和/或服务器305的电路执行的逻辑和/或特征可以将资源分配给客户端310-1到310-n,以便促进对于由NVMe控制器350控制的存储设备(未示出)的远程访问。对于这些示例,单独的I/O队列对(QP)320-1到320-n和单独的NVMeQP340-1到340-n可以被分别分配或指派给客户端310-1到310-n。并且,回弹缓冲器360的至少部分可以被分配或指派给客户端310-1到310-n。I/OQP320-1到320-n、NVMeQP340-1到340-n或回弹缓冲器360可以是驻留在服务器305处的系统存储器的一部分。可选地,I/OQP320-1到320-n可以被维持在NWI/O设备330处或与该NWI/O设备330在一起,并且NVMeQP340-1到340-n可以被维持在NVMe控制器350处或与该NVMe控制器350在一起。[0075]根据一些示例,I/OQP320-1到320-n可以单独地包括由NWI/O设备330处的逻辑和/或特征利用的命令提交队列和命令完成队列二者以便与客户端310-1到310-n交换关于访问由NVMe控制器350控制的存储装置的命令的信息。并且,NVMeQP340-1到340-n可以单独地包括由NWI/O设备330处和NVMe控制器350处的逻辑和/或特征利用的命令提交队列和命令完成队列以便促进命令从客户端310-1到310-n到NVMe控制器350的转送。对于这些示例,NVMeQP340-1到340-n不直接由客户端310-1到310-n可访问。因为NVMeQP340-1到340-n不直接由客户端310-1到310-n可访问,因此NWI/O设备330处的逻辑和/或特征可以能够在从这些客户端接收的命令被转发或转送到NVMeQP340-1到340-n之前对它们进行验证。[0076]在一些示例中,如下面更详细描述的,由NWI/O设备330处的电路执行的逻辑和/或特征可以首先验证从一个或多个客户端310-1到310-n接收的命令以便访问由NVMe控制器350控制的存储装置。所述逻辑和/或特征可以接着能够将所接收的命令的状态指示为无效的或完成的。作为这一示例过程的一部分,该逻辑和/或特征可以利用I/OQP320-1到320-n、NVMeQP340-l到340-n或回弹缓冲器360来按照与上面针对图1和2描述的类似的方式促进访问。[0077]图4说明了NVMe命名空间的示例分配方案400。根据一些示例,被维持在服务器305(例如,服务器软件)处的逻辑和/或特征可以能够分配给定的NVMe命令空间标识符。这些给定的NVMe命名空间标识符可以接着由NWI/O设备330处的逻辑和/或特征使用作为验证过程的一部分,以便允许对由NVMe控制器350控制的存储装置的至少部分的RDMA访问。对于这些示例,NVMe命名空间标识符可以与包括在存储装置中的大量非易失性存储器相关联,该存储装置可以被格式化为具有逻辑块地址的逻辑块。如图4所示,这些NVMe标识符被表示为NVMe命名空间401、402和403。并且,NVMe命名空间401被表示为被进一步细分为包括401-1、401-2和401-3,而NVMe命名空间403被表示为包括403-1、403-2和403-3。[0078]根据一些示例,被维持在服务器305处的逻辑和/或特征可以将一个或多个命名空间上下文(NSC)指派给NVMe命名空间标识符。例如,如图4所示,NSC11U2和13分别被单独地指派给NVMe命名空间标识符401-U401-2和401-3。同时,NSClO可以被指派给NVMe命名空间标识符401。并且,如图4所示,NSC20、21和22每一个被指派给相同的命名空间标识符402。如下面更多提到的,所指派或分配的NSC可以被通信到客户端310-1到310-n,并且可以接着由NWI/O设备330处的逻辑和/或特征用作索引标识符,以便确定包括在从给定客户端接收的命令中的给定NSC是否使该给定客户端与被分配给该给定客户端的NVMe命令空间相关联。[0079]在一些示例中,NWI/O设备330处的逻辑和/或特征可以使保护域(PD)与给定1/〇QP相关联。这些ro可以向客户端提供对具有给定命名空间标识符的一个或多个命名空间的受保护访问。例如,PD=11包括可以分别提供对命名空间标识符401-U402和403-2的受保护访问的NSC1UNSC21和NSC32。根据一些示例,如图4所示,PD11、22、33和44可以分别与I/OQP320-l、320-2、320-3和320-4相关联。因而,如上面针对图3提到的,I/OQP320-1被分配用于由客户端310-1使用。因此,通过使HHl与I/OQP320-1相关联,客户端310-1可能具有对命名空间标识符401-1、402和403-2的受保护访问。其它客户端可以接着根据与它们的分别被指派或分配的I/OQP相关联的ro而具有受保护访问。[0080]图5说明了第一示例回弹缓冲器分配。在一些示例中,如图5所示,回弹缓冲器360-1的逻辑块地址(LBA)可以被指派或分配给具有事务标签(TTag)510-1到510-3的事务上下文。对于这些示例,LBA可以针对被维持在服务器305处的系统存储器,并且可以由被维持在服务器305(例如,服务器软件)处的逻辑和/或特征指派。被指派到给定事务上下文的LBA可以用于临时存储以便促进客户端和由NVMe控制器350控制的存储装置之间的数据传输。并且如在图5中示出的,元数据区域可以被保留在被分配给元数据的给定事务上下文的每一个LBA内。元数据例如可以与用于访问由NVMe控制器350控制的存储装置的命令相关联,并且可以包括与客户端和存储装置之间的数据传输相关联的信息(例如,管理或控制信息)。[0081]根据一些示例,一个或多个事务上下文可以被分配给客户端310-1到310-n,并且由服务器305处的逻辑和/或特征通信的那些分配对于客户端和NWI/O设备330处的逻辑和/或特征二者具有TTag510-1、510-2和510-3。对于这些示例并且如下面更多地提到的,所指派或分配的TTag可以由NWI/0设备330处的逻辑和/或特征使用以便可能验证从包括或参照所分配的TTag的客户端接收的命令。并且,被包括在分配到给定事务上下文的LBA中的存储容量的量会限制对于从客户端接收的每一个命令传输的数据的量。如果命令包括对于比指派到TTag更多的回弹缓冲器存储容量的请求或需要,则该命令会被认为是无效的,并且可能被NWI/O设备330处的逻辑和/或特征拒绝。[0082]图6说明了第二示例回弹缓冲器分配。在一些示例中,如图6所示,回弹缓冲器360-2的LBA可以被指派或分配到具有TTag610-l到610-3的事务上下文。对于这些示例,该分配可以类似于对于回弹缓冲器360-1描述的那些分配,例外是,不是包括具有被指派到给定事务上下文的给定LBA的元数据,单独的元数据区域被保留。[0083]在一些示例中,可以从客户端接收包括元数据的初始命令。这一初始命令可以在客户端和由NVMe控制器350控制的存储装置之间建立RDMA数据传输。可以接着从客户端接收不包括元数据的随后的命令。因为随后的命令缺乏元数据,被分配到事务上下文的回弹缓冲器的部分可以完全用于数据传输,而不是保留一部分用于元数据,如上面针对图5描述的。因而,通过使用整个部分,回弹缓冲器360-2可以在随后的命令不包括元数据时被更有效地使用。[0084]图7说明了示例命名空间上下文索引700。根据一些示例,命名空间上下文索引700可以包括用于验证从客户端接收的命令的信息以便提供对由NVMe控制器350控制的存储装置的客户端访问。如图7所示,命名空间上下文索引700描绘了上面针对图3-5描述的被提供到客户端310-1到310-n的资源的各种分配或指派。此外,命名空间上下文索引700包括指示什么操作码(Opcode)被授权用于使客户端访问存储装置的信息。对于每一个客户端的这些操作码可以包括但不局限于冲洗(F)、写入(W)、读取(R)、写入坏轨(WU)、比较(C)中的一个或多个。[0085]根据一些示例,被授权的操作码也可以基于什么操作码被NWI/O设备330处的逻辑和/或特征支持以便促进由NVMe控制器350控制的存储装置的RDMA。例如,除了上面列出的五个操作码以外,NVMe规范还包括几个操作码。然而,额外的操作码可以用于对于由NVMe控制器350控制的存储装置的RDM不相关或不必要的操作。因而,包括这些其它操作码的命令可以被认为不被NWI/O设备330处的逻辑和/或特征支持。[0086]在一些示例中,某些NVMe命令空间标识符可以被局限于对于那些NVMe命名空间标识符允许的操作码。例如,NVMe命名空间标识符402可以被局限于仅用于读取访问的操作码。因此如在图7中对于命名空间上下文索引700显示的,分别被分配到客户端310-1、310-2和310-n的NSC2U22和20对于操作码仅具有"R"。因而,如果包括这些NSC的命令具有除了读取操作码以外的操作码,则这些命令可能不由NWI/O设备330处的逻辑和/或特征验证。[0087]图8说明了示例通信流800。在一些示例中,如图8所示,通信流800描绘了客户端310-1和服务器305之间的示例通信。对于这些示例,该通信可以与RDMA(例如iWARP、IB、RoCE)协议兼容。[0088]在一些示例中,从图8的顶部开始,第一行"RDMA写入(S-Stag)(数据)"可以是承载事务数据的RDM写入消息。第二行"RDMA写入(S-Stag)(行外元数据)"可以是承载行外元数据的RDM写入,其可以在客户端310-1以利用行外元数据被格式化的命名空间为目标时出现。第三行"RDMA发送(命令)(C-标签、S-Stag)"可以是来自客户端310-1的RDM发送消息,其可以包括用于访问由NVMe控制器350控制的存储装置的命令。第四行"RDMA写入(C-Stag)(数据)"可以是RDM写入消息以便承载来自存储装置的读取并且以被维持在客户端310-1处的缓冲器(例如由C-Stag表示)为目标的数据,该缓冲器最初在读取请求命令中被指示。第五行"RDMA发送SE(完成)"可以是RDMA发送消息,指示诸如读取命令的所请求的事件(SE)由NVMe控制器350完成。最后一行"RDMA读取(行外元数据)"可以是如果客户端310-1以使用行外元数据被格式化的命名空间作为目标时使用的RDM读取消息。[0089]根据一些示例,如图8所示,实线可以与所有操作码有关,点线可以与只读操作码有关,并且虚线可以与可以包括写入或比较命令的只写入操作码有关。[0090]图9说明了示例读取命令格式900。根据一些示例,RDMA(例如iWARP、IB、RoCE)协议中的消息可以使用示例读取命令格式900从远程客户端发送到服务器。对于这些示例,客户端310-1到310-n可以使用示例读取命令格式900来转送读取命令以便访问由服务器305处的NVMe控制器350控制的存储装置。NWI/O设备330处的逻辑和/或特征可以接收消息,并且对包括在该消息中的信息与命名空间上下文索引700进行比较以便验证读取命令。例如,可以至少部分地基于在位范围[7:0]中指示的"操作码"是否由NWI/O设备330支持并且基于在位范围[63:32]中指示的"NSC"是否使发送客户端与被分配到该客户端的NVMe命名空间标识符相关联来验证命令。可以使在位范围[31:0]中指示的"回弹缓冲器TTag"与命名上下文索引700中的信息进行比较以便验证发送客户端是否被分配了与该TTag相关联的事务上下文。进而,在位范围[63:0]中指示的"起始LBA"和在位范围[15:0]中指示的"逻辑块的号"可以用于确定对于命令的访问事务的尺寸,并且接着使该尺寸与来自对于与"回弹缓冲器TTag"相关联的事务上下文分配的回弹缓冲器360-1的存储容量的量进行比较。如果所确定的尺寸超出所分配的存储容量的量,则NWI/O设备330处的逻辑和/或特征可以验证读取命令。[0091]本公开不局限于被包括在按照读取命令格式900的示例格式接收的读取命令中的信息的上面提到的示例。包括在按照读取命令格式900的示例格式或其它读取命令格式的读取命令中的其它信息可以用于验证从客户端接收的读取命令。[0092]图10说明了示例写入和比较命令格式1000。根据一些示例,RDMA(例如iWARP、IB、RoCE)协议中的消息可以使用写入和比较命令格式1000被从远程客户端发送到服务器。对于这些示例,客户端310-1到310-n可以使用示例写入和比较命令格式1000来转送写入或比较命令以便访问由服务器305处的NVMe控制器350控制的存储装置。NWI/O设备330处的逻辑和/或特征可以接收消息,并且使包括在该消息中的信息与命名空间上下文索引700进行比较以便验证写入或比较命令。如上所述,在诸如读取命令格式900的类似的位范围中指示的信息,也可以在示例写入和比较命令格式1000中被指示。因而,按照写入和比较命令格式1000的示例格式接收的写入或比较命令可以按照如上面针对图9提到的类似方式被验证。[0093]本公开不局限于被包括在按照写入和比较命令格式1000的示例格式接收的写入或比较命令中的信息的上面提到的示例。被包括在按照写入和比较命令格式1000的示例格式或其它写入或比较命令格式的写入或比较命令中的其它信息可以用于验证从客户端接收的写入或比较命令。[0094]图11说明了示例冲洗和写入坏轨命令格式1100。根据一些示例,RDMA(例如iWARP、IB、RoCE)协议中的消息可以使用冲洗和写入坏轨命令格式1100被从远程客户端发送到服务器。对于这些示例,客户端310-1到310-n可以使用示例冲洗和写入坏轨命令格式1100来转送冲洗或写入坏轨命令以便访问由服务器305处的NVMe控制器350控制的存储装置。NWI/0设备330处的逻辑和/或特征可以接收消息,并且使包括在该消息中的信息与命名空间上下文索引700进行比较以便验证冲洗或写入坏轨命令。如上所述,在诸如读取命令格式900的类似的位范围中指示的信息,也可以在示例冲洗和写入坏轨命令格式1100中被指示。因而,按照冲洗和写入坏轨命令格式1100的示例格式接收的冲洗或写入坏轨命令可以按照如上面针对图9提到的类似方式被验证。[0095]本公开不局限于被包括在按照冲洗和写入坏轨命令格式1100的示例格式接收的冲洗或写入坏轨命令中的信息的上面提到的示例。被包括在按照冲洗和写入坏轨命令格式1100的示例格式或其它冲洗或写入坏轨命令格式的冲洗或写入坏轨命令中的其它信息可以用于验证从客户端接收的冲洗或写入坏轨命令。[0096]图12说明了示例NVMe命令完成格式1200。根据一些示例,NWI/O设备330处的逻辑和/或特征可以能够将RDM(例如iWARP、IB、RoCE)协议中的消息发送到客户端以便指示从客户端接收的命令的状态。对于这些示例,可以使用示例NVMe命令完成格式1200来发送消息。例如,NVMe命令完成格式1200的"状态字段"可以在位范围[63:49]中指示所接收的命令的状态。并且,客户端可以使用包括在位范围[47:32]中的"TTag索引低"信息以便使按照示例NVMe命令完成格式1200的所接收的命令与具有TTag的先前发送的命令相关联,该TTag匹配包括在位范围[47:32]中的至少一些信息。[0097]图13说明了示例NVMe命令验证表1300。在一些示例中,NVMe命令验证表1300可以指示NWI/O设备330的逻辑和/或特征可以能够进行的各种验证检查以便证实从客户端接收的命令。如图13所示,所执行的检查可以基于在所接收的命令中指示或包括的操作码而变化。根据一些示例,可以使包括在所接收的命令(例如按照格式900U000或1100)中的信息与被维持在诸如命名空间上下文索引700的索引中的信息进行比较,以便执行检查。[0098]图14说明了装置1400的示例方框图。尽管图14所示的装置1400具有在某种拓扑中的有限数量的元件,但是可以认识到,装置1400可以包括在可选的拓扑中的更多或更少的元件,如对于给定实现期望的。[0099]装置1400可以由被维持在耦合到服务器的网络I/O设备处的电路1420支持。电路1420可以被布置为执行一个或多个软件或固件实现的模块1422-a。值得注意的是,"a"和"b"和"c"以及如在本文使用的类似的标志符意在作为代表任何正整数的变量。因而例如,如果实现设置a=5的值,则模块1422-a的软件或固件的完整集合可以包括模块1422-1、1422-2、1422-3、1422-4或1422-5。所提出的示例并不局限于这一上下文中,并且自始至终使用的不同变量可以代表相同或不同的整数值。[0100]根据一些示例,电路1420可以包括处理器或处理器电路。处理器或处理器电路可以是各种市场上可买到的处理器中的任意一种,没有限制地包括AMD?Athlon?、Duron?和Opteron?处理器;AMD?应用、嵌入式和安全处理器;IBM?和Motorola'?Dragonball?以及PowerPC?处理器;IBM和Sony?蜂窝处理器;IntelO^Atom?、Celeron?、C'(>fe⑵Duo?、Corei3、Corei5、Corei7、Itanium?、Pentium?、.Xeon?、X<j〇nPhi?和XScale'?处理器;以及类似的处理器。根据一些示例,电路1420也可以是专用集成电路(ASIC),并且至少一些模块1422-a可以被实现为ASIC的硬件元件。[0101]根据一些示例,装置1400可以包括接收模块1422-1。接收模块1422-1可以能够经由符合RDMA(例如iWARP、IB、RoCE)协议的消息来接收命令1410。命令1410可以被从远程客户端发送到服务器。对于这些示例,服务器可以耦合到具有装置1400的NW1/0设备。命令1410可以包括访问由服务器处或与服务器一起定位的NVMe控制器控制的存储装置的命令。接收模块1422-1可以能够至少临时地存储协议信息1424-a(例如,在诸如查找表(LUT)的数据结构中),以便解释或解码命令1410的至少部分。[0102]在一些示例中,装置400还可以包括验证模块1422-2。验证模块1422-2可以能够验证由接收模块1422-1接收的命令。验证模块1422-2可以使用包括在索引(例如,命名空间上下文索引700)中的信息来执行验证。验证模块1422-2可以能够将索引信息至少临时地存储在数据结构(例如LUT)中。索引信息在图14中被表示为NSC索引信息142-b。验证模块1422-2还可以使用至少临时地存储在数据结构(例如,NVMe命令验证表1300)中的信息来执行各种验证检查。检查信息在图14中被表示为NVMe命令检查信息1428-c。对于这些示例,在NVMe命令检查信息1428-c中描述的检查之后,与NSC索引信息1426-b相比较,验证模块1422-2可以至少部分地基于包括在命令1410中的信息来执行验证。[0103]在一些示例中,装置400还可以包括有效载荷模块1422-3。有效载荷模块1422-3可以能够获得(例如,从由验证模块1422-2维持的LUT)用于将写入或比较数据放置到在被验证的命令中指示的回弹缓冲器的信息。有效载荷模块1422-3可以使用来自NSC索引信息1426-b的信息以便确定回弹缓冲器的什么LBA要写入数据。[0104]根据一些示例,装置1400还可以包括提交模块1422-4。提交模块1422-4可以能够将被验证的命令写入到NVMe提交队列。提交模块1422-4可以使用来自NSC索引信息1426-b的信息以便确定哪个NVMe提交队列要写入被验证的命令1410。[0105]在一些示例中,装置1400还可以包括报告模块1422-5。报告模块1422-5可以能够指示所接收的命令1410的状态。如果命令1410被发现是无效的,则该状态例如可以包括无效命令1440。如果被验证的命令1410由NVMe控制器执行,则已完成命令1450可以被指示。报告模块1422-5可以能够至少临时地存储协议信息1424-a(例如在LUT中),以便对要被发送到客户端的符合RDMA(例如iWARP、IB、R〇CE)的协议中的无效命令1440或已完成命令1450的至少部分进行编码,该客户端发送命令1410。[0106]本文包括代表用于执行所公开的体系结构的新颖方面的示例方法的一组逻辑流程。然而为了解释的简单的目的,本文所示的一个或多个方法被显示和描述为一系列动作,本领域中的技术人员将理解和认识到,所述方法并不被所述动作的顺序限制。一些动作可以根据其而按照与在本文示出和描述的顺序不同的顺序和/或与其它动作同时出现。例如,本领域中的技术人员将理解和认识到,可以将方法可选地表示为一系列相互关联的状态或事件,例如在状态图中。而且,对于新颖实现,可以不要求在方法中说明的所有动作。[0107]逻辑流程可以在软件、固件和/或硬件中实现。在软件和固件实现中,逻辑流程可以由存储在诸如光学、磁或半导体存储装置的至少一个非暂态计算机可读介质或机器可读介质上的计算机可执行指令实现。实施例并不局限于这一上下文。[0108]图15说明了逻辑流程1500的示例。逻辑流程1500可以代表由本文描述的一个或多个逻辑、特征和/或设备,例如装置1400,执行的一些或所有操作。更具体地,逻辑流程1500可以由接收模块1422-1、验证模块1422-2、有效载荷模块1422-4、提交模块1422-4或报告模块1422-5实现。[0109]根据一些示例,方框1502处的逻辑流程1500可以从客户端接收命令以便向客户端提供对由被维持在服务器处的NVMe控制器控制的存储设备的访问。例如,对于耦合到服务器的NWI/O设备,命令1410可以由包括在装置1400中的接收模块1422-1接收。[0110]在一些示例中,方框1504处的逻辑流程1500可以接着至少部分地基于包括在该命令中的操作码是否被NWI/O设备支持并且基于包括在该命令中的索引标识符是否使客户端与被分配到该客户端的NVMe命名空间标识符相关联来验证命令。例如,验证模块1422-2可以根据NVMe命令检查信息1428-c来对包括在命令1410中的信息与NSC信息1426-b进行比较,以便确定命令1410是否是有效的。[0111]根据一些示例,方框1506处的逻辑流程1500可以接着向客户端指示所接收的命令的状态。对于这些示例,该状态可以包括无效命令或已完成命令中的一个。如果验证模块1422-2确定命令是无效的,则报告模块1422-5可以例如向发送命令1410的客户端指示无效命令1440。可选地,报告模块1422-5可以指示有效命令1410由被维持在服务器处的NVMe控制器执行。该指示可以是已完成命令1450,并且如上面提到的,可以在被指派到发送命令1410的客户端的命令完成队列中被指示。[0112]图16说明了存储介质1600的示例。存储介质1600可以包括制品。在一些示例中,存储介质1600可以包括任何非暂态计算机可读介质或机器可读介质,例如光学、磁或半导体存储装置。存储介质1600可以存储各种类型的计算机可执行指令,例如实现逻辑流程1500的指令。计算机可读或机器可读存储介质的示例可以包括能够存储电子数据的任何有形介质,包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等等。计算机可执行指令的示例可以包括任何适当类型的代码,例如源代码、编译代码、解释代码、可执行代码、静态代码、动态代码、面向对象的代码、可视化代码等等。示例并不局限于这一上下文。[0113]图17说明了示例NWI/O设备1700。在一些示例中,如图17所示,NWI/O设备1700可以包括处理部件1740、其它平台部件或通信接口1760。根据一些示例,网络I/O设备1700可以在耦合到如上所述的系统或数据中心中的服务器的NWI/O设备中实现。[0114]根据一些示例,处理部件1740可以执行对于装置1400和/或存储介质1600的处理操作或逻辑。处理部件1740可以包括各种硬件元件、软件元件或这两者的组合。硬件元件的示例可以包括设备、逻辑设备、部件、处理器、微处理器、电路、处理器电路、电路元件(例如,晶体管、电阻器、电容器、电感器等等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、存储器单元、逻辑门、寄存器、半导体设备、芯片、微芯片、芯片组等等。软件元件的示例可以包括软件部件、程序、应用、计算机程序、应用程序、设备驱动器、系统程序、软件开发程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。确定示例是使用硬件元件和/或软件元件实现可以根据任何数量的因素而改变,该因素例如是期望的计算速率、功率水平、热耐受性、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度和其它设计或性能约束,如对于给定示例期望的。[0115]在一些示例中,其它平台部件1750可以包括公共计算元件,例如一个或多个处理器、多核处理器、协处理器、存储器单元、芯片组、控制器、外围设备、接口、振荡器、定时设备等等。存储器单元的示例可以没有限制地包括具有一个或多个较高速度存储器单元的形式的各种类型的计算机可读和机器可读存储介质,例如ROM、RAM、DRAM、DDRAM、SDRAM、SRAM、PROM、EPROM、EEPROM、闪存或者适合于存储信息的任何其它类型的存储介质。[0116]在一些示例中,通信接口1760可以包括逻辑和/或特征来支持通信接口。对于这些示例,通信接口1760可以包括根据各种通信协议或标准来操作以便通过直接或网络通信链路进行通信的一个或多个通信接口。直接通信可以经由在一个或多个工业标准(包括后代和变形),例如与PCIe规范、NVMe规范、RDMA协议规范、IEEE802-2-2008规范、RFC791或RFC793相关联的标准,中描述的通信协议或标准的使用而发生。[0117]NWI/O设备1700的部件和特征可以使用分立电路、专用集成电路(ASIC)、逻辑门和/或单个芯片架构的任何组合来实现。进而,NWI/O设备1700的特征可以在适当地适宜的场合使用微控制器、可编程逻辑阵列和/或微处理器或前述设备的任何组合来实现。注意到,硬件、固件和/或软件元件可以在本文被共同或单独地被称为"逻辑"或"电路"。[0118]应该认识到,在图17的方框图中示出的示例NWI/O设备1700可以代表许多潜在实现的一个功能描述性示例。因此,在附图中描绘的块功能的划分、省略或包括并不推断出用于实现这些功能的硬件部件、电路、软件和/或元件将必须在实施例中被划分、省略或包括。[0119]至少一个示例的一个或多个方面可以由存储在代表处理器内的各种逻辑的至少一个机器可读介质上的代表性指令实现,当被机器、计算设备或者系统读取时,该指令使该机器、计算设备或系统制造逻辑以便执行本文描述的技术。被称为"IP"核心的这样的表示可以被存储在有形机器可读介质上,并且被提供到各种消费者或制造设施以便装入到实际上制造逻辑或处理器的制造机器中。[0120]可以使用硬件元件、软件元件或这两者的组合来实现各种示例。在一些示例中,硬件元件可以包括设备、部件、处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器等等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、存储器单元、逻辑门、寄存器、半导体设备、芯片、微芯片、芯片组等等。在一些示例中,软件元件可以包括软件部件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用程序接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。确定示例是使用硬件元件和/或软件元件实现可以根据任何数量的因素改变,该因素例如是期望的计算速率、功率水平、热耐受性、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度和其它设计或性能约束,如对于给定示例期望的。[0121]一些示例可以包括制品或至少一个计算机可读介质。计算机可读介质可以包括非暂态存储介质以便存储逻辑。在一些示例中,非暂态存储介质可以包括能够存储电子数据的一种或多种类型的计算机可读存储介质,包括易失性存储器或非易失性存储器、可移动或不可移动存储器、可擦除或不可擦除存储器、可写或可重写存储器等等。在一些示例中,逻辑可以包括各种软件元件,例如软件部件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、API、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、符号或其任何组合。[0122]根据一些示例,计算机可读介质可以包括非暂态存储介质以便存储或维持指令,当被机器、计算设备或系统执行时,该指令使该机器、计算设备或系统执行根据所描述的示例的方法和/或操作。指令可以包括任何适当类型的代码,例如源代码、编译代码、解释代码、可执行代码、静态代码、动态代码等等。可以根据用于指示机器、计算设备或系统执行某种功能的预定义的计算机语言、方式或句法来实现指令。可以使用任何适当的高级、低级、面向对象、可视化、编译和/或解释编程语言来实现指令。[0123]可以使用措辞"在一个示例中"或"示例"连同其派生词来描述一些示例。这些术语意指结合该示例描述的特定特征、结构或特性可以被包括在至少一个示例中。短语"在一个示例中"在说明书中不同地方的出现并不一定都指代相同的示例。[0124]可以使用措辞"耦合"和"连接"连同其派生词来描述一些示例。这些词语不必意在作为彼此的同义词。例如,使用词语"连接"和/或"耦合"的描述可以指示两个或更多个元件彼此直接物理或电接触。然而,词语"耦合"也可以意指两个或更多个元件彼此不直接接触,但是仍然彼此协作或相互作用。[0125]要强调的是,提供本公开的摘要以便符合37C.F.R.第1.72(b)节,要求将允许读者更快地确定技术公开的性质的摘要。应当理解,它将不用于解释或限制权利要求的范围或意义。此外,在前面的详细描述中可以看到,为了简单化本公开的目的,各种附图在单个实施例中被分组到一起。本公开的这一方法不应该被解释为反映请求保护的示例要求比在每一个权利要求中明确列举的特征更多的特征的意图。更确切地,如下面的权利要求反映的,创造性主题在于少于单个所公开的示例的所有特征。因而,下面的权利要求特此被合并到详细描述中,每一个权利要求独立地作为单独的示例。在所附权利要求中,词语"包括(including)"和"其中(inwhich)"分别用作词语"包括(comprising)"和"其中(wherein)"的浅近英语等效形式。而且,词语"第一"、"第二"、"第三"等等仅用作标记,并且并不意在将数字要求强加在它们的对象上。[0126]根据一些示例,示例装置可以包括用于耦合到服务器的网络输入/输出设备的电路。示例装置还可以包括用于由电路执行以便从远离服务器的客户端接收命令的接收模块。该命令可以向客户端提供对由被维持在服务器处的非易失性存储器Express(NVMe)控制器控制的存储设备的访问。示例装置还可以包括用于由电路执行以便至少部分地基于在该命令中指示的操作码是否被网络输入/输出设备支持并且基于在该命令中指示的索引标识符是否使客户端与被分配到该客户端的NVMe命名空间标识符相关联来验证命令的验证模块。示例装置还可以包括用于由电路执行以便向客户端指示所接收的命令的状态的报告模块。该状态还可以包括无效命令或已完成命令中的一个。[0127]在一些示例中,示例装置还可以包括被布置为根据工业标准进行操作以便包括PCIe基本规范版本3.0或NVMe规范版本I.1的网络输入/输出设备、存储设备和NVMe控制器。[0128]根据示例装置的一些示例,所述命令可以在与远程直接存储器存取(RDM)协议兼容的分组中被接收,所述远程直接存储器存取(RDM)协议包括互联网广域RDM协议(iWARP)、Infinband或融合以太网上RDMA(RoCE)中的一个。[0129]在示例装置的一些示例中,包括在命令中的操作码包括冲洗、写入、读取、写入坏轨或比较中的一个。[0130]根据一些示例,示例装置还可以包括存储设备,包括硬盘驱动(HDD)或固态驱动(SSD)。SSD可以具有非易失性存储器,包括3维交叉点存储器、闪存、铁电存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)存储器、聚合物存储器、纳米线、铁电晶体管随机存取存储器(FeTRAM或FeRAM)、纳米线或电可擦除可编程只读存储器(EEPROM)中的至少一个。[0131]在示例装置的一些示例中,使客户端与命名空间标识符相关联的索引标识符被包括在索引中,该索引指示由服务器提供到客户端的用于访问存储设备的所分配的资源,该所分配的资源包括由服务器维持的缓冲器和客户端可访问的第一队列对,该第一队列对包括到NVMe控制器的命令提交队列和来自NVMe控制器的命令完成队列。[0132]根据示例装置的一些示例,所分配的资源还可以包括NVMe控制器可访问的第二队列对,该第二队列对包括到NVMe控制器的第二命令提交队列和来自NVMe控制器的第二命令完成队列。[0133]在一些示例中,示例装置还可以包括能够经由第一命令完成队列中的指示来将所接收的命令的状态指示为已完成命令的报告模块,该指示用于指示访问存储设备的所接收的命令由NVMe控制器执行。[0134]根据示例装置的一些示例,所分配的资源可以包括缓冲器的存储器容量的一部分。验证模块还可以基于在该命令中指示的访问存储设备的事务尺寸是否超出存储容量的该部分来验证命令。[0135]在示例装置的一些示例中,使客户端与NVMe命名空间标识符相关联的索引标识符也可以使客户端与被指派到缓冲器的第一事务上下文相关联。验证模块还可以基于在所接收的命令中指示的第二事务上下文是否与第一事务上下文相匹配来验证命令。[0136]根据示例装置的一些示例,使客户端与NVMe命名空间标识符相关联的索引标识符也可以使NVMe命名空间标识符与操作码相关联。验证模块还可以基于在该命令中指示的操作码是否与NVMe命名空间标识符相关联来验证命令。[0137]在一些示例中,示例方法可以包括在耦合到服务器的网络输入/输出设备处接收用于远离服务器的客户端访问由被维持在该服务器处的非易失性存储器Express(NVMe)控制器控制的存储设备的命令。可以基于在该命令中指示的操作码(Opcode)是否被网络输入/输出设备支持并且基于在该命令中指示的索引标识符是否使客户端与被分配到该客户端的NVMe命名空间标识符相关联来验证命令。可以接着向客户端指示所接收的命令的状态,作为无效命令或已完成命令中的一个。[0138]根据一些示例,示例方法还可以包括布置为根据工业标准来操作以便包括PCIe基本规范版本3.0或NVMe规范版本I.1的网络输入/输出设备、存储设备和NVMe控制器。[0139]在示例方法的一些示例中,所分配的资源还包括NVMe控制器可访问的第二队列对,该第二队列对包括到NVMe控制器的第二命令提交队列和来自NVMe控制器的第二命令完成队列。[0140]根据示例方法的一些示例,所接收的命令的状态可以经由被置于第一命令完成队列中的完成指示而被指示为已完成命令。该完成指示可以指示访问存储设备的所接收的命令由NVMe控制器执行。[0141]在示例方法的一些示例中,使客户端与NVMe命名空间标识符相关联的索引标识符也可以使客户端与被指派到缓冲器的第一事务上下文相关联。验证所述命令还可以包括基于在所接收的命令中指示的第二事务上下文是否与第一事务上下文相匹配来验证命令。[0142]根据示例方法的一些示例,存储设备包括硬盘驱动(HDD)或固态驱动(SSD)。对于这些示例,SSD可以具有非易失性存储器,其包括3维交叉点存储器、闪存、铁电存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)存储器、聚合物存储器、纳米线、铁电晶体管随机存取存储器(FeTRAM或FeRAM)、纳米线或电可擦除可编程只读存储器(EEPROM)。[0143]根据一些示例,至少一个机器可读介质包括多个指令,对在耦合到服务器的网络输入/输出设备上被执行做出响应,该指令使网络I/O设备执行如上面提到的示例方法。[0144]尽管以结构特征和/或方法动作特定的语言描述了该主题,但是应该理解,在所附权利要求中定义的主题不必局限于上面描述的特定特征或动作。更确切地,上面描述的特定特征和动作被公开为实现权利要求的示例形式。【权利要求】1.一种装置,包括:用于耦合到服务器的网络输入/输出设备的电路;接收模块,用于由所述电路执行以便从远离所述服务器的客户端接收命令,所述命令用于向所述客户端提供对由维持在所述服务器处的非易失性存储器快速(NVMe)控制器控制的存储设备的访问;验证模块,用于由所述电路执行以便至少部分地基于在所述命令中指示的操作码(Opcode)是否被所述网络输入/输出设备支持并且基于在所述命令中指示的索引标识符是否使所述客户端与被分配到所述客户端的NVMe命名空间标识符相关联来验证所述命令;以及报告模块,用于由所述电路执行以便向所述客户端指示接收到的命令的状态,所述状态包括无效命令或已完成命令中的一个。2.如权利要求1所述的装置,所述网络输入/输出设备、所述存储设备和所述NVMe控制器被布置为根据工业标准来操作,所述工业标准包括PCIe基本规范版本3.0或NVMe规范版本1.1。3.如权利要求1所述的装置,在与远程直接存储器存取(RDMA)协议兼容的分组中接收所述命令,所述远程直接存储器存取(RDMA)协议包括互联网广域RDMA协议(iWARP)、Infinband或融合以太网上RDMA(RoCE)中的一个。4.如权利要求1所述的装置,包括在所述命令中的所述操作码包括冲洗、写入、读取、写入坏轨或比较中的一个。5.如权利要求1所述的装置,所述存储设备包括硬盘驱动(HDD)或固态驱动(SSD),所述SSD具有非易失性存储器,包括下列中的至少一个:3维交叉点存储器、闪存、铁电存储器、硅-氧化物-氮化物-氧化物-硅(S0N0S)存储器、聚合物存储器、纳米线、铁电晶体管随机存取存储器(FeTRAM或FeRAM)、纳米线或电可擦除可编程只读存储器(EEPR0M)。6.如权利要求1所述的装置,使所述客户端与所述命名空间标识符相关联的所述索引标识符被包括在索引中,所述索引指示由所述服务器提供到所述客户端的用于访问所述存储设备的分配的资源,所述分配的资源包括由所述服务器维持的缓冲器和所述客户端可访问的第一队列对,所述第一队列对包括到所述NVMe控制器的命令提交队列和来自所述NVMe控制器的命令完成队列。7.如权利要求6所述的装置,所述分配的资源还包括所述NVMe控制器可访问的第二队列对,所述第二队列对包括到所述NVMe控制器的第二命令提交队列和来自所述NVMe控制器的第二命令完成队列。8.如权利要求6所述的装置,所述报告模块能够经由所述第一命令完成队列中的指示来将所述接收到的命令的状态指示为已完成命令,所述指示用于指示访问所述存储设备的所述接收到的命令由所述NVMe控制器执行。9.如权利要求6所述的装置,所述分配的资源包括所述缓冲器的存储器容量的一部分,所述验证模块还基于在所述命令中指示的访问所述存储设备的事务尺寸是否超出所述存储器容量的所述部分来验证所述命令。10.如权利要求6所述的装置,使所述客户端与所述NVMe命名空间标识符相关联的所述索引标识符也使所述客户端与被指派到所述缓冲器的第一事务上下文相关联,所述验证模块还基于在所述接收到的命令中指示的第二事务上下文是否与所述第一事务上下文相匹配来验证所述命令。11.如权利要求1所述的装置,使所述客户端与所述NVMe命名空间标识符相关联的所述索引标识符也使所述NVMe命名空间标识符与操作码相关联,所述验证模块还基于在所述命令中指示的所述操作码是否与所述NVMe命名空间标识符相关联来验证所述命令。12.-种方法,包括:在耦合到服务器的网络输入/输出设备处接收用于远离所述服务器的客户端访问由维持在所述服务器处的非易失性存储器快速(NVMe)控制器控制的存储设备的命令;基于在所述命令中指示的操作码(Opcode)是否被所述网络输入/输出设备支持并且基于在所述命令中指示的索引标识符是否使所述客户端与被分配到所述客户端的NVMe命名空间标识符相关联来验证所述命令;以及向所述客户端将接收到的命令的状态指示为无效命令或已完成命令中的一个。13.如权利要求12所述的方法,包括所述网络输入/输出设备、所述存储设备和所述NVMe控制器被布置为根据工业标准来操作,所述工业标准包括PCIe基本规范版本3.0或NVMe规范版本1.1。14.如权利要求12所述的方法,在与远程直接存储器存取(RDMA)协议兼容的分组中接收所述命令,所述远程直接存储器存取(RDMA)协议包括互联网广域RDMA协议(iWARP)、Infinband或融合以太网上RDMA(RoCE)中的一个。15.如权利要求12所述的方法,在所述命令中指示的所述操作码包括冲洗、写入、读取、写入坏轨或比较中的一个。16.如权利要求12所述的方法,使所述客户端与所述NVMe命名空间标识符相关联的所述索引标识符被包括在索引中,所述索引指示由所述服务器提供到所述客户端的用于访问所述存储设备的分配的资源,所述分配的资源包括由所述服务器维持的缓冲器和所述客户端可访问的第一队列对,所述第一队列对包括到所述NVMe控制器的第一命令提交队列和来自所述NVMe控制器的第一命令完成队列。17.如权利要求16所述的方法,所述分配的资源还包括所述NVMe控制器可访问的第二队列对,所述第二队列对包括到所述NVMe控制器的第二命令提交队列和来自所述NVMe控制器的第二命令完成队列。18.如权利要求16所述的方法,经由被置于所述第一命令完成队列中的完成指示来将所述接收到的命令的状态指示为已完成命令,所述完成指示用于指示访问所述存储设备的所述接收到的命令由所述NVMe控制器执行。19.如权利要求16所述的方法,使所述客户端与所述NVMe命名空间标识符相关联的所述索引也使所述客户端与被指派到所述缓冲器的第一事务上下文相关联,验证所述命令还包括基于在所述接收到的命令中指示的第二事务上下文是否与所述第一事务上下文相匹配来验证所述命令。20.如权利要求12所述的方法,所述存储设备包括硬盘驱动(HDD)或固态驱动(SSD),所述SSD具有非易失性存储器,包括下列中的至少一个:3维交叉点存储器、闪存、铁电存储器、硅-氧化物-氮化物-氧化物-硅(S0N0S)存储器、聚合物存储器、纳米线、铁电晶体管随机存取存储器(FeTRAM或FeRAM)、纳米线或电可擦除可编程只读存储器(EEPR0M)。21.包括多个指令的至少一个机器可读介质,所述指令对在耦合到服务器的网络输入/输出设备上被执行做出响应而使所述网络输入/输出设备执行下列操作:接收用于远离所述服务器的客户端访问由维持在所述服务器处的非易失性存储器Express(NVMe)控制器控制的存储设备的命令,在与远程直接存储器存取(RDMA)协议兼容的分组中接收所述命令,所述远程直接存储器存取(RDMA)协议包括互联网广域RDMA协议(iWARP)、Infinband或融合以太网上RDMA(RoCE)中的一个;基于在所述命令中指示的操作码(Opcode)是否被所述网络输入/输出设备支持并且基于在所述命令中指示的索引标识符是否使所述客户端与被分配到所述客户端的NVMe命名空间标识符相关联来验证所述命令;以及向所述客户端将接收到的命令的状态指示为无效命令或已完成命令中的一个。22.如权利要求21所述的至少一个机器可读介质,所述网络输入/输出设备、所述存储设备和所述NVMe控制器被布置为根据工业标准来操作,所述工业标准包括PCIe基本规范版本3.0或NVMe规范版本1.1。23.如权利要求21所述的至少一个机器可读介质,使所述客户端与所述NVMe命名空间标识符相关联的所述索引标识符被包括在索引中,所述索引指示由所述服务器提供到所述客户端的用于访问所述存储设备的分配的资源,所述分配的资源包括由所述服务器维持的缓冲器和所述客户端可访问的第一队列对,所述第一队列对包括到所述NVMe控制器的第一命令提交队列和来自所述NVMe控制器的第一命令完成队列。24.如权利要求23所述的至少一个机器可读介质,所述分配的资源还包括所述NVMe控制器可访问的第二队列对,所述第二队列对包括到所述NVMe控制器的第二命令提交队列和来自所述NVMe控制器的第二命令完成队列。25.如权利要求21所述的至少一个机器可读介质,在所述命令中指示的所述操作码包括冲洗、写入、读取、写入坏轨或比较中的一个。【文档编号】G06F15/16GK104246742SQ201380005847【公开日】2014年12月24日申请日期:2013年1月16日优先权日:2012年1月17日【发明者】E·塔米尔,V·马克海尔瓦科斯,B-Z·弗里德曼,P·凯顿,T·L·维尔克申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1