CN113782071A - 处理输入/输出请求的***和方法 - Google Patents
处理输入/输出请求的***和方法 Download PDFInfo
- Publication number
- CN113782071A CN113782071A CN202110570475.4A CN202110570475A CN113782071A CN 113782071 A CN113782071 A CN 113782071A CN 202110570475 A CN202110570475 A CN 202110570475A CN 113782071 A CN113782071 A CN 113782071A
- Authority
- CN
- China
- Prior art keywords
- command
- input
- sequence tag
- logic
- output
- 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.)
- Pending
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/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1051—Data output circuits, e.g. read-out amplifiers, data output buffers, data output registers, data output level conversion circuits
- G11C7/1057—Data output buffers, e.g. comprising level conversion circuits, circuits for adapting load
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- 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
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1605—Handling requests for interconnection or transfer for access to memory bus based on arbitration
- G06F13/1642—Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/18—Handling requests for interconnection or transfer for access to memory bus based on priority control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0613—Improving I/O performance in relation to throughput
-
- 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/0653—Monitoring storage devices or systems
-
- 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/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- 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/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1078—Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits
- G11C7/1084—Data input buffers, e.g. comprising level conversion circuits, circuits for adapting load
-
- 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/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
-
- 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/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- 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
-
- 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/7208—Multiple device management, e.g. distributing data over multiple flash devices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Multimedia (AREA)
- Data Mining & Analysis (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Debugging And Monitoring (AREA)
Abstract
公开处理输入/输出请求的***和方法,通过所述***和方法,存储装置可以以主机提供I/O命令的顺序处理I/O命令并将I/O命令返回到主机,从而减少主机开销,所述方法包括但不限于以下步骤:接收第一I/O命令和第二I/O命令,第一I/O命令和第二I/O命令被分配序列标签;基于第一I/O命令和第二I/O命令各自的序列标签,将第一I/O命令和第二I/O命令发出到一个或多个存储通道;当第一I/O命令或第二I/O命令已分别被完成时,收集第一I/O命令或第二I/O命令的命令完成通知;以及基于完成的第一I/O命令或完成的第二I/O命令的相关联的序列标签向主机发出命令完成通知。
Description
技术领域
本公开的方面涉及用于主机***与存储装置之间的有序I/O命令管理的方法和***。
背景技术
以下背景技术仅旨在提供理解在此公开的发明理念和构思的背景所需的信息。因此,该背景技术部分可包含可授予专利权的主题,并且不应被视为现有技术的公开。
从存储装置的角度来看,通常不能保证给定的I/O命令将在任何其他给定的I/O命令之前被执行。对此存在多种原因,但是值得注意的三个重要原因是:首先,I/O命令可能具有不同的大小和复杂性(例如,小的写入通常比大的写入快,并且对于一些介质,读取比写入快得多);第二,存在用于处理命令的多个内部通道,每个内部通道与存储装置中的存储介质相关联,并且每个通道具有独立于主机的处理队列的处理队列(例如,到多个NAND闪存芯片的多个通道,每个单独的通道服务于特定的物理地址);第三,一些存储装置具有会在不可控的时间间隔占用一个或多个内部处理通道的后台操作(例如,NAND闪存中的垃圾收集)。
当利用存储***时,写入一致性可能是应当维持的基本属性。例如,当计算机***请求首先写入数据,然后以该顺序读取数据时,计算机***应该确保命令实际上以该顺序被处理。否则,如果读取命令在写入命令之前执行,则读取命令将返回不正确的(旧的)数据。作为另一示例,如果较旧的写入请求在较新的写入请求之后被处理,则将发生非法覆写,并且记录在装置上的数据将是不正确的。如果允许多个应用访问相同的数据,并且如果存在主机可通过其发出I/O命令的多个队列,则这种管理问题被放大。
因此,期望增强存储装置管理写入调度的能力的机制。
发明内容
本公开的构思的实施例的方面涉及***和方法,通过所述***和方法,计算***(更具体地讲,存储装置)可以在主机以最小程度工作的情况下按顺序执行I/O命令处理和通知。一些实施例可包括并使用序列标签生成器逻辑来向I/O命令提供序列标签。一些实施例可包括命令处理器逻辑,用于以取决于I/O命令的序列标签的顺序来发起I/O命令的处理。一些实施例可包括通知逻辑,通知逻辑被配置为合并(coalesce)I/O命令通知并以I/O命令的序列标签的顺序将I/O命令通知返回到主机。
根据一个示例实施例,提供一种由存储装置按顺序处理I/O请求的方法,所述方法包括:接收第一I/O命令和第二I/O命令,第一I/O命令和第二I/O命令被分配序列标签;基于第一I/O命令和第二I/O命令各自的序列标签,将第一I/O命令和第二I/O命令发出到一个或多个存储通道;当第一I/O命令或第二I/O命令已被分别完成时,收集第一I/O命令或第二I/O命令的命令完成通知;以及基于相关联的完成的第一I/O命令或完成的第二I/O命令的序列标签向主机发出命令完成通知。
根据另一示例实施例,提供一种存储装置,所述存储装置包括:至少两个命令队列;命令处理器逻辑;至少两个物理通道,每个物理通道与一个或多个固态存储介质相关联,相应的存储介质与相应的物理地址相关联;至少两个物理通道队列,每个物理通道队列与所述至少两个存储通道中的相应存储通道相关联;以及通知管理器逻辑。所述至少两个命令队列被配置为从主机接收I/O命令,I/O命令与序列标签相关联。命令处理器逻辑被配置为:基于与I/O命令相关联的物理地址和所述命令的序列标签,将来自所述至少两个命令队列的I/O命令发出到所述至少两个物理通道队列。通知管理器逻辑被配置为基于各个完成的I/O命令的序列标签向主机发出I/O命令完成通知。
根据另一示例实施例,提供了一种***,所述***包括:主机计算机***;以及存储装置,通信地连接到主机计算机***。存储装置包括:至少两个命令队列;命令处理器逻辑;至少两个存储通道,每个通道与一个或多个固态存储介质相关联,相应的存储介质与相应的存储地址相关联;至少两个存储通道队列,每个存储通道队列与所述至少两个存储通道中的相应存储通道相关联;以及通知管理器逻辑。所述至少两个命令队列被配置为从主机计算机***接收I/O命令,I/O命令与序列标签相关联。所述命令处理器逻辑被配置为:基于与I/O命令相关联的存储地址和所述命令的序列标签,将来自所述至少两个命令队列的I/O命令发出到所述至少两个存储通道队列。通知管理器逻辑被配置为:基于各个完成的I/O命令的序列标签向主机计算机***发出命令完成通知。
附图说明
参照说明书、权利要求书和附图,将领会和理解本公开的这些和其他特征和方面,其中:
图1是可包括根据本公开的示例实施例形成的装置的信息处理***的示意性框图;
图2是描绘计算机***的I/O命令处理技术的示例流程图;
图3是用于处理I/O命令的计算***的示例框图;
图4是描绘根据本公开的示例实施例的用于按顺序处理I/O命令的计算机***的I/O命令处理技术的示例流程图;
图5是根据本公开的示例实施例的用于按顺序处理I/O命令的计算***的示例框图;
图6是根据本公开的示例实施例的用于确保向主机通知按顺序完成的I/O操作的处理的示例流程图;以及
图7是根据本公开的示例实施例的存储装置按顺序处理I/O命令完成通知的示例流程图。
具体实施方式
在下文中,将参照示出了一些示例实施例的附图更全面地描述各种示例实施例。然而,当前公开的主题可以以许多不同的形式实现,并且不应被解释为限于在此阐述的示例实施例。相反,提供这些示例实施例使得本公开将是彻底和完整的,并且将向本领域技术人员充分传达当前公开的主题的范围。在附图中,为了清楚起见,层和区域的大小和相对大小可被夸大。
将理解,当元件或层被称为在另一元件或层“上”、“连接到”或“结合到”另一元件或层时,所述元件或层可直接在所述另一元件或层上、直接连接到或直接结合到所述另一元件或层,或者可存在中间元件或层。当元件或层被称为“直接”在另一元件或层“上”、“直接连接到”或“直接结合到”另一元件或层时,不存在中间元件或层。相同的参考标号始终表示相同的元件。如在此所使用的,术语“和/或”包括一个或多个相关所列项的任何组合和所有组合。
将理解,尽管在此可使用“第一”、“第二”、“第三”等术语的来描述各种元件、组件、区域、层和/或部分,但是这些元件、组件、区域、层和/或部分不应受这些术语的限制。这些术语仅用于将一个元件、组件、区域、层或部分与另一个元件、组件、区域、层或部分区分开。因此,在不脱离当前公开的主题的教导的情况下,下面讨论的第一元件、第一组件、第一区域、第一层或第一部分可被称为第二元件、第二组件、第二区域、第二层或第二部分。
为了易于描述,在此可使用诸如“在……之下”、“在……下方”、“下”、“在……上方”、“上”等的空间相对术语来描述附图中所示的一个元件或特征与另一元件或特征的关系。将理解,空间相对术语意在包括除了附图中描绘的方位以外的装置在使用或操作中的不同方位。例如,如果附图中的装置翻转,则被描述为“在”其他元件或特征“下方”或“在”其他元件或特征“之下”的元件或特征随后将被定位为“在”其他元件或特征“上方”。因此,术语“在……下方”可包括“在……上方”和“在……下方”两种方位。装置也可以以其他方式(例如,旋转90度或处于其他方位)定位,并且在此使用的空间相对术语应被相应地解释。
在此使用的术语仅是为了描述特定示例实施例的目的,并不意在限制当前公开的主题。如在此所使用的,除非上下文另外清楚地指示,否则单数形式也意在包括复数形式。还将理解,术语“包括”和/或“包含”在本说明书中使用时,说明存在所陈述的特征、整体、处理、操作、元件和/或组件,但不排除存在或添加一个或多个其他特征、整体、处理、操作、元件、组件和/或它们的组。
在此参照作为理想化示例实施例(和中间结构)的示意性示图的剖视图来描述示例实施例。这样,将预期作为例如制造技术和/或公差的结果的图示的形状的变化。因此,示例实施例不应被解释为限于在此示出的区域的特定形状,而是包括例如由制造引起的形状偏差。例如,示出为矩形的注入区域通常在其边缘处具有圆形或弯曲的特征和/或注入浓度的梯度,而不是从注入区域到非注入区域的二元变化。同样地,通过注入形成的埋入区域可导致在埋入区域与通过其发生注入的表面之间的区域中的一些注入。因此,附图中示出的区域本质上是示意性的,并且它们的形状不意在示出装置的区域的实际形状,并且不意在限制当前公开的主题的范围。
除非另外定义,否则在此使用的所有术语(包括技术术语和科学术语)具有与本公开的主题所属领域的普通技术人员通常理解的含义相同的含义。还将理解,除非在此明确地如此定义,否则术语(诸如在通用词典中定义的那些术语)应被解释为具有与它们在相关领域的上下文中的相应含义一致的含义,并且不应以理想化或过于形式化的含义进行解释。
在下文中,将参照附图详细解释示例实施例。
图1是信息处理***100的示意性框图,信息处理***100可包括根据公开的主题的原理形成的半导体装置。
参照图1,信息处理***(或计算***)100可包括根据公开的主题的原理构造的一个或多个装置。在一个或多个其他实施例中,信息处理***100可采用或执行根据公开的主题的原理的一种或多种技术。
在各种实施例中,信息处理***100可包括计算装置(诸如,以膝上型计算机、台式计算机、工作站、服务器、刀片服务器(blade server)、个人数字助理、智能电话、平板计算机和其他适当的计算机或其虚拟机或虚拟计算装置为例)。在各种实施例中,信息处理***100可由用户使用。
根据公开的主题的信息处理***100还可包括中央处理器(CPU)、逻辑或处理器110。在一些实施例中,处理器110可包括一个或多个功能单元块(FUB)或组合逻辑块(CLB)115。在这样的实施例中,组合逻辑块可包括各种布尔逻辑运算(例如,与非NAND、或非NOR、非NOT、异或XOR)、稳定逻辑器件(例如,触发器、锁存器)、其他逻辑器件或其组合。这些组合逻辑操作可以以简单或复杂的方式配置以处理输入信号来实现期望的结果。将理解,虽然描述了同步组合逻辑操作的几个说明性示例,但是公开的主题不限于此,而是可包括异步操作、或者同步操作和异步操作的混合。在一个实施例中,组合逻辑操作可包括多个互补金属氧化物半导体(CMOS)晶体管。在各种实施例中,这些CMOS晶体管可被布置成执行逻辑运算的门,但是应理解,可使用其他技术,并且这些技术在公开的主题的范围内。
根据公开的主题的信息处理***100还可包括易失性存储器120(例如,随机存取存储器(RAM))。根据公开的主题的信息处理***100还可包括非易失性存储器130(例如,硬盘驱动器、光学存储器、NAND或闪存、和/或其他固态存储器)。在一些实施例中,易失性存储器120、非易失性存储器130或它们的组合或部分可被称为“存储介质”。在各种实施例中,易失性存储器120和/或非易失性存储器130可被配置为以半永久或基本上永久的形式存储数据。
在各种实施例中,信息处理***100可包括一个或多个网络接口140,网络接口140被配置为允许信息处理***100作为经由有线和/或无线和/或蜂窝协议的通信网络的一部分,并经由通信网络进行通信。无线协议的示例可包括但不限于电气和电子工程师协会(IEEE)802.11g、IEEE 802.11n。蜂窝协议的示例可包括但不限于:IEEE 802.16m(也称为高级无线MAN(城域网)、高级长期演进(LTE)、用于GSM(全球移动通信***)演进的增强数据速率(EDGE)、演进高速分组接入(HSPA+))。有线协议的示例可包括但不限于IEEE 802.3(也称为以太网)、光纤通道、电力线通信(例如,HomePlug、IEEE1901)。应理解,以上仅仅是公开的主题不限于的几个说明性示例。作为经由网络接口140连接到网络的结果,信息处理***100可访问其他资源(例如,无论是作为独立的网络资源还是作为外部附加***的组件的外部易失性存储器、非易失性存储器、处理器/逻辑和软件)。
根据公开的主题的信息处理***100还可包括用户接口单元150(例如,显示适配器、触觉接口和/或人机接口装置)。在各种实施例中,该用户接口单元150可被配置为从用户接收输入和/或向用户提供输出。也可使用其他类型的装置来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈(例如,视觉反馈、听觉反馈和/或触觉反馈);并且来自用户的输入可以以任何形式(包括声音、语音和/或触觉输入)接收。
在各种实施例中,信息处理***100可包括一个或多个其他装置或硬件组件160(例如,显示器或监视器、键盘、鼠标、相机、指纹读取器和/或视频处理器)。应理解,以上仅仅是公开的主题不限于的几个说明性示例。
根据公开的主题的信息处理***100还可包括一个或多个***总线105。在这样的实施例中,***总线105可被配置为通信地连接处理器110、易失性存储器120、非易失性存储器130、网络接口140、用户接口单元150和一个或多个硬件组件160。由处理器110处理的数据或从非易失性存储器130外部输入的数据可被存储在非易失性存储器130或易失性存储器120中。
在各种实施例中,信息处理***100可包括或执行一个或多个软件组件170。在一些实施例中,软件组件170可包括操作***(OS)和/或应用。在一些实施例中,OS可被配置为向应用提供一个或多个服务,并且管理应用与信息处理***100的各种硬件组件(例如,处理器110和/或网络接口140),或者充当应用与信息处理***100的各种硬件组件(例如,处理器110和/或网络接口140)之间的中介。在这样的实施例中,信息处理***100可包括一个或多个本机应用(native application),一个或多个本机应用可本地安装(例如,安装在非易失性存储器130内),并且被配置为由处理器110直接执行并直接与OS交互。在这样的实施例中,本机应用可包括预编译的机器可执行代码。在一些实施例中,本机应用可包括被配置为将源代码或目标代码转换成然后由处理器110执行的可执行代码的脚本解释器(例如,Cshell(csh)、AppleScript、AutoHotkey)和/或虚拟执行机(VM)(例如,Java虚拟机、微软公共语言运行时(Microsoft Common Language Runtime))。
如在此所讨论的,装置可包括被配置为执行各种任务的逻辑。逻辑可被实现为硬件、软件或它们的组合。当逻辑包括硬件时,硬件可以是专用电路布置(例如,ASIC)、门逻辑和存储器的可编程阵列(例如,FPGA)或专门编程的通用逻辑(例如,CPU和GPU)的形式。当逻辑包括软件时,软件可被配置为操作专用电路,或者被配置为对电路、存储器的阵列进行编程,或者操作通用处理器。在软件中实现的逻辑可被存储在任何可用的存储介质(诸如,DRAM、闪存、EEPROM、电阻式存储器等)上。
图2示出用于主机205与固态驱动器(SSD)210通信以协调I/O命令的处理的机制200的实施例。图3示出能够执行图2中描述的方法的主机205和SSD 210的实施例300的框图。在一些实施例中,主机205可类似于图1的计算***100。SSD 210可用作易失性存储器120或非易失性存储器130,或者用作通过图1的网络接口140可用的资源。I/O命令可以是任何种类的I/O命令,包括基于键值的命令、基于逻辑块地址(LBA)的命令和/或其他命令。
现在参照图2至图3,根据示例机制,主机205负责追踪由作为线程310在主机205上运行的操作***或各种应用305发出的I/O命令。如下面更彻底地公开的,主机205负责防止由SSD 210对命令的可能的无序处理引起的I/O错误。这样的错误包括但不限于:非法覆写(其中,较旧的数据覆写较新的数据)、读取陈旧的数据(其中,读取在写入之后发出但是在写入之前被处理)、以及对应用的无序通知(其中,向应用通知与实际发生的动作序列不同的动作序列,导致应用在没有发生错误时相信已经发生错误,或者在已经发生错误时不相信已经发生错误)。如下面更彻底地描述的,抛去其他事情不管,主机可通过以下操作实现此目的:在SSD资源上发出锁定(例如,锁定队列)并延迟发出依赖的命令(例如,跟随并因此依赖于较早的写入的读取),直到主机已接收到它所依赖的命令的完成通知为止。
在处理215,主机205准备发出I/O命令(诸如,由OS或任何应用305使用主机205发出的I/O命令)(其最终成为命令345a至345d),并且追踪I/O命令被发出的顺序和发出I/O命令的应用的身份。在处理215期间,I/O命令(连同接收顺序和发出应用的指示)可在存储器(诸如,图1的易失性存储器120)中暂存(stage)以进行处理。
在处理220,将I/O命令按顺序发送到SSD。发送的动作可通过将I/O命令放置到一个或多个主机侧I/O提交队列320中,主机侧I/O提交队列320可被读取到SSD 210上的命令队列325中并与之相关联。I/O命令可放置在多个I/O提交队列320a至320b中;示出了两个队列,但是大于两个的任何数量也是可行的。I/O命令可通过各种机制被放置在I/O队列320a至320b中,包括通过特定队列与处理器核/线程310的关联、特定队列与应用/OS 305的关联和/或经由哈希逻辑(hashing logic)315(诸如,通过对键值对中的键进行哈希化以确定I/O队列320)。按顺序发送I/O命令的动作可涉及等待直到所发送的I/O命令所依赖的I/O命令完成为止,或者直到对资源的锁定被释放为止。
在处理225,SSD 210接收并缓冲I/O命令(如I/O命令345a至345d所示)。示出了四个命令,但是如本领域普通技术人员将理解的,任何合适的数量都是可行的。I/O命令345a至345d被示出为具有相应的时间标记(t1至t4),但是这是出于构思的说明的目的,并不表示是***的处理。命令还分别使用标签W2、W1、R1和W3来标记,以指示命令的性质(读取或写入)和与它们相关联的地址。该标记仅描述示例命令345a至345d,并不表示指示***的处理。命令345a至345d可在一个或多个命令队列325a至325b中被缓冲或内部地存储到SSD210,一个或多个命令队列325a至325b可对应于主机205上的I/O提交队列320a至320b的相应集合。与主机一样,示出了2个队列,但是更多队列也是可行的。命令队列325a至325b可使它们的I/O命令345a至345d被获取以用于由存储装置中的命令处理器逻辑330以轮询方式处理(例如,用于从固态存储器实际获取)。该命令处理器逻辑330可被实现在存储装置的控制器电路(未示出)中。该轮询处理防止或基本上防止任何给定队列(和相关联的应用)独占SSD 210。
在处理230,从SSD的命令队列325a至325b获取的命令345a至345d可由命令处理器逻辑330发出到SSD 210的存储器装置通道队列340a至340b中的多个,以供位于通道335a至335b上的闪存芯片实际执行(闪存是一个或多个实施例可使用的许多可行的固态存储器的一个示例)。
例如,在一些实施例中,在SSD 210内,物理固态存储器(例如,闪存芯片)被放置到SSD上的多个并行物理通道中,以允许并行处理I/O命令。示出了闪存芯片占用物理通道(例如,物理通道或闪存通道)335a和335b(示出了具有四个芯片的两个通道335a至335b,但是更多通道和不同数量的芯片是可行的)。当I/O命令(诸如,345a至345b)被发送到物理存储器以进行处理时,它们可被放置到与相应的物理通道335a、335b相关联的一组存储器装置通道队列340a至340b中。I/O命令可基于与每个I/O命令相关联的物理地址而被发送到一个或多个特定存储器装置通道队列340a至340b。例如,当I/O命令(诸如,345a至345d中的一个)将被处理时,命令处理器逻辑330可确定与命令相关联的物理地址,确定容纳包含物理地址的存储器(诸如,通道335a至335b上的闪存芯片)的一个或多个存储器装置通道队列340a至340b,并且将I/O命令放置在与具有那些地址的存储器相关联的通道队列340a至340b中。
在图3的示例中,应注意,由于命令处理器逻辑330的轮询命令队列获取与通道队列340a至340b中的物理地址确定的放置的组合,命令345a至345d的物理处理会不按顺序完成。例如,应注意,通道队列340a接收命令345a(t1,W2),通道队列340b接收命令345b(t2,W1)和345d(t4,W3),其中,由于轮询获取,命令345d在命令345b之前。因此,命令345a和345d位于它们各自的通道队列340a至340b的头部。因此,命令345d很可能在命令345a之前完成(特别是如果命令345d是“小”写入命令)。这种无序处理可能由于固态存储器所需的某些后台操作而加剧。例如,如果必须在通道335a中的闪存芯片上执行垃圾收集,则整个通道335a和相关联的通道队列340a(以及可能的其他通道)可能不可用于处理命令,而未被垃圾收集占用的其他通道可自由地处理它们各自的队列340。
现在返回到图2至图3,在处理235,SSD 210经由通知逻辑350以SSD完成I/O命令345a至345d的顺序(即,如上所述,可能不按顺序)向主机205通知所完成的I/O命令345a至345d。在示出的实施例中,通知的顺序将是345d,然后是345a,然后是345b(345c仍然未完成)。通知逻辑350可被包括在SSD 210的存储控制器(未示出)内。
在处理240,主机205以SSD 210发送I/O完成通知的顺序(即,可能无序)接收从SSD发送的I/O完成通知。例如,如图3中所示,命令完成通知的顺序是345d、345a、然后是345b,而命令345c尚未被处理。然后,主机可累积确认没有发生时序/一致性错误所需的完成通知,将I/O命令请求取消暂存(destage),并以应用/OS 305请求它们的顺序(即,以这样的顺序:345a、345b和在通知345d之前等待345c)将I/O完成通知发送到应用/OS 305。可释放对资源的锁定。如果检测到潜在的一致性错误,则可重复I/O请求而不是取消暂存I/O请求,并且不向应用/OS 305通知完成通知。
如通过检查图2至图3及其相关联的讨论可观察到的,因为从给定应用到给定地址的一系列I/O命令将限于单个主机侧I/O队列320、单个SSD命令队列325和预定的一组通道队列340,所以上述机制通常可避免最严重形式的一致性错误。此外,可经由锁定一个或多个队列来减少应用间一致性错误。然而,该机制需要来自主机的大量资源利用,并且引起SSD内的低效。具体地,主机必须根据所有I/O请求被接收的顺序对它们进行暂存和取消暂存,并且必须充分追踪完成通知以确保没有发生一致性错误。此外,队列的锁定减少了在给时间内可由队列处理的I/O的总数,并且I/O命令345a至345d从命令队列325a至325b到通道队列340的轮询发出会使这样的队列中的一个或多个未被充分利用。
图4示出了用于主机205'与固态驱动器(SSD)210'通信以在减少的主机开销的情况下来协调I/O命令的处理的机制400的实施例。图5示出了能够执行图4中描述的方法的主机205'和SSD 210'的实施例500的框图。在一些实施例中,主机205'可类似于图1的计算***100。在一些实施例中,SSD 210'可用作图1的易失性存储器120或非易失性存储器130,或者用作通过网络接口140可用的资源。I/O命令可以是任何种类的I/O命令,包括基于键值的命令、基于逻辑块地址(LBA)的命令或其他命令。
如下面将进一步示出的,图4至图5中示出的示例实施例被构造为允许SSD 210'以定义的顺序从主机205'接收I/O命令,并且以该相同的顺序向主机205'通知命令完成。这允许主机205'放弃以上参照图3至图4讨论的大部分主机侧I/O管理,并且允许SSD 210'更有效地使用它自己的内部资源。
转到图4至图5,在处理405,主机205'以I/O命令由应用/OS 505生成的顺序向SSD210'发送I/O命令。发送的动作可通过一个或多个主机侧I/O提交队列520a至520c执行,一个或多个主机侧I/O提交队列520a至520c可被读取到SSD 210'上的命令队列525a至525c中,并与命令队列525a至525c相关联。I/O命令可被放置在多个I/O提交队列520a至520c中;示出了三个队列,但是大于两个的任何数量都是可行的。I/O请求可通过特定队列与用户I/O线程510的关联、和/或特定队列与应用/OS 505的关联而被直接放置在I/O提交队列520a至520c中。作为处理405的发送的结果,命令545a至545h被放置在SSD 210'的命令队列525a至525c中。
如下面将更容易明白的,在该实施例中,主机205'可简单地以最小的处理直接对I/O命令进行排队,并且不需要对I/O请求进行暂存(包括追踪发出序列和发出者的身份)、锁定资源、在完成时对I/O请求取消暂存、或监视I/O完成通知的顺序和/或一致性,从而释放主机资源。
在一些实施例中,在处理405,每个I/O命令与时间戳相关联,或者与由每个I/O命令被发送的顺序确定的可被称为序列标签的其他序列号(诸如,顺序的整数)相关联。时间戳或序列号(序列标签)可由序列标签生成器逻辑546生成。序列标签生成器逻辑546可位于主机205'或SSD 210'上。在主机205'包括序列标签生成器逻辑546的实施例中,序列标签与I/O命令一起被发送到SSD 210'。在主机205'包括序列标签生成器逻辑546的实施例中,序列标签生成器可用于确保:如果I/O命令可被分解为一组逻辑块地址(LBA)引导的操作,则所有分解的命令利用连续的序列标签。在一个示例中,序列标签生成器546包括被配置为根据在主机上运行的应用需要访问的顺序来将序列标签应用于LBA请求的逻辑。在SSD 210'包括序列标签生成器逻辑546的实施例中,不需要使用序列标签从主机205'发送I/O命令;当I/O命令由SSD 210'接收时,序列标签被添加到I/O命令。序列标签在命令545a至545h上被示出为标签t1至t8。在序列标签生成器逻辑546位于SSD 210'上的各种实施例中,序列标签生成器逻辑546可与索引逻辑、命令处理器逻辑和/或命令队列通信,这部分地取决于序列标签(和/或其与I/O命令的关联)被存储在何处。
现在转到图5,应注意,I/O命令545a至545h与相应的序列标签t1至t8相关联。还应注意,命令已经被放置在与相应的I/O命令提交队列520a至520c相关联的命令队列525a至525c中,I/O命令提交队列520a至520c又与用户I/O线程510相关联。还应注意,在每个队列内,I/O命令545a至545h是按时间顺序的,但是在队列之间,没有特定的顺序。还应注意,每个I/O命令545a至545h使用示例操作类型(读取或写入)和地址(例如,1至3)示出。这是为了示出实施例的效果,而不反映实施例的任何动作。
再次针对图5,SSD 210'包括索引逻辑533。索引逻辑533以序列标签顺序对命令队列525a至525c中的所有I/O命令545a至545h进行索引,并且可以是序列标签与特定I/O命令545a至545h相关联的机制。索引逻辑533可包括最小堆索引(min-heap index);然而,许多其他索引也是可行的。在一些实施例中,如下面将讨论的,索引逻辑533还可追踪物理存储器通道535a至535b及其相关联的队列540a、540b的活动;然而,在其他实施例中,其他逻辑可追踪这些活动(也在下面讨论)。SSD 210'还包括命令处理器逻辑530。索引逻辑533可另外包括用于容纳索引的索引存储器(未示出)或与索引存储器通信。索引逻辑533还可与序列标签生成器逻辑546、命令处理器逻辑530和/或命令队列525a至525c通信。
现在返回到图4至图5,在处理410,命令处理器逻辑530以序列标签顺序从命令队列525a至525c获取I/O命令545a至545h,确定与每个特定I/O命令545a至545h相关联的物理块地址,并且将每个特定I/O命令545a至545h(以获取顺序)放置到与相应的物理存储通道(即,物理通道)535a、535b相关联的一个或多个物理通道队列540a至540b中,每个物理存储通道又包括与确定的物理地址相关联的固态存储器芯片。
例如,在一些实施例中,在SSD 210'内,物理固态存储器(例如,闪存存储器芯片)被放置到SSD上的多个并行物理通道中,以允许并行处理I/O命令。这通过占用物理通道535a、535b的闪存芯片来示出(示出了具有四个芯片的两个通道535a至535b,然而,更多通道和不同数量的芯片是可行的)。当I/O命令(诸如,545a至545h)被发送到物理存储器以进行处理时,它们可被放置到一组存储器装置物理通道队列540a至540b中。I/O命令可基于与每个I/O命令相关联的物理地址而被发送到一个或多个特定存储器装置物理通道队列540a至540b。例如,当I/O命令(诸如,545a至545d中的一个)将被处理时,命令处理器逻辑530可确定与命令相关联的物理地址,确定容纳包含物理地址的存储器(诸如,物理通道535a至535b上的闪存芯片)的一个或多个存储器装置通道队列540a至540b,并且将I/O命令放置在与具有那些地址的存储器相关联的通道队列540a至540b中。
命令处理器逻辑530可利用基于序列ID的命令获取器531,进而利用索引逻辑533来确保命令处理器逻辑530以标签序列顺序将来自I/O命令队列525a至525c的命令放置到物理通道队列540a、540b中。在向通道队列540a、540b发出特定I/O命令545a至545h时,从索引533和命令队列525a至525c中移除该I/O命令。如下面将进一步讨论的,当I/O命令被放置在通道队列540a、540b内时,它可由通知管理器逻辑550的I/O定序器逻辑551中的索引(未示出)来进行索引。
关于图5,应注意,因为命令处理器逻辑530已经将I/O命令545a至545h按顺序发送到物理通道队列540a、540b,所以这导致各个通道队列540a、540b中的每个具有按顺序列出的所有命令。这可防止任何数据一致性错误:给定物理地址上的所有操作将按顺序处理,因此不存在读取后写入错误(write-after-read error)或新写入后旧写入错误(old-write-after-new-write error)等的可能性(或基本上不存在读取后写入错误或新写入后旧写入错误等的可能性)。还应注意以下未示出的情况:如果命令包括对跨越多个通道的地址范围的操作(例如,写入至非常大的键值,或者其LBA范围可被转换为完全不同的物理地址的命令),那么该命令将按照给定的顺序并发地(例如,同时)分派到多个通道,以保持即使跨越通道的数据项的一致性。然而,每个物理通道535a、535b可以以不同的速率处理请求的事实(由于类似于上面讨论的那些原因,诸如,垃圾收集),仍然可能存在有限的乱序I/O完成。然而,如上所述,这种乱序处理不会导致数据一致性错误或严重的数据一致性错误。
现在返回到图4至图5,在处理415,SSD 210'无序地处理I/O请求。例如,如上所述,利用基于序列ID的命令获取器531的命令处理器逻辑530可按顺序从命令队列525a至525c获取I/O命令545a至545h,并将它们按顺序放入相应的物理通道队列540a、540b中,并且每个物理通道535a、535b将以其自己的速率(可能不按顺序)处理其相应的通道队列540a、540b。
在处理420,SSD 210'可以以主机205'发出I/O命令的相同顺序向主机205'通知I/O命令完成。例如,SSD 210'可包括通知管理器逻辑550。通知管理器逻辑550可包括I/O定序器逻辑551、通知缓冲器552和主机通知逻辑(或主机通知器)553。通知缓冲器552可针对相应的完成命令545a至545h,从物理通道535a、535b的闪存芯片接收命令完成通知。I/O定序器逻辑551可将完成通知与相应的I/O命令545a至545h及其相关联的序列标签相关联。
除了I/O定序器逻辑551追踪已经发出到物理通道队列540a、540b而不是I/O命令队列525a至525c的命令之外,I/O定序器逻辑551可包含类似于索引逻辑533的索引逻辑(索引逻辑未示出)。在其他实施例中,I/O定序器逻辑与索引逻辑533通信,索引逻辑533在一些实施例中可追踪命令队列525a至525c以及物理通道队列540a、540b两者。当通知管理器逻辑550从物理通道535a、535b接收到命令完成通知时,命令完成通知被缓冲在通知缓冲器552中,并且I/O定序器逻辑551将通知与相应的I/O命令545a至545h和序列标签相关联。通知管理器逻辑550可检查I/O定序器逻辑551,以查看通知缓冲器552中未决(pending)的命令完成通知是否是针对具有最低序列标签的I/O命令545a至545h。基于发现通知缓冲器552中的命令完成通知与具有最低序列标签的I/O命令相关联,通知管理器逻辑550可调用主机通知逻辑553,以向主机205'通知具有最低序列标签的I/O命令已经完成。在特定实施例中,通知逻辑553还可向主机205'通知:通知缓冲器552中的具有紧接在具有最低序列标签的I/O命令之后的序列标签/具有与具有最低序列标签的I/O命令的序列标签相继的序列标签的任何后续I/O命令完成。在向主机205'发送命令完成通知时,从通知缓冲器552和I/O定序器逻辑551移除命令完成通知和相关联的I/O命令列表以及序列标签(例如,通过从缓冲器和索引结构清除项目)。因此,发送到主机205'的命令完成通知以与发送原始I/O命令相同的顺序返回。
现在返回到图4至图5,在处理425,主机205'以与原始I/O命令545a至545h被发送到SSD 210'的顺序对应的顺序接收I/O命令完成通知。然后,主机205'可向各种应用/OS505和/或用户I/O线程510通知I/O命令完成。因此,应用/OS 505和用户I/O线程510以适当的顺序被通知它们的操作成功。
在检查图4至图5时,清楚的是,在一些实施例中,主机资源的使用被大大减少。更具体地,I/O命令不需要在主机205'上经历大量的暂存和取消暂存以及相关联的完成追踪和排序。此外,单独的I/O队列520a至520c或任何给定的地址范围不需要引起任何形式的锁定以防止或减少一致性错误。此外,主机205'不需要操作任何I/O分配机制(诸如,图3的哈希逻辑315)。最后,专用于这些任务的处理器周期和存储器可被释放用于其他用途。
现在转到图5至图6,图6提供了图5的通知管理器逻辑550在确定向图5的主机205'发出命令完成通知时使用的处理的实施例的流程图。在处理605,通知管理器逻辑550从驻留在物理通道(例如,闪存通道)535a、535b上的闪存芯片接收目标I/O命令(subject I/Ocommand)完成通知,并将其存储在通知缓冲器552中。
在处理610,将目标I/O命令完成通知与I/O命令545a至545h中的特定I/O命令(例如,KV请求)及其相关联的序列标签相关联。如上所述,这可通过使用与I/O定序器逻辑551相关联的索引逻辑(例如,内部索引或索引逻辑533)参照命令完成通知来完成。在一些实施例中,如果I/O命令545a至545h已经如上所述分布在多个通道之间,则在该处理中,各个通道完成被合并成针对I/O命令的单个“完成”。
在处理615,检查目标I/O命令完成通知的序列标签,以查看它是否是I/O定序器逻辑551的相关联的索引器逻辑(例如,内部索引或索引逻辑533)中的当前未决的I/O命令的完成通知的最低序列标签。在一些实施例中,这可通过将目标I/O命令完成通知的序列标签与最后通知的序列标签的序列标签编号进行比较来完成。例如,在序列标签是顺序的整数的实施例中,通知管理器逻辑550可进行检查,以查看目标I/O命令完成通知的序列标签是否比发送到主机的最近I/O命令完成通知的序列ID大“一”;如果是,则目标I/O命令是最低标记的未决I/O命令完成通知。在其他实施例中,诸如,在序列标签是时间戳的情况下,通知管理器逻辑550可利用与I/O定序器逻辑551相关联的索引逻辑(例如,内部索引或索引逻辑533)来确定目标I/O命令完成通知是否是最低标记的这种通知。更具体地,例如,如果目标I/O命令完成通知在最小堆索引的根处,则它是最低标记的通知。
在处理620,基于目标I/O命令完成通知不是相关联的未决I/O命令中最低标记的I/O命令,通知可在通知缓冲器中被暂存以用于将来的通知(例如,如下所示,当具有较早序列标签的I/O命令完成被处理时),并且处理返回到处理605,准备接收更多的I/O命令完成通知。
在处理625,基于目标I/O命令完成通知与最低未完成命令相关联,通知管理器逻辑550可在通知缓冲器552中进行搜索,以定位可能在该目标I/O命令完成通知之后的任何缓冲的I/O命令完成通知。在一些实施例中,这可通过将通知缓冲器552的内容与I/O定序器逻辑551的索引中提供的顺序进行比较来完成。在一些可选实施例中,这可通过针对目标I/O命令完成通知的数字顺序性检查缓冲器内容的序列标签来完成。如此识别的目标I/O命令完成通知和任何顺序的I/O命令完成通知可被发送到主机通知逻辑553,从通知缓冲器552被清除,从与I/O定序器逻辑551相关联的索引(例如,内部索引或索引逻辑533)被移除,并且(处理615的)通知的最后序列ID可被更新。
在处理630,主机通知逻辑530向主机205'发出目标I/O命令完成通知和在处理625中识别的任何相继的I/O命令完成通知。然后,图6的处理可根据需要重新开始。
图7示出了用于SSD(诸如,SSD 210')从主机205'按顺序接收I/O命令并且以相同的顺序向主机205'通知完成的I/O命令的方法700。本领域普通技术人员将认识到,在不脱离在此公开的构思的情况下,图7中的处理可以以可选的顺序完成,或者特定处理可被添加或移除。
在处理705,可将与相应序列标签相关联的I/O命令放置在SSD 210'上的一个或多个命令队列(诸如,图5的命令队列525a至525c)中。可通过序列标签生成器逻辑(诸如,图5的序列标签生成器逻辑546)在主机205'或SSD 210'将序列标签与I/O命令相关联。
在处理710,可在I/O命令队列索引(诸如,图5的索引逻辑533)中对I/O命令进行索引,从而索引追踪I/O命令与序列标签的关联,并且根据序列标签顺序性对条目进行排序。
在处理715,可根据I/O命令的序列标签的顺序将I/O命令从I/O命令队列移动到一个或多个物理通道队列(诸如,图5的通道队列540a、540b)。(一个或多个)物理通道队列可对应于容纳固态存储器芯片的物理通道,该固态存储器芯片包含I/O命令所对应的物理地址。例如,在一些实施例中,这可通过以下步骤来完成:确定具有最低序列标签的I/O命令,确定与被确定为具有最低序列标签的I/O命令的地址相关联的一个或多个存储通道,以及将确定的I/O命令放置到与确定的I/O命令的地址相关联的存储通道的一个或多个存储通道队列中。更具体地,在一些实施例中,可从键值对的键导出物理地址。例如,在一些实施例中,键可被映射到一个或多个物理地址。在其他实施例中,可从一个或多个逻辑块地址(LBA)导出物理地址(例如,在一些实施例中,一个或多个LBA可被映射到一个或多个物理地址)。
在处理720,从I/O命令队列移除已被移动到物理通道队列的I/O命令,并且更新I/O命令队列索引。
在处理725,闪存通道队列各自处理它们各自的I/O命令。当I/O命令完成时,可将对应的I/O命令完成通知发送到通知管理器逻辑(诸如,图5的通知管理器逻辑550)。
在处理730,收集I/O命令完成通知。I/O命令完成通知可被收集在通知缓冲器(诸如,图5的通知管理器550的通知缓冲器552)中。
在处理735,以与对应的I/O命令被接收的顺序相同的顺序向主机发出I/O命令完成通知。可通过与以上关于图6讨论的那些处理类似的处理来完成处理735。
方法过程可由执行计算机程序以通过对输入数据进行操作并生成输出来执行功能的一个或多个可编程处理器执行。方法过程还可由专用逻辑电路(例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路))执行,并且设备可被实现为专用逻辑电路(例如,FPGA(现场可编程门阵列)或ASIC(专用集成电路))。
在各种实施例中,计算机可读介质可包括指令,所述指令在被执行时使装置执行方法过程或处理的至少一部分。在一些实施例中,计算机可读介质可包括在磁介质、光学介质、其他介质或它们的组合(例如,CD-ROM、硬盘驱动器、只读存储器、闪存驱动器)中。在这样的实施例中,计算机可读介质可以是有形且非暂时性实现的制品。
虽然已经参照示例实施例描述了公开的主题的原理,但是对于本领域技术人员来说将清楚的是,在不脱离这些公开的构思的精神和范围的情况下,可对其进行各种改变和修改。因此,应理解,上述实施例不是限制性的,而仅是说明性的。因此,公开的构思的范围将由所附权利要求及其等同物的最广泛允许的解释来确定,并且不应受前面的描述的约束或限制。因此,应理解,所附权利要求意在覆盖落入实施例的范围内的所有这样的修改和改变。
发明构思的实施例可无限制地扩展到以下声明:
声明1:一种由存储装置按顺序处理I/O请求的方法,所述方法包括:
接收第一I/O命令和第二I/O命令,第一I/O命令和第二I/O命令被分配序列标签;
基于第一I/O命令和第二I/O命令各自的序列标签,将第一I/O命令和第二I/O命令发出到一个或多个存储通道;
当第一I/O命令或第二I/O命令已经分别被完成时,收集第一I/O命令或第二I/O命令的命令完成通知;以及
基于完成的第一I/O命令或完成的第二I/O命令的相关联的序列标签向主机发出命令完成通知。
声明2:如声明1所述的方法,其中,接收的第一I/O命令和接收的第二I/O命令根据它们的序列标签被索引。
声明3:如声明1所述的方法,其中,基于第一I/O命令和第二I/O命令各自的序列标签将第一I/O命令和第二I/O命令发出到一个或多个存储通道的步骤包括:
确定具有最低序列标签的I/O命令;
确定与被确定为具有最低序列标签的I/O命令的地址相关联的一个或多个存储通道;
将确定的具有最低序列标签的I/O命令放置到与具有最低序列标签的I/O命令的确定的地址相关联的存储通道的一个或多个存储通道队列中;以及
更新索引,以移除确定的具有最低序列标签的I/O命令。
声明4:如声明3所述的方法,其中,所述地址基于键值对的键。
声明5:如声明3所述的方法,其中,所述地址包括逻辑块地址(LBA)。
声明6:如声明1所述的方法,其中,序列标签由主机确定。
声明7:如声明1所述的方法,其中,序列标签由存储装置确定。
声明8:如声明1所述的方法,其中,向主机发出命令完成通知的步骤包括:
确定与完成的I/O命令相关联的序列标签是否是与未决的I/O命令相关联的所有序列标签中的最低序列标签;
基于确定完成的I/O命令的序列标签是最低未决I/O命令的序列标签,向主机发出具有与确定的最低序列标签相继的序列标签的完成的I/O命令的所有命令完成通知,完成的I/O命令包括具有最低序列标签的完成的I/O命令;以及
基于确定完成的I/O命令的序列标签不是最低未决I/O命令的序列标签,将I/O命令完成通知放置在缓冲器中。
声明9:一种存储装置,包括:
至少两个命令队列;
命令处理器逻辑;
至少两个物理通道,每个物理通道与一个或多个固态存储介质相关联,相应的存储介质与相应的物理地址相关联;
至少两个物理通道队列,与所述至少两个物理通道中的相应物理通道相关联;以及
通知管理器逻辑,
其中,
所述至少两个命令队列被配置为:从主机接收I/O命令,I/O命令与序列标签相关联;
命令处理器逻辑被配置为:基于与I/O命令相关联的物理地址和I/O命令的序列标签,将来自所述至少两个命令队列的I/O命令发出到所述至少两个物理通道队列;并且
通知管理器逻辑被配置为:基于各个完成的I/O命令的序列标签向主机发出I/O命令完成通知。
声明10:如声明9所述的存储装置,还包括:序列标签生成器逻辑,序列标签生成器逻辑被配置为:与命令处理器逻辑或命令队列通信,并且从命令队列接收从主机接收的I/O命令,并将接收的I/O命令与由I/O命令的接收顺序确定的序列标签相关联。
声明11:如声明10所述的存储装置,还包括:索引逻辑和索引存储器,其中,索引逻辑被配置为:与序列标签生成器逻辑、命令处理器逻辑或命令队列通信,并且在索引存储器内使用I/O命令的相应序列标签对I/O命令进行索引。
声明12:如声明11所述的存储装置,其中,命令处理器逻辑被配置为:
确定索引中的具有最低序列标签的I/O命令;
确定与被确定为具有最低序列标签的I/O命令的地址相关联的一个或多个存储通道;
将确定的所述I/O命令放置到与固态存储介质相关联的存储通道队列中的一个或多个存储通道队列中,所述固态存储介质与所述I/O命令的确定的地址相关联;以及
更新索引,以移除确定的具有最低序列标签的I/O命令。
声明13:如声明12所述的存储装置,其中,I/O命令包括键值命令,并且存储地址基于键值命令的键来确定。
声明14:如声明12所述的存储装置,其中,I/O命令包括一个或多个逻辑块地址(LBA),并且存储地址基于LBA来确定。
声明15:如声明9所述的存储装置,其中,通知管理器逻辑包括:
通知缓冲器;
I/O定序器逻辑;以及
主机通知逻辑,
其中,
通知缓冲器被配置为:接收并存储已经由物理通道完成的相应I/O命令的命令完成通知;
I/O定序器逻辑被配置为:确定与从物理通道接收的命令完成通知相关联的序列标签,并且还被配置为:确定通知缓冲器中的命令完成通知是否具有作为尚未通知给主机的最低序列标签的序列标签;以及
主机通知逻辑被配置为:在确定通知缓冲器包含与尚未被通知给主机的最低序列标签对应的命令完成通知时,通知主机相关联的I/O命令完成。
声明16:一种***,包括:
主机计算机***;以及
存储装置,通信地连接到主机计算机***,
其中,存储装置包括:
至少两个命令队列;
命令处理器逻辑;
至少两个存储通道,每个通道与一个或多个固态存储介质相关联,相应的存储介质与相应的存储地址相关联;
至少两个存储通道队列,与所述至少两个存储通道中的相应存储通道相关联;以及
通知管理器逻辑,
其中,
所述至少两个命令队列被配置为:从主机计算机***接收I/O命令,I/O命令与序列标签相关联;
命令处理器逻辑被配置为:基于与I/O命令相关联的存储地址和I/O命令的序列标签,将来自所述至少两个命令队列的I/O命令发出到所述至少两个存储通道队列;以及
通知管理器逻辑被配置为:基于各个完成的I/O命令的序列标签向主机计算机***发出命令完成通知。
声明17:如声明16所述的***,其中,主机计算机***包括:序列标签生成器,并且序列标签生成器被配置为:将序列标签与I/O命令相关联以用于传输到存储装置。
声明18:如声明17所述的***,其中,序列标签生成器包括被配置为根据在主机计算机***上运行的应用要求访问的顺序来将序列标签应用于LBA请求的逻辑。
Claims (18)
1.一种由存储装置按顺序处理输入输出请求的方法,所述方法包括:
接收第一输入/输出命令和第二输入/输出命令,第一输入/输出命令和第二输入/输出命令被分配序列标签;
基于第一输入/输出命令和第二输入/输出命令各自的序列标签,将第一输入/输出命令和第二输入/输出命令发出到一个或多个存储通道;
当第一输入/输出命令或第二输入/输出命令已分别被完成时,收集第一输入/输出命令或第二输入/输出命令的命令完成通知;以及
基于完成的第一输入/输出命令或完成的第二输入/输出命令的相关联的序列标签向主机发出命令完成通知。
2.根据权利要求1所述的方法,其中,接收的第一输入/输出命令和接收的第二输入/输出命令根据它们的序列标签被索引。
3.根据权利要求2所述的方法,其中,基于第一输入/输出命令和第二输入/输出命令各自的序列标签将第一输入/输出命令和第二输入/输出命令发出到一个或多个存储通道的步骤包括:
确定具有最低序列标签的输入/输出命令;
确定与被确定为具有最低序列标签的输入/输出命令的地址相关联的一个或多个存储通道;
将确定的具有最低序列标签的输入/输出命令放置到与具有最低序列标签的输入/输出命令的确定的地址相关联的存储通道的一个或多个存储通道队列中;以及
更新索引,以移除确定的具有最低序列标签的输入/输出命令。
4.根据权利要求3所述的方法,其中,所述地址基于键值对的键。
5.根据权利要求3所述的方法,其中,所述地址包括逻辑块地址。
6.根据权利要求1所述的方法,其中,序列标签由主机确定。
7.根据权利要求1所述的方法,其中,序列标签由存储装置确定。
8.根据权利要求1所述的方法,其中,向主机发出命令完成通知的步骤包括:
确定与完成的输入/输出命令相关联的序列标签是否是与未决的输入/输出命令相关联的所有序列标签中的最低序列标签;
基于确定完成的输入/输出命令的序列标签是最低未决输入/输出命令的序列标签,向主机发出具有与确定的最低序列标签相继的序列标签的完成的输入/输出命令的所有命令完成通知,完成的输入/输出命令包括具有最低序列标签的完成的输入/输出命令;以及
基于确定完成的输入/输出命令的序列标签不是最低未决输入/输出命令的序列标签,将输入/输出命令完成通知放置在缓冲器中。
9.一种存储装置,包括:
至少两个命令队列;
命令处理器逻辑;
至少两个物理通道,每个物理通道与一个或多个固态存储介质相关联,相应的存储介质与相应的物理地址相关联;
至少两个物理通道队列,与所述至少两个物理通道中的相应物理通道相关联;以及
通知管理器逻辑,
其中,
所述至少两个命令队列被配置为:从主机接收输入/输出命令,输入/输出命令与序列标签相关联;
命令处理器逻辑被配置为:基于与输入/输出命令相关联的物理地址和输入/输出命令的序列标签,将来自所述至少两个命令队列的输入/输出命令发出到所述至少两个物理通道队列;并且
通知管理器逻辑被配置为:基于各个完成的输入/输出命令的序列标签向主机发出输入/输出命令完成通知。
10.根据权利要求9所述的存储装置,还包括:序列标签生成器逻辑,序列标签生成器逻辑被配置为:与命令处理器逻辑或命令队列通信,并且从命令队列接收从主机接收的输入/输出命令,并将接收的输入/输出命令与由输入/输出命令的接收顺序确定的序列标签相关联。
11.根据权利要求10所述的存储装置,还包括:索引逻辑和索引存储器,其中,索引逻辑被配置为:与序列标签生成器逻辑、命令处理器逻辑或命令队列通信,并且在索引存储器内使用输入/输出命令的相应序列标签对输入/输出命令进行索引。
12.根据权利要求11所述的存储装置,其中,命令处理器逻辑被配置为:
确定索引中的具有最低序列标签的输入/输出命令;
确定与被确定为具有最低序列标签的输入/输出命令的地址相关联的一个或多个存储通道;
将确定的所述输入/输出命令放置到与固态存储介质相关联的存储通道队列中的一个或多个存储通道队列中,所述固态存储介质与所述输入/输出命令的确定的地址相关联;以及
更新索引,以移除确定的具有最低序列标签的输入/输出命令。
13.根据权利要求12所述的存储装置,其中,输入/输出命令包括键值命令,并且存储地址基于键值命令的键来确定。
14.根据权利要求12所述的存储装置,其中,输入/输出命令包括一个或多个逻辑块地址,并且存储地址基于逻辑块地址来确定。
15.根据权利要求9所述的存储装置,其中,通知管理器逻辑包括:
通知缓冲器;
输入/输出定序器逻辑;以及
主机通知逻辑,
其中,
通知缓冲器被配置为:接收并存储已经由物理通道完成的相应输入/输出命令的命令完成通知;
输入/输出定序器逻辑被配置为:确定与从物理通道接收的命令完成通知相关联的序列标签,并且还被配置为:确定通知缓冲器中的命令完成通知是否具有作为尚未通知给主机的最低序列标签的序列标签;以及
主机通知逻辑被配置为:在确定通知缓冲器包含与尚未被通知给主机的最低序列标签对应的命令完成通知时,通知主机相关联的输入/输出命令完成。
16.一种处理输入/输出请求的***,包括:
主机计算机***;以及
存储装置,通信地连接到主机计算机***,
其中,存储装置包括:
至少两个命令队列;
命令处理器逻辑;
至少两个存储通道,每个存储通道与一个或多个固态存储介质相关联,相应的存储介质与相应的存储地址相关联;
至少两个存储通道队列,与所述至少两个存储通道中的相应存储通道相关联;以及
通知管理器逻辑,
其中,
所述至少两个命令队列被配置为:从主机计算机***接收输入/输出命令,输入/输出命令与序列标签相关联;
命令处理器逻辑被配置为:基于与输入/输出命令相关联的存储地址和输入/输出命令的序列标签,将来自所述至少两个命令队列的输入/输出命令发出到所述至少两个存储通道队列;并且
通知管理器逻辑被配置为:基于各个完成的输入/输出命令的序列标签向主机计算机***发出命令完成通知。
17.根据权利要求16所述的***,其中,主机计算机***包括:序列标签生成器,并且序列标签生成器被配置为:将序列标签与输入/输出命令相关联以用于传输到存储装置。
18.根据权利要求17所述的***,其中,序列标签生成器包括被配置为根据在主机计算机***上运行的应用要求访问的顺序来将序列标签应用于逻辑块地址请求的逻辑。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/897,173 | 2020-06-09 | ||
US16/897,173 US11579801B2 (en) | 2020-06-09 | 2020-06-09 | Write ordering in SSDs |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113782071A true CN113782071A (zh) | 2021-12-10 |
Family
ID=75143526
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110570475.4A Pending CN113782071A (zh) | 2020-06-09 | 2021-05-25 | 处理输入/输出请求的***和方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11579801B2 (zh) |
EP (1) | EP3923151A1 (zh) |
KR (1) | KR20210152929A (zh) |
CN (1) | CN113782071A (zh) |
TW (1) | TW202147129A (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11836383B2 (en) * | 2021-11-23 | 2023-12-05 | Silicon Motion Inc. | Controllers of storage devices for arranging order of commands and methods of operating the same |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030135729A1 (en) | 2001-12-14 | 2003-07-17 | I/O Integrity, Inc. | Apparatus and meta data caching method for optimizing server startup performance |
US7243200B2 (en) | 2004-07-15 | 2007-07-10 | International Business Machines Corporation | Establishing command order in an out of order DMA command queue |
GB0524021D0 (en) | 2005-11-25 | 2006-01-04 | Ibm | A system for preserving message order |
US20070208820A1 (en) * | 2006-02-17 | 2007-09-06 | Neteffect, Inc. | Apparatus and method for out-of-order placement and in-order completion reporting of remote direct memory access operations |
US8055816B2 (en) | 2009-04-09 | 2011-11-08 | Micron Technology, Inc. | Memory controllers, memory systems, solid state drives and methods for processing a number of commands |
US20180107591A1 (en) | 2011-04-06 | 2018-04-19 | P4tents1, LLC | System, method and computer program product for fetching data between an execution of a plurality of threads |
US8694754B2 (en) | 2011-09-09 | 2014-04-08 | Ocz Technology Group, Inc. | Non-volatile memory-based mass storage devices and methods for writing data thereto |
CN102789439B (zh) | 2012-06-16 | 2016-02-10 | 北京忆恒创源科技有限公司 | 控制数据传输过程中的中断的方法与存储设备 |
US9785355B2 (en) * | 2013-06-26 | 2017-10-10 | Cnex Labs, Inc. | NVM express controller for remote access of memory and I/O over ethernet-type networks |
US9251064B2 (en) | 2014-01-08 | 2016-02-02 | Netapp, Inc. | NVRAM caching and logging in a storage system |
US9354872B2 (en) | 2014-04-24 | 2016-05-31 | Xitore, Inc. | Apparatus, system, and method for non-volatile data storage and retrieval |
US20160132251A1 (en) * | 2014-11-11 | 2016-05-12 | Wisconsin Alumni Research Foundation | Operating method of storage device and data writing method for writing data into storage device |
US10133492B2 (en) * | 2015-10-14 | 2018-11-20 | Samsung Electronics Co., Ltd. | Electronic system with interface control mechanism and method of operation thereof |
US10509592B1 (en) | 2016-07-26 | 2019-12-17 | Pavilion Data Systems, Inc. | Parallel data transfer for solid state drives using queue pair subsets |
US10628081B2 (en) * | 2018-03-09 | 2020-04-21 | Toshiba Memory Corporation | Managing internal command queues in solid state storage drives |
US20190392047A1 (en) | 2018-06-25 | 2019-12-26 | Amazon Technologies, Inc. | Multi-table partitions in a key-value database |
US10817217B2 (en) | 2018-06-28 | 2020-10-27 | Seagate Technology Llc | Data storage system with improved time-to-ready |
CN111026324B (zh) * | 2018-10-09 | 2021-11-19 | 华为技术有限公司 | 转发表项的更新方法及装置 |
-
2020
- 2020-06-09 US US16/897,173 patent/US11579801B2/en active Active
-
2021
- 2021-02-24 KR KR1020210025064A patent/KR20210152929A/ko active Search and Examination
- 2021-03-22 EP EP21163973.7A patent/EP3923151A1/en active Pending
- 2021-04-15 TW TW110113488A patent/TW202147129A/zh unknown
- 2021-05-25 CN CN202110570475.4A patent/CN113782071A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20210382654A1 (en) | 2021-12-09 |
TW202147129A (zh) | 2021-12-16 |
US11579801B2 (en) | 2023-02-14 |
KR20210152929A (ko) | 2021-12-16 |
EP3923151A1 (en) | 2021-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9747086B2 (en) | Transmission point pattern extraction from executable code in message passing environments | |
US8881153B2 (en) | Speculative thread execution with hardware transactional memory | |
US8095727B2 (en) | Multi-reader, multi-writer lock-free ring buffer | |
US8689221B2 (en) | Speculative thread execution and asynchronous conflict events | |
EP2972885B1 (en) | Memory object reference count management with improved scalability | |
US20150186068A1 (en) | Command queuing using linked list queues | |
WO2014014532A1 (en) | Pattern matching process scheduler with upstream optimization | |
US10599468B2 (en) | Housekeeping virtual processor overcommit for real time virtualization | |
US10649686B2 (en) | Memory cache pressure reduction for pointer rings | |
US10949341B2 (en) | Implementing snapshot and other functionality in KVSSD through garbage collection and FTL | |
US8930596B2 (en) | Concurrent array-based queue | |
US7793023B2 (en) | Exclusion control | |
CN109213423B (zh) | 基于地址屏障无锁处理并发io命令 | |
CN107924418B (zh) | 在非易失性存储器中使易失性隔离事务具有失败原子性 | |
CN113782071A (zh) | 处理输入/输出请求的***和方法 | |
TWI743400B (zh) | 用以避免負載填充衝突的設備以及系統 | |
CN109213424B (zh) | 并发io命令的无锁处理方法 | |
US20200019405A1 (en) | Multiple Level History Buffer for Transaction Memory Support | |
US20210089409A1 (en) | Rebuild directory/block allocation map from embedded data block information in file system disk | |
CN116974487A (zh) | Linux或RLinux磁盘IO实时化存储方法及*** |
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 |