变换缓冲器以便由驱动器层独占地访问来写入即时数据流的制作方法

文档序号:15743755发布日期:2018-10-23 22:43阅读:122来源:国知局

代表互联网小型计算机系统接口的iSCSI通常是指传输层协议,所述传输层协议在传输控制协议(TCP)顶端工作并且允许SCSI命令通过局域网(LAN)、广域网(WAN)或互联网而被端对端地发送。iSCSI可以在服务器上的iSCSI发起方和存储设备上的iSCSI目标之间传输块级别的数据。iSCSI协议能够封装SCSI命令并且将数据组装在用于TCP/IP层的分组中。分组使用点对点连接而通过网络发送。在到达时,iSCSI协议拆开分组,分离出SCSI命令,所以操作系统(OS)能够将存储视为本地SCSI设备。一些SCSI命令采用附加参数数据以伴随SCSI命令。这样的客户端数据正常情况下在分开的PDU中发送,但是为了改善性能也能够被置于与SCSI I/O命令相同的协议数据单元(PDU)内,并且通常被称作即时数据。

附图说明

以下详细描述参考附图,其中:

图1是让缓冲器要由相应层(例如,网络接口层、驱动器层或上层)独占地访问以写入即时数据输入/输出(I/O)的示例状态变换的框图;

图2A-2B是在有和没有即时数据输入/输出(I/O)支持的情况下在客户端设备和存储设备之间的iSCSI传输的示例过程的序列图;

图3是变换缓冲器以便由驱动器层独占地访问以写入即时数据输入/输出(I/O)的示例过程的流程图;

图4A-4B是变换缓冲器以便由相应层(例如,网络接口层、驱动器层或上层)独占地访问以写入即时数据输入/输出(I/O)的示例过程的流程图;

图5是用于变换缓冲器以便由相应层(例如,网络接口层、驱动器层或上层)独占地访问以写入即时数据输入/输出(I/O)的示例网络设备的框图。

具体实施方式

本文所描述的示例包括一种用于改善采用无锁方式的多块写入I/O和对缓冲器的物理地址交换的性能的方法。所述方法提供了对iSCSI协议中的大量即时数据的支持。在iSCSI登录会话期间,iSCSI发起方和iSCSI目标端口能够协商所允许的即时数据,其中所述即时数据的大小多达16K字节(或者32个块,每块512字节)。存储阵列随后能够向目标端口预先分配并提供缓冲器以便用于任何即时数据有效载荷的直接存储器访问(DMA)。当在存储阵列上的目标端口与即时数据一起接收到写入I/O命令时,iSCSI HBA能够确定预分配的缓冲器以及所述预分配的缓冲器内用于开始对所述I/O进行直接存储器访问的偏移量。所述方法还涉及到拉取预分配的缓冲器以及将所述预分配的缓冲器返回至预分配的即时数据缓冲器的池。所述无锁方面可以通过针对能够在任意时间访问给定缓冲器的每个代码路径(或者存储设备的层)具有不同缓冲器状态来实现,由此为每个代码路径(或层)给予独占权。为了有助于快速补充缓冲器,目标阵列能够在保持相同虚拟地址的同时将物理缓冲器地址交换为空置物理缓冲器的地址。因此,虚拟地址和即时数据缓冲器能够被立即返回给端口,从而使得目标端口将不会经历任何的缓冲器耗尽(buffer exhaustion)。

在本文所描述的示例中,诸如iSCSI目标存储阵列的存储设备能够与客户端设备协商在所述存储设备和客户端设备之间的单个会话内所允许的同时输入/输出(I/O)命令的数量。响应于接收到从客户端设备到存储设备的会话连接,所述存储设备能够基于所协商的同时I/O命令的数量为单个会话预先分配多个即时数据缓冲器。随后,所述存储设备能够连同即时数据一起接收I/O命令。所述即时数据一般是指与I/O命令一样在单个协议数据单元(PDU)内传送的数据。接下来,存储设备能够在原子操作中将预分配的缓冲器从网络接口状态变换为驱动器状态。所述驱动器状态使得预分配的缓冲器能够由存储设备的驱动器层独占地访问。而且,所述原子操作防止其它I/O命令变换预分配的缓冲器的网络接口状态直至所述原子操作完成。此外,所述存储设备能够将即时数据写入到处于驱动器状态的预分配的缓冲器。

图1是让缓冲器要由存储设备的相应层独占地访问以写入即时数据输入/输出(I/O)的示例架构和状态变换的框图。存储设备105通常具有三个不同层,也即可以由主机总线适配器(HBA)175所能够执行的网络接口层逻辑170来实现的网络接口层,以及驱动器层和上层。在图1的示例中,驱动器层可以由驱动器层指令160来实现,并且上层可以由上层指令150来实现。在这样的示例中,指令150和160可以被存储在计算机可读存储介质155中并且可以被存储设备105的处理器165来执行。在一些示例中,网络接口层逻辑170可以以硬件(例如,电路)、经由可由HBA 175的电路执行的指令或者以它们的组合来实现。当在存储设备105的端口处首次接收到I/O命令时,所述I/O命令被网络接口层逻辑170所接收,例如由存储设备105的主机总线适配器(HBA)所接收。虽然iSCSI在本公开中被用作示例,但是所述技术也能够扩展至光纤信道以及其它分层存储系统。在所述示例中,每个HBA由驱动器层指令160所实现的驱动器来控制。在HBA接收到I/O数据之后,HBA使用数据缓冲器来存储所述数据,并且将所述数据缓冲器传递至驱动器(例如,启动器层指令160)以便附加地处置。驱动器层指令160可以包括用来处理由HBA送传递至驱动器的每个I/O的I/O描述符的指令以及用于实现iSCSI的代码。在驱动器层指令160完成对数据缓冲器的处理之后,所述数据缓冲器被进一步传递至上层指令150。上层指令150(也被称作“虚拟卷(VV)层”)可以是在虚拟盘级别允许基于阵列的操作的软件定义的存储管理和整合框架。

当数据缓冲器在存储设备105的不同层之间传递时,可以使用锁定机构来确保数据缓冲器在相同时间并不被多个I/O命令所访问。然而,难以把锁定机构与大量I/O命令按比例地安排。这是因为单个锁通常由多个数据缓冲器所共享。当一个I/O命令采用锁定机构时,其它同时的I/O命令就无法使用锁定机构中的锁直至一个I/O命令完成操作并且释放了锁定机构中的锁。作为结果,在任何给定时间点,都仅有一个数据缓冲器能够在存储设备105的两个层之间传递。在一些可替换实施方式中,存储设备105可以保持对应于多个锁的多个队列。因此,锁定机构中的多个锁可以改善存储设备105的性能。然而,锁定和释放锁的操作在存储设备105的性能方面仍然导致延时和竞争。

在图1所示的示例中,锁定机构被取消。图1所图示以及由指令150、指令160和逻辑170所实现的状态变换确保了针对在任何两个层之间传递的每个数据缓冲器,在存储设备105中都存在这样的单个层,所述单个层具有用于改变所述数据缓冲器的状态的独占权。因此,存储设备105实现的状态变换所提供的独占权取消了锁定机构,由此改善了存储设备105的性能。例如,存储设备105实现五个唯一状态,也就是空闲状态100、已分配状态110、网络接口状态120、驱动器状态130和堆栈状态140。当特定缓冲器处于网络接口状态120中之时,所述缓冲器能够由存储设备105的网络接口层逻辑170(例如,由主机总线适配器175)独占地访问。当特定缓冲器处于空闲状态100、已分配状态110或驱动器状态130中之时,所述缓冲器能够由驱动器层指令160(例如,iSCSI驱动器)独占地访问。同样,当特定缓冲器处于堆栈状态140中之时,所述缓冲器能够由上层(VV层)指令150独占地访问。

在iSCSI驱动器初始化期间,存储设备105能够分配多个数据缓冲器并且将即时数据缓冲器的元数据初始化(状态变换180)至它的初始状态——空闲状态100。随后,根据所配置的参数以及活跃的iSCSI发起方登录的数量,iSCSI驱动器能够选择处于空闲状态100中的缓冲器,为所选择的缓冲器分配群聚的存储器页面(CMP),并且将所选择的缓冲器变换(状态变换182)为已分配状态110。已分配状态110使得缓冲器能够被选择并且被提供至网络接口层逻辑170中的iSCSI HBA。

同时,补充逻辑能够定期搜索处于已分配状态110中的缓冲器,并且将那些缓冲器提供至网络接口层(HBA)逻辑170中的iSCSI HBA,同时还将缓冲器状态从已分配状态110变换(状态变换184)为网络接口状态120。注意到,由于处于已分配状态110中的缓冲器由驱动器层指令160中的驱动器独占地访问,所以相同缓冲器将不会同时被来自多个层的两个不同实体所访问。

在一些示例中,当在iSCSI发起方和iSCSI目标之间开始新的会话连接时,iSCSI驱动器能够与iSCSI发起方协商iSCSI驱动器所能够接收到同时I/O命令的最大数量。基于所协商的同时I/O命令的最大数量,iSCSI驱动器能够确定它要将多少缓冲器从已分配状态110变换为网络接口(HBA)状态120。

在一些示例中,iSCSI驱动器中的补充逻辑能够保持对已经从网络接口(HBA)状态120向驱动器状态130发生的状态变换的数量进行计数的计数器。当所述计数器达到预先确定的阈值数量时,补充逻辑就被触发以补充从已分配状态110到网络接口(HBA)状态120的预先确定的阈值数量的缓冲器。

而且,当处于已分配状态110的缓冲器针对HBA 175被选择时,从已分配状态110到网络接口状态120的缓冲器状态的变换在原子操作中完成。所述原子操作防止了其它I/O命令改变所选择缓冲器的状态。如果缓冲器状态无法从已分配状态110独占地变换为网络接口状态120,则所述缓冲器状态将回滚至已分配状态110。此外,一旦缓冲器状态已经从从已分配状态110成功地变换为网络接口状态120,则所述缓冲器状态就无法再次被驱动器所改变,因为它随后由网络接口层逻辑170独占地访问。

iSCSI HBA 175当它在iSCSI发起方和iSCSI目标(例如,存储设备105)之间的会话期间与即时数据有效载荷一起接收到写入I/O命令时对所提供的缓冲器加以利用。特别地,iSCSI HBA 175能够经由直接存储器访问(DMA)将所述即时数据有效载荷写入到预分配的缓冲器,并且随后将所述缓冲器传递至驱动器层指令160中的iSCSI驱动器。当驱动器接收到缓冲器时,所述驱动器能够将缓冲器状态从网络接口状态120改变(状态变换188)为驱动器状态130。

注意到,每当网络接口(HBA)层逻辑170中的iSCSI HBA 175将缓冲器传递至驱动器层指令160中的驱动器,网络接口(HBA)层逻辑170都会少一个缓冲器。此时,驱动器能够将与iSCSI HBA 175相关联的缓冲器的数量与预先确定的阈值相比较。所述预先确定的阈值可以基于活跃的iSCSI连接会话的数量而有所变化。如果与iSCSI HBA 175相关联的缓冲器的数量小于所述预先确定的阈值,则驱动器能够从处于已分配状态110的缓冲器补充(状态变换185)HBA缓冲器。

此外,驱动器层指令160中的驱动器能够处理与即时数据一起接收到的I/O命令,并且将所述I/O命令连同即时数据缓冲器一起传递至上层(VV层)指令150。在那时,驱动器也能够将缓冲器状态从驱动器状态130变换(状态变换188)为堆栈状态140。

上层指令150随后能够处理所述写入I/O命令和数据。例如,上层指令150能够制作缓冲器中的数据的拷贝以便在缓冲器崩溃的情况下提供冗余性。由于拷贝大的即时数据花费很长时间,所以为了提供缓冲器的立即释放,存储设备105的上层指令150能够将即时数据缓冲器的物理地址交换为与第二缓冲器相关联的第二且不同的物理地址,所述第二缓冲器具有与即时数据缓冲器相同且空闲的容量(例如,16K字节)。然后,上层逻辑170能够将具有所述第二且不同的物理地址的相同群聚的存储器页面(CMP)返回至驱动器层指令160中的驱动器。随后,驱动器能够将从上层指令150所返回的缓冲器的状态从堆栈状态140切换(状态变换190)至已分配状态110。作为结果,缓冲器被返回至可用的缓冲器池,补充逻辑能够从那里选择缓冲器以提供给网络接口层(HBA层)逻辑170中的iSCSI HBA。

在iSCSI发起方登出时,驱动器能够释放已分配缓冲器。然而,缓冲器在它们从上层(VV层)指令150返回时被释放。这确保了状态变换能够保持无锁的方面,并且仅状态变换中的一种状态能够搜索处于已分配状态110的可用缓冲器。在缓冲器由上层(VV层)指令150返回时,驱动器能够相对于预先确定的阈值执行检查,并且确定是将所返回的缓冲器放入池中还是释放所返回的缓冲器。如果驱动器确定释放所返回的缓冲器,则所述驱动器能够释放CMP并且将缓冲器状态从堆栈状态140变换(状态变换192)为空闲状态100。

如果没有缓冲器可用来存储即时数据,则HBA将丢弃连同I/O命令一起接收的即时数据。由于缓冲器的总数是有限的,所以在发送iSCSI目标的确认以指示I/O命令已经完成之前从上层指令150中的堆栈释放缓冲器是很重要的。从堆栈释放缓冲器涉及到将缓冲器状态从堆栈状态140变换(状态变换190)为已分配状态110。而且,在iSCSI驱动器向iSCSI发起方发送I/O命令确认的时候,iSCSI驱动器能够例如通过将刚从上层指令150释放的缓冲器的状态从已分配状态110变换(状态变换184)为网络接口状态120而向HBA分配新的缓冲器。这将确保在HBA接收到新的I/O命令和即时数据时有缓冲器能够被HBA所使用。只要缓冲器基于所协商的、单个会话中的最大I/O命令数量被预先分配,在所述单个会话期间就不会针对HBA发生缓冲器耗尽。

有时,网络接口层逻辑170中的HBA在与即时数据一起接收写入I/O命令时会遇到错误。例如,由于分组丢失,就有可能仅接收到即时数据有效载荷的一部分。在这样的情况下,iSCSI HBA仍然能够与部分即时数据有效载荷一起将写入I/O命令传递至驱动器,但是所述iSCSI HBA能够将它们与错误状况一起传递。作为结果,iSCSI驱动器能够记录错误并且将缓冲器状态从网络接口状态120变换(状态变换194)为已分配状态110。因此,所述驱动器实际上将缓冲器放回到即时数据缓冲器池中。

有时,在iSCSI驱动器正处理I/O命令时,驱动器能够检测关于写入I/O命令的错误。例如,所述错误可能是iSCSI命令报头中的无效字段。在这种情况下,iSCSI驱动器能够记录错误并且将缓冲器从驱动器状态130变换为已分配状态110。因此,与先前的情形一样,驱动器实际上将缓冲器放回到即时数据缓冲器池中。

在一些示例中,存储设备105可以包括大量缓冲器并且每个缓冲器能够单独地经历图1所示的不同状态。在已经向存储设备105与即时数据一起发送了阈值数量的I/O命令之后,与存储设备105相关联的客户端设备在继续与即时数据一起发送I/O命令时能够经常观察到有所退化的性能。这是因为一旦缓冲器从驱动器层指令160被传递至上层指令150,让上层指令150完成缓冲器中的数据的处理就可能会花费相对长的时间。如果在与即时数据一起接收到下一个I/O命令之前缓冲器无法被释放回已分配状态110,则HBA将没有缓冲器来存储传入的即时数据并且将必须丢弃所述数据。

在一些示例中,多个大小为16K字节的群集存储器页面驻留于ASIC上。所述ASIC(也被称作“专用集成电路”)一般是指针对特定用途定制而并非意在被用于通用用途的集成电路(IC)。示例缓冲器可以包括句柄(handle)、CMP元数据结构虚拟地址,以及缓冲器的状态。CMP虚拟地址能够指向CMP元数据结构,所述CMP元数据结构具有指向ASIC存储器中的第一CMP物理地址(也被称作群集存储器页面,它的大小为16K字节)的指针。所述第一CMP物理地址于是能够指向驻留在所述ASIC上的群集存储器中的页面(例如,大小为16K字节)。这里,对应于第一CMP物理地址的页面在它被iSCSI HBA接收且被直接存储访问时与所述即时数据一起被写入。注意到,CPU存储器中能够存在多个具有虚拟地址的CMP元数据结构,其中每一个指向ASIC上的群集存储器中的唯一页面。在缓冲器从上层被释放到驱动器之前,VV层能够将第一CMP物理地址交换为CPU存储器中的第二CMP物理地址。所述第二CMP物理地址可以指向ASIC上的群集存储器中的不同页面。所述对应于第二CMP物理地址的不同页面可以是空闲的并且具有与对应于第一CMP物理地址的页面相同的容量(例如,二者都是16K字节)。随后,VV层能够将缓冲器返回至iSCSI驱动器并且将缓冲器状态变换为已分配状态。所返回的缓冲器可以具有相同的CMP元数据结构虚拟地址,所述CMP元数据结构虚拟地址现在指向CPU存储器中的第二CMP物理地址。此外,第二CMP物理地址指向ASIC上的群集存储器中的空闲页面。

注意到,当客户端设备采用I/O命令发送最大量的即时数据时,所述即时数据在所述数据在页面起始处开始的情况下能够被成功地写入单个群聚的存储器页面。在一些示例中,与I/O命令一起接收的即时数据可能并不从ASIC存储器中的页面的开头开始。在这样的情况下,存储设备105(例如,HBA 175)能够计算CMP内应当在其处对所述即时数据进行直接存储器访问的偏移量。随后,存储设备105能够将处于相同状态的两个缓冲器连结在一起并且将这两个缓冲器与相同的I/O命令相关联。特别地,HBA 175能够在输入/输出控制块(IOCB)中包括信息,所述信息诸如IO的发送方、IO的大小、存储器页面中I/O数据开始处的偏移量、指向即时数据缓冲器的多达两个句柄,等等。如果HBA 175确定I/O即时数据并非是与存储器页面对齐的16K,则HBA 175将包括指向两个不同数据缓冲器的两个句柄,并且这两个句柄对应于两个不同的CMP元数据结构虚拟地址,它们被两个不同的CMP物理地址支持。两个数据缓冲器都能够被用于经由DMA写入即时数据。例如,所述即时数据的第一部分可以被在第一CMP内的偏移量地址处开始起写入第一缓冲器,而所述即时数据的第二部分则可以被从第二CMP的起始处开始起写入第二缓冲器。

在一些示例中,针对CMP中的每个块,存储设备105能够计算数据完整性值(例如,循环冗余校验(CRC)码)。在即时数据的上下文中,在CMP中的每个块后增加数据完整性值涉及到检查I/O命令以确定要在哪个偏移量地址开始写入即时数据以及进一步检查I/O即时数据以确定每个块在何处开始。接下来,iSCSI HBA 175能够将数据的块DMA到CMP中,计算数据完整性值并且将所述值插入到CMP中。iSCSI HBA 175能够针对即时数据中的每个块重复这一过程。

图2A-2B是在有和没有即时数据输入/输出(I/O)支持的情况下客户端设备200和存储设备205之间的iSCSI传输的示例过程的序列图。iSCSI即时数据技术使得iSCSI发起方能够在与包含写入I/O命令的协议数据单元(PDU)相同的协议数据单元(PDU)中发送数据。这能够改进小型写入I/O命令的性能,因为它消除了以下的步骤:首先,它消除了目标必须要构建、发布和传送iSCSI准备传输(Ready-to-Transfer,R2T)PDU。因此,在接收写入I/O命令时在目标侧上少了一次中断和DMA。第二,它消除了发起方必须要接收并处理iSCSI R2T PDU。作为结果,主机侧上少了一次中断和DMA。第三,它消除了发起方必须要构建并传送单独的iSCSI 数据发出(Data-Out) PDU,它是初始写入I/O命令的一部分。 最后,它消除了目标必须接收和处理单独的iSCSI 数据发出 PDU。因此,针对小型(16K字节或更少)写入I/O命令,即时数据能够将I/O响应时间、目标iSCSI驱动器所处理的中断数量、以及上层回调(Callback)的数量减少一半。

如图2A所示,没有iSCSI即时数据的I/O流涉及到四个中断以及两个上层回调。特别地,在时间点t1,客户端设备200能够向存储设备205发送iSCSI命令PDU 210。存储设备205在时间点t2接收所述iSCSI命令PDU。它随后执行操作215,这涉及到(a)处置第一驱动器中断[INTR #1];(b)接收并处理iSCSI命令PDU;以及(c)利用I/O调用上层以得到缓冲器。接下来,在时间点t3,存储设备205处的目标执行操作220,这涉及到(a)响应于为了得到缓冲器而对上层的调用接收第一回调{CALLBACK #1};(b)由驱动器构建并发布R2T PDU以向HBA提供I/O上下文以及缓冲器;以及(c)由HBA向iSCSI发起方发送R2T PDU以请求iSCSI发起方发送数据,所述数据被直接存储器访问到缓冲器中。iSCSI驱动器在R2T已经被成功发送时接收第二中断[INTR #2]。在时间点t4,客户端设备(iSCSI发起方)200接收并发布R2T PDU 225。随后,在时间点t5,客户端设备200响应于R2T PDU 225发送数据发出PDU 230。在时间点t6,存储设备205接收所述数据发出 PDU并且执行操作235,所述操作235涉及到(a)由iSCSI HBA经由DMA将所接收到的数据写入到所提供的缓冲器,并且向驱动器发送第三中断[lNTR #3];以及(b)调用上层以通知数据已经被DMA到缓冲器。随后,在时间点t7,存储设备205进一步执行操作240,所述操作240涉及到(a)接收第二回调{CALLBACK #2};(b)向客户端设备(iSCSI发起方)200发送状况PDU;(c)在HBA已经成功发送继续的目标I/O类型6(CTIO-T6)时接收第四中断[INTR #4];以及(d)调用上层并完成I/O命令。注意到,驱动器还使用CTIO-T6输入/输出控制块(IOCB)将状况发布至HBA。

如图2B所示,在对相同大小的I/O有iSCSI大型即时数据支持的情况下的I/O流涉及到两个中断和单个上层回调。特别地,在时间点t1,客户端设备200能够向存储设备205发送iSCSI命令PDU 210。随后,在时间点t2,存储设备(iSCSI驱动器)205在iSCSI HBA向它发送ATIO-T3 IOCB时接收[INTR #1],所述ATIO-T3 IOCB是指连同已经包含由客户端设备(iSCSI发起方)200所发送的数据(DATA)的即时数据缓冲器一起写入I/O命令。iSCSI驱动器随后能够利用IO+DATA来调用上层(操作255)。在时间点t3,iSCSI驱动器取回具有最终状况(STATUS)的{Callback #1}。存储设备(iSCSI驱动器)205随后能够使用CTIO-T6 IOCB将状况(STATUS)发布至iSCSI HBA。当iSCSI HBA已经成功发送了CTIO-T6时,iSCSI驱动器接收最终的[INTR #2],它在此时调用上层以完成I/O命令(操作260)。

由于在这个技术方案中整个I/O命令与即时数据一起花费单个往返时间(RTT),所以与没有大型即时数据支持情况下的两个RTT相比,主机侧的I/O延时能够减少一半。此外,本文所描述的技术方案能够支持多达16K字节的即时数据,它等同于32个块的即时数据。这种大幅即时数据限额会覆盖多达一般在iSCSI I/O命令中所接收的90%的数据。在不等待上层指令150对即时数据的处理完成而把缓冲器从堆栈状态140即刻释放确保了在与大量即时数据一起接收到任何新I/O命令时都会有充足的缓冲器处于已分配状态110并且准备被HBA使用。

在讨论图3-4时,可以参考图1-2中的组件以提供上下文的示例。在一种实施方式中,图1-2中所描述的存储设备105和205可以执行操作310-350和410-470来变换缓冲器以便由驱动器层独占地访问以写入即时数据输入/输出(I/O)。另外,虽然图3-4的(多种)方法被描述为由存储设备来实现,但是所述(多种)方法可以在其它适当设备或组件上执行。例如,图3-4的(多种)方法可以采用如图5中的机器可读存储介质上的可执行指令的形式来实现。

图3是变换缓冲器以便由驱动器层独占地访问以写入即时数据I/O的示例方法(例如,过程)的流程图。在操作期间,存储设备(例如,iSCSI目标)能够与客户端设备协商所述存储设备和客户端设备之间的单个会话中所允许的同时I/O命令的数量(操作310)。随后,如果所述存储设备从客户端设备接收到前往所述存储设备的会话连接,则所述存储设备能够基于所协商的同时I/O命令的数量为所述单个会话预先分配多个即时数据缓冲器(操作320)。此外,所述存储设备能够连同即时数据一起接收I/O命令(操作330)。注意到,即时数据与I/O命令一样在单个协议数据单元(PDU)内被传送。随后,所述存储设备能够在原子操作中将预分配的缓冲器从网络接口状态(例如,主机总线适配器(HBA)状态)变换为驱动器状态(操作340)。这里,所述驱动器状态使得预分配的缓冲器能够由存储设备的驱动器层独占地访问。而且,所述原子操作防止了其它I/O命令变换预分配的缓冲器的网络接口状态直至所述原子操作完成。此外,所述存储设备能够将即时数据写入到处于缓冲器状态的预分配的缓冲器。

图4A-4B是变换缓冲器以便由驱动器层独占地访问以写入即时数据I/O的另一示例方法(例如过程)的流程图。在操作期间,存储设备能够初始化多个即时数据缓冲器(操作400)。所述多个即时数据缓冲器的初始状态可以是空闲状态,所述空闲状态允许所述即时数据缓冲器是空闲的以供驱动器层分配。此外,存储设备能够将群聚的存储器页面(CMP)与每个即时数据缓冲器进行关联(操作405)。接下来,存储器设备能够与客户端设备(例如,iSCSI发起方)协商所述存储设备和客户端设备之间的单个会话中所允许的同时输入/输出(I/O)命令的数量(操作410)。随后,所述存储设备能够将所述即时数据缓冲器的子集从空闲状态变换为已分配状态(操作415)。所述已分配状态允许所述即时数据缓冲器的子集能够被分配并且准备由存储设备的网络接口(HBA)层所选择。接下来,响应于从客户端设备接收到前往所述存储设备的会话连接,所述存储设备能够基于所协商的同时I/O命令的数量为单个会话预先分配多个即时数据缓冲器(操作420)。

响应于为相应会话预先分配即时数据缓冲器的子集,所述存储设备能够将所述即时数据缓冲器的子集从已分配状态变换为网络接口状态(操作425)。所述网络接口(HBA)状态允许即时数据缓冲器由所述存储设备的网络接口层独占地访问。随后,所述存储设备能够连同即时数据一起接收I/O命令,其中所述即时数据与所述I/O命令一样在单个协议数据单元(PDU)内传送(操作430)。接着,所述存储设备能够在原子操作中将预分配的缓冲器从网络接口状态变换为驱动器状态(操作435)。这里,所述驱动器状态使得预分配的缓冲器能够由所述存储设备的驱动器层独占地访问。而且,所述原子操作防止其它I/O命令变换预分配的缓冲器的网络接口状态直至所述原子操作完成。

在一些示例中,所述存储设备进一步能够确定在预分配的缓冲器内所接收的即时数据经由直接存储器访问(DMA)在其处被写入的偏移量地址(操作440)。接着,所述存储器设备能够在所述偏移量地处将即时数据写入到处于驱动器状态的预分配的缓冲器(操作445)。随后,所述存储设备能够将存储即时数据的预分配的缓冲器传递至上层(操作450)。而且,所述存储设备可以将预分配的缓冲器从驱动器状态变换为堆栈状态(操作455)。所述堆栈状态允许预分配的缓冲器由所述存储设备的上层独占地访问。

在一些示例中,所述存储设备能够将与存储所接收的即时数据的预分配的缓冲器相关联的第一物理地址交换为与第二多个缓冲器相关联的第二物理地址(操作460)。注意到,所述第二多个缓冲器是空闲的,具有与预分配的缓冲器相同的容量,并且与预分配的缓冲器共享相同的虚拟地址。随后,所述存储设备能够通过将第二多个数据缓冲器变换为空闲状态而释放单个虚拟地址和所述第二多个缓冲器(操作465)。另外,在释放即时数据缓冲器后,所述存储设备能够向客户端设备传送指示I/O命令已完成的确认(操作470)。

图5是示例存储设备的框图,所述存储设备具有至少一个处理器510以执行机器可读存储介质520内的指令530-590从而变换缓冲器以便由驱动器层独占地访问以写入即时数据I/O。指令530-590可以包括接收指令530、传送指令540、初始化指令550、协商指令560、状态变换指令570、存储器写入指令580和缓冲器处置指令590。

在一些示例中,存储设备进一步能够计算循环冗余校验(CRC)值,并且在预分配的缓冲器中的每个即时数据块之后写入所述CRC值。

在一些示例中,所述存储设备能够递归地检查原子原语以确定处于已分配状态的预分配的缓冲器是否被独占地搜索。响应于原子原语指示预分配的缓冲器被独占地搜索,所述存储设备能够搜索预分配的缓冲器以便存储所接收到的即时数据。响应于HBA为即时数据缓冲器保持多个队列,并且响应于原子原语指示预分配的缓冲器并未被独占地搜索,所述存储设备能够等待对与HBA所保持的多个队列中的不同队列相关联的缓冲器的搜索完成。

如本文所使用的,“存储设备”可以是包括至少一个存储驱动器(例如,(多个)固态驱动器、(多个)硬盘驱动器,或者它们的任意组合)和控制器(例如,计算电路)的计算设备(诸如存储阵列)。存储设备可以响应于来自(多个)相应主机系统的请求而向(多个)存储驱动器写入数据或者从其读取数据。在一些示例中,控制器可以至少部分由硬件和编程的组合来实现。例如,硬件可以包括至少一个处理器(例如,处理器510),并且编程可以包括存储在至少一个机器可读存储介质(例如,520)上的可由(多个)处理器执行的指令。此外,存储设备还可以包括嵌入式存储器以及能够在主机系统中执行并且充当所述嵌入式存储器的驱动器的软件。如本文所使用的,“处理器”可以是以下项中的至少一个:中央处理器(CPU)、基于半导体的微处理器、图形处理单元(GPU)、被配置为获取并执行指令的现场可编程门阵列(FPGA)、适于获取并执行存储在机器可读存储介质上的指令的其它电子电路、或者是它们的组合。

所述至少一个处理器510可以取得、解码并执行存储在存储介质520上的指令从而执行以下关于指令530-590所描述的功能。在其它示例中,存储介质520的任意指令的功能可以采用电子电路的形式、采用机器可读存储介质上编码的可执行指令的形式、或者采用它们的组合的形式来实现。所述存储介质可以安置在执行机器可读指令的计算设备之中,或者安置成远离所述计算设备但是能够(例如,经由计算机网络)被其访问以便执行。在图5的示例中,存储介质520可以由一个机器可读存储介质或者多个机器可读存储介质来实现。

虽然存储设备500包括至少一个处理器510和机器可读存储介质520,但是它还可以包括其它适当组件,诸如附加的(多个)处理组件(例如,(多个)处理器、(多个)ASIC等)、存储装置(例如,(多个)存储驱动等),或者它们的组合。

如本文所使用的,“机器可读存储介质”可以是用于包含或存储诸如可执行指令、数据等的信息的任意的电子、磁性、光学或其它物理存储装置。例如,本文所描述的任意机器可读存储介质可以是以下的任意项:随机访问存储器(RAM)、易失性存储器、非易失性存储、闪存、存储驱动(例如,硬盘驱动)、固态驱动、任意形式的存储盘(例如,紧致盘、DVD等)等,或者是它们的组合。另外,本文所描述的任意机器可读存储介质可以是非瞬态的。在本文所描述的示例中,一个或多个机器可读存储介质可以是物品(或制造品)的一部分。物品或制造品可以是指任何所制造的单个组件或多个组件。

特别地,接收指令530可以由处理器510执行以便连同即时数据一起接收I/O命令,其中所述即时数据与I/O命令一样在单个协议数据单元(PDU)内传送,如上文关于图1所描述的。

传送指令540可以由处理器510执行以便在释放即时数据缓冲器之后向客户端设备传送I/O命令已完成的确认,如上文关于图1所描述的。

初始化指令550可以由处理器510执行以便初始化多个即时数据缓冲器,其中所述多个即时数据缓冲器的初始状态包括空闲状态,所述空闲状态允许所述即时数据缓冲器是空闲的以供驱动器层分配;将群聚的存储器页面(CMP)与每个即时数据缓冲器进行关联,如上文关于图1所描述的。

协商指令560可以由处理器510执行以便与客户端设备协商所述存储设备和客户端设备之间的单个会话中所允许的同时输入/输出(IO)命令的数量,如上文关于图1所描述的。

如上文关于图1所描述的,状态变换指令570可以由处理器510执行以便在原子操作中将预分配的缓冲器从网络接口状态变换为驱动器状态,其中所述驱动器状态允许预分配的缓冲器由存储设备的驱动器层独占地访问,并且其中所述原子操作防止其它I/O命令变换预分配的缓冲器的网络接口状态直至所述原子操作完成。变换指令570可以进一步将空闲数据缓冲器的子集从空闲状态变换为已分配状态,所述已分配状态允许即时数据缓冲器的子集被分配;响应于为相应会话预先分配即时数据缓冲器的子集,而将即时数据缓冲器的子集从已分配状态变换为网络接口状态,所述网络接口状态允许即时数据缓冲器由存储设备的网络接口层独占地访问;将预分配的缓冲器从驱动器状态变换为堆栈状态,所述堆栈状态指示所述预分配的缓冲器由存储设备的上层独占地访问;通过将即时数据缓冲器变换为空闲状态而释放多个即时数据缓冲器。

如上文关于图1所描述的,存储器写入指令580可以由处理器510执行以便确定用于存储所接收的即时数据的处于HBA状态的预分配的缓冲器的数量;确定预分配的缓冲器内所接收的即时数据经由直接存储器访问(DMA)在其处被写入的偏移量地址;在所述偏移量地址处将即时数据写入到处于驱动器状态的预分配的缓冲器;计算循环冗余校验(CRC)值;在预分配的缓冲器中的每个即时数据块之后写入所述CRC值。

如上文关于图1所描述的,缓冲器处置指令590可以由处理器510执行以便响应于从客户端设备接收到前往所述存储设备的会话连接,基于所协商的同时I/O命令的数量为单个会话预先分配多个即时数据缓冲器;将存储即时数据的预分配的缓冲器传递至上层;将与存储所接收的即时数据的预分配的缓冲器相关联的第一物理地址交换为与第二多个缓冲器相关联的第二物理地址,所述第二多个缓冲器是空闲的,具有与预分配的缓冲器相同的容量,并且与预分配的缓冲器共享相同的虚拟地址;响应于HBA为即时数据缓冲器保持多个队列,递归地检查原子原语以确定处于已分配状态的预分配的缓冲器是否被独占地搜索;响应于原子原语指示预分配的缓冲器被独占地搜索,搜索预分配的缓冲器以便存储所接收到的即时数据;响应于原子原语指示预分配的缓冲器并未被独占地搜索,等待对与HBA所保持的多个队列中的不同队列相关联的缓冲器的搜索完成。

本说明书(包括任何所附权利要求、摘要和附图)中所公开的所有特征和/或因此所公开的任何方法或过程的所有要素都可以以任何组合方式进行组合,除了其中至少一些这样的特征和/或要素相互排斥的组合方式之外。

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