CN107992266B - 针对启用多流的固态驱动器的合并数据流的方法 - Google Patents
针对启用多流的固态驱动器的合并数据流的方法 Download PDFInfo
- Publication number
- CN107992266B CN107992266B CN201710804058.5A CN201710804058A CN107992266B CN 107992266 B CN107992266 B CN 107992266B CN 201710804058 A CN201710804058 A CN 201710804058A CN 107992266 B CN107992266 B CN 107992266B
- Authority
- CN
- China
- Prior art keywords
- software
- criterion
- streams
- value
- commands
- 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/0635—Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
-
- 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/1668—Details of memory controller
-
- 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
- G06F3/0605—Improving or facilitating administration, e.g. storage management by facilitating the interaction with a user or administrator
-
- 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
-
- 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
- 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
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7207—Details relating to flash memory management management of metadata or control data
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)
- Computer Networks & Wireless Communication (AREA)
- Debugging And Monitoring (AREA)
- Information Transfer Between Computers (AREA)
Abstract
提供了一种针对启用多流的固态驱动器的合并数据流的方法。公开了一种固态驱动器(SSD)。所述SSD可以包括:闪存,用于存储数据并支持多个装置流。所述SSD还可以包括:SSD控制器,用于管理从闪存读取数据并且将数据写入闪存。所述SSD还可以包括主机接口逻辑,其中,主机接口逻辑可以包括:接收器,用于从主机接收与软件流相关的命令,计时器,用于对窗口进行计时,统计数据收集器,用于从所述命令确定对于软件流的针对至少一个标准的值,分级器,用于根据对于软件流的针对所述至少一个标准的值对软件流进行分级;映射器,用于建立软件流和装置流之间的映射。
Description
本申请要求于2017年1月20日提交的序列号为62/448,958的美国临时专利申请和于2016年10月26日提交的序列号为62/413,177的美国临时专利申请的优先权,两个专利申请为了所有目的均通过引用合并于此。
本申请与2016年5月27日提交的序列号为15/167,974的美国专利申请相关,该申请要求于2016年3月16日提交的序列号为62/309,446的美国临时专利申请的权益,两个专利申请为了所有目的均通过引用合并于此。
技术领域
本发明构思总体上涉及固态驱动器(SSD),更具体地,涉及在多流SSD中管理流。
背景技术
多流固态驱动器(SSD)允许输入数据的智能配置以最小化内部垃圾回收(GC)的影响并减小写入放大。可以通过向从主机发送到SSD的写入请求中的每一个添加简单标签(流ID)来实现多流。基于该标签,SSD可以将数据分组成公共块。
在大型计算机系统中,应用可以同时打开许多文件。在理想情况下,每个文件类型应该具有在执行流写入时分配的自己拥有的流ID。然而,SSD仅支持有限数量的可一次使用的有效的写入流,这通常不足以覆盖被系统打开的全部文件。
仍然需要一种管理从主机到SSD的映射流的方法。
发明内容
本公开至少解决了上述问题和/或缺点,并提供了至少下面所描述的优点。
相应地,本公开的一方面提供了一种固态驱动器(SSD),所述SSD包括闪存,用于存储数据并支持SSD中的多个装置流;SSD控制器,用于响应于多个命令来管理从闪存读取数据和向闪存写入数据;主机接口逻辑,包括:接收器,用于从主机接收所述多个命令,所述多个命令与多个软件流相关;计时器,用于对窗口进行计时;统计数据收集器,用于响应于所述多个命令,在所述窗口期间确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值;分级器,用于根据对于所述多个软件流中的每一个软件流的针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级;映射器,用于建立映射,所述映射用于将所述多个软件流中的第一子集中的每一个软件流映射到SSD中的所述多个装置流中的唯一装置流,并且将所述多个软件流中的第二子集中的全部软件流映射到SSD中的所述多个装置流中的合并装置流。
SSD可以用于从所述多个软件流接收另外的多个命令,并且根据所述映射将所述另外的多个命令分配到所述多个装置流。
所述窗口可以是滑动窗口;并且统计数据收集器可以用于当所述多个命令中的每一个命令进入和退出所述窗口时,调整所述窗口内的针对所述至少一个标准的所述至少一个值。
所述窗口可以是离散窗口。
所述多个软件流中的第一子集可以包括具有最高等级的多个软件流,其中,具有最高等级的软件流的数量比所述多个装置流的数量少一;所述多个软件流中的第二子集可以包括未被包括在所述多个软件流中的第一子集中的全部软件流。
统计数据收集器可以用于确定对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值。
分级器可以包括针对第一标准的第一权重和针对第二标准的第二权重;并且分级器可以用于根据对使用第一权重的针对第一值的第一等级和使用第二权重的针对第二值的第二等级的加权和来对所述多个软件流进行分级。
分级器可以包括针对第一标准的阈值;并且分级器可以用于根据对于第一值大于针对第一标准的阈值的软件流的第一标准并且根据对于第一值小于针对第一标准的阈值的软件流的第二标准,对所述多个软件流进行分级。
相应地,本公开的另一方面提供了一种在计算机系统中使用的驱动器,包括:接收器,用于从主机接收多个命令,所述多个命令与多个软件流相关;计时器,用于对窗口进行计时;统计数据收集器,用于响应于所述多个命令,在所述窗口期间确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值;分级器,用于根据对于所述多个软件流中的每一个软件流的针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级;映射器,用于建立映射,所述映射用于将所述多个软件流中的第一子集中的每一个软件流映射到固态驱动器(SSD)中的多个装置流中的唯一装置流,并且所述映射用于将所述多个软件流中的第二子集中的全部软件流映射到SSD中的所述多个装置流中的合并装置流;装置流标识符(ID)添加器,用于向另外的多个命令中的每一个命令添加针对与和所述多个命令中的每一个命令相关的软件流相应的装置流的装置流标识符;发送器,用于将所述另外的多个命令中的每一个命令发送到SSD。
所述窗口可以是滑动窗口;并且统计数据收集器可以用于当所述多个命令中的每一个命令进入和退出所述窗口时,调整所述窗口内的针对所述至少一个标准的所述至少一个值。
所述窗口可以是离散窗口。
所述多个软件流中的第一子集可以包括具有最高等级的多个软件流,其中,具有最高等级的软件流的数量比所述多个装置流的数量少一;并且所述多个软件流中的第二子集包括未被包括在所述多个软件流中的第一子集中的全部软件流。
统计数据收集器可以用于确定对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值。
分级器可以包括针对第一标准的第一权重和针对第二标准的第二权重;并且分级器可以用于根据对使用第一权重的针对第一值的第一等级和使用第二权重的针对第二值的第二等级的加权和来对所述多个软件流进行分级。
分级器可以包括针对第一标准的阈值;并且分级器可以用于根据对于第一值大于针对第一标准的阈值的软件流的第一标准并且根据对于第一值小于针对第一标准的阈值的软件流的第二标准,对所述多个软件流进行分级。
相应地,本公开的另一方面提供了一种方法,所述方法包括:接收与多个软件流相关的多个命令,所述多个命令将使用包括多个装置流的固态驱动器(SSD)来处理;响应于所述多个命令,确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值;响应于针对所述至少一个标准的所述至少一个值,识别所述多个软件流中的第一子集和第二子集;产生映射,所述映射用于将所述多个软件流中的第一子集中的每一个软件流映射到SSD中的所述多个装置流中的唯一装置流,并用于将所述多个软件流中的第二子集中的全部软件流映射到所述SSD中的所述多个装置流中的合并装置流;在产生所述映射之后,接收与所述多个软件流相关的第二多个命令;响应于所述映射,将第二多个命令中的每一个分配到所述多个装置流中的一个;使用分配的装置流来处理SSD上的第二多个命令中的每一个。
响应于针对所述至少一个标准的所述至少一个值识别所述多个软件流中的第一子集和第二子集的步骤可以包括:根据针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级;选择所述多个软件流中的第一子集以包含具有最高等级的多个软件流,其中,具有最高等级的软件流的数量比所述多个装置流的数量少一;选择所述多个软件流中的第二子集以包含所述多个软件流中的未被包括在所述多个软件流中的第一子集中的全部软件流。
响应于所述多个命令确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值的步骤可以包括:确定对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值;根据针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级的步骤可以包括:根据对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值,对所述多个软件流进行分级。
根据针对第一标准的第一值和针对第二标准的第二值对所述多个软件流进行分级的步骤可以包括:确定针对第一标准的第一权重和针对第二标准的第二权重;根据对使用第一权重的针对第一值的第一等级和使用第二权重的针对第二值的第二等级的加权和来对所述多个软件流进行分级。
根据针对第一标准的第一值和针对第二标准的第二值对所述多个软件流进行分级的步骤可以包括:确定针对第一标准的阈值;根据对于第一值大于针对第一标准的阈值的软件流的第一标准并且根据对于第一值小于针对第一标准的阈值的软件流的第二标准,对所述多个软件流进行分级。
附图说明
图1示出了根据本发明构思的实施例的具有固态驱动器(SSD)的机器;
图2示出了图1的机器的另外的细节;
图3示出了图1的SSD的细节;
图4示出了与被映射到图1的SSD中的装置流的各种软件流相关的各种命令;
图5示出了图3的主机接口逻辑的细节;
图6示出了用于支持将图4的软件流映射到图1的SSD中的图4的装置流的被用于计算针对图4的多个命令的统计数据的窗口;
图7示出了在产生图3的映射的过程中使用的各种标准;
图8示出了图5的分级器(ranker)的细节;
图9A-图9B示出了根据本发明构思的实施例的用于图5的分级器对软件流进行分级的不同的方法;
图10A-图10B示出了根据本发明构思的实施例的用于产生图4的映射的示例过程的流程图;
图11示出了根据本发明构思的实施例的图5的统计数据收集器确定针对标准的值的示例过程的流程图;
图12示出了根据本发明构思的实施例的图5的分级器确定哪个软件流映射到哪个装置流的示例过程的流程图;
图13示出了根据本发明构思的实施例的图5的映射器将软件流映射到装置流的示例过程的流程图。
具体实施方式
现在将详细参照本发明构思的实施例,在附图中示出了本发明构思的示例。在下面的详细描述中,阐述了许多具体细节以使得能够透彻地理解本发明构思。然而,应当理解,本领域普通技术人员可以在没有这些具体细节的情况下实践本发明构思。在其他情况下,公知的方法、程序、组件、电路和网络没有进行详细地描述,以免不必要地模糊实施例的方面。
应当理解,尽管第一、第二等术语可以在本文中用于描述各种元件,但是这些元件不应受这些术语的限制。这些术语仅用于将一个元件与另一个元件区分开。例如,在不脱离本发明构思的范围的情况下,第一模块可以被称为第二模块,并且类似地,第二模块可以被称为第一模块。
在本发明构思的描述中使用的术语仅以描述特定实施例为目的,而不旨在限制本发明构思。如在本发明构思和附属权利要求的描述中使用的,单数形式“一”、“一个”和“此”也旨在包括复数形式,除非上下文另有明确指示。还将理解,本文使用的术语“和/或”指示并包含一个或更多个相关列出的项目的任意和全部可能的组合。将进一步理解,当在本说明书中使用时,术语“包括”和/或“包括有”指定所述特征、整数、步骤、操作、元件和/或组件的存在,但不排除一个或更多个其它特征、整数、步骤、操作、元件、组件和/或它们的组合的存在或添加。附图的组件和特征不一定按比例绘制。
关于多流技术,来自应用的写入流ID的数量通常超过由固态驱动器(SSD)支持的流的最多数量。为了解决这个问题,SSD可以评估每个文件类型/流ID的写入模式,并且基于主机流特性(诸如写入频率、累积的数据大小、写入顺序、服务质量(QoS)要求、空闲时间等)之间的相似性和差异性将实际(装置)流分配到文件/主机流。
与传统数据集不同,流数据连续地并且以变化的更新速率流入和流出计算机系统。由于数据流巨大的数据量,无法存储整个数据流或对数据流进行多次扫描。另一方面,保存用于处理的数据流会在系统中产生巨大的瓶颈。本发明构思的实施例可以支持使用流的单次扫描和在线的流管理。
传统上,在主机计算机系统中或者在SSD的固件内部,输入/输出(I/O)请求在一个或更多个队列中被管理。本发明构思的实施例可以在任一位置实现。在启用多流的系统中,队列中的每个请求可以包括应用分配的流ID。为了将应用分配的流ID转换为SSD支持的流ID,模块可以被实现为监视队列中的请求的窗口。可以选择窗口大小使得窗口中的数据集表示由主机机器上的工作负载产生的数据的分布,或者窗口大小可以被设置为任意期望的大小。例如,如果SSD处理来自任意数量的机器的命令,如在分布式数据库中发生的那样,则被设计用于捕获包括SSD的主机机器上的工作负载的窗口大小可以不表示其他机器(其中,命令来自于所述其他机器)上的工作负载。在这种情况下,可以使用不同的窗口大小(希望)来更好地表示向SSD发送请求的全部机器上的工作负载。当命令进入窗口时,可以基于所述命令来计算统计数据,例如,针对每个应用分配的流ID的计数器或累积的数据大小。一旦窗口被填满,应用分配的流ID可以基于计数器值被映射到SSD支持的流ID。
例如,假设SSD可以支持n个流。具有n-1个最大计数器值的应用分配的流ID可以分别映射到SSD支持的流ID 1至SS支持的ID n-1。不管应用分配的流ID如何,窗口中的剩余请求可以使用最后一个SSD支持的流ID(SSD支持的流ID n)。
为了处理数据请求的动态特性,队列窗口可以作为先入先出(FIFO或滑动)窗口进行管理。当每个请求退出窗口时,诸如与相关的应用分配的流ID相应的计数器或累积数据大小的统计数据会基于退出请求而减少。以这种方式,可以仅针对窗口内的请求来保持统计数据。映射到SSD支持的流ID的应用分配的流ID可以周期性地被更新以适应数据加载的改变。
图1示出了根据本发明构思的实施例的具有固态驱动器(SSD)的机器。在图1中,示出了机器105。机器105可以是任意期望的机器,包括但不限于桌上型或膝上型计算机、服务器(独立服务器或机架式服务器)或可受益于本发明构思的实施例的任意其它装置。机器105还可以包括专用便携式计算装置、平板计算机、智能电话和其他计算装置。机器105可以运行任意期望的应用:数据库应用是一个很好的示例,但本发明构思的实施例可以扩展到任意期望的应用。
不管机器105的特定形式如何,机器105可以包括处理器110、存储器115和固态驱动器(SSD)120。处理器110可以是任意种类的处理器:例如,Intel Xeon、Celeron、Itanium或Atom处理器、AMD Opteron处理器、ARM处理器等。虽然图1示出了单个处理器,但是机器105可以包括任意数量的处理器。存储器115可以是任意种类的存储器,诸如闪存、静态随机存取存储器(SRAM)、持久性随机存取存储器、铁电随机存取存储器(FRAM)或非易失性随机存取存储器(NVRAM)(诸如磁阻随机存取存储器(MRAM))等,但通常是DRAM。存储器115也可以是不同存储器类型的任意期望的组合。存储器115可以由存储器控制器125(也是机器105的一部分)来控制。
SSD 120可以是任意种类的SSD,并且甚至可以扩展到包括执行垃圾收集的其他类型的存储器(即使在不使用闪存时)。存储控制器130可以控制SSD 120,其中,存储控制器130可以被集成到处理器110或机器105的一部分中。
图2示出了图1的机器的另外的细节。参照图2,通常,机器105包括一个或更多个处理器110,其中,所述一个或更多个处理器110可以包括存储器控制器125和时钟205,其中,存储器控制器125和时钟205可以被用于协调机器105的组件的操作。处理器110还可以被耦接到存储器115,作为示例,存储器115可以包括随机存取存储器(RAM)、只读存储器(ROM)或其他状态保存介质。处理器110还可以被耦接到固态驱动器120和网络连接器210,其中,网络连接器210可以是例如以太网连接器或无线连接器。处理器110还可以被连接到总线215,其中,总线215可以被附接到其它组件中的用户接口220和输入/输出接口端口,其中,可使用输入/输出引擎225来管理输入/输出接口端口。
图3示出了图1的SSD 120的细节。在图3中,SSD 120可以包括主机接口逻辑305、SSD控制器310以及各种闪存芯片315-1至315-8,其中,所述各种闪存芯片315-1至315-8可以被组织成各种通道320-1至320-4。主机接口逻辑305可以管理图1的SSD 120和机器105之间的通信。SSD控制器310可以对闪存芯片315-1至315-8上的读取和写入操作连同垃圾回收操作一起进行管理。SSD控制器310可以包括用于以执行该管理中的一些管理的闪存转换层325。
尽管图3示出了SSD 120包括被组织成四个通道320-1至320-4的八个闪存芯片315-1至315-8,但是本发明构思的实施例可以支持被组织成任意数量通道的任意数量的闪存芯片。
图4示出了与被映射到图1的SSD 120中的装置流的各种软件流相关的各种命令。在图4中,示出了各种命令405-1至405-k。命令405-1至405-k可以源自图1的机器105上的任意软件源:典型的示例源包括在图1的机器105上运行的应用和在图1的机器105上运行的操作系统,但是命令405-1至405-k的其他源也是可以的。
命令405-1至405-k可以被组织成软件流410-1至410-n。术语“软件流”被用于将这些流与被称为“装置流”的SSD 120内部的流区分开;“软件流”旨在涵盖任意可能的流源(包括应用和操作系统)。通常,软件流410-1至410-n由命令405-1至405-k的源来限定。特定源可以打开的流的数量没有限制。例如,应用可以针对从图1的SSD 120读取或写入到图1的SSD 120的每个文件打开单个流。因此,流的数量n可以超过向图1的SSD 120发出命令的应用和操作系统的数量。同样,由于应用可以对每个软件流发出多个命令,所以命令数k可以超过软件流n的数量。
每个命令可以包括标签415。标签415可以指定命令与哪些软件流410-1至405-n相关联。以这种方式,每个命令源(无论是应用、操作系统线程还是其他源)可以以似乎最适合该源的方式来管理自己的命令。
但是,尽管软件流的数量n可能仅由可用存储器限制,但是装置流420-1至420-m的数量通常是被限制的:也就是说,图1的SSD 120可以支持多达固定数量的装置流,并且不超过该预定数量。如果软件流的数量n不大于装置流的数量m,则可以以与装置流一一对应的关系来分配软件流。但是如果有比装置流更多的软件流(在数学上,如果n>m),则会出现下面的困难:至少一个装置流需要处理与多个软件流相关的命令。映射425可以存储软件流410-1至410-n如何映射到装置流420-1至420-m。图5-图9B示出了如何产生映射425。
图5示出了图3的主机接口逻辑305的细节。在图5中,图3的主机接口逻辑305被示出为负责产生图4的映射425。但是在本发明构思的其它实施例中,图5中示出的组件可以以软件实现并且作为例如图1的存储器控制器125、图1的存储控制器130的一部分被包括,或者被实现为库程序,或者被实现为在图1的SSD 120内或在机器105内的其他地方的单独的专用硬件,其中,所述库程序可以拦截写入请求并在发出写入命令之前组合流。针对本讨论的目的,尽管附图5-附图9B的描述着重于在图3的主机接口逻辑305内的实现,但是对图4的映射425的产生的任意引用旨在涵盖在任意特定位置处的实现。
在图5中,主机接口逻辑305可以包括接收器505、计时器510、统计数据收集器515、分级器520和映射器525。这些组件可以以适用于实现的软件或硬件来实现。例如,针对在图3的主机接口逻辑305内实现的本发明构思的实施例,该实现可以包括电路,而针对在图1的存储器控制器125或图1的存储控制器130内实现的本发明构思的实施例,该实现可以包括软件。
接收器505可以从各种软件源接收图4的命令405-1至405-k。在此提醒,图4的命令405-1至405-k中的每一个可以包括图4的标签415,其中,标签415可以标识命令与图4的哪些软件流410-1至410-n相关联。
计时器510可以被用于测量窗口何时打开和关闭。通过在一段时间内使用窗口,统计数据收集器515可以计算关于图4的流410-1至410-n的统计数据,所述统计数据表示在图1的机器105上的可以支持从图4的软件流410-1至410-n到图4的装置流420-1至420-m的映射的工作负载。
图6给出了这样的窗口的示例。在图6中,示出了窗口605横跨命令405-1至405-k中的一些:具体地,命令405-1至405-3。基于在窗口605期间发出的命令的统计分析,可以(希望)确定对图1的机器105上的工作负载的代表性分析。如图6所示,三个命令不可能提供图1的机器105上的工作负载的代表性样本,但是本发明构思的实施例可以支持特定窗口内的任意数量的命令:如果窗口605被显示为覆盖更合理数量的命令,则图6会混乱到不可读的程度。
窗口605的大小(如由图5的计时器510测量的)可以根据被输入到图1的机器105的使用而变化。例如,考虑两台机器,两台机器具有相同的每单位时间发出的命令的平均数,但是标准偏差的差异很大。在命令数量上标准偏差小的机器将使其命令在时间上相当均匀地分布,这意味着更小的窗口605可能会捕获代表性的命令样本。另一方面,在命令数量上标准偏差大的机器可以具有相对低活动性(activity)和高活动性的混合间隔。如果窗口605是窄的窗口并且用于捕获相对低活动性的时段,则这些命令的统计分析可能不代表机器上的整体的工作负载。因此,窗口605将需要成为比在命令数量上标准偏差小的机器上使用的窗口相对更大的窗口。
窗口605可以是滑动窗口或离散窗口。顾名思义,滑动窗口是四处滑动的窗口。通常,滑动窗口覆盖固定的时间间隔,并且随着时间的推移在时间上向前移动。例如,滑动窗口可以在时间T0开始。滑动窗口可以保持打开直到时间T1。从时间T1开始,窗口可以向前移动,使得窗口总是在当前时间结束。当滑动窗口向前移动时,新的信息可以进入窗口,并且在滑动窗口开始处的信息(即距离时间T0最近的信息)可以退出窗口。
另一方面,离散窗口覆盖固定的时间间隔,并且不移动。例如,离散窗口可以从时间T0到时间T1的间隔期间收集统计数据;一旦到达时间T1,则针对该窗口的统计数据的收集结束(尽管可以在任意时间(诸如时间T1)开始新的窗口)。
统计数据收集器515可以收集关于任意期望的准则或标准的统计数据。在图7中示出了示例标准。标准705的示例可以包括:
·频率710:在图6的窗口605期间发出多少与特定软件流相关的命令(读取、写入或两者)。具有较高数量的命令的软件流比具有较低数量的命令的软件流将具有更高的等级。
·累积的数据大小715:在图6的窗口605期间针对特定软件流写入了多少数据。具有较大的累积的数据大小的软件流比具有较小的累积的数据大小的软件流将具有更高的等级。
·顺序写入数720:在图6的窗口605期间在特定软件流内发生了多少次到顺序(或顺序图案化的)逻辑块地址(LBA)的写入。具有较高数量的顺序写入的软件流比具有较低数量的顺序写入的软件流将具有更高的等级。
·服务质量725:特定软件流是否已经请求了特定的服务质量(这可能会使该软件流优先于其他软件流)。不同的服务质量特性的示例可以在于2016年5月27日提交的序列号为15/167,974的美国专利申请中找到,该申请要求于2016年3月16日提交的序列号为62/309,446的美国临时专利申请的权益,为了全部目的,两个申请均通过引用合并于此。具有较高服务质量要求的软件流比具有较低服务质量要求的软件流将具有更高的等级。
·空闲时间730:针对特定软件流的命令之间需要多长时间。具有较短空闲时间的软件流比具有较长空闲时间的软件流将具有更高的等级。
图5的统计数据收集器515可以以任意期望的方式收集统计数据。例如,当图6的窗口605是离散窗口时,图5的统计数据收集器515可以在图6的窗口605的开始处将全部统计数据重置为零。然后,当遇到触发针对流的统计数据改变的命令时,图5的统计数据收集器515可以适当地调整统计数据。
例如,考虑使用频率710作为标准。每当接收到命令时,图5的统计数据收集器515可以确定该命令与什么软件流相关联。然后,图5的统计数据收集器515可以增加针对该软件流的频率计数器(值)。图5的统计数据收集器515可针对其他标准收集相似的值:针对累积的数据大小715对写入的数据量进行求和、针对顺序写入720的数量对顺序写入数量进行计数、针对服务质量725对代表特定服务质量的值进行分配、或者针对空闲时间730对特定软件流没有待定命令的时间量进行求和。
另一方面,如果图6的窗口605是滑动窗口,则图5的统计数据收集器515可以在命令进入和退出图6的窗口605时调整统计数据。再次使用频率710作为示例,当与特定软件流相关的命令进入图6的窗口605时,图5的统计数据收集器515可以增加与该软件流相关的计数器,并且当与特定软件流相关的命令退出图6的窗口605时,图5的统计数据收集器515可以减小与该软件流相关的计数器。以这种方式,由图5的统计数据收集器515收集的统计数据可以总是代表图6的窗口605中的命令。针对其他标准,图5的统计数据收集器515可以类似地进行操作。
在本发明构思的一些实施例中,当窗口605是离散窗口时,即使窗口605依然打开(并且因此并非全部命令405-1至405-k已被处理以用于统计目的),可以使用迄今为止可用于窗口605的统计数据来建立映射425。但是在本发明构思的其他实施例中,在一个窗口期间产生的统计数据实际上被用于在窗口605关闭之后的一段时间内建立映射425。因此,如果窗口605被用于在从时间T0到时间T1的一段时间期间收集统计数据,则这些统计数据可以被用于建立用于在时间T1之后接收到的命令405-1至405-k的映射425。如果离散窗口605是重复的离散窗口(也就是说,窗口605具有固定的大小并且当一个窗口被关闭时另一个窗口被自动打开),则在每个窗口中收集的统计数据被用于建立用于下一个窗口的映射425。因此,例如,在时间T0与时间T1之间收集的统计数据可以被用于产生在时间T1和时间T2之间的映射425,在时间T1和时间T2之间收集的统计数据可被用于产生在时间T2和时间T3之间的映射425,等等。
在本发明构思的其他实施例中,当窗口605是离散窗口时,图5的统计数据收集器515仅在由机器105的用户指示时才进行收集统计数据。也就是说,可以手动打开窗口605以进行新的统计数据的收集。一旦收集到新的统计数据,就可以产生映射425,此后无限期地保留映射425,直到图3的主机接口逻辑305接收到用于产生新的映射425的指令为止,此后打开新的窗口605并且图5的统计数据收集器515基于在新的窗口605期间接收到的命令来收集新的统计数据。
当窗口605是滑动窗口时,可以以任意期望的方案来调整映射425。例如,每次由图5的统计数据收集器515收集的统计数据改变时,可以改变映射425。例如,每次命令进入窗口605时,可以增加针对相应的应用分配的流ID的图7的频率710,并且每次命令退出窗口605时,可以减少针对相应的应用分配的流ID的图7的频率710。或者,可以在特定间隔(例如,在时间T1或其倍数)处调整映射425。本发明构思的实施例可以根据任意其它期望的方案来支持更新映射425。
不管窗口605是滑动窗口还是离散窗口,可能会出现关于如何在初始窗口605期间处理将软件流410-1至410-n映射到装置流420-1至420-m的问题。在初始窗口605期间,当以前没有收集到统计数据时,可以使用任意映射(由于在所有情况下,任意预定映射都不太可能是最佳的)。但是,一旦图5的统计数据收集器515收集了一些统计数据,则可以针对以后的命令产生映射425。
返回到图5,一旦针对窗口期间605收集到统计数据,则分级器520可以使用这些统计数据对图4的软件流410-1至410-n进行分级。通常,较低的值将导致较高的等级,但是本发明构思的实施例可以支持指示较高等级的较高值。针对给定的标准,应用分配的流ID可以根据它们的值针对该标准的排序位置来分配等级。例如,如果使用频率705作为标准,则具有最高频率的应用分配的流ID可以被分配为等级1,具有第二高频率的应用分配的流ID可以被分配为等级2,等等直到下降到具有最低频率的应用程序分配的流ID。参照下面的表1-2进一步讨论分级。一旦图4的软件流410-1至410-n被分级,则映射器525可以将图4的软件流410-1至410-n映射到装置流420-1至420-m。
映射器525可以通过将图4的软件流410-1至410-n分成两个子集来创建图4的映射425。第一子集中的软件流可以以一对一映射被分配到装置流;第二子集中的软件流可以全部被分配到单个的合并装置流。换言之,第一子集中的软件流得到分配的唯一的装置流,而第二子集中的软件流全部共享单个装置流。由于第二子集中的全部软件流共享单个装置流,这意味着第一子集可以包括多达m-1个软件流,其中m是由图1的SSD 120支持的图4的装置流420-1至420-m的数量。
图4的软件流410-1至410-n的子集可以基于如由分级器520确定的针对图4的软件流410-1至410-n的等级来确定。例如,假设存在由图1的SSD 120支持的m个图4的装置流420-1至420-m,m-1个最高等级的软件流(如根据选择的准则/标准进行分级)可以被包括在第一子集中,并且全部较低等级的软件流可以被包括在第二子集中。该分配导致具有最高级别的软件流分别被分配唯一的装置流,并且全部最低等级的软件流共享合并装置流。
其中m-1个特定软件流可以不被识别为被包括在第一子集中(例如,如果针对等级m-1存在约束),可以使用任意期望的决断(resolution)来选择用于第一子集的最终软件流(由于选择全部具有相等的等级)。例如,假设有m个软件流全部被约束在最高级别(如果不太可能,则存在一个可能的场景)。由于m个软件流都具有相同的等级,因此可以针对第一子集选择m个软件流中的任意m-1个软件流,其中未被选择的一个流成为第二子集的一部分(并且因此被归类为共享合并装置流)。
如果全部装置流都是等效的,则使用哪个装置流作为用于第二子集中的软件流的合并流,或者如何将第一子集中的m-1个软件流映射到m-1个装置流都没有差别。但是如果装置流是可区别的,则映射会很关键。例如,最高优先级的装置流可以被用作合并装置流(由于该装置流在任意数量的软件流中共享),并且剩余的装置流可以基于使用的标准(最高等级的软件流接收可用的最高等级的装置流,第二高等级的软件流接收可用的第二高等级的装置流,等)根据剩余的装置流的等级被分配给第一子集中的软件流。或者,由于合并装置流根据该标准在具有低等级的任意数量的软件流之间共享,所以合并装置流可被选为可用的最低优先级的装置流,其中,第一子集中的软件流基于该标准根据软件流的等级被映射到最高优先级的装置流。本发明构思的实施例能够支持从软件流到装置流的任意期望的映射技术。
虽然上面的描述表明只有一个装置流作为合并装置流进行操作,但本发明构思的其它实施例也是可能的。例如,可以有多个装置流用作多个合并装置流。本发明构思的这种实施例在以下情况下是有用的:即,图4的软件流410-1至410-n的数量大大超过图4的装置流420-1至420-m的数量,将图4的软件流410-1至410-n中的大部分整合到单个的合并装置流可能导致全部这些软件流的性能变差。通过使用多个合并装置流,可以提高被合并的软件流的性能(但是以减少被分配唯一的装置流的软件流的数量为代价)。
可以使用任意期望的机制确定多少个装置流被用作为合并装置流。例如,当使用图7的频率710作为标准时,可以对将被分配到单个合并装置流的软件流的数量设置上限。如果第二子集中的软件流的数量大于该上限,则可以将另外的装置流用作合并装置流:即,将被分配到任意合并装置流的软件流的数量保持在该上限以下所需的数量。可以使用图7的其他标准705来应用相同的构思。例如,当使用图7的累积的数据大小715作为标准时,可以分配与使用单个合并装置流将被写入的累积的数据量有关的上限。或者,当使用图7的服务质量725作为标准时,可以针对任意合并装置流(例如,基于图6的窗口605的持续时间)设置最大总延迟。如果分配到合并装置流的命令的总数意味着针对合并装置流的总延迟大于该最大总延迟,则可以使用另外的合并装置流。
此外,可以选择任意期望的装置流用作合并装置流。例如,由于合并装置流可以处理与任意数量的软件源相关的命令,所以期望合并装置流比对与单个软件流相关的命令进行处理的其他装置流将具有更多的命令是合理的。因此,选择具有较高优先级的装置流作为合并装置流(以补偿合并装置流在处理命令时比用于对仅与一个软件流相关的命令进行处理的装置流更慢的事实)是有利的。当流提供QoS保证(尽管QoS可能不是选择较高优先级的装置流作为合并装置流的唯一原因)时,该选择可能是特别有利的。
也可以对标准进行混合。例如,尽管被用于针对图4的映射425对流进行分级的标准可以使用空闲时间730,但是被用于确定使用多少个合并装置流的标准可以是在窗口605期间被分配到合并装置流的命令的最大数目。本发明构思的实施例可以支持使用用于确定将使用多少个合并装置流的任意标准。(如下面参照下面的图8-图9B所述,也可以在对软件流410-1至410-n进行分级中使用多个标准)。
如上所述,本发明构思的实施例可以在图3的主机接口逻辑305内实现。在本发明构思的这样的实施例中,是在图1的SSD 120中实现的。由于SSD 120可以直接管理图4的映射425,所以知道特定软件流应该被分配到哪个装置流是没有困难的。在本发明构思的这样的实施例中,不需要发送器530和装置流标识符(ID)添加器535。(从技术上讲,主机接口逻辑305可以包括用于将信息发送回请求数据的应用或操作系统线程的发送器530,但是发送器530将作为图1的SSD 120内的常规发送器进行操作)。
但是当本发明构思的实施例在图1的存储器控制器125、图1的存储控制器130中被实现,或被实现为库程序时,图1的SSD 120不一定访问图4的映射425。在本发明构思的一些实施例中,发送器530可以发送图4的映射425,使得图1的SSD 120可以执行由映射器525确定的映射。但本发明构思的其他实施例可以向图1的SSD 120通知通过使用装置流ID添加器535应该将特定命令分配到哪个装置流,而不是将图4的映射425发送到图1的SSD 120。装置流ID添加器535可以包括类似于图4的标签415的另外的标签,所述另外的标签指定相关的图4的装置流420-1至420-m。以这种方式,图1的SSD 120可以知道图4的装置流420-1至420-m中的哪个装置流用于处理特定命令。
不管在何处实现本发明的实施例,图4的映射425可以自动地或手动地被重新产生。例如,当命令进入和退出图6的窗口605时,图4的映射425可以被更新,这影响了关于软件流410-1至410-n的统计数据,这又可能触发图4的映射425的自动再生。或者,如果图6的窗口605是以规则的间隔使用的离散窗口,则每当图6的离散窗口605关闭时,图4的映射425可以被自动地重新产生以反映由统计数据收集器515收集的新的统计数据。
另一方面,图4的映射425可以被保留,直到手动再生被触发。为了实现手动再生,图3的主机接口逻辑305、图1的存储器控制器125、图1的存储控制器130、或库例程可以包括用于接收触发手动再生、清除统计数据、以及收集新的统计数据的命令的支持。可以在固件(未在图3的主机接口逻辑305中示出)中或在软件(在图1的存储器控制器125、图1的存储控制器130或库例程)中实现对处理这些命令的支持。
图8示出了图5的分级器520的细节。如上所述,分级器520可以基于选择的准则或标准对软件流410-1至410-n进行分级。在图8中,分级器520被示为包括标准805、阈值810和比较器815。标准805可以识别将被用于对软件流进行分级的标准。如果图5的统计数据收集器515仅收集针对单个标准的统计数据,则分级器520可以不需要知道使用了哪个标准,在这种情况下可以省略标准805,这就是以虚线示出标准805的原因。但是即使图5的统计数据收集器515仅收集针对单个标准的统计数据,分级器520可能也需要知道使用了哪个标准,因为该信息可能影响等级顺序。例如,图7的频率710可以针对具有相应的较高频率的软件流建议较高等级;但是图7的空闲时间730可以针对具有相应的较少空闲时间的软件流建议较高等级。
如果分级器520仅使用单个标准进行操作,则分级器520需要做的所有操作是根据与每个软件流相应的针对标准的值来顺序放置图4的软件流410-1至软件流410-n。但是分级器520可以在对图4的软件流410-1至410-n进行分级时使用不只一个标准。
在本发明构思的一个实施例中,分级器520可以使用两个(或更多个)标准对图4的软件流410-1至410-n进行分级。在本发明构思的该实施例中,分级器520可以包括阈值810和比较器815。当值超过阈值810时,可以使用一个标准;当针对第一标准的值不超过阈值810时,可以使用另一标准。比较器815可以被用于确定在对软件流进行分级时使用哪个标准。
图9A示出了这个过程。在图9A中,比较器815可以接收阈值810和针对被用于对图4的软件流410-1至410-n进行分级的两个标准的值905-1和905-2。然后,比较器815可以将阈值810与值905-1(在此被任意选择为针对与阈值810相关的标准的值)进行比较。如果值905-1大于阈值810,则比较器815可以选择值905-1(作为选定值910)以在对图4的软件流410-1至410-n进行分级时使用。
一个示例可以有助于说明在这种情况下图5的分级器520的操作。假设选择的第一标准是图7的累积的数据大小715,并且第二标准是图7的频率710。此外,假设图4的软件流410-1至410-n导致了如下表1所示的针对这些标准的统计数据。
表1
软件流 | 累积的数据大小 | 频率 |
1 | 1.0GB | 30 |
2 | 0.75MB | 5 |
3 | 0.65MB | 6 |
4 | 1.2GB | 4 |
如果阈值810被设置为1MB,则四个软件流可以以下面的顺序被分级:4、1、3、2。软件流1和4均具有超过1MB的累积的数据大小,并且软件流4具有更大的累积的数据大小(与软件流1具有比软件流4更多的相关命令的事实不相关)。另一方面,软件流2和软件流3具有小于1MB的累积的数据大小,因此,这些流基于它们的频率被分级:尽管写入最少的累积的数据,但是软件流3具有更多相关的命令,因此比软件流2等级更高。
虽然上述讨论集中在使用两个标准,但是本发明构思的实施例可以支持在确定软件流的最终等级时使用任意数量的标准。也就是说,如果针对第二标准的软件流的值大于第二阈值,则可以使用第一标准对针对该标准的值超过第一阈值的软件流进行分级,然后可以使用第二标准对剩余的软件流进行分级(即,针对第一标准的值未超过第一阈值的这些软件流)。此外,尽管本描述集中在具有超过特定阈值的值的软件流,但为了分级的目的,本发明构思的实施例可以支持使用一个或更多个阈值作为上限(而不是下限)。例如,如果空闲时间例如小于100ms,图7的频率710被用作针对空闲时间至少为100ms的软件流的分级标准,则图7的空闲时间730可以被用作分级标准。
返回到图8,在本发明构思的另一个实施例中,分级器520可以通过执行加权和来使用多个标准。在本发明构思的该实施例中,分级器520可以包括算术逻辑单元(ALU)820和权重825-1至825-l。权重825-1至825-l可以表示将被应用于包括在加权和中的每一个单独标准的权重,并且ALU 820可以执行计算加权和所需的运算。换言之,权重825-1至825-l可以指示在计算加权和时所使用的标准的相对重要性。当较低等级表示较高的重要性时,权重825-1至825-l可以类似地使用较小的值来指示加权和中的针对该标准的较高重要性。
为了计算加权和,分级器520可以首先分别根据每一个标准对图4的软件流410-1至410-n进行分级。然后可以将权重乘以每个软件流的等级以产生最终的加权和。注意,由于较低的数字指示较高的等级(等级1为最高等级),因此应使用更小的权重来指示更重要的标准。这有助于(但不是必需的)使权重825-1到825-l的总和为1。注意,根据单个标准对图4的软件流410-1至410-n进行分级等同于根据多个标准对图4的软件流410-1至410-n进行分级,但是其中权重825-1至825-l中只有一个具有正的非零值,并且权重825-1至825-l中的所有的其他权重全部具有零值。注意,加权和可能不会产生整数结果:该结果是可接受的,因为随后加权和的结果被再次分级以针对图4的软件流410-1至410-n产生最终等级。
图9B示出了这个过程。在图9B中,图8的ALU 820可以接收针对被用于对图4的软件流410-1至410-n进行分级的两个标准的值905-1和905-2以及权重825-1和825-2。然后,图8的ALU 820可以将值905-1和权重825-1的乘积加上值905-2和权重910-2的乘积计算为选择的值910。然后,选择的值910成为在对图4的软件流410-1至410-n进行分级时所使用的值。
再次,一个示例可以有助于说明在这种情况下图5的分级器520的操作。假设选择的第一标准是图7的累积的数据大小715,并且第二标准是图7的频率710。此外,假设图4的软件流410-1至410-n导致了如下表2所示的针对这些标准的统计数据。
表2
软件流 | 累积的数据大小 | 频率 | 等级1 | 等级2 |
1 | 1.0GB | 30 | 2 | 1 |
2 | 0.75MB | 5 | 3 | 3 |
3 | 0.65MB | 6 | 4 | 2 |
4 | 1.2GB | 4 | 1 | 4 |
为了简化事项,在表2中示出了针对四个软件流分别相对于它们的累积的数据大小和频率的等级。
注意,如果与图7的累积的数据大小715相关的权重被设置为1,并且与图7的频率710相关的权重被设置为0,则该等级将如在标记为等级1的列中所示;如果这些权重相互交换,则该等级将如在标记为等级2的列中所示。
现在,假设累积的数据大小被认为重要性是频率的3倍。针对累积的数据大小得到的权重可以为0.25,针对频率得到的权重可以为0.75(请记住由于较低的数字意味着较高的等级,较小的权重值意味着较大的意义性)。针对软件流的等级的加权和将分别为1.25、3、2.5和3.25,这将意味着软件流将按照下面的顺序被分级:1、3、2和4。注意,这是与如标记为等级2的列相同的等级,但这一事实是巧合的。
图8-图9B说明如何使用两个标准执行分级。本发明构思的实施例可以通过所示过程的简单概括来支持使用两个以上的标准。例如,图8的权重825-1至825-l中的三个或更多个可以给予非零值,或者图8的多个阈值810可以被设置为用于确定当对图4的软件流410-1至410-n进行分级时使用哪个标准。
图10A-图10B示出了根据本发明构思的实施例的用于产生图4的映射425的示例过程的流程图。在图10A中,在块1005,图3的主机接口逻辑305可以识别使用的图6的窗口605以收集关于图4的软件流410-1至410-n的统计数据。(在下面的图10A-图13中,对图3的主机接口逻辑305的参照可以根据本发明构思的实施例的实现被图1的存储器控制器125或图1的存储控制器130的参照替换)。在块1010,主机接口逻辑305可以接收图4的多个命令405-1至405-k,其中,当图6的窗口605打开时,所述多个命令405-1至405-k中的一些可以被接收。在块1015,统计数据收集器515可以基于图4的多个命令405-1至405-k(至少在图6的窗口605打开时接收到的那些命令)来确定针对图7的标准705的值。
在块1020,图5的分级器520可以基于由图5的统计数据收集器515确定的值来识别图4的软件流410-1至410-n的子集。在块1025,图5的映射器525可以产生图4的映射425,其中,映射425用于将图4的软件流410-1至410-n映射到图4的装置流420-1至420-m。
在块1030,图3的主机接口逻辑305可以接收另外的图4的命令405-1至405-k。在块1035,图5的映射器525可以使用图4的映射425将图4的那些另外的命令405-1至405-k中的每一个分配到图4的装置流420-1至420-m。
在块1040(图10B),图1的SSD 120可以使用分配的图4的装置流420-1至420-m来处理另外的图4的命令405-1至405-k。在块1045,图1的SSD 120可以返回处理这些另外的图4的命令405-1至405-k的结果。
在块1050,图3的主机接口逻辑305可以确定是否应该自动地重新产生图4的映射425(或者因为图6的窗口605是滑动窗口,或者因为SSD 120已被配置为在图6的规则离散窗口605中重复收集新的统计数据)。如果这样,则控制可以返回到图10A的块1005以重新开始产生图4的映射425的处理。否则,在块1055,图3的主机接口逻辑305可以确定它是否已经接收到重新产生映射的命令,如可以由图1的机器105或图1的机器105的用户发出的命令。如果已经接收到重新产生映射的命令,则控制可以返回到图10A的块1005以重新开始产生图4的映射425的处理。否则,在块1060,图3的主机接口逻辑305可以保留图4的映射425,之后处理可以返回到图10A的块1030(或者可选地,如果未接收到另外的图4的命令405-1至命令405-k,则处理可以在此时简单地结束)。
图11示出了根据本发明构思的实施例的图5的统计数据收集器515确定针对图7的针对标准705的值的示例过程的流程图。在图11中,在块1105,当命令进入和退出图6的窗口605时,图5的统计数据收集器515可以调整针对图4的软件流410-1至410-n的值。也就是说,当命令进入图6的窗口605时,图5的统计数据收集器515可以增加针对图4的软件流410-1至410-n的值,当命令退出图6的窗口605时,图5的统计数据收集器515可以减少针对图4的软件流410-1至410-n的值。
可选地,在块1110,图5的统计数据收集器515可以重置针对图4的软件流410-1至410-n的值。然后在块1115,图5的统计数据收集器515可以在图6的窗口605期间收集针对图4的软件流410-1至410-n的新的统计数据。
图12示出了根据本发明构思的实施例的图5的分级器520确定图4的软件流410-1至软件流410-n中的哪个软件流映射到图4的装置流420-1至装置流420-m中的哪个装置流的示例过程的流程图。在图12中,在块1205,图5的分级器520可以根据由图5的统计数据收集器515收集的统计数据对图4的软件流410-1至410-n进行分级。在块1210,图5的分级器520可以确定针对各种标准的图8的权重825-1至825-l。在块1215,分级器520可以使用原始等级和图8的权重825-1至825-l来确定图4的软件流410-1至410-n的最终等级。如由虚线1220所示,可以省略块1210和块1215;此外,如上参照图8所讨论的,如果仅有图8的权重825-1至825-l中的一个被给定正的非零值,则即使使用块1210和块1215也可以有效地实现根据单个标准的分级。
可选地,如果图5的分级器520使用图8的阈值810和比较器815来使用多个标准,则在块1225,图5的分级器520可以确定针对第一标准的图8的阈值810(以及针对另外的标准,如果使用不只一个图8的阈值810,则图5的分级器520可以确定针对第一标准的图8的阈值810)。在块1230,可以根据对于针对第一标准的值超过图8的阈值810的软件流的第一标准对图4的软件流410-1至410-n进行分级。在块1235,可以根据对于针对第一标准的值不超过图8的阈值810的软件流的第二标准来对图4的软件流410-1至410-n进行分级。
不管图5的分级器520如何实现最终的分级,在块1240,图5的分级器520针对第一子集选择最高等级的软件流,并且在块1245,图5的分级器520针对第二个子集选择全部剩余的软件流。
图13示出了根据本发明构思的实施例的图5的映射器525将图4的软件流410-1至410-n映射到图4的装置流420-1至420-m的示例过程的流程图。在图13中,在块1305,图5的映射器525可以将第一子集中的每个软件流映射到唯一的装置流。在块1310,图5的映射器525可以将第二子集中的每个软件流映射到合并装置流。如上参照图5所述,根据需要,可能存在不只一个合并装置流。
在图10A-图13中,示出了本发明构思的一些实施例。但是本领域技术人员将认识到,通过改变块的顺序、通过省略块或通过包括附图中未示出的链路,本发明构思的其他实施例也是可能的。无论是否明确地描述,流程图的全部这些变化被认为是本发明构思的实施例。
以下讨论旨在提供可以实现本发明构思的特定方面的合适的一个或更多个机器的简要、一般性的描述。一个或更多个机器可以至少部分地通过来自传统输入装置(例如键盘、鼠标等)的输入以及从另一机器接收的指令、与虚拟现实(VR)环境的交互、生物识别反馈或其他输入信号被控制。如本文使用的,术语“机器”旨在广泛地涵盖单个机器、虚拟机或一起操作的通信耦接的机器、虚拟机或设备的系统。示例性机器包括诸如个人计算机、工作站、服务器、便携式计算机、手持装置、电话、平板电脑等的计算装置以及诸如私人或公共交通(例如汽车、火车、出租车等)的运输装置。
一个或更多个机器可以包括嵌入式控制器,诸如可编程或非可编程逻辑装置或阵列、专用集成电路(ASIC)、嵌入式计算机、智能卡等。一个或更多个机器可以使用一个或更多个连接件(诸如通过网络接口、调制解调器或其他通信耦接)到一个或更多个远程机器。机器可以通过诸如内联网、互联网、局域网、广域网等的物理和/或逻辑网络的方式进行互连。本领域技术人员将理解,网络通信可以利用各种有线和/或无线短距离或长距离载波和协议,包括射频(RF)、卫星、微波、电气和电子工程师协会(IEEE)802.11、光纤、红外线、电缆、激光等。
本发明构思的实施例可以通过参照或结合包括函数、程序、数据结构、应用程序等的相关数据来描述,当所述相关数据被机器访问时,导致机器执行任务或定义抽象数据类型或低级硬件环境。相关数据可以被存储在例如易失性和/或非易失性存储器(例如RAM,ROM等)中,或者存储在其他存储装置及其相关的存储介质(包括硬盘驱动器、软盘、光学存储器、磁带、闪存、记忆棒、数字视频盘、生物存储器等)中。相关数据可以通过传输环境(包括物理和/或逻辑网络)以包、串行数据、并行数据、传播信号等的形式来进行传送,并且可以以压缩或加密的格式使用。相关数据可以在分布式环境中使用,并且本地地和/或远程地被存储以用于机器访问。
本发明构思的实施例可以包括包含可由一个或更多个处理器执行的指令的有形的、非暂时性的机器可读介质,其中,所述指令包括用于执行本文所述的发明构思的元件的指令。
已经参照示出的实施例描述和示出了本发明构思的原理,将认识到在不脱离这些原理的情况下,示出的实施例可以在布置和细节上进行修改,并且可以以任意期望的方式进行组合。并且,尽管前面的讨论集中在特定的实施例上,但是也可以考虑其他配置。特别地,即使在本文中使用诸如“根据本发明构思的实施例”等的表达,但是这些短语通常指的是参照实施例的可能性,并不旨在将本发明的构思限于特定的实施例配置。如本文所使用的,这些术语可以参照可结合到其他实施例中的相同的或不同的实施例。
上述说明性实施例不应被解释为限制本发明构思。虽然已经描述了一些实施例,但是本领域技术人员将容易地理解,在本质上不脱离本公开的新颖教导和优点的情况下,许多修改对于那些实施例也是可能的。因此,全部这样的修改旨在被包括在如权利要求所限定的本发明构思的范围内。
本发明构思的实施例可以扩展至下面的声明,但不限于此:
声明1.本发明构思的实施例包括固态驱动器(SSD),包括:
闪存,用于存储数据,支持SSD中的多个装置流;
SSD控制器,用于响应于多个命令来管理从闪存读取数据和向闪存写入数据;
主机接口逻辑包括:
接收器,用于从主机接收所述多个命令,其中,所述多个命令与多个软件流相关;
计时器,用于对窗口进行计时;
统计数据收集器,用于响应于所述多个命令,在所述窗口期间确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值;
分级器,用于根据对于所述多个软件流中的每一个软件流的针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级;
映射器,用于建立映射,其中,所述映射用于将所述多个软件流种的第一子集中的每一个软件流映射到SSD中的所述多个装置流中的唯一装置流,并且所述映射用于将所述多个软件流中的第二子集中的全部软件流映射到SSD中的所述多个装置流中的合并装置流。
声明2.本发明构思的实施例包括根据声明1的SSD,其中:
所述多个命令中的每一个命令包括用于识别所述多个软件流中的相应的一个软件流的软件流标识符(ID)标签,其中,响应于该映射,相应的装置流可以被分配给所述多个软件流中的相应的一个软件流;
针对所述多个命令中的每一个命令的结果包括用于识别所述多个软件流中的所述相应的一个软件流的软件流ID标签。
声明3.本发明构思的实施例包括根据声明1的SSD,其中,SSD用于从所述多个软件流接收另外的多个命令,并且根据所述映射将所述另外的多个命令分配到所述多个装置流。
声明4.本发明构思的实施例包括根据声明1的SSD,其中:
所述窗口是滑动窗口;
统计数据收集器用于当所述多个命令中的每一个命令进入和退出所述窗口时,调整所述窗口内的针对所述至少一个标准的所述至少一个值。
声明5.本发明构思的实施例包括根据声明1的SSD,其中,所述窗口是离散窗口。
声明6.本发明构思的实施例包括根据声明5的SSD,其中:
主机接口逻辑用于保持所述映射,直到另有指示为止;
接收器还用于接收用于将所述多个软件流重新映射到所述多个装置流的命令。
声明7.本发明构思的实施例包括根据声明5的SSD,其中,主机接口逻辑用于针对多个顺序离散窗口将所述多个软件流反复地重新映射到所述多个装置流。
声明8.本发明构思的实施例包括根据声明1的SSD,其中:
所述多个软件流中的第一子集包括具有最高等级的多个软件流,其中,具有最高等级的软件流的数量比所述多个装置流的数量少一;
所述多个软件流中的第二子集包括未被包括在所述多个软件流中的第一子集中的全部软件流。
声明9.本发明构思的实施例包括根据声明1的SSD,其中,统计数据收集器用于确定对于所述多个软件流中的每一个的针对第一标准的第一值和针对第二标准的第二值。
声明10.本发明构思的实施例包括根据声明9的SSD,其中:
分级器包括针对第一标准的第一权重和针对第二标准的第二权重;
分级器用于根据对使用第一权重的针对第一值的第一等级和使用第二权重的针对第二值的第二等级的加权和来对所述多个软件流进行分级。
声明11.本发明构思的实施例包括根据声明9的SSD,其中:
分级器包括针对第一标准的阈值;
分级器用于根据对于第一值大于针对第一标准的阈值的软件流的第一标准并且根据对于第一值小于针对第一标准的阈值的软件流的第二标准来对所述多个软件流进行分级。
声明12.本发明构思的实施例包括在计算机系统中使用的驱动器,包括:
接收器,用于从主机接收多个命令,其中,所述多个命令与多个软件流相关;
计时器,用于对窗口进行计时;
统计数据收集器,用于响应于所述多个命令,在所述窗口期间确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值;
分级器,用于根据对于所述多个软件流中的每一个软件流的针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级;
映射器,用于建立映射,其中,所述映射用于将所述多个软件流中的第一子集中的每一个软件流映射到固态驱动器(SSD)中的多个装置流中的唯一装置流,并且所述映射用于将所述多个软件流中的第二子集中的全部软件流映射到所述SSD中的所述多个装置流中的合并装置流;
装置流标识符(ID)添加器,用于向另外的多个命令中的每一个命令添加针对与和所述多个命令中的每一个命令相关的软件流相应的装置流的装置流ID;
发送器,用于将所述另外的多个命令中的每一个命令发送到SSD。
声明13.本发明构思的实施例包括根据声明12的驱动器,其中,驱动器用于从所述多个软件流接收所述另外的多个命令,并根据所述映射将所述另外的多个命令分配到所述多个装置流。
声明14.本发明构思的实施例包括根据声明12的驱动器,其中:
所述窗口是滑动窗口;
统计数据收集器用于当所述多个命令中的每一个命令进入和退出所述窗口时,调整所述窗口内的针对所述至少一个标准的所述至少一个值。
声明15.本发明构思的实施例包括根据声明12的驱动器,其中,所述窗口是离散窗口。
声明16.本发明构思的实施例包括根据声明15的驱动器,其中:
驱动器用于保留所述映射,直到另有指示为止;
接收器,用于接收将所述多个软件流重新映射到所述多个装置流的命令。
声明17.本发明构思的实施例包括根据声明15的驱动器,其中,驱动器用于针对多个连续离散窗口将所述多个软件流反复地重新映射到所述多个装置流。
声明18.本发明构思的实施例包括根据声明12的驱动器,其中:
所述多个软件流中的第一子集包括具有最高等级的多个软件流,其中,具有最高等级的软件流的数量比所述多个装置流的数量少一;
所述多个软件流中的第二子集包括未被包括在所述多个软件流中的第一子集中的全部软件流。
声明19.本发明构思的实施例包括根据声明12的驱动器,其中,统计数据收集器用于确定对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值。
声明20.本发明构思的实施例包括根据声明19的驱动器,其中:
分级器包括针对第一标准的第一权重和针对第二标准的第二权重;
分级器用于根据对使用第一权重的针对第一值的第一等级和使用第二权重的针对第二值的第二等级的加权和来对所述多个软件流进行分级。
声明21.本发明构思的实施例包括根据声明19的驱动器,其中:
分级器包括针对第一标准的阈值;
分级器用于根据对于第一值大于针对第一标准的阈值的软件流的第一标准并且根据对于第一值小于针对第一标准的阈值的软件流的第二标准来对所述多个软件流进行分级。
声明22.本发明构思的实施例包括一种方法,包括:
接收与多个软件流相关的多个命令,其中,所述多个命令将使用包括多个装置流的固态驱动器(SSD)来处理;
响应于所述多个命令,确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值;
响应于针对所述至少一个标准的所述至少一个值,识别所述多个软件流中的第一子集和第二子集;
产生映射,其中,所述映射用于将所述多个软件流中的第一子集中的每一个软件流映射到SSD中的所述多个装置流中的唯一装置流,并且所述映射用于将所述多个软件流中的第二子集中的全部软件流映射到SSD中的所述多个装置流中的合并装置流;
在产生所述映射之后,接收与所述多个软件流相关的第二多个命令;
响应于所述映射,将第二多个命令中的每一个命令分配到所述多个装置流中的一个;
使用分配的装置流来处理SSD上的第二多个命令中的每一个。
声明23.本发明构思的实施例包括根据声明22的方法,所述方法还包括响应于对与所述多个软件流相关的所述多个命令的处理,返回来自SSD的结果。
声明24.本发明构思的实施例包括根据声明22的方法,其中:
与所述多个软件流相关的所述多个命令中的每一个包括软件流标识符(ID)标签;
来自SSD的每一个结果包括来自与所述多个软件流相关的所述多个命令中的相应的一个命令的软件流ID标签。
声明25.本发明构思的实施例包括根据声明22的方法,响应于针对所述至少一个标准的所述至少一个值来识别所述多个软件流中的第一子集和第二子集的步骤包括:响应于窗口内的针对所述至少一个标准的所述至少一个值来识别所述多个软件流中的第一子集和第二子集。
声明26.本发明构思的实施例包括根据声明25的方法,其中,所述窗口是滑动窗口。
声明27.本发明构思的实施例包括根据声明26的方法,其中,确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值的步骤包括:当所述多个命令中的每一个命令进入和退出窗口时,调整在所述窗口内的针对所述至少一个标准的所述至少一个值。
声明28.本发明构思的实施例包括根据声明25的方法,其中,所述窗口是离散窗口。
声明29.本发明构思的实施例包括根据声明28的方法,还包括:
识别第二离散窗口,其中,第二离散窗口包括第二多个命令;
在第二离散窗口期间,响应于第二多个命令来确定针对所述至少一个标准的至少一个第二值;
响应于针对所述至少一个标准的所述至少一个第二值来识别所述多个软件流中的第三子集和第四子集;
产生第二映射,其中,第二映射用于将所述多个软件流种的第三子集中的每一个软件流映射到SSD中的所述多个装置流中的唯一装置流,并且第二映射用于将所述多个软件流中的第四子集中的全部软件流映射到SSD中的所述多个装置流中的合并装置流。
声明30.本发明构思的实施例包括根据声明28的方法,还包括:
在所述离散窗口关闭后保留所述映射;
接收将所述多个软件流重新映射到所述多个装置流的请求;
执行以下步骤:识别第二离散窗口,确定至少一个第二值,识别第三子集和第四子集,以及响应于将所述多个软件流重新映射到所述多个装置流的请求来产生第二映射。
声明31.本发明构思的实施例包括根据声明22的方法,其中,响应于针对所述至少一个标准的所述至少一个值来识别所述多个软件流中的第一子集和第二子集的步骤包括:
根据针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级;
选择所述多个软件流中的第一子集以包含具有最高等级的多个软件流,其中,具有最高等级的软件流的数量比所述多个装置流的数量少一;
选择所述多个软件流中的第二子集以包含所述多个软件流中的未被包括在所述多个软件流中的第一子集中的全部软件流。
声明32.本发明构思的实施例包括根据声明31的方法,其中:
响应于所述多个命令确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值的步骤包括:确定对于所述多个软件流的每一个软件流的针对第一标准的第一值和针对第二标准的第二值;
根据针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级的步骤包括:根据对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值对所述多个软件流进行分级。
声明33.本发明构思的实施例包括根据声明32的方法,其中,根据针对第一标准的第一值和针对第二标准的第二值对所述多个软件流进行分级的步骤包括:
确定针对第一标准的第一权重和针对第二标准的第二权重;
根据对使用第一权重的针对第一值的第一等级和使用第二权重的针对第二值的第二等级的加权和来对所述多个软件流进行分级。
声明34.本发明构思的实施例包括根据声明32的方法,其中,根据针对第一标准的第一值和针对第二标准的第二值对所述多个软件流进行分级的步骤包括:
确定针对第一标准的阈值;
根据对于第一值大于针对第一标准的阈值的软件流的第一标准并且根据对于第一值小于针对第一标准的阈值的软件流的第二标准对所述多个软件流进行分级。
声明35.本发明构思的实施例包括一种包括有形存储介质的物品,其中,在所述有形存储介质上存储非暂时性指令,所述指令在被机器运行时导致:
接收与多个软件流相关的多个命令,其中,所述多个命令将使用包括多个装置流的固态驱动器(SSD)来处理;
响应于所述多个命令,确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值;
响应于针对所述至少一个标准的所述至少一个值,识别所述多个软件流中的第一子集和第二子集;
产生映射,其中,所述映射用于将所述多个软件流中的第一子集中的每一个软件流映射到SSD中的所述多个装置流中的唯一装置流,并且所述映射用于将所述多个软件流中的第二子集中的全部软件流映射到SSD中的所述多个装置流中的合并装置流;
在产生所述映射之后接收与所述多个软件流相关的第二多个命令;
响应于所述映射将第二多个命令中的每一个命令分配到所述多个装置流中的一个;
使用分配的装置流来处理SSD上的第二多个命令中的每一个命令。
声明36.本发明构思的实施例包括根据声明35的物品,在所述有形存储介质上还存储非暂时性指令,其中,所述指令在被机器运行时导致:响应于对与所述多个软件流相关的所述多个命令的处理,返回来自SSD的结果。
声明37.本发明构思的实施例包括根据声明35的物品,其中:
与所述多个软件流相关的所述多个命令中的每一个命令包括软件流标识符(ID)标签;
来自SSD的每一个结果包括来自与所述多个软件流相关的所述多个命令中的相应的一个命令的软件流ID标签。
声明38.本发明构思的实施例包括根据声明35的物品,响应于针对所述至少一个标准的所述至少一个值来识别所述多个软件流中的第一子集和第二子集的步骤包括:响应于所述窗口内的针对所述至少一个标准的所述至少一个值来识别所述多个软件流中的第一子集和第二子集。
声明39.本发明构思的实施例包括根据声明38的物品,其中,所述窗口是滑动窗口。
声明40.本发明构思的实施例包括根据声明39的物品,其中,确定对于所述多个软件流中的每一个软件流的针对所述至少一个标准的所述至少一个值的步骤包括:当所述多个命令中的每一个命令进入和退出窗口时调整在所述窗口内的针对所述至少一个标准的所述至少一个值。
声明41.本发明构思的实施例包括根据声明38的物品,其中,所述窗口是离散窗口。
声明42.本发明构思的实施例包括根据声明41的物品,在所述有形存储介质上还存储非暂时性指令,所述指令在被机器运行时,导致:
识别第二离散窗口,其中,第二离散窗口包括第二多个命令;
在第二离散窗口期间响应于第二多个命令来确定针对所述至少一个标准的至少一个第二值;
响应于针对所述至少一个标准的所述至少一个第二值来识别所述多个软件流种的第三子集和第四子集;
产生第二映射,其中,第二映射用于将所述多个软件流中的第三子集中的每一个软件流映射到SSD中的所述多个装置流中的唯一装置流,并且第二映射用于将所述多个软件流中的第四子集中的全部软件流映射到SSD中的所述多个装置流中的合并装置流。
声明43.本发明构思的实施例包括根据声明41的物品,在所述有形存储介质上进一步存储非暂时性指令,其中,所述指令在被机器运行时,导致:
在所述离散窗口关闭后保留所述映射;
接收将所述多个软件流重新映射到所述多个装置流的请求;
执行以下步骤:识别第二离散窗口,确定至少一个第二值,识别第三子集和第四子集,以及响应于将所述多个软件流重新映射到所述多个装置流的请求来产生第二映射。
声明44.本发明构思的实施例包括根据声明35的物品,其中,响应于针对所述至少一个标准的所述至少一个值来识别所述多个软件流中的第一子集和第二子集的步骤包括:
根据针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级;
选择所述多个软件流中的第一子集以包含具有最高等级的多个软件流,其中,具有最高等级的软件流的数量比所述多个装置流的数量少一;
选择所述多个软件流中的第二子集以包含所述多个软件流中的未被包括在所述多个软件流中的第一子集中的全部软件流。
声明45.本发明构思的实施例包括根据声明44的物品,其中:
响应于所述多个命令来确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值的步骤包括:确定对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值;
根据针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级的步骤包括:根据所述多个软件流的每一个软件流的针对第一标准的第一值和针对第二标准的第二值对所述多个软件流进行分级。
声明46.本发明构思的实施例包括根据声明45的物品,其中,根据针对第一标准的第一值和针对第二标准的第二值对多个软件流进行分级的步骤包括:
确定针对第一标准的第一权重和针对第二标准的第二权重;
根据对使用第一权重的针对第一值的第一等级和使用第二权重的针对第二值的第二等级的加权和来对所述多个软件流进行分级。
声明47.本发明概念的实施例包括根据声明45的物品,其中,根据针对第一标准的第一值和针对第二标准的第二值对所述多个软件流进行分级的步骤包括:
确定针对第一标准的阈值;
根据对于第一值大于针对第一标准的阈值的软件流的第一标准并且根据针对第一值小于针对第一标准的阈值的软件流的第二标准对所述多个软件流进行分级。
因此,鉴于本文描述的实施例的各种各样的变换,该详细描述和附带材料仅旨在说明,并且不应被认为限制本发明构思的范围。因此,可以落入附属的权利要求及其等同物的范围和精神内的全部这些修改正是本发明构思所要求的。
Claims (17)
1.一种固态驱动器,包括:
闪存,用于存储数据,支持固态驱动器中的多个装置流;
固态驱动器控制器,用于响应于多个命令来管理从闪存读取数据和向闪存写入数据;
主机接口逻辑,包括:
接收器,用于从主机接收所述多个命令,其中,所述多个命令与多个软件流相关;
计时器,用于对窗口进行计时;
统计数据收集器,用于响应于所述多个命令,在所述窗口期间确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值;
分级器,用于根据对于所述多个软件流中的每一个软件流的针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级;
映射器,用于建立映射,其中,所述映射用于将所述多个软件流中的第一子集中的每一个软件流映射到固态驱动器中的所述多个装置流中的唯一装置流,并且所述映射用于将所述多个软件流中的第二子集中的全部软件流映射到固态驱动器中的所述多个装置流中的合并装置流,其中,所述多个软件流中的第一子集包括具有最高等级的多个软件流,其中,具有最高等级的软件流的数量比所述多个装置流的数量少一;
所述多个软件流中的第二子集包括未被包括在所述多个软件流中的第一子集中的全部软件流。
2.根据权利要求1所述的固态驱动器,其中,所述固态驱动器用于从所述多个软件流接收另外的多个命令,并且根据所述映射将所述另外的多个命令分配到所述多个装置流。
3.根据权利要求1所述的固态驱动器,其中,
所述窗口是滑动窗口;
统计数据收集器用于当所述多个命令中的每一个命令进入和退出所述窗口时,调整所述窗口内的针对所述至少一个标准的所述至少一个值。
4.根据权利要求1所述的固态驱动器,其中,所述窗口是离散窗口。
5.根据权利要求1所述的固态驱动器,其中,统计数据收集器用于确定对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值。
6.根据权利要求5所述的固态驱动器,其中,
分级器包括针对第一标准的第一权重和针对第二标准的第二权重;
分级器用于根据对使用第一权重的针对第一值的第一等级和使用第二权重的针对第二值的第二等级的加权和来对所述多个软件流进行分级。
7.根据权利要求5所述的固态驱动器,其中,
分级器包括针对第一标准的阈值;
分级器用于根据对于第一值大于针对第一标准的阈值的软件流的第一标准并且根据对于第一值小于针对第一标准的阈值的软件流的第二标准,对所述多个软件流进行分级。
8.一种包括有形的非暂时性存储介质的产品,所述有形的非暂时性存储介质存储有能够由机器执行的驱动程序,所述驱动程序包括:
接收器,用于从主机接收多个命令,其中,所述多个命令与多个软件流相关;
计时器,用于对窗口进行计时;
统计数据收集器,用于响应于所述多个命令,在所述窗口期间确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值;
分级器,用于根据对于所述多个软件流中的每一个软件流的针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级;
映射器,用于建立映射,其中,所述映射用于将所述多个软件流中的第一子集中的每一个软件流映射到固态驱动器中的多个装置流中的唯一装置流,并且所述映射用于将所述多个软件流中的第二子集中的全部软件流映射到固态驱动器中的所述多个装置流中的合并装置流;
装置流标识符添加器,用于向另外的多个命令中的每一个命令添加针对与和所述多个命令中的每一个命令相关的软件流相应的装置流的装置流标识符;
发送器,用于将所述另外的多个命令中的每一个命令发送到固态驱动器,
其中,所述多个软件流中的第一子集包括具有最高等级的多个软件流,其中,具有最高等级的软件流的数量比所述多个装置流的数量少一,并且
其中,所述多个软件流中的第二子集包括未被包括在所述多个软件流中的第一子集中的全部软件流。
9.根据权利要求8所述的产品,其中:
所述窗口是滑动窗口;
统计数据收集器用于当所述多个命令中的每一个命令进入和退出所述窗口时,调整所述窗口内的针对所述至少一个标准的所述至少一个值。
10.根据权利要求8所述的产品,其中,所述窗口是离散窗口。
11.根据权利要求8所述的产品,其中,统计数据收集器用于确定对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值。
12.根据权利要求11所述的产品,其中,
分级器包括针对第一标准的第一权重和针对第二标准的第二权重;
分级器用于根据对使用第一权重的针对第一值的第一等级和使用第二权重的针对第二值的第二等级的加权和来对所述多个软件流进行分级。
13.根据权利要求11所述的产品,其中,
分级器包括针对第一标准的阈值;
分级器用于根据对于第一值大于针对第一标准的阈值的软件流的第一标准并且根据对于第一值小于针对第一标准的阈值的软件流的第二标准,对所述多个软件流进行分级。
14.一种方法,包括:
接收与多个软件流相关的多个命令,其中,所述多个命令将使用包括多个装置流的固态驱动器被处理;
响应于所述多个命令,确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值;
响应于针对所述至少一个标准的所述至少一个值,识别所述多个软件流中的第一子集和第二子集,其中,识别步骤包括:根据针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级;选择所述多个软件流中的第一子集以包含具有最高等级的多个软件流,其中,具有最高等级的软件流的数量比所述多个装置流的数量少一;以及选择所述多个软件流中的第二子集以包含所述多个软件流中的未被包括在所述多个软件流中的第一子集中的全部软件流;
产生映射,其中,所述映射用于将所述多个软件流中的第一子集中的每一个软件流映射到固态驱动器中的所述多个装置流中的唯一装置流,并用于将所述多个软件流中的第二子集中的全部软件流映射到所述固态驱动器中的所述多个装置流中的合并装置流;
在产生所述映射之后,接收与所述多个软件流相关的第二多个命令;
响应于所述映射,将第二多个命令中的每一个分配到所述多个装置流中的一个装置流;
使用分配的装置流来处理固态驱动器上的第二多个命令中的每一个。
15.根据权利要求14所述的方法,其中,
响应于所述多个命令确定对于所述多个软件流中的每一个软件流的针对至少一个标准的至少一个值的步骤包括:确定对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值;
根据针对所述至少一个标准的所述至少一个值对所述多个软件流进行分级的步骤包括:根据对于所述多个软件流中的每一个软件流的针对第一标准的第一值和针对第二标准的第二值,对所述多个软件流进行分级。
16.根据权利要求15所述的方法,其中,根据针对第一标准的第一值和针对第二标准的第二值对所述多个软件流进行分级的步骤包括:
确定针对第一标准的第一权重和针对第二标准的第二权重;
根据对使用第一权重的针对第一值的第一等级和使用第二权重的针对第二值的第二等级的加权和来对所述多个软件流进行分级。
17.根据权利要求15所述的方法,其中,根据针对第一标准的第一值和针对第二标准的第二值对所述多个软件流进行分级的步骤包括:
确定针对第一标准的阈值;
根据对于第一值大于针对第一标准的阈值的软件流的第一标准并且根据对于第一值小于针对第一标准的阈值的软件流的第二标准,对所述多个软件流进行分级。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662413177P | 2016-10-26 | 2016-10-26 | |
US62/413,177 | 2016-10-26 | ||
US201762448958P | 2017-01-20 | 2017-01-20 | |
US62/448,958 | 2017-01-20 | ||
US15/458,968 US10216417B2 (en) | 2016-10-26 | 2017-03-14 | Method of consolidate data streams for multi-stream enabled SSDs |
US15/458,968 | 2017-03-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107992266A CN107992266A (zh) | 2018-05-04 |
CN107992266B true CN107992266B (zh) | 2022-01-28 |
Family
ID=61969550
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710804058.5A Active CN107992266B (zh) | 2016-10-26 | 2017-09-08 | 针对启用多流的固态驱动器的合并数据流的方法 |
Country Status (5)
Country | Link |
---|---|
US (3) | US10216417B2 (zh) |
JP (1) | JP6851951B2 (zh) |
KR (1) | KR102267480B1 (zh) |
CN (1) | CN107992266B (zh) |
TW (1) | TWI718337B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2018088137A (ja) | 2016-11-29 | 2018-06-07 | 東芝メモリ株式会社 | 半導体記憶装置 |
US10877691B2 (en) * | 2017-12-29 | 2020-12-29 | Intel Corporation | Stream classification based on logical regions |
CN112352216B (zh) * | 2018-06-30 | 2022-06-14 | 华为技术有限公司 | 数据存储方法及数据存储装置 |
US11182101B2 (en) * | 2018-12-03 | 2021-11-23 | Western Digital Technologies, Inc. | Storage system and method for stream management in a multi-host virtualized storage system |
KR20200088563A (ko) * | 2019-01-15 | 2020-07-23 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작방법 |
KR20200145151A (ko) | 2019-06-20 | 2020-12-30 | 삼성전자주식회사 | 맵핑 정보를 축약하는 플래시 변환 계층 구조를 이용하여 메모리 리소스를 관리하는 데이터 저장 장치 |
US11481150B2 (en) * | 2020-04-01 | 2022-10-25 | Western Digital Technologies, Inc. | Read modify write optimization for video performance |
US11301173B2 (en) * | 2020-04-20 | 2022-04-12 | Alibaba Group Holding Limited | Method and system for facilitating evaluation of data access frequency and allocation of storage device resources |
KR20210156190A (ko) | 2020-06-17 | 2021-12-24 | 삼성전자주식회사 | 스토리지 장치 지원 실시간 가상 머신 마이그레이션 |
US11863623B2 (en) * | 2020-09-11 | 2024-01-02 | Western Digital Technologies, Inc. | Variable QoS management of multiple data streams |
KR102652396B1 (ko) * | 2021-05-31 | 2024-03-28 | 한국항공대학교산학협력단 | 멀티스트림을 활용한 분산 병렬 시스템의 데이터 분리 저장 장치 및 방법 |
CN117806986B (zh) * | 2023-12-29 | 2024-10-15 | 深圳大普微电子股份有限公司 | 应用数据的多流管理方法及闪存设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2757479A1 (en) * | 2013-01-22 | 2014-07-23 | LSI Corporation | Management of and region selection for writes to non-volatile memory |
US9367353B1 (en) * | 2013-06-25 | 2016-06-14 | Sandisk Technologies Inc. | Storage control system with power throttling mechanism and method of operation thereof |
Family Cites Families (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006235960A (ja) | 2005-02-24 | 2006-09-07 | Fujitsu Ltd | ガーベッジコレクション高速化方法 |
US20090119352A1 (en) | 2007-11-05 | 2009-05-07 | Steven Joseph Branda | Method for Optimizing Generational Garbage Collection Through Object Life Heuristics |
US8429658B2 (en) | 2008-10-16 | 2013-04-23 | International Business Machines Corporation | Lock deferral for real-time garbage collection |
CN102473140B (zh) | 2009-07-17 | 2015-05-13 | 株式会社东芝 | 存储器管理装置 |
US8688894B2 (en) | 2009-09-03 | 2014-04-01 | Pioneer Chip Technology Ltd. | Page based management of flash storage |
WO2012020544A1 (ja) | 2010-08-11 | 2012-02-16 | 日本電気株式会社 | データ処理システム、データ処理方法、およびプログラム |
US20150121003A1 (en) * | 2010-09-07 | 2015-04-30 | Daniel L. Rosenband | Storage controllers |
JP2012084127A (ja) | 2010-09-15 | 2012-04-26 | Toshiba Corp | 半導体装置 |
US20120110239A1 (en) * | 2010-10-27 | 2012-05-03 | Seagate Technology Llc | Causing Related Data to be Written Together to Non-Volatile, Solid State Memory |
WO2013035295A1 (en) | 2011-09-07 | 2013-03-14 | Nec Corporation | Storage system |
US10203881B2 (en) * | 2011-12-19 | 2019-02-12 | Apple Inc. | Optimized execution of interleaved write operations in solid state drives |
JP5723812B2 (ja) | 2012-03-16 | 2015-05-27 | 株式会社 日立産業制御ソリューションズ | ファイルサーバ、データ入出力方法、i/oフックモジュールプログラム及びi/o代行デーモンプログラム |
US8886880B2 (en) | 2012-05-29 | 2014-11-11 | Dot Hill Systems Corporation | Write cache management method and apparatus |
US9158687B2 (en) * | 2013-03-04 | 2015-10-13 | Dot Hill Systems Corporation | Method and apparatus for processing fast asynchronous streams |
WO2015005634A1 (ko) | 2013-07-08 | 2015-01-15 | 주식회사 윌러스표준기술연구소 | 메모리 시스템 및 이의 제어 방법 |
CN105659143B (zh) * | 2013-07-31 | 2019-03-22 | 加州理工学院 | 孔径扫描傅立叶重叠关联成像 |
KR102074329B1 (ko) * | 2013-09-06 | 2020-02-06 | 삼성전자주식회사 | 데이터 저장 장치 및 그것의 데이터 처리 방법 |
US9854270B2 (en) | 2013-12-19 | 2017-12-26 | Qualcomm Incorporated | Device and method for scalable coding of video information |
US9459810B2 (en) | 2013-12-30 | 2016-10-04 | Sandisk Technologies Llc | Storage module and method for configuring command attributes |
US8874835B1 (en) | 2014-01-16 | 2014-10-28 | Pure Storage, Inc. | Data placement based on data properties in a tiered storage device system |
KR101544309B1 (ko) | 2014-02-26 | 2015-08-12 | 한양대학교 산학협력단 | 스트림 기반의 비휘발성 메모리 제어 방법 및 장치 |
TWI554944B (zh) | 2014-06-20 | 2016-10-21 | 慧榮科技股份有限公司 | 快閃記憶體控制裝置、快閃記憶體控制系統以及快閃記憶體控制方法 |
EP3021208B1 (en) * | 2014-11-14 | 2019-01-09 | Dot Hill Systems Corporation | Method and apparatus for processing fast asynchronous streams |
US9519429B2 (en) | 2014-12-09 | 2016-12-13 | Intel Corporation | Techniques to manage multiple sequential write streams to a solid state drive |
US10409526B2 (en) | 2014-12-17 | 2019-09-10 | Violin Systems Llc | Adaptive garbage collection |
KR20160105624A (ko) | 2015-02-27 | 2016-09-07 | 에스케이하이닉스 주식회사 | 데이터 처리 시스템 및 그것의 동작 방법 |
JP2016170583A (ja) | 2015-03-12 | 2016-09-23 | 株式会社東芝 | メモリシステムおよび情報処理システム |
US20160283124A1 (en) | 2015-03-25 | 2016-09-29 | Kabushiki Kaisha Toshiba | Multi-streamed solid state drive |
US9760281B2 (en) | 2015-03-27 | 2017-09-12 | Intel Corporation | Sequential write stream management |
US9996302B2 (en) * | 2015-04-03 | 2018-06-12 | Toshiba Memory Corporation | Storage device writing data on the basis of stream |
US10261725B2 (en) * | 2015-04-10 | 2019-04-16 | Toshiba Memory Corporation | Storage system capable of invalidating data stored in a storage device thereof |
US10013177B2 (en) | 2015-04-20 | 2018-07-03 | Hewlett Packard Enterprise Development Lp | Low write amplification in solid state drive |
US9696935B2 (en) | 2015-04-24 | 2017-07-04 | Kabushiki Kaisha Toshiba | Storage device that secures a block for a stream or namespace and system having the storage device |
US9594513B1 (en) * | 2015-06-29 | 2017-03-14 | EMC IP Holding Company LLC | Data storage system with file system stream detection |
KR102381343B1 (ko) | 2015-07-27 | 2022-03-31 | 삼성전자주식회사 | 스토리지 장치 및 상기 스토리지 장치의 동작 방법 |
JP6403164B2 (ja) | 2015-09-11 | 2018-10-10 | 東芝メモリ株式会社 | メモリシステム |
US9880780B2 (en) | 2015-11-30 | 2018-01-30 | Samsung Electronics Co., Ltd. | Enhanced multi-stream operations |
JP2018022275A (ja) | 2016-08-02 | 2018-02-08 | 東芝メモリ株式会社 | 半導体記憶装置 |
JP2018160195A (ja) | 2017-03-23 | 2018-10-11 | 東芝メモリ株式会社 | メモリシステムおよび不揮発性メモリの制御方法 |
-
2017
- 2017-03-14 US US15/458,968 patent/US10216417B2/en active Active
- 2017-08-18 KR KR1020170104752A patent/KR102267480B1/ko active IP Right Grant
- 2017-09-07 TW TW106130577A patent/TWI718337B/zh active
- 2017-09-08 CN CN201710804058.5A patent/CN107992266B/zh active Active
- 2017-10-23 JP JP2017204461A patent/JP6851951B2/ja active Active
-
2018
- 2018-12-13 US US16/219,936 patent/US10739995B2/en active Active
-
2020
- 2020-05-04 US US16/866,545 patent/US11048411B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2757479A1 (en) * | 2013-01-22 | 2014-07-23 | LSI Corporation | Management of and region selection for writes to non-volatile memory |
US9367353B1 (en) * | 2013-06-25 | 2016-06-14 | Sandisk Technologies Inc. | Storage control system with power throttling mechanism and method of operation thereof |
Also Published As
Publication number | Publication date |
---|---|
KR102267480B1 (ko) | 2021-06-22 |
US20180113642A1 (en) | 2018-04-26 |
JP2018073412A (ja) | 2018-05-10 |
US10739995B2 (en) | 2020-08-11 |
US20190129617A1 (en) | 2019-05-02 |
US11048411B2 (en) | 2021-06-29 |
TW201816620A (zh) | 2018-05-01 |
US10216417B2 (en) | 2019-02-26 |
US20200264774A1 (en) | 2020-08-20 |
KR20180045786A (ko) | 2018-05-04 |
CN107992266A (zh) | 2018-05-04 |
JP6851951B2 (ja) | 2021-03-31 |
TWI718337B (zh) | 2021-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107992266B (zh) | 针对启用多流的固态驱动器的合并数据流的方法 | |
US11086523B2 (en) | Automatic tiering of storage using dynamic grouping | |
US10579272B2 (en) | Workload aware storage platform | |
US10140034B2 (en) | Solid-state drive assignment based on solid-state drive write endurance | |
US7478177B2 (en) | System and method for automatic reassignment of shared storage on blade replacement | |
EP3285187B1 (en) | Optimized merge-sorting of data retrieved from parallel storage units | |
US11507326B2 (en) | Multistreaming in heterogeneous environments | |
US10366110B2 (en) | Load balancing for multi-tiered querying | |
US11914894B2 (en) | Using scheduling tags in host compute commands to manage host compute task execution by a storage device in a storage system | |
CN109766056A (zh) | 一种存储阵列控制器io队列调度方法与装置 | |
WO2018130222A1 (zh) | 一种写入日志的方法、系统、介质和设备 | |
KR101734160B1 (ko) | 작업부하 편중을 완화하는 저장 장치 | |
JP6127754B2 (ja) | プログラム、排他制御要求振り分け方法およびシステム | |
US20170374144A1 (en) | Harvesting spare storage in a data center | |
Hu et al. | An efficient data transfer service for scientific applications in cloud environments | |
EP4449239A1 (en) | Optimizing data placement based on data temperature and lifetime prediction |
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 |