1.一种方法,包括:
由存储设备与客户端设备协商存储设备和所述客户端设备之间的单个会话中所允许的同时输入/输出(I/O)命令的数量;
响应于从所述客户端设备接收到前往所述存储设备的会话连接,基于所协商的同时I/O命令的数量为所述单个会话预先分配多个即时数据缓冲器;
由所述存储设备连同即时数据一起接收I/O命令,其中所述即时数据与所述I/O命令一样在单个协议数据单元(PDU)内传送;
由所述存储设备在原子操作中将预分配的缓冲器从网络接口状态变换至驱动器状态,其中所述驱动器状态使得预分配的缓冲器能够由所述存储设备的驱动器层独占地访问,并且其中所述原子操作防止其它I/O命令变换预分配的缓冲器的网络接口状态直至所述原子操作完成;并且
由所述存储设备将所述即时数据写入到处于驱动器状态的预分配的缓冲器。
2.根据权利要求1所述的方法,进一步包括:
在存储设备处初始化多个即时数据缓冲器,其中所述多个即时数据缓冲器的初始状态包括空闲状态,所述空闲状态允许所述即时数据缓冲器是空闲的以供驱动器层分配。
3.根据权利要求2所述的方法,进一步包括:
由所述存储设备将群聚的存储器页面(CMP)与每个即时数据缓冲器进行关联;
由所述存储设备将空闲即时数据缓冲器的子集从空闲状态变换为已分配状态,所述已分配状态允许所述即时数据缓冲器的子集被分配。
4.根据权利要求1所述的方法,进一步包括:
响应于为相应会话预先分配即时数据缓冲器的子集,由所述存储设备将所述即时数据缓冲器的子集从已分配状态变换为网络接口状态,所述网络接口状态允许所述即时数据缓冲器由所述存储设备的网络接口层独占地访问。
5.根据权利要求1所述的方法,进一步包括:
由所述存储设备确定用于存储所接收的即时数据的处于HBA状态的预分配的缓冲器的数量;
由所述存储设备确定所述预分配的缓冲器内所接收的即时数据经由直接存储器访问(DMA)在其处被写入的偏移量地址;并且
由所述存储设备在所述偏移量地址处将即时数据写入到处于驱动器状态的所述预分配的缓冲器。
6.根据权利要求1所述的方法,进一步包括:
由所述存储设备将存储即时数据的预分配的缓冲器传递至上层;并且
由所述存储设备将所述预分配的缓冲器从驱动器状态变换为堆栈状态,所述堆栈状态指示所述预分配的缓冲器由所述存储设备的上层独占地访问。
7.根据权利要求1所述的方法,进一步包括:
由所述存储设备通过将所述即时数据缓冲器变换为空闲状态而释放多个即时数据缓冲器;并且
在释放所述即时数据缓冲器之后,向所述客户端设备传送指示所述I/O命令已完成的确认。
8.根据权利要求7所述的方法,进一步包括:
由所述存储设备将与存储所接收的即时数据的预分配的缓冲器相关联的第一物理地址交换为与第二多个缓冲器相关联的第二物理地址,所述第二多个缓冲器是空闲的,具有与所述预分配的缓冲器相同的容量,并且与所述预分配的缓冲器共享相同的虚拟地址。
9.根据权利要求1所述的方法,进一步包括:
由所述存储设备计算循环冗余校验(CRC)值;并且
在所述预分配的缓冲器中的每个即时数据之后写入所述CRC值。
10.一种具有指令的非瞬态机器可读存储介质,所述指令可执行以至少部分实现互联网小型计算机系统接口(iSCSI)驱动器,所述指令可执行以:
与客户端设备协商存储设备和所述客户端设备之间的单个会话中所允许的同时输入/输出(I/O)命令的数量;
响应于从所述客户端设备接收到前往所述存储设备的会话连接,基于所协商的同时I/O命令的数量为所述单个会话预先分配即时数据缓冲器的子集;
接收包括I/O命令和即时数据的I/O输入,其中所述即时数据与所述I/O命令一样在单个协议数据单元(PDU)内传送;
在原子操作中将预分配的缓冲器从网络接口状态变换至驱动器状态,其中所述驱动器状态允许预分配的缓冲器由所述驱动设备的驱动器层独占地访问,并且其中所述原子操作防止其它I/O命令变换预分配的缓冲器的网络接口状态直至所述原子操作完成;并且
将所述即时数据写入到处于驱动器状态的预分配的缓冲器。
11.根据权利要求10所述的非瞬态机器可读存储介质,其中存储器处理逻辑进一步:
初始化多个即时数据缓冲器,其中所述多个即时数据缓冲器的初始状态包括空闲状态,所述空闲状态允许所述即时数据缓冲器是空闲的以供分配;
将群聚的存储器页面(CMP)与每个即时数据缓冲器进行关联;
将即时数据缓冲器的子集从空闲状态变换为已分配状态,所述已分配状态允许所述即时数据缓冲器的子集被分配。
12.根据权利要求10所述的非瞬态机器可读存储介质,其中存储器处理逻辑进一步:
响应于为相应会话网络接口预分配即时数据缓冲器的子集,将所述即时数据缓冲器的子集从已分配状态变换为HBA状态, 所述HBA状态允许所述即时数据缓冲器由所述存储设备的HBA层独占地访问。
13.根据权利要求10所述的非瞬态机器可读存储介质,其中存储器处理逻辑进一步:
经由第二接口将存储即时数据的预分配的缓冲器传递至虚拟卷层;并且
将所述预分配的缓冲器从驱动器状态变换为堆栈状态,所述堆栈状态允许所述预分配的缓冲器由所述存储设备的VV层独占地访问。
14.根据权利要求13所述的非瞬态机器可读存储介质,其中存储器处理逻辑进一步:
通过将所述即时数据缓冲器从堆栈状态变换为空闲状态而释放预分配的缓冲器;并且
在释放所述预分配的缓冲器之后,向所述客户端设备发送指示所述I/O命令已完成的确认。
15.根据权利要求10所述的非瞬态机器可读存储介质,其中响应于HBA为所述即时数据缓冲器保持多个队列,存储器处理逻辑进一步:
递归地检查原子原语以确定处于已分配状态的预分配的缓冲器是否被独占地搜索;
响应于原子原语指示预分配的缓冲器被独占地搜索,搜索预分配的缓冲器以便存储所接收的即时数据。
16.根据权利要求10所述的非瞬态机器可读存储介质,其中响应于HBA为所述即时数据缓冲器保持多个队列,并且响应于原子原语指示预分配的缓冲器并未被独占地搜索,存储器处理逻辑进一步:
等待对与HBA所保持的多个队列中的不同队列相关联的缓冲器的搜索完成。
17.一种计算设备,包括:
至少一个处理器;
包括指令的非瞬态机器可读存储介质,所述指令可由所述至少一个处理器执行以:
与客户端设备协商存储器存储阵列和客户端设备之间的单个会话中所允许的同时输入/输出(I/O)命令的数量;
在第一原子操作中,响应于从所述客户端设备接收到前往所述存储器存储阵列的会话连接,基于所协商的I/O命令的数量搜索多个可用即时数据缓冲器;
在所述第一原子操作中为所述单个会话分配多个即时数据缓冲器;
接收I/O命令和即时数据,其中所述即时数据与所述I/O命令一样在单个协议数据单元(PDU)内传送;
在第二原子操作中,在原子操作中将多个即时数据缓冲器的子集从网络接口状态切换至驱动器状态,其中所述驱动器状态允许所述即时数据缓冲器的子集由存储器存储阵列的驱动器层独占地访问,并且其中所述原子操作防止其它I/O命令变换预分配的缓冲器的网络接口状态直至所述原子操作完成;并且
将所述即时数据写入到处于驱动器状态的即时数据缓冲器的子集。
18.根据权利要求17所述的计算设备,所述机器可读存储介质进一步包括指令以:
初始化多个即时数据缓冲器,其中所述多个即时数据缓冲器的初始状态包括空闲状态,所述空闲状态允许所述即时数据缓冲器是空闲的以供分配;
响应于与客户端设备协商在所述存储器存储阵列和客户端设备之间所允许的同时I/O命令的数量而将所述即时数据缓冲器的子集从空闲状态变换为已分配状态,所述已分配状态允许所述即时数据缓冲器的子集被分配;
响应于与所述存储器存储阵列相关联的网络接口为所述单个会话分配即时数据缓冲器的子集而将所述即时数据缓冲器的子集从已分配状态变换为网络接口状态,所述网络接口状态允许所述即时数据缓冲器由存储设备的网络接口层独占地访问;
将所述即时数据缓冲器的子集从驱动器状态变换为堆栈状态,所述堆栈状态允许所述即时数据缓冲器的子集由所述存储器存储阵列的上层独占地访问。
19.根据权利要求17所述的计算设备,其中所述机器可读存储介质进一步包括指令以:
通过以下来释放所分配的即时数据缓冲器的子集:(i)将所述即时数据缓冲器从堆栈状态变换为空闲状态,并且(ii)将与存储所接收的即时数据的所述即时数据缓冲器的子集相关联的第一物理地址交换为与第二多个可用缓冲器相关联的第二物理地址,所述第二多个缓冲器具有与所述预分配的缓冲器相同的容量,并且与所述预分配的缓冲器共享相同的虚拟地址;并且
在释放所述即时数据缓冲器的子集之后向所述客户端设备发送指示所述I/O命令已完成的确认。
20.根据权利要求17所述的计算设备,所述机器可读存储介质进一步包括指令以:
递归地检查原子原语以确定处于已分配状态的所述即时数据缓冲器的子集是否被独占地搜索;
响应于原子原语指示预分配的缓冲器被独占地搜索,搜索预分配的缓冲器以便存储所接收的即时数据;并且
响应于原子原语指示预分配的缓冲器并未被独占地搜索,等待对与网络接口层所保持的多个队列中的不同队列相关联的缓冲器的搜索完成。