CN107533537B - 存储系统、用于存储的方法和非暂时性计算机可读介质 - Google Patents
存储系统、用于存储的方法和非暂时性计算机可读介质 Download PDFInfo
- Publication number
- CN107533537B CN107533537B CN201680022777.5A CN201680022777A CN107533537B CN 107533537 B CN107533537 B CN 107533537B CN 201680022777 A CN201680022777 A CN 201680022777A CN 107533537 B CN107533537 B CN 107533537B
- Authority
- CN
- China
- Prior art keywords
- data
- layout template
- ssd
- storage
- layout
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17331—Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0662—Virtualisation aspects
- G06F3/0665—Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/28—Using a specific disk cache architecture
- G06F2212/285—Redundant cache memory
- G06F2212/286—Mirrored cache memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
Abstract
本文所公开的示例涉及使用存储空间的乐观分配的存储设备。在示例系统中,多个存储驱动器通过存储网络耦合到存储控制器和RNIC(远程直接存储器访问(RDMA)网络接口卡(NIC))。RNIC包括布局模板选择器和多个模板。布局模板选择器至少部分地基于从主机接收的逻辑块地址(LBA)来选择布局模板。布局模板标识与由LBA表示的数据的部分相关联的多个存储驱动器中的每一个。控制器包括用于为由LBA表示的数据确定新布局模板的虚拟化计算模块以及所述新布局模板。
Description
技术领域
本公开整体上涉及存储设备。
背景技术
数据存储要求和速度要求两者都在不断增加。因此,已经将可以增加数据访问速度的新的存储技术投入使用。这些存储技术通常基于固态驱动器(SSD)形式的非易失性存储器(NVM)。 SSD可以通过被称为织物(fabric)的连接技术而彼此互连并与例如服务器系统的主机互连。
发明内容
根据本公开的一方面,提出一种存储系统,包括:多个存储驱动器,其通过存储网络耦合到存储控制器和RNIC,其中,RNIC是远程直接存储器访问RDMA网络接口卡NIC;RNIC,其包括布局模板选择器和多个模板,其中:布局模板选择器至少部分地基于从主机接收的逻辑块地址LBA从多个模板选择布局模板;和布局模板标识与由LBA表示的数据的部分相关联的多个存储驱动器中的每个;和控制器,其中控制器包括:虚拟化计算模块,其用于确定由LBA表示的数据的新布局模板并且将数据的一个或多个部分从由所选择的布局模板指示的存储驱动器的相应缓冲器复制到由新布局模板指示的存储驱动器的相应缓冲器从而将数据的部分存储在由新布局模板指示的存储驱动器的相应缓冲器中,其中每个存储驱动器的相应缓冲器与对应于存储驱动器中的物理地址的物理位置分离;和新布局模板。
根据本公开的另一方面,提出一种用于存储的方法,包括:将在RNIC中使用旧布局模板存储的数据视为非易失性镜像高速缓存,其中,RNIC是远程直接存储器访问RDMA网络接口卡NIC;和经由存储控制器中的虚拟化计算模块,将数据从由旧布局模板指示的存储驱动器的相应缓冲器复制到由新布局模板指示的存储驱动器的相应缓冲器从而将数据存储在由新布局模板指示的存储驱动器的相应缓冲器中,其中每个存储驱动器的相应缓冲器与对应于存储驱动器中的物理地址的物理位置分离。
根据本公开的另一方面,提出一种非暂时性计算机可读介质,包括代码以引导处理器:确定用于事务的当前布局模板是否与针对数据的期望布局匹配;响应于确定,将数据的一个或多个部分从由当前布局模板指示的存储驱动器的相应缓冲器复制到由新布局模板指示的存储驱动器的相应缓冲器从而将数据的部分存储在由新布局模板指示的存储驱动器的相应缓冲器中,其中每个存储驱动器的相应缓冲器与对应于存储驱动器中的物理地址的物理位置分离。
附图说明
在以下详细描述中并参照附图描述某些示例性实施例,其中:
图1是使用固态驱动器的示例计算系统的框图;
图2是将来自服务器的数据直接存储到固态驱动器阵列的远程直接存储器访问使能的网络接口卡(RNIC)的示意性示例;
图3是使用乐观存储分配将来自服务器的数据直接存储到固态驱动器阵列的RNIC的示意性示例;
图4A是使用SSD的示例乐观存储设备的框图;
图4B是使用SSD的示例乐观存储设备的框图;
图5A和图5B是用于数据的乐观存储的示例方法的过程流程图;
图5C是用于数据的乐观存储的示例方法的过程流程图;
图6是用于从乐观SSD存储设备读取的示例方法600的过程流程图;
图7A是具有鲁棒冗余性的示例乐观存储设备的框图;
图7B是具有鲁棒冗余性的示例乐观存储设备的框图;
图8A和图8B是用于具有鲁棒冗余性的数据的乐观存储的示例方法的过程流程图;
图8C是用于具有鲁棒冗余性的数据的乐观存储的示例方法的过程流程图;
图9是用于从多态SSD恢复数据的示例方法900的过程流程图;
图10A是具有动态布局的示例乐观存储设备的框图;
图10B是具有动态布局的示例乐观存储设备的框图;
图11A和图11B是用于利用动态布局对数据进行乐观存储的示例方法的过程流程图;
图11C是用于利用动态布局对数据进行乐观存储的示例方法的过程流程图;
图12是包括处理器通过总线可访问的代码的示例非易失性计算机可读介质的框图;
图13是包括处理器通过总线可访问的代码的示例非易失性计算机可读介质的框图;和
图14是包括处理器通过总线可访问的代码的示例非易失性计算机可读介质的框图。
具体实施方式
图1是使用固态驱动器102的示例计算系统100的框图。对于高性能计算应用而言,固态驱动器(SSD)102已经变得更为常见。SSD使用非易失性存储器(NVM)作为诸如闪存、非易失性RAM(NVRAM)、电池备份动态RAM等等之类的记忆装置104,以存储数据并在缺乏电力时保留数据。记忆装置104用于数据缓冲器、日志文件、高速缓存和本文所述的其他存储。因此,可以保护这些存储中的数据免受电源故障和可能导致数据丢失的其他故障。
随着SSD技术已经前进,用于诸如串行AT附接(SATA)、串行附接SCSI(SAS)和光纤信道之类的硬盘驱动器的接口技术已经成为对诸如数据传输速率、延迟和软件开销之类的SSD性能的限制因素。因此,使用诸如PCIe和以太网之类的其他接口技术开发了新的接口协议。例如,已经公布NVM express(NVMe)协议,用于通过外围部件互连Express(PCIe)总线或网络106访问SSD 102。此外,已经公布了NVM over fabric(NVMf)协议,用于使用远程直接存储器访问(RDMA)在以太网108上传播NVMe协议。
利用用于访问连接到PCIe总线106或以太网108的SSD 102的高速协议的可用性,使用经由PCIe总线106互连的远程直接存储器访问使能的网络接口卡(RNIC)112和多个SSD102来构建简单的全闪速存储设备110变得可行。迄今为止,这样的子系统已经在很大程度上取决于例如在存储控制器116或维护单元中的用于命令处理的CPU 114。
存储控制器116可以是例如网络环境中的刀片服务器、个人计算机、工作站等。CPU114可以包括诸如单核处理器、双核处理器、多核处理器、多个处理器、计算群集、云服务器等之类的任何处理资源。CPU 114可以通过总线耦合到记忆装置118,其中总线可以是在存储控制器116的各个部件之间传送数据的通信系统。在示例中,总线可以包括外围部件互连(PCI)总线、行业标准架构(ISA)总线、PCI Express(PCIe)总线,诸如Intel®直接介质接口(DMI)系统之类的高性能链路等。
记忆装置118可以包括随机存取存储器(RAM),例如静态RAM(SRAM)、动态RAM(DRAM)、零电容器RAM、嵌入式DRAM(eDRAM)、扩展数据输出RAM(EDO RAM)、双数据速率RAM(DDR RAM)、电阻RAM(RRAM)和参数RAM(PRAM);只读存储器(ROM),例如掩码ROM、可编程ROM(PROM)、可擦除可编程ROM(EPROM)和电可擦除可编程ROM(EEPROM);闪存;或任何其他合适的存储器系统。此外,记忆装置118可以包括较长期的记忆装置,例如非易失性记忆装置,诸如固态驱动器、硬盘驱动器、带驱动器、光驱动器、闪速驱动器、驱动器阵列或其任何组合。在一些示例中,记忆装置118可以包括诸如非易失性RAM(NVRAM)、电池备份DRAM等的非易失性存储器设备。
在一个示例中,SSD 102可以在刀片上连同存储控制器116被插入到机架中以形成存储设备110。在另一个示例中,存储设备110可以包括安装在PCIe卡上的SSD模块,所述PCIe卡被插入到存储控制器116的主板上的槽中。
已经提出了改进或优化以允许数据直接从RNIC 112流向PCIe连接的SSD 102而不访问由CPU 114控制的存储器(记忆装置)118。然而,对于除了最简单的存储设备110之外的所有,该技术可能产生需要在CPU 114上运行来处理命令的软件的虚拟化功能的问题。
虽然本文所描述的示例涉及固态驱动器,但是可以理解,可以使用其他配置。例如,可以使用通过PCIe总线106通信的硬盘驱动器的组或阵列代替SSD来形成存储设备。
概述
如这里所述的示例中详细讨论的,RNIC 112和SSD 102已经添加了功能,以使数据、命令和响应能够直接在RNIC 112和SSD 102之间流动,而软件密集型虚拟化功能与例如存储控制器116中的CPU 114保持在一起。CPU 114保持控制数据布局、地址转换、奇偶一致性(parity consistency)和故障恢复。这有助于使能无法被CPU 120适应的复杂的虚拟化与加速的正常处理的组合,诸如驻留在RNIC 112上的专用集成电路(ASIC)。
此外,SSD 102和RNIC 112之间的直接数据传送可以通过避免针对在主机122中的RNIC 124和例如只是一堆盘(JBOD)的阵列126之间直接流动的数据的存储器跳跃来提高性能。CPU 114可以保持掌管所有虚拟化功能,即使大多数正常操作在涉及它之前就已完成。
为了促进直接通信,在一个示例中,RNIC 112在记忆装置128中包括布局模板的集合和布局选择器,如关于图4进一步讨论的那样。布局选择器根据来自主机122的事务中所提供的逻辑块地址(LBA)来选择布局模板。例如,选择器可以计算主机LBA的按字段(field-wise)散列以获得与布局模板对应的数字。
每个布局模板列出SSD 102的集合并且指示当选择该布局时,针对LBA的每个部分的数据的哪个部分去往SSD 102中的每个。每个SSD也可以具有角色,诸如奇偶性对数据(如本文所使用的主对从)。这可以逐个布局模板而变化,某些SSD用作针对某些LBA的奇偶性或主盘,而用作针对其他LBA的数据或从盘。
当事务(IO)例如写入事务到达时,它们根据所选择的布局模板而被分割或分开,并且将各部分直接发送到SSD。每个数据部分都伴随有具有唯一标识符的意图(intent)记录,使得相关联的部分可以被中央控制器处理器跟踪。意图记录包括属于正在写入SSD 102或正从该SSD 102读取的数据的原始主机LBA的部分,而不是SSD 102上的物理地址。每个SSD 102将其接收到的事务的部分以及意图记录放置在SSD 102内的记忆装置104中。SSD102还对LBA部分进行高速缓存,使得读取命中可以由SSD 102处理,并且可以对冲突进行标记以由CPU 114进行分辨。
当事务的所有部分成功完成时,RNIC 112对指示成功的主机122进行响应。此时,无论发送到个体SSD 102的事务的部分成功或失败,都将意图记录传递到例如存储控制器116中的CPU 114,其中虚拟化引擎确定其中数据应该驻留在的每个SSD 102上的物理地址。
为了对管理布局模板选择器而言已知的布局模板的数量,约束虚拟化计算,使得当LBA驱动的计算产生给定的数值结果时,总是选择相同组的SSD 102。换句话说,这意味着子池(sub-pool)是通过LBA计算的参数来预先设置的。这些参数可随着系统100的成长而改变,然而,这暗示着布局改变和数据重新组织。缺乏这些约束,布局模板选择将需要等于(tantamount to)由存储控制器116中的CPU 114管理的元数据的大量元数据。
然后,存储控制器116联系SSD 102中的每个以为SSD 102最近已经接收到的数据指派物理地址,并处理错误或解决被SSD 102标记的写入冲突。可以在控制器处理器或SSD102内,例如在存储奇偶条带(parity stripe)的主SSD 102中计算例如奇偶的冗余性。一旦它们被存储控制器116告知正确的物理地址,就允许SSD 102冲刷数据并停止跟踪新数据。
在一些示例中,如关于图5进一步讨论的,可以通过将附加状态添加到由每个布局模板指定的主和从SSD 102中的意图记录(intent record)来将奇偶一致性的形式的附加冗余性考虑添加到上述示例。通过附加冗余性,来自指派物理地址的CPU 114的通信将从SSD 102置于多版本状态中,其指示将要保持最近写入的数据的旧版本和新版本,直到可以付诸(commit)一致的奇偶性。因此,如果在该过程期间电源失效,则可以计算奇偶性。
由布局模板仲裁的主SSD 102也可以具有附加状态,使得主(master)上的单个状态转变代表新的奇偶性的付诸点。从CPU 114到主和从SSD 102的消息以这样的方式对它们的状态排顺序,使得不破坏旧版本的数据直到付诸一致的奇偶性。可以在冗余盘组之前的冗余高速缓存之后对从故障恢复进行建模。高速缓存类似于跨SSD 102的数据的初始镜像副本,而盘集合类似于跨相同SSD 102的RAID数据。
在一些示例中,可以通过将实时修改布局的能力添加到上述示例来减轻管理布局模板的复杂性。这可以在每次事务完成之前、在不强制过多的CPU 114干预的情况下执行。例如,事务由RNIC 112指派布局,但是当CPU 114对事务进行后处理时,其可以发现对于该LBA,存在不是由RNIC 112选择的新的或优选的布局。在这种情况下,CPU 114将由RNIC 112提供的布局中的SSD 102视为高速缓存,并且在计算奇偶性之前或期间将数据复制到新布局。
给定这种管理新布局的方法,布局模板选择器可以在任何点原子地进行更新,只要给定的事务只遭受一个选择器或另一个选择器,例如由接收到事务的时间所确定的。RNIC 102中的模板改变不需要等待在飞行中(in-flight)的事务完成,因为它们将被CPU114修正。这可以改进数据流的性能,因为数据不需要保留在存储控制器116的记忆装置118中或在完成之前涉及CPU 114。
图2是RNIC 112将数据从主机122直接存储到固态驱动器102的阵列126的示意性示例200。相同编号的项目如关于图1描述的那样。主机(发起者)122使用RNIC 124连接到以太网108。同样,固态盘(SSD)设备110(目标)包含可以具有例如通过PCIe总线106到达SSD102的直接访问能力的RNIC 112。在SSD设备110内,例如在存储控制器或本地维护系统中的CPU 114、SSD 102和RNIC 112都连接到PCIe总线106(为了简化附图,被示出为云)。附加能力可以允许RNIC 112通过分析来自主机122的读取或写入命令来确定哪个SSD 102保持被该命令操纵的数据。然后,在不中断CPU 114的情况下,RNIC 112可以使用PCIe总线106来使用PCIe总线106直接向SSD 102发送或直接从SSD 102接收相关联的数据。这可以通过使用将特定卷的数据与特定SSD 102相关联的卷路由器(volume router)来执行。通常,来自主机122的命令包括可以被定位和解释的卷号。当在RNIC 112和PCIe总线106上都使用NVMExpress(NVMe)协议时,这是尤其方便的,因为如果需要任何翻译,翻译很少。
参考图中已编号的线,RNIC 112可以执行直接访问如下。如线202所指示的,SSD设备110本地的CPU 114将卷路由器204进行初始化以表示卷到SSD 102的映射。给定卷可以使用诸如级联(concatenation)或条带化(striping)之类的技术跨多个SSD 102。如线206所指示的,来自主机122的命令由RNIC 112检查以定位卷,该卷通过卷路由器进行索引以找到SSD 102并计算物理SSD地址。
如线208所指示的,基于卷路由器中的信息,数据与特定SSD 102交换。对于写入事务,根据需要跨SSD 102分割数据。对于读取事务,数据由RNIC 112合并,从而向主机122正确地标识每个字节。然后可以正常读取或写入数据210。如线212所指示的,当所有SSD 102已经完成其事务的部分时,RNIC 112生成表示整个操作的成功或失败的对主机122的响应。
虽然该类型的直接访问可以使能跨SSD 102的数据分发,但是它不适应需要目标中的CPU 114进行干预的更复杂的虚拟化功能和服务。这种干预可以用于在线配置改变、多个RNIC 112的协调或者计算密集型数据管理自动化。此外,许多虚拟阵列提供数据的移动和细粒度映射。这需要大量的可能未与RNIC 112的硬件资源(存储器或处理)对准的元数据。
乐观的SSD存储设备
图3是RNIC 112的示意性示例,所述RNIC 112使用乐观存储分配将数据从主机122直接存储到固态驱动器102的阵列126。如本文所使用的,乐观分配指示在将数据最终付诸到阵列126中的存储位置之前,做出存储决定并向主机122确认事务完整。用于将数据存储在阵列126中的物理地址由CPU 114确定。相同的编号项目如关于图1所描述的那样。
图3示出了与图2相同的总体硬件架构,其具有提供直接通信的多个增强。卷路由器被替换为更复杂的布局模板选择器302,其可以与来自由CPU 114确定的虚拟化的物理布局策略对准。所选择的布局模板确定数据到正确SSD 102的路由,但是它不确定数据放置在任何SSD 102上的物理地址。物理地址稍后作为CPU 114的干预结果而被确定。SSD 102已经添加了对逻辑块地址(LBA)进行高速缓存的功能,因为它们出现在主机122的地址空间中。这是SSD 102中示出的LBA高速缓存304的目的之一。虽然在这里分开示出,但是在一些示例中,CPU 114可以包括在RNIC 112中。在其他示例中,多个CPU 114可以在SSD设备110内共享工作。
关于标记的线来描述数据流。如线306所指示的,将从主机122接收到的读取或写入命令路由到布局模板选择器302并且被筹划(stage)用于传输到CPU 114。布局模板选择器302执行命令中关于卷和LBA函数。该函数可以是散列函数或掩码和移位函数以将卷和地址转换成布局编号。函数的结果提供了布局编号,所述布局编号可用于为命令中的数据308选择布局模板。与布局编号相关联的布局模板指示在数据传送的每个部分中应涉及哪个SSD 102。
针对数据传送的每个部分,创建描述该部分的具有唯一标识符的意图记录310。意图记录310包括原始主机地址、数据的该部分的长度以及由布局指定的在数据传送中SSD102要扮演的角色,例如主或从。意图记录310也被筹划以传输到CPU 114。
对于写入事务,将意图记录310和数据308合并312以形成数据流314。然后基于如线318所指示的由布局模板选择器302提供的布局模板将数据流314发送到相应的SSD 102,如线316所指示的。因此,对于写入事务,针对每个SSD 102的数据传送的每个部分都包括数据308和意图记录310。对于读取事务,仅仅是针对每个部分的意图记录310被发送到相应的SSD 302。
SSD 102接收意图记录310,并且对于写入事务,还接收数据308。对于写入事务,SSD 102将数据的主机地址添加到其LBA高速缓存304并将数据存储在非易失性数据缓冲器320中。它然后将意图记录310放置在意图日志322中以指示哪个数据316在飞行中并将其链接到数据316。如果在意图日志322中已经存在针对重叠主机地址的意图记录310,则将新记录链接到先前的记录,并且将写入事务标记为不完整。
对于读取事务,每个SSD 102为了主机LBA的记录而检查其LBA高速缓存304。如果找到,则其可以指向数据缓冲器320或闪存324的区域。如果找到该地址,那么响应于满足读取请求而返回数据并作为响应326的一部分数据由RNIC 112传输给主机122。否则,在可以完成读取之前,SSD 102将需要等待CPU 114的干预。在该后者情况下,或者在不完整的写入事务的情况下,SSD 102对RNIC 112进行响应,指示可能尚未履行该事务。
所有SSD 102的响应326由RNIC 112收集。此时,将命令306、来自所有SSD 102的组合的意图记录310以及指示结果的状态信息传输到CPU 114,如线328所指示的。另外,如果所有部分都成功,例如,没有发生错误或未履行的事务,那么RNIC 112向主机122生成指示事务完成的肯定响应。在错误或未履行的事务的情况下,RNIC 112在对主机122进行响应之前等待CPU 114进行干预。
由CPU 114功能性地执行的虚拟化计算模块330接收命令306、意图记录310和状态信息,并且为所有SSD 102上的数据的所有部分确定正确的物理地址。这可以涉及将用于写入事务中的数据308的SSD 102上先前未被分配的空间的指定。已经指派了物理地址,虚拟化计算模块330将控制传递给冗余引擎332。
冗余引擎332通过将针对事务的每个部分的物理地址的指示传输到负责该部分的SSD 102来向SSD 102确认事务,如线334所指示。如果由于针对SSD 102的被存储在意图日志322中的意图记录中的冲突而未履行写入事务并且对应的数据被递送到多于一个SSD102,则冗余引擎332可以在确认过程期间反转在某些SSD 102中的意图日志322中的写入事务的顺序,使得所有都反映相同的最终结果。
如果奇偶性SSD 102中的RAID计算要求来自数据SSD 102的旧数据以便完成奇偶性计算,那么在确认事务之前,冗余引擎332可以使用特殊的直读(read through)命令来将该数据从数据SSD 102复制到奇偶性SSD 102。直读命令忽略与尚未被冗余引擎332确认的到SSD 102的写入事务相关联的数据。冗余引擎332可以在到SSD 102的单个通信中确认多个事务。
对于写入事务,该确认允许SSD 102将例如最新近仲裁的、出自其数据缓冲器320的正确数据传递到与闪存324中的物理地址相对应的物理位置,如线333所指示。然后,允许SSD 102从意图日志322移除意图记录。在读取时,物理地址允许无法完成读取的任何SSD102定位它们的数据。此时,SSD 102可以从LBA高速缓存304移除主机LBA。例如,只要有存储空间,就可以将高速缓存的LBA保留在LBA高速缓存304中,因为如果保留之,则可以更快地完成随后的读取事务。针对意图日志322中的意图记录来检查所有读取事务并且保持所有读取事务直到相关的写入事务在它们可以被完成之前被冗余引擎332确认。
SSD 102中的一个被示出有数据路径中的变换模块336,将其标识为主或奇偶性SSD 338。可以包括变换模块336以执行诸如RAID奇偶性计算之类的附加数据操纵。SSD存储设备110中的任何或所有SSD 102可以包括变换模块336,因为不同的SSD 102可以用作不同布局模板中的数据或奇偶性存储。除了其他SSD 102之外,还可以将数据传送的多个部分发送到奇偶性SSD 338,以使能完整的变换。冗余引擎332可以通过将物理地址发送到各种SSD102来选择用于确认事务的顺序,从而确保正确跟踪在飞行中的数据。例如,冗余引擎332可以选择在已经允许所有其他SSD 102将数据从数据缓冲器320冲刷到闪存324之后在奇偶性SSD 338上确认事务。这有助于确保至少一个SSD 102将具有在飞行中的数据的记录,直到奇偶性跨在事务中涉及的所有SSD 102一致。
在一些示例中,一个或多个SSD 102由于故障可能不能响应请求。在这种情况下,冗余引擎332检查每个SSD 102的状态及其意图日志322的内容。如果数据丢失,则可以使用RAID技术来恢复数据。如果故障是失去电力,则可能需要重新计算由所有SSD 102中的意图日志322所指示的飞行中的数据的奇偶性。
在故障或配置改变的情况下,由RNIC 112跟踪的不完整的命令可以由RNIC 112或主机122部分地或全部重试。冗余引擎332(经由响应326)对SSD 102、RNIC 112和主机112中的恢复操作进行排序,以基于故障的性质来实现尽可能完整的恢复。
鲁棒冗余性
本节描述了当使用带有布局模板选择器112的RNIC 112和在SSD 102的数据缓冲器320中正在进行高速缓存工作时使能企业级高可用性的示例。这可以提供容忍在失去电力时的同时硬件故障的能力。先前的示例不可以这样做,因为在失去电力期间正在进行的工作可能使奇偶性不一致,这意味着系统处于不会使能从另一故障完全恢复的状态中。在先前的示例中,状态可以继续,直到从数据的内容恢复在失去电力期间被正在进行的写入事务所影响的奇偶性。
可以通过在意图日志322中添加意图日志条目状态来增强冗余性。意图日志条目状态指示要维护旧版本和新版本的数据,直到从冗余引擎332接收到指示数据可以从数据缓冲器320冲刷到闪存324以覆写旧数据的信号。
取决于SSD 102是主还是从,例如存储奇偶性条带的驱动器对存储数据条带的驱动器,来使用各种状态指示。对于运转为从的驱动器,“在飞行中”状态指示正处于被写入过程中、但是跨所有SSD 102可以不一致的数据。来自主机122的数据读取命令不返回处于在飞行中模式中的数据。针对从驱动器的第二状态可以被称为“多版本”并且指示闪存324中的旧版本数据和数据缓冲器320中的新版本两者都应该被保留。使用直读命令访问旧版本,并且可以用正常读取命令访问新版本。将根据数据缓冲器320中的新版本的数据来履行来自主机122的读取命令。
针对主SSD 102的新状态包括也用于从SSD 102的在飞行中状态。主SSD 102具有被称为“镜像(mirrored)”的附加状态。在镜像状态中,跨所有SSD 102的数据是一致的和冗余的,但冗余性(奇偶性)计算仍在进行中。一旦冗余性计算完成,则针对主SSD 102,例如奇偶性SSD 338,的意图状态可以改变为“付诸”。付诸状态表示冗余性的付诸形式,并且是可以释放所有其他SSD 102以将新数据从数据缓冲器320冲刷到闪存324以替换闪存324中的旧数据的点,如线333所指示。然后,因为没有数据在飞行中并且奇偶性计算完成,所以可将所有状态改变为“未被跟踪”。
在该示例中,正如针对前述示例所描述的那样,由布局模板选择器302所选择的布局模板可以用于创建针对来自主机122的写入命令的每个部分具有唯一标识符的意图记录。该意图记录包括哪些SSD 102是主SSD 102的指示。将数据部分和意图记录传输到在布局模板中所指示的SSD 102。数据由SSD 102存储在其数据缓冲器320中。此外,在该示例中,将主机LBA进行高速缓存并将其与放置在SSD 102的意图日志322中的意图记录以及被记录处于“在飞行中”状态中的意图日志条目状态相关联。意图日志322中的冲突引起对智能RNIC 112的指示未履行请求的响应。在主和从SSD 102两者上发生到“在飞行中”的转变。
对于其中来自SSD 102的响应指示成功的事务的任何部分,RNIC 112通知所有主SSD 102,如在布局模板中定义的那样:该部分成功。这可使得主SSD 102中的意图记录状态转变到“镜像”,等待(pend)在两个或更多SSD 102上的相同部分的成功。如果所有SSD 102上的事务的所有部分都成功,则RNIC 112对主机122进行响应,指示事务的成功。无论是否成功,当所有SSD 102已经响应时,RNIC 112向虚拟化计算模块330发送意图记录和SSD响应。
如上所述,虚拟化计算模块330指派物理地址,然后将对事务的控制转发给冗余引擎332。冗余引擎332解决写入顺序冲突,并且然后将物理地址递送给所有SSD 102。同时,将从SSD 102的意图日志322中的意图日志转变到多版本状态,并且将主SSD 102转变到镜像状态,如果之前不是的话。因此,与多版本状态中的意图日志条目相关联的数据将不覆写未被跟踪的数据版本。
如果尚未检测到未解决的错误并且尚未通知主机122事务成功完成,那么冗余引擎332此时经由RNIC 112提供这样的通知。如果错误仍然存在,那么冗余引擎332中的故障恢复算法可以使用用于由镜像写回高速缓存前面的擦除编码介质或RAID的技术来重新生成丢失的数据。
冗余引擎332可以使用保留在SSD 102中的旧版本和新版本的数据来计算RAID或擦除代码奇偶性块。这些可以使用用于获得旧数据的直读命令以及用于获得新数据的读取命令而被获得。此时,旧的奇偶性块不被覆写。代之以,将新的奇偶性块保留在数据缓冲器308中,例如保留在主或奇偶性SSD 338中。一旦所有奇偶性修改完成并被放置在数据缓冲器308中,冗余引擎332就将主SSD 102中的所有意图日志条目状态转变到针对事务的已付诸状态。在所有主SSD 102已经转变之后,冗余引擎332将针对从SSD 102的所有意图日志条目状态的状态转变到未被跟踪状态。在从SSD记录未被跟踪之后,冗余引擎332也将主记录转变到未被跟踪。由于事务中涉及的所有数据现在都未被跟踪,所以数据缓冲器320中的对应数据现在替换SSD中的旧版本的数据并且可以被冲刷到闪存,如线333所指示的。
动态布局改变
在上述示例中,在事务可以完成之前,布局改变可能引起潜在延长的CPU 114的干预时段。在该示例中,可以使用动态数据放置来解决该问题,在虚拟化计算模块330中使用方法来在事务已经在从主机122的角度来看完成之后修正数据放置。这允许无论任何布局改变,乐观分配的事务完成都正常地继续进行,只要最初用于事务的布局模板没有遇到硬件错误。
这可以在布局异常发生时提供改进。除了其他之外,布局异常还可能由硬件故障、数据局部性的优化、数据移动的最小化、数据暂时参与诸如快照之类的活跃增值服务或数据的长期重定位引起。动态数据放置可以针对相同的数据使用多个布局,由RNIC 112针对给定事务而实时使用其中一个布局。初始布局可以暂时保持为针对正被移动到不同布局的数据的高速缓存。
根据该示例,如针对乐观的SSD设备所描述的那样,当事务到达时,事务的初始进展使用由RNIC 112选择的模板而正常地继续进行。事务继续进行直至其中虚拟化计算模块330被给予控制的点。此时,CPU 114可以继续分配数据直至其中从主机122的观点看事务完成的点。在该点,虚拟化计算模块330确定用于事务的布局模板是否匹配针对该数据的期望布局。如果它匹配,则工作流程以与没有动态数据放置时它将会的那样相同的方式继续进行。
否则,对于写入事务,将SSD 102中的事务数据视为好像它被存储在非易失性镜像高速缓存中一样。对于写入事务,当虚拟化计算模块330已经在RNIC 112中创建了替代布局模板时,它继续将镜像数据复制到新布局中的镜像位置。然后它根据新布局完成原始分配。在一段时间段内,数据可以在由两个布局模板指示的SSD 102中的数据缓冲器320中。
对于读取事务,CPU 114完全执行事务,好像它已经使用新布局模板而发生一样,因为以它们不能解析已重新定位到新布局的针对数据的物理地址的这种方式来管理旧布局中的SSD 102。通过强制无效在针对该数据的新布局中未涉及的LBA高速缓存304中的LBA来管理在布局改变期间的读取事务。在每个重定向的事务完成后、但在将其复制到新布局中的SSD 102之前,无效发生。即使针对那些数据的LBA不在针对SSD 102的LBA高速缓存304中,数据也可以保持在SSD 102的意图日志322和数据缓冲器320中,直到将它们被成功镜像到新布局中。读取和最近写入之间的冲突可能需要在可以完成相冲突的读取之前由CPU114将使用旧布局的写入转变到新布局。
这允许在任何时间将布局信息添加到由RNIC 112的布局模板选择器302使用的布局模板中或在由RNIC 112的布局模板选择器302使用的布局模板中修改布局信息,只要任何事务从存储在选择器表中的布局模板的一致性版本选择布局模板。这可以通过例如使用摆动(swing)缓冲器等来进行对布局模板原子更新而实现。
取决于实现,可以针对本文所讨论的所有示例实现各种改变。例如,多个RNIC 112可以访问相同的SSD 102,假若它们都将它们的通知发送到相同的CPU 114或者发送到在逻辑上像单个CPU的CPU集群中。在大型系统中,可能希望在每个RNIC 112中具有多个布局模板选择器302,每个RNIC 112的通知可由CPU 114独立地处理。在此情况下,卷号可能用于选择布局模板选择器302和CPU 114。
如果多个RNIC 112可以访问相同的SSD 102,则需要跨它们协调布局改变。这可以通过暂停将新事务流到所有RNIC 112中并且在所有都被暂停之后改变布局模板选择器302来实现。在一个示例中,RNIC 102可能无需在协调的布局改变期间等待正在进行的事务完成。
图4A是使用SSD 102的示例乐观存储设备400的框图。相同编号的项目如关于图1和图3描述的那样。在该示例中,针对RNIC 112的CPU 120被示为专用集成电路(ASIC)。在该示例中,每个SSD 102可以用作主或从,例如作为针对特定布局模板404的数据存储或奇偶性存储。因此,每个SSD 102包括变换模块336以针对存储的数据执行奇偶性计算。
RNIC CPU(ASIC)120操作布局模板选择器302,其保持了包括布局模板404的布局模板表402。可以由布局模板选择器302使用的方法的一个示例包括选择器表,其包括LBA掩码(Mask),所述LBA掩码是按位掩码,指示在布局编号计算中使用的LBA的子集。这与LBA移位一起解释了布局的条带化或级联参数。该表包括LBA移位,LBA移位是用于对被掩码的LBA进行右移的多个位。此外,选择器表包括被掩码的LBA模数(modulu),其是被应用到与卷号级联的被掩码被移位的LBA以解释奇偶性旋转的模数。
来自事务中的LBA被掩码、移位并级联到卷号。将模数应用于结果以产生布局模板编号。尽管简化了该示例,但是除其他职位,还可以使用更复杂的计算,例如涉及多个掩码或更复杂的散列函数等。可以以编码在与布局模板表402相关联的逻辑中的方式对这些进行组合。
布局编号用于从布局模板表402选择布局模板404,例如T1-T4。布局模板表402包括多个参数,其可以确定SSD 102中的哪些保存数据的部分和奇偶性。在该示例中,参数可以包括PCIe总线106上的用于SSD 102的地址的列表。参数还可以包括针对每个SSD 102的角色,诸如数据(从)或奇偶性(主)。
可以以类似于导出布局编号的方式来应用第二LBA掩码、移位和模数以基于布局的详情来选择个体SSD 102。两个掩码、移位和模数集合可以是不同的。出于冗余目的,所选择的第二布局模板404中指示的SSD 102的角色可以触发到附加SSD的数据传输。
在一些示例中,布局编号可以不引用任何SSD地址。这是具有该编号的布局必须由CPU 114处理的指示。这样的命令使用常规方法来处理,诸如通过PCIe总线106可访问的存储器406来缓冲数据。
在另外的示例中,在布局模板404中的SSD地址可以具有指向PCIe总线106可访问的存储器406的特殊值。遇到这样的地址的写入命令可以在通知CPU 114该命令已被接收之前将数据放置在从存储器406中的自由存储器区域的池汲取(draw)的缓冲器408中。在这种情况下,将数据缓冲器408的地址用命令递送到CPU 114。当来自主机的读取事务、到SSD102的写入事务或者消耗存储器的其他操作完成时存储器区域变为自由时,可以由CPU 114或RNIC 112恢复自由存储器区域的池。在这个示例中,遇到指向存储器的SSD地址的事务可以不完全被RNIC 112完成。
在其他示例中,SSD 102可以通过另一网络而是可访问的,所述另一网络可能是与事务到达的相同的网络,例如以太网108。在这些情况下,CPU 114可以管理附接到在物理上与第一个相分离的另一控制器的SSD 102。此配置可用于增加容错。
图4B是使用SSD 102的示例乐观存储设备400的框图。相同编号的项目如关于图1和图3所描述的那样。系统不限于具有图4A中所示的所有框,而是可以具有更少的框,如关于图4B所示。
图5A和图5B是用于数据的乐观存储的示例方法500的过程流程图。方法500可以由图4的系统来执行。方法500开始于框502,当从主机发起者接收的写入命令被路由到布局模板选择器并且被筹划用于传输到控制器CPU时。
在框504处,布局模板选择器执行命令中关于卷和LBA的函数,以便针对命令中的数据选择布局模板。该函数可以是散列函数或掩码和移位函数,以将卷和地址转换成布局编号。与布局编号相关联的布局模板指示在数据传输的每个部分中应涉及哪些SSD。基于用于向SSD进行传送的布局模板而将数据划分为多个部分。
在框506处,针对数据传送的每个部分,创建描述该部分的具有唯一标识符的意图记录。意图记录包括原始主机地址和该部分的长度以及由布局模板指定的在数据传送中SSD要扮演的角色。意图记录也被筹划用于传输到控制器CPU。在框508处,将意图记录和数据合并并且发送到相应的SSD,使得针对每个SSD的数据传送的每个部分都包括数据和意图记录两者。在一些示例中,在数据传输之前,可以将意图日志作为命令的一部分而传输到SSD。
在框510处,SSD接收意图记录和数据,并且检查以查看在意图日志中是否已经存在针对重叠的主机地址的意图记录。如果是,则在框512处将新记录链接到先前的记录,并且将写入事务标记为不完整。此外,在框514处或者在不完整的写入事务的情况下,SSD向RNIC进行响应,指示可能尚未履行该事务。
如果不存在重叠,则在框516处,SSD将数据的主机地址添加到其LBA高速缓存并将数据添加到其数据缓冲器。它还将意图记录放置在意图日志中以指示哪些数据在飞行中并将其链接到数据。
在框518处,所有SSD的响应由RNIC收集。此时,将指示结果的状态信息、意图记录和命令传输到控制器CPU。在框520处,如果所有部分都成功,例如,没有错误或未履行的事务发生,那么在框522处,RNIC向主机生成指示事务的完成的肯定响应。在错误或未履行的事务的情况下,RNIC在对主机进行响应之前等待控制器CPU进行干预。
在框524处,控制器中的虚拟化计算模块接收命令、意图记录和状态信息,并且为所有SSD上数据的所有部分确定正确的物理地址。这可以涉及将用于数据的SSD上先前未被分配的空间的指定。
在框526处,具有指派的物理地址,虚拟化计算将控制传递给冗余引擎。如果在框528处,冗余引擎确定由于SSD的意图日志中的冲突而未履行写入事务并且对应的数据被递送到多于一个SSD,则在框530处,冗余引擎可以在确认过程期间反转在某些SSD中的意图日志中的写入事务的顺序,使得所有都反映相同的最终结果。
如果在框532处,奇偶性SSD中的RAID计算要求来自数据SSD的旧数据以便完成奇偶性计算,那么冗余引擎使用特殊的直读命令来将该数据从数据SSD复制到奇偶性驱动器。直读命令忽略了与尚未被冗余引擎确认的到SSD的写入事务相关联的数据。然后,SSD中的变换模块可以执行附加的数据操纵。如本文所述,任何或所有SSD可以包含这样的模块。除了其他SSD之外,还可以将数据传送的多个部分发送到奇偶性SSD,以使能完整的变换。
在框534处,冗余引擎通过将针对事务的每个部分的物理地址的指示传输给负责该部分的SSD来确认到SSD的事务。冗余引擎可以在到SSD的单个通信中确认多个事务。
冗余引擎可以选择针对各个SSD执行框532和534的顺序,从而确保正确跟踪在飞行中的数据。例如,冗余引擎可以选择在其他SSD上完成框532和534之后在奇偶性SSD上执行框532。这确保至少一个SSD将具有在飞行中的数据的记录,直到奇偶性跨在事务中涉及的所有SSD一致。
在框536处,冗余引擎确定一个或多个SSD是否由于故障而不能响应请求。这可能发生在冗余引擎正在与SSD之一进行通信的过程中的任何点处。如果是,则在框538处,控制器CPU中的冗余引擎模块检查每个SSD的状态及其意图日志的内容。如果数据丢失,则可以使用RAID技术来恢复数据。如果故障是失去电力,则可能需要重新计算如由所有SSD中的意图记录所指示的针对在飞行中的数据的奇偶性。
在框540处,由RNIC跟踪的不完整命令可以被RNIC或主机部分地或完全重试。冗余引擎对SSD、RNIC中的恢复操作进行排序,并且基于故障的性质来实现尽可能完整的恢复。在框542处关于恢复是否成功进行确定。如果冗余引擎在恢复中不成功,则在框544处,向主机返回报告错误状况的响应。
在框546处,确认允许SSD将出自于其数据缓冲器的正确的数据传递到闪存中指示的物理位置,并从意图日志中移除意图记录。SSD可以从其高速缓存移除主机LBA,例如,是进一步事务需要的空间。请注意,保留高速缓存的LBA是有益处的,因为如果保留之,则可以更快地完成随后的读取事务。
图5C是用于数据的乐观存储的示例方法的过程流程图。相同编号的项目如关于图5A和图5B所述。该系统不限于具有图5A和图5B中所示的所有框,而是可以具有更少的框,如关于图5C所示。
图6是用于从乐观的SSD存储设备进行读取的示例方法600的过程流程图。在框602处,从主机发起者接收到的读取被路由到布局模板选择器并且被筹划用于传输到控制器CPU。在框604处,布局选择器执行命令中关于卷和LBA的函数,以便选择用于定位针对该命令的数据的布局。该函数可以是散列函数或掩码和移位函数,以将卷和地址转换成布局编号。与布局编号相关联的布局指示哪些SSD可以与数据存储的每个部分相关联。
在框606处,对于数据传送的每个部分,创建描述该部分的具有唯一标识符的意图记录。意图记录包括原始主机地址和该部分的长度以及在数据传送中SSD要扮演的角色,如由布局指定的那样。意图记录也被筹划用于传输到控制器CPU。
在框608处,将针对每个部分的意图记录发送到相应的SSD。在一些示例中,这可以是到SSD的读取命令的一部分。在框610处,SSD接收意图记录,并且每个SSD针对主机LBA的记录而检查其LBA高速缓存。在框612处,SSD确定意图记录是否指向数据缓冲器或闪存的区域。如果在框614处找到该地址,那么在框616处,响应于该读取而返回数据并将该数据传输给RNIC。如果不是,则在框618处,SSD对RNIC进行响应,指示可能尚未履行该事务。
在框620处,所有SSD的响应由RNIC收集。此时,将指示结果的状态信息、命令和意图记录传输到控制器CPU。在框622处,RNIC确定所有部分是否成功,例如,没有错误或未履行的事务发生。如果是,在框624处,那么将数据发送到主机,并且在框626处,RNIC向主机生成指示事务的完成的肯定响应。当使用远程直接访问存储器(RDMA)协议发送数据时,可以随着SSD定位数据而增量地(incrementally)发送响应。然后当向主机发送肯定响应时,该响应被关闭,例如被指示为是最终的。在错误或未履行的事务的情况下,RNIC在对主机进行响应之前等待控制器CPU进行干预。
在框628处,控制器CPU中的虚拟化计算模块接收命令、意图记录和状态信息,并为所有SSD上数据的所有部分确定正确的物理地址。在确定针对数据的物理地址之后,在框630处,虚拟化计算将控制传递给冗余引擎。
在框632处,冗余引擎通过将针对事务的每个部分的物理地址的指示传输到负责该部分的SSD来确认到SSD的事务。在框634处,物理地址允许无法完成读取的任何SSD以定位它们的数据。在框636处,然后将数据返回给主机。
对读取事务的故障恢复以与写入事务相似的方式工作,例如如关于图5B的框538-544所讨论的那样。例如,控制器CPU中的冗余引擎模块检查每个SSD的状态及其意图日志的内容。如果数据丢失,则可以使用RAID技术来恢复数据。
图7A是具有鲁棒冗余性的示例乐观存储设备700的框图。相同的编号如关于图1、图3和图4所述。在该示例中,对于鲁棒冗余性,意图日志记忆装置添加意图状态,给出了组合的意图/状态日志702。如本文所述,意图状态可以取决于SSD是主驱动器还是从驱动器。对于作为从的驱动器,“在飞行中”状态指示正处于被写入过程中的数据,但是跨所有SSD可以不一致。针对从驱动器的另一个状态可以被称为“多版本”,并且指示旧版本的数据和新版本两者都要保留。
针对主SSD 102的状态还包括用于从SSD的在飞行中状态。主SSD 102具有被称为“镜像”的附加状态。在镜像状态下,跨所有SSD的数据是一致的和冗余的(镜像),但是附加的冗余性,例如奇偶性计算、擦除代码计算等仍在进行中。一旦冗余性计算完成,则针对主的意图状态可以改变为“已付诸”。已付诸状态表示冗余性的付诸形式,并且是可以释放所有其他SSD以将新数据从数据缓冲器冲刷到闪存的点。然后,因为没有数据在飞行中并且奇偶性计算完成,所以可将所有状态改变为“未被跟踪”。
图7B是具有鲁棒冗余性的示例乐观存储设备的框图。相同编号的项目如关于图1、图3、图4和图7A所述。该系统不限于具有图7A中所示的所有框,而是可以具有更少的框,如关于图7B所示。
图8A和图8B是用于具有鲁棒冗余性的数据的乐观存储的示例方法800的过程流程图。方法800可以由图7的系统执行。相同编号的项目如关于图5所述。
与图5的方法相对照而言,在框802处,当数据由SSD存储在其数据缓冲器中并且主机LBA被高速缓存时,将意图记录以“在飞行中”状态放置在SSD意图日志中。在主和从SSD两者上发生到“在飞行中”的转变。
对于在其中所有SSD都响应指示成功的事务的任何部分,RNIC通知所有布局主:该部分是成功的。在框802处,主中的意图记录状态转变到“镜像”。如果所有SSD上的事务的所有部分都是成功的,则RNIC对主机进行响应,指示事务的成功。无论是否成功,当所有SSD都已响应时,智能RNIC向虚拟化计算模块发送意图记录和SSD响应。
如关于图5所述,虚拟化计算模块指派物理地址,然后将对事务的控制转发给冗余引擎。在框806处,冗余引擎解决写入顺序冲突,并且然后将物理地址递送给所有SSD。同时,将从中的意图日志转变到多版本状态,并且将主转变到镜像状态,如果它们尚未在那里。如果没有检测到未解决的错误并且尚未通知主机事务的成功完成,那么冗余引擎在此点处经由RNIC提供这样的通知。
在框808处,执行奇偶性计算并跟踪进度。多版本的状态指示防止与数据缓冲器中的意图日志条目相关联的数据覆写较旧的未被跟踪的数据版本。如果错误仍然存在,那么冗余引擎中的故障恢复算法使用诸如当由镜像写回高速缓存在RAID或擦除编码的介质前面(front)时的技术来进行接管,如本文所述。冗余引擎,或者主SSD中的变换模块,使用保留在SSD中的旧版本和新版本的数据来计算RAID或擦除代码奇偶性块。此时,旧的奇偶性块没有被覆写。代之以,将新的奇偶性块保留在数据缓冲器中。
一旦所有奇偶性修改完成并被放置在数据缓冲器中,则在框810处,冗余引擎就将事务中的所有主意图记录转变到已付诸状态。在所有主已经转变之后,在框812处,冗余引擎将事务中的所有从意图记录的状态转变到未被跟踪状态。在从记录未被跟踪之后,在框814处,冗余引擎也将主记录转变为未被跟踪。
在框816处,关于是否发生任何剩余的错误做出确定。这可能在该过程期间的任何点处例如由于电力故障、SSD故障或两者而做出。如果没有发生错误,并且事务中涉及的所有数据现在都未被跟踪,则在框546处,可以将数据缓冲器中的对应数据冲刷到闪存以替换SSD中的旧版本的数据。如果已经发生任何错误,则在框818处,过程流程可以继续进行到图9中的过程以进行错误恢复。如果图9的恢复过程成功,则在框820处,过程流程返回到框546。如果否,则过程流程继续进行到框822以将错误报告给主机,并且如果可用,则实现降级的模式恢复。
图8C是用于具有鲁棒冗余性的数据的乐观存储的示例方法的过程流程图。方法800可以由图7A和图7B的系统执行。相同编号的项目如关于图5和图8A所述。该系统不限于具有图8A和图8B中所示的所有框,而是可以具有更少的框,如关于图8C所示。
图9是用于从多个状态SSD恢复数据的示例方法900的过程流程图。多版本状态确保在事务期间发生故障的情况下,可以恢复未被事务修改且与被事务修改的数据共享奇偶性的SSD上的数据。如本文所述,缓冲器和意图日志是非易失性的,使得即使在失去电力期间发生故障,也可以实现从稳定版本的数据进行恢复。在此示例中,一旦所有非故障SSD是可访问的,则从失去电力进行恢复如下继续进行。
方法900开始于框902,其中针对任何SSD中的每个意图日志条目标识最高排名的非故障的主。在框904处,针对该主中的状态为“已付诸”的每个记录,过程流程进行到框910。
在框906处,其最高排名非故障主状态为“镜像”的每个意图日志条目具有转变到“多版本”状态的相关联的从意图记录。在框908处,如本文所述,执行奇偶性的生成。然后,将那些意图记录转变到本文所述的“未被跟踪”状态。
在框910处,与来自主机的新事务相似地处理针对“镜像”状态中的每个记录的事务。如上所述地执行奇偶性生成和意图日志状态转变,除了不发生与主机的交互。在框912处,移除任何SSD的意图日志中的任何剩余记录以及所有SSD中的高速缓存的LBA和数据缓冲器中的相关联的数据。如果在框914处,确定所有记录都完成,则过程流程返回到图8B的框818。
可以恢复系统的状态并且系统的状态准备重新开始正常操作。如果在恢复过程期间或之前的任何时间发生另外的故障,则使用与镜像和多版本状态中的意图记录相关联的数据来达成降级的模式恢复。
与关于图6讨论的那些相比,关于图7A-图9描述的乐观SSD设备具有对读取功能的最小改变。如果在状态为“在飞行中”时读取度过(come through),则向主机返回闪存上的旧数据,例如处于“未被跟踪”状态中。如果状态已经改变为从驱动器上的“多版本”或主驱动器上的“镜像”,则从数据缓冲器返回新数据。
图10A是具有动态布局的示例乐观存储设备1000的框图。相同编号的项目如关于之前的图所述。在关于图4-图6所讨论的乐观的直接访问的基础示例中,在事务可以完成之前,布局改变可能引起潜在延长的控制器CPU的干预时段。动态数据放置示例可以使用在虚拟化计算模块中用于在从主机观点已经乐观地完成事务之后修正数据放置的方法来解决该问题。这允许无论存在任何布局改变都正常地继续进行乐观的事务完成,只要最初用于事务的布局没有遇到硬件错误。
可以注意到,图10中所示的示例包括关于图7-图9所描述的意图日志和状态702。然而,它可以在关于图4-图6所描述的基本设备上实现。
在该示例中,针对相同的数据使用多个布局模板,例如T3O 1002和T3N 1004。第一T3O 1002是针对给定事务由RNIC使用的初始或旧布局模板。第二T3N 1004是新布局模板,其最初处于控制器116中的CPU 114的控制之下。虽然它被示出为位于控制器116的记忆装置118中,但是新布局模板T3N 1004可以位于RNIC 112中。初始布局模板T3O 1002被视为针对正在其进入不同布局的途中的数据的高速缓存。
图10B是具有动态布局的示例乐观存储设备的框图。相同编号的项目如关于之前的图所述。该系统不限于具有图10A中所示的所有框,而是可以具有较少的框,如关于图10B所示。
图11A和图11B是用于利用动态布局对数据进行乐观存储的示例方法1100的过程流程图。相同编号的框如关于图5所述。根据该示例,事务的初始进度通常使用当事务到达时由RNIC选择的模板,例如图10的T3O 1002,来继续进行。事务继续进行直至虚拟化计算模块获得控制的点,例如跟随着框502-522。在该点,CPU 114继续执行基础分配直至从主机的观点看事务完成的点,如果它尚不在那里的话。
在框1102处,虚拟化计算模块确定用于事务的布局模板是否与针对数据的期望布局匹配。如果是,则过程流程以与没有动态布局时它将会的那样相同的方式继续进行到框526以完成。
如果不是,则对于写入事务,在框1104处,针对事务的在SSD中的数据被视为非易失性镜像高速缓存。因此,当虚拟化计算模块330具有针对数据集的替代布局模板T3N 1004时,在框1106处,它继续进行以将镜像数据复制到新布局模板T3N 1004中的镜像位置。在框1108处,虚拟化计算模块330然后计算在新布局模板中的针对数据的物理地址,在框106处根据新布局完成原始算法。在一段时间内,数据可以在由两个布局指示的SSD中的数据缓冲器中。
该示例允许在任何时间将布局信息添加到布局模板选择器中或在任何时间在布局模板选择器中修改布局信息,只要任何事务从一致版本的选择器表选择布局。这可以通过使用诸如摆动缓冲器之类的技术来对布局模板原子进行更新而实现。
此外,可以执行读取事务,就好像数据被完全保存在新布局中一样。这可以通过以它们不能解析针对新布局的物理地址的这种方式来管理旧布局中的SSD来实现。例如,通过强制无效在针对该数据的期望布局中未涉及的SSD数据高速缓存中的LBA来管理在该状态中的读取事务。在每个重定向的事务完成之后、但在将其复制到新布局中的SSD之前,无效发生。即使针对那些数据的LBA不在SSD的高速缓存中,数据也可以保持在SSD的意图日志和数据缓冲器中,直到将它们成功镜像到新布局中。
本文所描述的技术可以在硬编码系统中实现,或者可以在非暂时性计算机可读介质中实现。计算机可读介质可以包括诸如RAM、静态RAM或NV存储器或硬盘驱动器之类的存储器的任何组合。
图11C是用于利用动态布局对数据进行乐观存储的示例方法的过程流程图。相同编号的框如关于图11B所述。该系统不限于具有图8A和8B中所示的所有框,而是可以具有更少的框,如关于图8C所示。
图12是包括由处理器1202通过总线1204可访问的代码的示例非易失性计算机可读介质1200的框图。代码可以包括代码块1206以引导处理器1202至少部分地基于逻辑块地址(LBA)从多个布局模板选择布局模板。另外的代码块1208可以引导处理器1202至少部分地基于布局模板来标识与由主机发送的数据的一部分相关联的多个存储驱动器中的每一个。
图13是包括由处理器1302通过总线1304可访问的代码的示例非易失性计算机可读介质1300的框图。代码可以包括代码块1306以引导处理器1302在从驱动器、主驱动器或两者中确定针对数据的物理地址。另外的代码块1308可以引导处理器1302确认事务并改变从驱动器、主驱动器或两者的意图记录状态。
图14是包括由处理器1402通过总线1404可访问的代码的示例非易失性计算机可读介质1400的框图。代码可以包括代码块1406以引导处理器1402确定针对事务的当前布局模板是否与针对数据的期望布局匹配。另外的代码块1408可以引导处理器1402将当前布局模板标识为旧布局模板。还可以包括代码块1410以引导处理器1402来创建新布局模板。
虽然本技术可能遭受到各种修改和替代形式,但是仅仅通过举例示出了上述示例性示例。应当理解,本技术不旨在限于本文所公开的特定示例。实际上,本技术包括落在本技术的范围内的所有替代、修改和等同物。
Claims (14)
1.一种存储系统,包括:
多个存储驱动器,其通过存储网络耦合到存储控制器和RNIC,其中,RNIC是远程直接存储器访问RDMA网络接口卡NIC;
所述RNIC,其包括布局模板选择器和多个模板,其中:
所述布局模板选择器至少部分地基于从主机接收的逻辑块地址LBA从所述多个模板选择布局模板;和
所述布局模板标识与由所述LBA表示的数据的部分相关联的多个存储驱动器中的每个;和控制器,其中所述控制器包括:
虚拟化计算模块,其用于确定由所述LBA表示的数据的新布局模板并且将数据的一个或多个部分从由所选择的布局模板指示的存储驱动器的相应缓冲器复制到由新布局模板指示的存储驱动器的相应缓冲器,从而将数据的部分存储在由新布局模板指示的存储驱动器的相应缓冲器中,其中每个存储驱动器的相应缓冲器与对应于存储驱动器中的物理地址的物理位置分离;和
所述新布局模板。
2.根据权利要求1所述的系统,其中,与旧布局模板相关联的驱动器包括用于与所述新布局模板相关联的驱动器的非易失性镜像高速缓存。
3.根据权利要求1所述的系统,其中,所述虚拟化计算模块用于计算与所述新布局模板相关联的数据的物理地址。
4.根据权利要求1所述的系统,其中,所述虚拟化计算模块将用所述新布局模板替换所述RNIC中的旧布局模板。
5.一种用于存储的方法,包括:
将在RNIC中使用旧布局模板存储的数据视为非易失性镜像高速缓存,其中,RNIC是远程直接存储器访问RDMA网络接口卡NIC;和经由存储控制器中的虚拟化计算模块,将数据从由旧布局模板指示的存储驱动器的相应缓冲器复制到由新布局模板指示的存储驱动器的相应缓冲器,从而将数据存储在由新布局模板指示的存储驱动器的相应缓冲器中,其中每个存储驱动器的相应缓冲器与对应于存储驱动器中的物理地址的物理位置分离。
6.根据权利要求5所述的方法,包括:
确定用于事务的当前布局模板是否与针对数据的期望布局匹配;并且,如果不匹配,则将所述当前布局模板标识为所述旧布局模板;和创建所述新布局模板。
7.根据权利要求5所述的方法,包括计算针对由所述新布局模板使用的存储驱动器中的数据的物理地址。
8.根据权利要求5所述的方法,包括对在所述新布局模板中定义的驱动器执行写入事务。
9.根据权利要求5所述的方法,包括:
关于来自主机的事务中的逻辑块地址LBA执行函数以计算布局编号;
至少部分地基于所述布局编号来选择布局模板;
基于所述布局模板将所述事务划分成多个部分;
创建包括原始主机地址、数据部分的长度和用于固态驱动器SSD的角色的意图记录;和
将所述意图记录发送到所述SSD。
10.根据权利要求9所述的方法,包括:
在所述布局模板中收集来自所有SSD的响应;并且如果所有的SSD都报告成功,
向主机生成肯定响应。
11.根据权利要求10所述的方法,包括:
向控制器转发意图记录和结果;
确定用于事务的当前布局模板是否与针对所述数据的期望布局匹配;并且如果匹配,
在控制器中的虚拟化计算模块中确定针对数据的物理地址;和
向SSD中的每个发送包括针对在该SSD上的数据的物理地址的确认。
12.根据权利要求11所述的方法,包括:
在所述SSD中接收包括所述物理地址的确认;和
在至少部分地基于所述物理地址的位置处,将数据从数据缓冲器冲刷到闪存驱动器。
13.一种非暂时性计算机可读介质,包括代码以引导处理器:
确定用于事务的当前布局模板是否与针对数据的期望布局匹配;
响应于所述确定,将数据的一个或多个部分从由当前布局模板指示的存储驱动器的相应缓冲器复制到由新布局模板指示的存储驱动器的相应缓冲器,从而将数据的部分存储在由新布局模板指示的存储驱动器的相应缓冲器中,其中每个存储驱动器的相应缓冲器与对应于存储驱动器中的物理地址的物理位置分离。
14.根据权利要求13所述的非暂时性计算机可读介质,包括代码以引导处理器:
将使用所述当前布局模板存储的数据视为非易失性镜像高速缓存;和
将使用所述当前布局模板存储的所述数据复制到所述新布局模板中的镜像位置。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2016/015678 WO2017131752A1 (en) | 2016-01-29 | 2016-01-29 | Remote direct memory access |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107533537A CN107533537A (zh) | 2018-01-02 |
CN107533537B true CN107533537B (zh) | 2021-02-26 |
Family
ID=59398572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680022777.5A Active CN107533537B (zh) | 2016-01-29 | 2016-01-29 | 存储系统、用于存储的方法和非暂时性计算机可读介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10877674B2 (zh) |
EP (1) | EP3265925A4 (zh) |
CN (1) | CN107533537B (zh) |
WO (1) | WO2017131752A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108228082B (zh) * | 2016-12-21 | 2021-04-02 | 伊姆西Ip控股有限责任公司 | 存储系统和用于存储控制的方法 |
US10733137B2 (en) * | 2017-04-25 | 2020-08-04 | Samsung Electronics Co., Ltd. | Low latency direct access block storage in NVME-of ethernet SSD |
TWI666901B (zh) * | 2018-03-27 | 2019-07-21 | 緯穎科技服務股份有限公司 | 資料傳輸方法與使用此方法的主機系統 |
US11954220B2 (en) | 2018-05-21 | 2024-04-09 | Pure Storage, Inc. | Data protection for container storage |
CN109189340B (zh) * | 2018-08-29 | 2021-11-09 | 上海兆芯集成电路有限公司 | 用于存取独立硬盘冗余阵列的系统与方法 |
CN109377778B (zh) * | 2018-11-15 | 2021-04-06 | 浪潮集团有限公司 | 一种基于多路rdma和v2x的协同自动驾驶系统及方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104246742A (zh) * | 2012-01-17 | 2014-12-24 | 英特尔公司 | 用于远程客户端访问存储设备的命令验证的技术 |
Family Cites Families (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6687765B2 (en) | 2001-01-16 | 2004-02-03 | International Business Machines Corporation | System, method, and computer program for explicitly tunable I/O device controller |
US20030149756A1 (en) * | 2002-02-06 | 2003-08-07 | David Grieve | Configuration management method and system |
US7577707B2 (en) | 2004-04-21 | 2009-08-18 | International Business Machines Corporation | Method, system, and program for executing data transfer requests |
US7464189B2 (en) * | 2005-05-23 | 2008-12-09 | International Business Machines Corporation | System and method for creation/deletion of linear block address table entries for direct I/O |
US9813283B2 (en) | 2005-08-09 | 2017-11-07 | Oracle International Corporation | Efficient data transfer between servers and remote peripherals |
US8935302B2 (en) * | 2006-12-06 | 2015-01-13 | Intelligent Intellectual Property Holdings 2 Llc | Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume |
US7921178B2 (en) | 2008-12-04 | 2011-04-05 | Voltaire Ltd. | Device, system, and method of accessing storage |
US9122579B2 (en) | 2010-01-06 | 2015-09-01 | Intelligent Intellectual Property Holdings 2 Llc | Apparatus, system, and method for a storage layer |
US8601222B2 (en) | 2010-05-13 | 2013-12-03 | Fusion-Io, Inc. | Apparatus, system, and method for conditional and atomic storage operations |
DE112011102487T5 (de) * | 2010-07-27 | 2013-05-29 | International Business Machines Corporation | Zuordnen von logischen zu physischen Adressen in Halbleiterspeichereinheiten aufweisenden Speichersystemen |
US8463991B2 (en) | 2010-09-28 | 2013-06-11 | Pure Storage Inc. | Intra-device data protection in a raid array |
CN101980137B (zh) * | 2010-10-19 | 2012-05-30 | 成都市华为赛门铁克科技有限公司 | 廉价磁盘冗余阵列重构方法、装置及系统 |
US9331955B2 (en) * | 2011-06-29 | 2016-05-03 | Microsoft Technology Licensing, Llc | Transporting operations of arbitrary size over remote direct memory access |
US10089017B2 (en) | 2011-07-20 | 2018-10-02 | Futurewei Technologies, Inc. | Method and apparatus for SSD storage access |
US8799523B2 (en) | 2011-09-21 | 2014-08-05 | Kevin Mark Klughart | Data storage architecture extension system and method |
US9026717B2 (en) * | 2011-09-30 | 2015-05-05 | SanDisk Technologies, Inc. | Apparatus, system, and method for a persistent object store |
US9158540B1 (en) | 2011-11-14 | 2015-10-13 | Emc Corporation | Method and apparatus for offloading compute resources to a flash co-processing appliance |
US8719540B1 (en) | 2012-03-15 | 2014-05-06 | Pure Storage, Inc. | Fractal layout of data blocks across multiple devices |
US8327185B1 (en) | 2012-03-23 | 2012-12-04 | DSSD, Inc. | Method and system for multi-dimensional raid |
US8938584B2 (en) | 2012-04-30 | 2015-01-20 | Dell Products, Lp | System and method to keep parity consistent in an array of solid state drives when data blocks are de-allocated |
US9542101B2 (en) | 2013-01-22 | 2017-01-10 | Avago Technologies General Ip (Singapore) Pte. Ltd. | System and methods for performing embedded full-stripe write operations to a data volume with data elements distributed across multiple modules |
US20140215127A1 (en) | 2013-01-31 | 2014-07-31 | Oracle International Corporation | Apparatus, system, and method for adaptive intent logging |
US20150095555A1 (en) | 2013-09-27 | 2015-04-02 | Avalanche Technology, Inc. | Method of thin provisioning in a solid state disk array |
US9311110B2 (en) | 2013-07-08 | 2016-04-12 | Intel Corporation | Techniques to initialize from a remotely accessible storage device |
KR101670342B1 (ko) * | 2013-10-29 | 2016-10-28 | 후아웨이 테크놀러지 컴퍼니 리미티드 | 데이터 처리 시스템 및 데이터 처리 방법 |
US9448924B2 (en) | 2014-01-08 | 2016-09-20 | Netapp, Inc. | Flash optimized, log-structured layer of a file system |
US20150242133A1 (en) | 2014-02-21 | 2015-08-27 | Lsi Corporation | Storage workload hinting |
US9887008B2 (en) | 2014-03-10 | 2018-02-06 | Futurewei Technologies, Inc. | DDR4-SSD dual-port DIMM device |
US9727503B2 (en) | 2014-03-17 | 2017-08-08 | Mellanox Technologies, Ltd. | Storage system and server |
US9696942B2 (en) | 2014-03-17 | 2017-07-04 | Mellanox Technologies, Ltd. | Accessing remote storage devices using a local bus protocol |
EP3286631A4 (en) | 2016-01-29 | 2018-05-30 | Hewlett-Packard Enterprise Development LP | Remote direct memory access |
-
2016
- 2016-01-29 CN CN201680022777.5A patent/CN107533537B/zh active Active
- 2016-01-29 US US16/073,144 patent/US10877674B2/en active Active
- 2016-01-29 WO PCT/US2016/015678 patent/WO2017131752A1/en unknown
- 2016-01-29 EP EP16888481.5A patent/EP3265925A4/en not_active Ceased
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104246742A (zh) * | 2012-01-17 | 2014-12-24 | 英特尔公司 | 用于远程客户端访问存储设备的命令验证的技术 |
Non-Patent Citations (2)
Title |
---|
《Memory Management Support for Multi-Programmed Remote Direct Memory Access (RDMA) Systems》;Kostas Magoutis;《2005 IEEE International Conference on Cluster Computing》;20070416;全文 * |
《PCI-E总线光纤接口卡的设计》;温宇辰 等;《电子技术应用》;20141024;第40卷(第4期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
US10877674B2 (en) | 2020-12-29 |
EP3265925A1 (en) | 2018-01-10 |
WO2017131752A1 (en) | 2017-08-03 |
CN107533537A (zh) | 2018-01-02 |
US20190026038A1 (en) | 2019-01-24 |
EP3265925A4 (en) | 2018-12-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107430494B (zh) | 用于远程直接存储器访问的系统、方法和介质 | |
CN107430585B (zh) | 用于远程直接存储器访问的系统和方法 | |
CN107533537B (zh) | 存储系统、用于存储的方法和非暂时性计算机可读介质 | |
US9836404B2 (en) | Write mirroring to storage class memory devices | |
US9262265B2 (en) | Storage system and storage control apparatus | |
US8209595B2 (en) | Storage sub-system and method for controlling the same | |
US6912669B2 (en) | Method and apparatus for maintaining cache coherency in a storage system | |
US9830088B2 (en) | Optimized read access to shared data via monitoring of mirroring operations | |
US20150012699A1 (en) | System and method of versioning cache for a clustering topology | |
JP6009095B2 (ja) | ストレージシステム及び記憶制御方法 | |
US10705768B2 (en) | Method and system for managing storage using an intermediate storage area | |
EP2879040B1 (en) | Data storage method, data storage apparatus, and storage device | |
US20150095696A1 (en) | Second-level raid cache splicing | |
US11789611B2 (en) | Methods for handling input-output operations in zoned storage systems and devices thereof | |
JP2016534471A (ja) | シェアード・ナッシング分散型ストレージ・システムにおけるターゲットにより駆動される独立したデータの完全性および冗長性のリカバリ | |
US6446220B1 (en) | Updating data and parity data with and without read caches | |
US20170220249A1 (en) | Systems and Methods to Maintain Consistent High Availability and Performance in Storage Area Networks | |
US10210060B2 (en) | Online NVM format upgrade in a data storage system operating with active and standby memory controllers | |
US7484038B1 (en) | Method and apparatus to manage storage devices | |
CN116560795A (zh) | 一种分布式块存储系统的复制方法及相关装置 | |
US20220261322A1 (en) | Preserving data integrity during controller failures | |
CN111857540A (zh) | 数据存取方法、装置和计算机程序产品 | |
US9830094B2 (en) | Dynamic transitioning of protection information in array systems | |
US20240134575A1 (en) | Storage system and storage control method | |
US20240103731A1 (en) | Non-volatile storage device offloading of host tasks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |