用于用单个命令对多个不连续地址范围的传送进行排队的方法和系统的制作方法

xiaoxiao2020-7-22  5

专利名称:用于用单个命令对多个不连续地址范围的传送进行排队的方法和系统的制作方法
技术领域
本公开总体上涉及访问硬盘和/或非易失性存储器的领域。具体地说,本公开涉及在单个命令内对多个非连续地址范围的传送进行排队。
背景技术
在现代计算系统中可以采用各种存储设备来存储和访问软件和/或数据。通常这些存储设备可以包括诸如硬盘驱动器(HDD)的磁存储设备、诸如光盘(CD)的光存储盘、和闪速存储器固态驱动器(SSD)。在HDD中,信息被存储在高速旋转的磁盘上,并且由多个读/写磁头从盘片读取以及向盘片写入信息。微控制器控制磁头相对于盘片的运动,微控制器与外部接口进行通信并与磁盘高速缓存缓冲器一起工作。数据可以被存储在盘片的不同部分,并且当工作负载为随机或接近随机时,可能花费大量时间将磁头移动到盘片上的所需位置。重新排序写请求和读取先行(look-ahead read)能够明显提高HDD系统中的性能。逻辑区块寻址(LBA)通常用于指定在存储设备中数据区块的位置。LBA可以是指地址或是指区块(例如,索引),其中第一区块为LBA = 0、第二区块为LBA= 1等等。LBA 方案替代了诸如磁柱-磁头-扇区(OB)方案这样的早期寻址方案,该方案向操作系统软件暴露了存储设备的物理细节。逻辑区块通常可以是512字节或IOM字节(ISO 9660 CD 使用2048字节的区块)。需要区块级I/O的系统调用将LBA定义传递给存储设备驱动器。 对于一些简单的情况,逻辑区块大小可以与能够从存储设备中读取或向存储设备写入的最小物理扇区的大小相同。在SSD中,基于NAND (或NOR)逻辑的闪速存储器将数据存储在微控制器管理的一些芯片中。SSD具有更快的读取时间(即,仅仅要找到和读取一个或多个所需单元),但是具有相对较慢的写入时间(即,在一个或多个单元中写入新数据之前必须从其中擦除现有数据)。因为不必担心旋转的磁盘或读/写磁头,所以其访问等待时间比HDD的访问等待时间要短。为了通过重新排序数据传送请求来实现更高的性能,已经引入诸如原生命令排队 (Native Command Queuing, NCQ)的排队技术(例如,在串行 ATA(Advanced Technology Attachment,高级技术附件)HDD中使用)来允许对读和写命令执行顺序进行优化。用于SSD 的排队的一个优点在于,多个命令能够被传送到设备从而使得在设备完成一组命令时不会被阻塞。还存在得益于让尽可能多的数据进行传送的大规模并行的实现。主机控制器接口(例如,用于串行ATA(SATA)设备的高级主机控制器接口(AHCI), 或用于闪速存储器存储设备的非易失性存储器主机控制器接口(NVMHCI))是一种硬件装置,其允许软件通过系统存储器结构与设备(例如主机总线适配器)进行通信,以便利用诸如NCQ这样的技术。许多现代操作系统,例如 Microsoft Windows 、Berkeley SoftwareDistribution (BSD,有时被称为Berkeley Unix)和Linux 为诸如AHCI这样的主机控制
器接口提供支持,但是这种接口可能仅仅支持命令队列中有限数量的(即,32个)未执行 (in-flight)命令,并且对于每个完成的请求可能产生系统中断。通常,许多请求或命令能够容易地被一起满足和完成,并且随着设备性能的提高,它们能够具有处理更多命令的能力。另一方面,SCSI协议可以允许对多达264个命令进行排队,但是支持这种长队列的实现可能花费昂贵,并且协议开销会明显大于AHCI中的协议开销。迄今为止,还没有完全研究出用于为较大数量的存储设备传送请求进行服务的更有效的方法、结构和系统。


本发明以示例的方式说明并且不受限于附图的图示。图1示出了用于用单个命令请求多个不连续地址范围的存储设备传送的系统的一个实施例。图2示出了用于用单个命令请求多个不连续地址范围的存储设备传送处理的一个实施例的流程图。图3示出了用于用单个命令请求多个不连续地址范围的存储设备传送处理的一个可替代的实施例的流程图。图如示出了用于说明存储设备传送的地址范围的数据结构的一个实施例。图4b示出了包括不连续地址范围的已标记传送命令和已标记命令列表的命令表数据结构的一个实施例。图如示出了用于说明存储设备已标记传送命令的数据结构的一个实施例。图4d示出了用于说明存储设备已标记传送命令的数据结构的一个可替代的实施例。图如示出了用于说明存储设备命令头的数据结构的一个实施例,该存储设备命令头包括存储器中的命令表的基地址和不连续的地址范围的已标记命令列表的偏移量。图4f示出了用于说明包括多个命令头的存储设备命令队列的数据结构的一个实施例。图4g示出了用于说明存储设备已标记传送命令的数据结构的一个可替代的实施例。
具体实施例方式以下公开用于在单个命令内对多个不连续地址范围的传送进行排队的方法和系统。在一些实施例中,该系统可以包括一个或更多个系统处理器、用以存储数据和可执行软件的系统存储器,和用以接收存储在系统存储器中的传送命令的存储设备。在一些实施例中,当存储在系统存储器中的主机控制器接口驱动器(例如用于串行ATA(高级技术附件)设备的高级主机控制器接口(AHCI),或用于NAND闪速存储器存储设备的非易失性存储器主机控制器接口(NVMHCI))由一个或更多个系统处理器执行时,可以从存储设备传送请求中收集多个不连续的地址范围,并针对每个不连续的地址范围将起始地址和要传送的数据的数量记录在已标记命令列表中。还可以将在已标记的命令列表中的不连续的地址范围的数目的计数和在已标记传送的操作码记录在一命令中,并且将该命令和已标记的命令列表存储到存储设备的系统存储器中的命令表中。可以将命令表的存储器基地址和已标记命令列表的偏移量(offset)记录在命令头中,其被按照特定的主机控制器接口存储在命令队列中。在一些替代实施例中,以主机-设备寄存器FIS (帧信息结构),可以将已标记传送命令按照物理传送机制(例如,与在诸如,ATAPI (ΑΤΑ分组接口)命令和/或SATA NCQ命令这样的SATA命令中一样)传递给存储设备。已标记传送命令可以指示存储了多个不连续地址范围的已标记命令列表的可用性,存储设备可以要求其作为数据FIS(即,一个数据分组或多个数据分组)。由此,用单个命令对多个不连续地址范围的传送进行排队可以提供更有效和成本节省的方法、结构和系统,以服务更大数量的存储设备传送请求。在以下的描述中,阐述了很多具体细节。然而,应该理解的是,可以在没有这些具体细节的情况下实践本发明的实施例。在其它情况下,没有详细地示出公知的电路、结构和技术以免模糊对本说明书的理解。可以按照如下教导来实现本发明的这些以及其它实施例,并且显然,在不脱离本发明的更广的精神和范围的情况下,可以在下列教导中做出各种修改和改变。因此,本说明书和附图应被视为是举例说明,而不是限制性的意义,并且应仅仅按照权利要求及其等价物来衡量本发明。图1示出了用单个命令请求多个不连续地址范围的存储设备传送的系统101的一个实施例。系统101包括多个系统处理器中央处理器111、存储器控制处理器112、1/0控制处理器113、图形处理器114,也可以包括DMA (直接存储器存取)处理器。此外系统101 包括一些存储设备,诸如SSD 120、磁盘驱动器121、PCI (外设部件互连)和/或PCI_E(PCI Express)设备122和/或闪速存储器存储设备126。系统101还包括用以存储数据和可执行软件的系统存储器115、以及音频I/O 123、通用串行总线I/O 124、局域网I/O 125、BI0S 117、键盘接口 118和鼠标接口 119。诸如SSD 120、磁盘驱动器121、PCI设备122和/或闪速存储器存储设备126这样的存储设备可以与系统存储器115耦合来接收存储在系统存储器115中的传送命令,以响应于存储设备传送请求而向各个地址范围传送数据以及从各个地址范围传送数据。系统存储器115还存储处理器可执行的主机控制器接口驱动器116。在系统101 的一些实施例中,驱动器116可以包括用于SATA设备(例如在SSD 120或磁盘驱动器121 中)的AHCI驱动器,和/或用于NAND闪速存储器存储设备(例如闪速存储器存储设备126) 的NVMHCI。当由一个或更多个系统处理器执行时,驱动器116可以使得一个或更多个系统处理器从对应的存储设备传送请求收集多个不连续的地址范围,并将每个不连续地址范围的起始地址和要传送的数据的数量记录在已标记命令列表中。执行驱动器116的系统处理器还可以在命令中记录已标记传送操作码,并且在已标记命令列表中记录不连续地址范围的数目,该命令和该已标记命令列表都被存储在特定存储设备的系统存储器115中的命令表中。系统存储器115中的命令表的基地址和已标记命令列表的偏移量可以被记录在该存储设备的命令队列中存储的多个命令头中的一个命令头中。可以理解的是,可以根据本文描述的处理过程来使用系统101,以对每个已标记传送命令请求存储设备传送已标记命令列表中的多个不连续地址范围。图2示出了用单个命令请求多个不连续地址范围的存储设备传送的处理过程201的一个实施例的流程图。处理过程201以及本文公开的其它处理过程由处理框执行,该处理模块可以包括专用硬件或软件或固件操作码,他们包含在机器可读介质中并可由通用机器或由专用机器或由两者的组合来执行。在处理框211中,从对应的存储设备传送请求中识别多个不连续地址范围的列表。在处理框213中,通过主机控制器接口发送单个命令以请求存储设备传送多个不连续地址范围的列表。处理过程201的一些实施例提供了已标记传送命令,以用于以主机-设备寄存器FIS按照物理传送机制(例如,与在诸如ATAPI命令和/或SATA NCQ命令这样的 SATA命令中一样)与存储设备进行通信。已标记传送命令可以指示存储了多个不连续地址范围的已标记命令列表的可用性。然后,存储设备可以请求或DMA已标记命令列表作为数据FIS (即,一个或多个数据分组)。接下来,在处理框215中,处理过程201等待所请求的数据传送完成,并且当完成时,处理就进行到处理框217。在处理框217中,对应于请求存储设备传送多个不连续地址范围的列表的单个命令的完成,接收单个中断。然后,在处理框 219中服务单个中断。图3示出了用单个命令请求多个不连续地址范围的存储设备传送的处理过程301 的一个替代实施例的流程图。在处理框311中,从相应的存储设备传送请求中识别多个不连续地址范围的列表。在处理框312中,对于已识别的不连续地址范围的列表中的每一个不连续地址范围,在已标记命令列表中记录起始地址和要传送的数据的数量。在处理框313 中,在已标记命令列表中的不连续地址范围的数目的计数以及已标记传送操作码都被记录在单个命令中,该命令与已标记命令列表一起被存储在存储器中的命令表中。在处理框314 中,在存储器中的命令表的基地址和已标记命令列表的偏移量可以被记录在存储在命令队列中的命令头中。在处理框315中,处理301等待请求的传送完成,并且在完成后处理就进行到处理框317。在处理框317中,对应于请求存储设备传送多个不连续地址范围的列表的单个命令的完成,接收单个中断。接着在处理框319中,服务单个中断。可以理解的是,请求存储设备按照特定主机控制器接口进行传送的另外的细节可以在该特定主机控制器接口的对应的已公布规范中找到(例如,从英特尔公司的网站上可获得的 “krial ATA Advanced Host Controller In terface (AHCI) 1. 3” 或“krial ΑΤΑ International Organization :Serial ATA R evision 2. 6” 或"Non-Volatile Memory Host Controller Interface (NVMHCI)1. 0”)。图如示出了包括用于指定的32位字段的序列和用于存储设备传送的地址范围 401的数据结构的一个实施例。地址范围401包括LBA或起始扇区地址411a和411b,和要传送的数据扇区的数量412。如处理框312所描述的,地址范围401可以被记录在已标记命令列表中。可以理解的是,这种已标记命令列表可以表示一种散布/集中列表。典型的散布/集中列表可以用于从物理地址到虚拟地址或从虚拟地址到物理地址,已标记命令列表将多个读或多个写与散布的逻辑地址映射组合为一条命令,诸如如下所述的命令403、404 或 408。图4b示出了命令表数据结构402的一个实施例,该命令表数据结构402包括适当长度(例如达到32或64字节)的已标记传送命令421,并且还包括不连续地址范围(例如类似于地址范围401)的已标记命令列表423。可以理解的是,命令表数据结构402也可以包括其它数据部分和/或表,比如,如由主机控制器接口所定义的物理区域描述符(PRD)表 422、元数据、PRD索引等。按照处理框313,命令表数据结构402可以被存储在存储器(例如系统存储器115)中。图如示出了包括用于指定存储设备已标记传送命令403的32位字段的序列的数据结构的一个实施例,其包括已标记命令列表中的不连续地址范围的数目的计数432和已标记传送操作码431。按照处理框313,已标记传送命令403可以存储在命令表(例如命令表数据结构402)中。可以理解的是,各种已标记传送操作码431可以用于读取或写入,并且如由主机控制器接口(例如AHCI和/或NVMHCI)或由总线接口(例如SATA)所规定的, 命令403也可以包括存储地址数据、参数、属性等的其它字段。图4d示出了包括用于规定存储设备已标记传送命令404的32位字段的序列的数据结构的一个可替代的实施例,其包括已标记命令列表中不连续地址范围的数目的计数 442和已标记传送操作码441。在命令404的实施例中,已标记命令列表中不连续地址范围的数目的计数442可以替换现有主机控制器接口的先前规定的字段(例如,扇区的总数)。图如示出了用于规定存储设备命令头450的数据结构405的一个实施例,该存储设备命令头450包括32位字段的序列,这些字段包括存储器(例如系统存储器11 中的命令表(例如命令表数据结构402)的基地址451a和451b以及不连续地址范围(例如地址范围401)的已标记命令列表(例如已标记命令列表423)的偏移量452。按照处理框314, 命令头450可以被存储在存储器中。图4f示出了用于规定存储设备命令队列406的数据结构407的一个实施例,该存储设备命令队列406包括多个命令头460-463 (例如命令头450),其标识相应的命令表 470-473(例如命令表数据结构402)并且可以被按照处理框314进行存储。通过端口寄存器465可以为存储设备标识命令队列406在存储器(例如系统存储器11 中的基地址。也可以通过端口寄存器466标识存储器中的另外的基地址。图4g示出了包括用于规定存储设备已标记传送命令408的分组的8位寄存器的序列的数据结构的一个替代实施例,其包括已标记命令列表中不连续地址范围的数目的计数482和已标记传送操作码481。在命令408的一些实施例中,针对DMA可以指定已标记命令列表地址/偏移量483a-c或483a-f (例如,根据已定义的PRD或命令表),来替代现有总线接口 (例如像SATA ATAPI和/或SATA NCQ)的线性区块地址(LBA)。以上描述意在说明本发明的优选实施例。根据上面的讨论,另外显而易见的是, 特别是在这种发展很快并且不容易预见进一步改进的技术领域中,在所附权利要求及其等价物的范围内,本领域技术人员可以在不脱离本发明原理的情况下修改本发明的结构和细节。
权利要求
1.一种用于对与单个命令相关联的多个传送进行排队的方法,所述方法包括通过接口发送单个命令以请求存储设备传送多个不连续地址范围;以及在所述多个不连续地址范围的传送结束时接收单个中断。
2.如权利要求1所述的方法,其中所述接口是串行ATA(高级技术附件)总线接口。
3.如权利要求1所述的方法,其中所述接口是SCSI(小型计算机系统接口)。
4.如权利要求1所述的方法,其中所述接口是SAS(串行连接SCSI)接口。
5.如权利要求1所述的方法,其中所述接口是高级主机控制器接口(AHCI)。
6.如权利要求5所述的方法,其中所述接口用于串行ATA(高级技术附件)存储设备。
7.如权利要求1所述的方法,其中所述接口是非易失性存储器主机控制器接口 (NVMHCI)。
8.如权利要求6所述的方法,其中所述接口用于NAND闪速存储器存储设备。
9.如权利要求6所述的方法,其中所述接口用于相变存储器存储设备。
10.一种用于请求传送存储设备中的多个不连续地址范围的方法,所述方法包括为所述多个不连续地址范围中的每一个不连续地址范围,在已标记命令列表中记录起始地址和要传送的数据的数量;将记录在所述已标记命令列表中的不连续地址范围的数目的计数和已标记传送操作码记录在一命令中,所述命令和所述已标记命令列表被存储在存储器中的命令表中;以及将存储器中的所述命令表的基地址和所述已标记命令列表的偏移量记录在命令头中, 所述命令头是存储在命令队列中的多个命令头中之一。
11.如权利要求10所述的方法,包括至少根据在所述命令头中记录的存储器中的所述命令表的基地址和所述已标记命令列表的所述偏移量,并且根据在所述命令中记录的不连续地址范围的数目的计数,为串行 ATA总线接口生成命令分组。
12.如权利要求10所述的方法,其中所述命令队列用于高级主机控制器接口(AHCI)。
13.如权利要求10所述的方法,其中所述命令队列用于非易失性存储器主机控制器接口 (NVMHCI)。
14.如权利要求10所述的方法,其中所述命令队列用于SAS(串行连接SCSI)接口。
15.一种包括机器可读介质的制品,所述机器可读介质存储状态和/或可执行的数据, 当由一个或更多个机器访问所述数据时使得所述一个或更多个机器从相应的多个传送请求中收集多个不连续地址范围;为所述多个不连续地址范围中的每一个不连续地址范围,在已标记命令列表中记录起始地址和要传送的数据的数量;将记录在所述已标记命令列表中的不连续地址范围的数目的计数和已标记传送操作码记录在一命令中,所述命令和所述已标记命令列表被存储在存储器中的命令表中;以及将存储器中的所述命令表的基地址和所述已标记命令列表的偏移量记录在一命令头中,所述命令头是存储在命令队列中的多个命令头中之一。
16.如权利要求15所述的制品,所述机器可读介质存储状态和/或可执行的数据,当由一个或更多个机器访问所述数据时使得所述一个或更多个机器至少根据在所述命令头中记录的存储器中的所述命令表的基地址和所述已标记命令列表的所述偏移量,并且根据在所述命令中记录的不连续地址范围的数目的计数,为串行 ATA总线接口生成命令分组。
17.如权利要求15所述的制品,其中所述命令队列用于高级主机控制器接口(AHCI)。
18.如权利要求15所述的制品,其中所述命令队列用于非易失性存储器主机控制器接口 (NVMHCI)。
19.如权利要求15所述的制品,其中所述命令队列用于SAS(串行连接SCSI)接口。
20.一种用于用单个命令请求传送多个不连续地址范围的系统,所述系统包括 一个或更多个系统处理器;系统存储器,用于存储数据和可执行软件;存储设备,其与所述系统存储器耦合,用于接收存储在所述系统存储器中的传送命令;以及处理器可执行主机控制器接口驱动器,其存储在所述系统存储器中,当其由所述一个或更多个系统处理器执行时使得所述一个或更多个系统处理器进行以下操作 从相应的多个存储设备传送请求中收集多个不连续地址范围; 为所述多个不连续地址范围中的每一个不连续地址范围,在已标记命令列表中记录起始地址和要传送的数据的数量;将记录在所述已标记命令列表中的不连续地址范围的数目的计数和已标记传送操作码记录在一命令中,所述命令和所述已标记命令列表被存储在用于所述存储设备的所述系统存储器中的命令表中;以及将存储器中的所述命令表的基地址和所述已标记命令列表的偏移量记录在命令头中, 所述命令头是存储在命令队列中的多个命令头中之一。
21.如权利要求20所述的系统,其中所述主机控制器接口是用于串行ATA(高级技术附件)的高级主机控制器接口(AHCI)。
22.如权利要求20所述的系统,其中所述处理器可执行主机控制器接口驱动器在由所述一个或更多个系统处理器执行时还使得所述一个或更多个系统处理器至少根据在所述命令头中记录的存储器中的所述命令表的基地址和所述已标记命令列表的偏移量,并且根据在所述命令中记录的不连续地址范围的数目的计数,为串行ATA 总线接口生成命令分组。
23.如权利要求20所述的系统,其中所述主机控制器接口是非易失性存储器主机控制器接口(NVMHCI)。
24.如权利要求23所述的系统,其中所述主机控制器接口用于NAND闪速存储器存储设备。
25.如权利要求23所述的系统,其中所述主机控制器接口用于相变存储器存储设备。
全文摘要
公开了用于在单个命令内对多个不连续地址范围的传送进行排队的方法和系统。系统的实施例包括系统处理器、用于存储数据和可执行软件的存储器,和用于接收存储在系统存储器中的传送命令的存储设备。主机控制器接口驱动器由一个或更多个系统处理器执行,并且从存储设备传送请求中收集多个不连续地址范围,对每一个不连续范围将起始地址和要传送的数据的数量记录在已标记命令列表中。将已标记命令列表中的地址范围的数量和已标记传送的操作码记录在一命令中,并且将所述命令和所述已标记命令列表存储在该存储设备的命令表中。将存储器中命令表的基地址和已标记命令列表的偏移量记录在存储在命令队列的命令头中。
文档编号G06F12/00GK102171649SQ200980139230
公开日2011年8月31日 申请日期2009年12月7日 优先权日2008年12月22日
发明者A·赫夫曼, R·罗耶 申请人:英特尔公司

最新回复(0)