具有非易失性存储器的系统的高效缓冲的制作方法

文档序号:6368227阅读:150来源:国知局
专利名称:具有非易失性存储器的系统的高效缓冲的制作方法
具有非易失性存储器的系统的高效缓冲
背景技术
NAND型闪存以及其他类型的非易失性存储器(“NVM”)通常用于大规模存储。例如,诸如便携式媒体播放器的消费者电子产品一般都包括闪存,以存储音乐、视频和其他媒体。因为设备的文件系统可能执行多个小的同步输入/输出(“I/O”),所以在某些情况下不能实现管芯并行(die parallelism)。这因此会减少系统带宽,并且增加对NVM页进行编程的延迟时间。在某些情景中,通过在将一个或多个I/O编程到NVM之前缓冲该1/0,可以改善对NVM编程的延迟时间。然而,在其他情况下,如果替代地将I/O直接编程到NVM,那么不加区分地将从文件系统接收到的所有I/O都进行缓冲,实际上会减缓编程进程。

发明内容
公开了用于具有非易失性存储器(“NVM”)的系统的高效缓冲的系统和方法。该系统可以在缓冲将提高系统性能的情况下选择对写入(write)进行缓冲,也可以在缓冲将会是纯粹的性能负担的情况下选择将写入直接编程到NVM。在某些实施例中,系统可以使用启发法以确定是否对从文件系统接收到的一个或多个写入命令进行缓冲。在其他实施例中,系统可以通过沿着缓冲器的页对齐边界在队列中有效地重新排序写入命令,来最小化读出能量和缓冲开销。在进一步的实施例中,系统可以最佳地将来自缓冲器的写入命令和来自队列的写入命令进行组合。在将这些命令组合后,系统可以在单个事务处理(transaction)中分派这些命令。


结合所附的附图以及在考虑下面的详细描述的情况下,本发明的上述和其他优点及方面将变得更加明显,其中在所有附图中同样的附图标记指代同样的部分,在附图中图I和图2是根据本发明各实施例配置的电子设备的框图;图3是根据本发明各实施例的非易失性存储器的功能图;图4是各个系统的例示性时序图的图形视图;图5是根据本发明各实施例配置的系统的例示性编程流的图形视图;图6是根据本发明各实施例配置的例示性缓冲器的图形视图;图7A和图7B是根据本发明各实施例的用于在非易失性存储器中进行高效缓冲的例示性处理的流程图;以及图8是根据本发明各实施例的用于确定在非易失性存储器中是否进行缓冲的例示性处理的流程图。
具体实施例方式给出了用于具有非易失性存储器(“NVM”)的系统的高效缓冲的系统和方法。系统的控制电路可以使用启发法来确定是否对从文件系统接收到的写入命令进行缓冲。例如可以使用任何合适的启发法,例如,写入命令的大小、紧接在写入命令之前分派出的写入命令的数量、保存在队列中的剩余写入命令的数量、存储器中可用空间的量、缓冲器的大小以及输入/输出(“I/o”)模式。在某些实施例当中,控制电路可以基于命令的大小来确定是否对写入命令进行缓冲。例如,如果该控制电路确定该写入命令是相对小的命令( 例如,写入命令的大小在预定阈值之下),那么该控制电路可以为该写入命令选择缓冲路径(例如,将该写入命令传送到存储器的缓冲器中)。相反地,如果该控制电路确定该写入命令是相对大的命令(例如,该写入命令的大小超过了预定阈值),那么该控制电路可以为该写入命令选择写入路径(例如,指示总线控制器将该写入命令分派到NVM中)。在某些实施例中,不是为小的写入命令自动选择缓冲路径,而是控制电路可以使用额外的启发法来确定是否可以将保存在队列中的写入命令在队列中直接组合为多写(write-multi)命令。一旦将写入命令组合为多写命令,该控制电路就可以直接将该多写命令从队列中经过写入路径分派到NVM。在其他实施例中,为了最大化并发性,该控制电路可以尝试沿着缓冲器的页对齐边界在队列中对写入命令进行重新排序。结果,可以使得在后续的读中读取能量最小,这是因为用户数据经常以与该用户数据被编程的对齐和粒度相同的对齐和粒度而被读取。在进一步的实施例中,控制电路可以将缓冲的写入命令与队列写入命令组合到同一批处理或者事务处理中,以提闻系统效率。图I例示了电子设备100的框图。在某些实施例中,电子设备100可以是或者可以包括便携式媒体播放器、蜂窝电话、口袋大小的个人计算机、个人数字助理(“PDA”)、台式计算机、膝上型计算机,以及任何其他合适类型的电子设备。电子设备100可以包括片上系统(“SoC”) 110以及非易失性存储器(“NVM”) 120。非易失性存储器120可以包括基于浮栅或者电荷诱捕技术的NAND闪存、NOR闪存、可擦除可编程只读存储器(“EPR0M”)、电可擦除可编程只读存储器(“EEPR0M”)、铁电RAM(“FRAM”)、磁阻型RAM ( “MRAM” ),或者它们的任何组合。NVM 120可以被组织成“块”,该“块”可以是最小的可擦除单元并且被进一步组织成“页”,“页”可以是可被编程或读取的最小单元。在某些实施例中,NVM120可以包括多个集成电路,其中每个集成电路可以有多个块。来自对应的集成电路的存储单元(例如,块或由块构成的页)可以构成“超级块”。NVM 120的每个存储单元(例如,页或块)都可使用物理地址(例如,物理页地址或者物理块地址)被引用。片上系统110可以包括SoC控制电路112、存储器114、加密模块116以及NVM接口118。SoC控制电路112可以控制SoC 110的一般操作和功能以及SoCllO或设备100的其他部件。例如,响应于用户输入和/或应用程序或操作系统的指令,SoC控制电路112可发送读取或写入命令到NVM接口 118,以从NVM120获取数据或者将数据存储到NVM 120。为了清晰起见,SoC控制电路112可以要求存储或取回的数据可以被称为“用户数据”,即使这些数据可能与用户或者用户应用并未直接关联。相反地,这些用户数据可以是由SoC控制电路112(例如,经由应用程序或者操作系统)生成或获取的任何合适的数字信息序列。SoC控制电路112可以包括硬件、软件和固件的任意组合以及任何部件、电路或逻辑,以可操作地驱动电子设备100的功能。例如,SoC控制电路112可以包括一个或多个在软件/固件的控制之下工作的处理器,这些软件/固件被存储在NVM 120或者存储器114中。SoC控制电路112可以分派一个或多个命令给NVM 120。在某些实施例中,SoC控制电路112可以包括块设备驱动器或者包装器(wrapper),其能被配置以分派应用程序接口(“API”)操作到NVM 120或NVM 120的控制器。在某些实施例中,SoC控制电路112可以修改块设备驱动器或者包装器的一个或多个参数,以传送信息到NVM 120。例如,通过修改一个或多个参数,SoC控制电路112可以传送与用于访问NVM 120的命令(例如,读取、·编程、擦除和/或多写命令)相关联的信息。存储器114可以包括任何合适类型的易失性存储器,例如随机存取存储器(“RAM”)(例如,静态RAM( “SRAM”)、动态随机存取存储器(“DRAM”)、同步动态随机存取存储器(“ SDRAM ”)、双倍数据速率(“DDR”) RAM),高速缓冲存储器,只读存储器(“R0M”),或者上述各存储器的任何组合。存储器114可以包括数据源,该数据源可以暂时存储用于编程到非易失性存储器120中或从非易失性存储器120读取的用户数据。在某些实施例中,存储器114可以对任何实现为SoC控制电路112的一部分的处理器用作主存储器。在某些实施例中,存储器114可以包括一个或者多个命令队列(图I中并未示出)以保存从文件系统接收的、还未被分派到NVM 120的命令(例如,读取、写入和/或调整(trim)命令)。一个或多个命令队列可以是块设备级队列。例如,存储器114可以包括用于保留读取命令的读取队列、用于保留写入命令的写入队列以及用于保留调整命令的调整队列。因此,SoC控制电路112可以扫描一个或者多个队列,以便选择一个或多个可被分派到NVM 120的命令。在已经分派了一个或者多个命令之后,SoC控制电路112可以从队列中删除那些命令。本领域技术人员可以认识到,相反地存储器114可以包括被配置以保留所有类型命令(例如,读取、写入以及调整命令)的一个队列。一个或多个队列通常会被一直服务直到该队列变空为止。在某些实施例中,SoC控制电路112可以有一套公平准则以服务于每个单独的队列。例如,SoC控制电路112可以尝试服务于这些队列以使得每个队列以与目前队列中所包含的命令的数量大致一样的速率被服务。队列被服务的顺序影响系统服务的质量。在某些实施例中,因为命令可能不能够在队列中不确定地被保存(例如,其他线程或者处理可能正在等待那些I/O完成),所以存储器114可以包括缓冲器(图I中并未示出),该缓冲器可以提供对命令的长期存储。例如,在某些情况下,SoC控制电路112可以选择一个或多个保存在队列中的写入命令,并且将所选择的写入命令传送到缓冲器。在将写入命令保存到缓冲器之后,SoC控制电路112可以从队列中删除那些写入命令。本领域技术人员可以认识到,存储器114中的缓冲器可以具有任何合适的大小。例如,缓冲器可以是相对小的缓冲器,其能够存储小于一页数据。然而,如果最小程序粒度是一页或者更大,则该缓冲器可以是能够存储一页或多页数据的、相对大的缓冲器。例如,该缓冲器可以是一页、一条、多条、一个超级块的大小,或者任何其他合适的大小。加密模块116可以是或者可以包括任何硬件或软件或者它们的组合,加密模块116被配置以基于合适的密码执行加密和解密。例如,加密模块116可以基于先进加密标准(“AES”)、数据加密标准(“DES”)或RSA。加密模块116可以为被存储在NVM 120上或发送到/接收自SoC 110的敏感数据提供安全,这些敏感数据比如个人信息或账单信息。尽管加密模块116在图I中被示出为包括在SoC 110中,但是本领域技术人员将认识到,该加密模块116也可以作为替代地被实现在NVM 120中。在某些实施例中,加密模块116可以使用一个或多个由控制电路(例如,SoC控制电路112或者NVM 120上的控制器)所提供的“加密种子”加密和解密数据,加密算法需要该加密种子以执行加密或解密。在某些实施例中,尤其对于基于AES的加密模块,加密种子可以包括密钥和初始化向量(“IV”)。为了从经加密的数据中恢复原始未加密的数据,用于解密的加密种子可能需要与原来用于加密的种子相同。NVM接口 118可以包括硬件、软件和/或固件的任何合适的组合,其被配置以用作在SoC控制电路112与NVM 120之间的接口或者驱动器。对于包括在NVM接口 118中的任何软件模块,可以将其对应的程序代码存储在NVM 120中或者存储器114中。 NVM接口 118可以执行多种功能,这些功能允许SoC控制电路112访问NVM 120并 且管理NVM 120的存储单元(例如,页、块、超级块、集成电路)和存储在其中的数据(例如,用户数据)。例如,NVM接口 118可以解释来自SoC控制电路112的读取或写入请求,执行损耗均衡,并生成与NVM 120的总线协议兼容的读取和编程指令。尽管NVM接口 118和SoC控制电路112被示出为分立的模块,但是这只是为了简化对本发明实施例的描述。其应当被理解为,这些模块可以共享硬件部件、软件部件或者二者。例如,SoC控制电路112可以执行用于NVM接口 118的基于软件的存储器驱动器。在某些实施例中,电子设备100可以包括目标设备,比如闪存驱动或者安全数字(“SD”)卡,其包括NVM120以及NVM接口 118 (例如,下面将要讨论的转换层)的某些或者所有部分。在这些实施例中,SoC 110或者SoC控制电路112可以用作目标设备的主机控制器。例如,作为主机控制器,SoC 110可向目标设备发送读取和写入请求。图2例示了电子设备200的框图,其将更详细地例示根据各实施例的电子设备100(图I)中的一些固件、软件和/或硬件部件。电子设备200可以具有以上结合图I所述的任何特征和功能,反之亦然。如图中所示,用虚线将各层进行分界。应当理解,对哪些部件落入分界线内的描绘仅仅是例示性的,一个或者多个部件可以隶属于不同层。电子设备200可以包括文件系统210、NVM驱动器212、NVM总线控制器216以及NVM220。在某些实施例中,文件系统210以及NVM驱动器212可以是软件模块也可以是固件模块,NVM总线控制器216以及NVM 220可以是硬件模块。相应地,在这些实施例中,NVM驱动器212可以代表NVM接口 218的软件或固件方面,NVM总线控制器216可以代表NVM接口 218的硬件方面。文件系统210可以包括任何合适类型的文件系统,比如文件分配表(“FAT”)文件系统或者分层级文件系统加(“HFS+”),并且文件系统210可以是电子设备200的操作系统的一部分(例如,图I中SoC控制电路112的一部分)。在某些实施例中,文件系统210可以包括闪速文件系统,其提供页的逻辑到物理的映射。在这些实施例中,文件系统210可能执行下面将要讨论的NVM驱动器212的某些或者全部功能,因此文件系统210和NVM驱动器212可以是也可以不是分立的模块。文件系统210可以为应用程序和操作系统管理文件和文件夹结构。文件系统210可以在电子设备200上所运行的应用程序或操作系统的控制下工作,并且可以在应用程序或操作系统请求从NVM 220中读取信息或将信息存储到NVM220时提供写入和读取命令到NVM驱动器212。与每个读取或者写入命令一起,文件系统210可以提供一个逻辑地址以指示用户数据应该从哪里被读取或者向哪里写入,该逻辑地址例如是逻辑页地址或者具有页偏移的逻辑块地址(“LBA”)。文件系统210可以提供读取和写入请求到NVM驱动器212,该NVM驱动器212与NVM220不直接兼容。例如,逻辑地址可以使用基于硬驱动的系统的典型的协议或协定。与闪存不同,基于硬驱动的系统可以重写存储单元而不先执行块擦除。此外,硬驱动可以不需要损耗均衡以增强该设备的使用寿命。因此,NVM接口 218可以实现存储器特定、提供方特定或者二者均特定的任何功能,以处理文件系统请求并按照适合NVM220的方式执行其他管理功能。NVM驱动器212可以包括转换层214。在某些实施例中,转换层214可以是或者可以包括闪速转换层(“FTL”)。对写入命令,转换层214可以将所提供的逻辑地址映射到NVM 220上空闲的、被擦除的物理位置。对读取命令,转换层214可以使用所提供的逻辑地 址来确定存储所请求的数据的物理地址。因为每个NVM可能根据NVM的大小或者提供方的不同而具有不同的布局,所以这种映射操作可能是存储特定的和/或提供方特定的。除逻辑到物理地址映射之外,转换层214还可以执行任何其他合适的功能。例如,转换层214可以执行其他功能中的任何一种,其他功能可以是对于闪速转换层来说典型的功能,比如垃圾收集或者损耗均衡。NVM驱动器212可以与NVM总线控制器216接口连接,以完成NVM访问命令(例如,编程、读取以及擦除命令)。总线控制器216可以用作到NVM220的硬件接口,而且可以 使用总线协议、数据速率以及NVM220的其他规范与NVM220进行通信。在某些实施例中,在从文件系统210接收到命令(例如,写入命令)时,NVM接口218可指示NVM总线控制器216分派命令(例如,API操作)到NVM220。在某些实施例中,NVM接口 218可以使用转换层214去获取NVM220的一个或多个存储单元的物理地址。NVM接口 218可以基于存储管理数据来管理NVM220,有时这里也称存储管理数据为“元数据”。元数据可以由NVM驱动器212生成,或者可以由在NVM驱动器212的控制下 工作的模块生成。例如,元数据可以包括用于管理逻辑地址与物理地址之间的映射、劣块管理、损耗均衡、用于检测或校正数据错误的纠错码(“ECC”)数据、或者它们的任何组合的任何信息。元数据可以包括与用户数据一起由文件系统210所提供的数据,比如逻辑地址。这样,一般来说,“元数据”可以是关于或相关于用户数据的任何信息,或者是通常用于管理非易失性存储器的操作和存储单元的任何信息。NVM接口 218可以被配置为在NVM 220中存储元数据。在某些实施例中,NVM接口218可以在存储用户数据的同一存储单元(例如,页)处存储与用户数据相关联的元数据。例如,NVM接口 218可以在NVM 220的一个或者多个存储单元存储用户数据、相关联的逻辑地址以及用于用户数据的ECC数据。NVM接口 218也可以在同一存储单元存储关于用户数据的其他类型的元数据。NVM接口 218可以存储逻辑地址,使得在NVM 220上电时或者在NVM220工作期间,电子设备200可以确定什么数据留在该处。特别地,因为文件系统210可以根据用户数据的逻辑地址而非物理地址来引用该用户数据,所以NVM接口 218可以一起存储用户数据和逻辑地址以保持它们之间的关联性。这样,即使NVM 220中保持物理到逻辑映射的单独的表过期了,NVM接口 218仍可以在例如电子设备200上电或重启时确定正确的映射。如上所讨论,NVM(例如,图I中的NVM 120或图2中的NVM 220)可以被组织成管芯(die)、块、页、超级块等等。例如,图3示出了 NVM 300的示意图。NVM 300可以与NVM120 (图I)或NVM 220 (图2)相同或者相似。图3仅仅意在例示NVM300的组织布局,而非指示非易失性存储器的实际物理布局。例如,尽管管芯0在图3中被例示为与管芯I相邻,但是这只是为了例示这些管芯之间的功能关系,而在NVM300的实际物理布局中,这些管芯彼此之间可能相邻也可能不相邻。此外,尽管图3中示出了一定数量的管芯、块以及页,但这只是为了例示的目的,本领域技术人员可以认识到NVM 300可以包含任何合适数量的管芯、块和页。作为例示, NVM 300中的每个管芯可以包括4096个块,每个块基于是否是SLC块、2比特MLC块或者3比特MLC块可以包括64、128或者192个页。另外,NVM 300中每页可以具有任何合适的大小,例如,2KiB,4KiB,8KiB 或 16KiB。如图3中所示,NVM300可以包括一个或多个管芯(例如,集成电路),比如管芯O、管芯I、管芯2和管芯3。NVM 300的每个管芯可以被组织成一个或者多个“块”。例如,管芯0至3被例示为各自组织成块0至3。管芯的每个块可以被组织成一个或多个页。例如,管芯0至3中每一个的块0被示出为组织成页0至3。NVM300中的每一页可以包括任何合适的信息。例如,这些页可以包括用户数据、元数据或者二者。在某些实施例中,像ECC数据这样的元数据可以被包括在页中以提供对存储在NVM 300中的信息的检错和/或纠错。页大小随时间增加以被偿编程NVM所需的更长的时间。这就是说,因为NVM的存储单元在大小方面减小了,所以不得不将更精确的脉冲应用到NVM的存储单元,,以便编程那些存储单元中的数据。相应地,通过增加页的大小,相同量的用户数据可以在任何特定的时间段内被编程。这样做的实际效果是使得电子设备的用户不再经历NVM的整体编程速度降低的问题。NVM 300也可以包括一个或者多个超级块,超级块包括来自于每个管芯的在该管芯中具有相同的位置或者“块编号”的一个块。例如,NVM300的超级块0可以包括每个管芯0至3的块O。类似地,NVM 300的超级块I可以包括每个管芯0至3的块1,NVM300的超级块2可以包括每个管芯0至3的块2,以此类推。可以通过将一个或多个块虚拟链接或者“条带化(strip) ”到一起来形成超级块。块不必位于待虚拟地链接为超级块的每个管芯中相同的列。事实上,可以随机从两个或者更多个管芯中随机选出块以形成超级块。在某些实施例中,一个超级块可以只包括一个块。超级块提供操作的并行性,因此使得能够对位于不同管芯上的块并行地执行编程、读取以及擦除操作。此外,来自两个或者更多个管芯的页可以被虚拟地链接在一起以形成超级页或者条”。例如,条302可以包括来自每个管芯0至3的块0的页O。类似地,条304可以包括来自每个管芯0至3的块0的页3。在NVM接口中实现的转换层(例如,图2中的转换层214)可以跟踪超级块或条。一般地讲,编程时间对于特定条(例如,条302或者304)中包括的各页可以保持相同。系统中的文件系统(例如,图2中的文件系统210)可以在逻辑空间中工作。这样,如上面所讨论的,系统中的每个文件都可以映射到一个或多个LBA。相应地,一个或者多个LBA可以被映射到NVM中的一个或者多个物理页地址。然而,当NVM被配置成具有能够存储多个LBA的更大页时,文件系统有时可发送写入命令,该写入命令不能完全填满NVM中的一个物理页。在传统的系统中,控制电路(例如,图I中的控制电路112)可使用无效数据来填满页中未被填充的部分,并且将写入命令与无效数据一起编程到NVM。这种操作浪费了 NVM中的空间,并且可能导致增加要在NVM上执行的GC的量。 因此,为了提高系统效率,系统可以被配置为在单个事务处理中分派多个写入命令到NVM。图4示出了用于各系统的例示性时序图。例如,如图4所示,如果在单个操作(例如,作为一个多写命令)中正在对一页(如时序图400中所示)或多页(如时序图402中所示)进行编程,编程时间(t_prog)并非实质上不同。这对于在单个条中包括多个页的情况是尤为正确的。此外,如果在单个操作中正在对一页或多页进行编程,那么启动编程的时间(t_startup)也不会实质上变化。在此所使用的“启动编程的时间”指的是激活NVM接口(例如,图2中的NVM接口 218)所花的时间。另外,在大多数情景中,传送内容到页缓冲器的时间(t_transfer)相比较短。例如,如时序图402中所示,用于编程多写命令的t_transfer仍然可以比t_prog持续时间更短。然而,如时序图404所示,由于多个t_pix)g的结合使得单独编程多页的效率较差。如果每次可被编程的用户数据的量相对较小,那么系统的效率将特别受影响。因此,为了增加可并行执行的管芯编程的量以及在特定的I/O事务处理中可编程的用户数据的量,控制电路可以将多个写入命令组合为单个多写命令。本领域技术人员可以认识到,可以通过任何合适的方法形成多写命令。例如,控制电路可以通过将与多个命令相关联的一组逻辑地址、一组计数器以及一组缓冲器分别组合为逻辑地址阵列、计数器阵列和缓冲器阵列,而形成多写命令。在形成多写命令后,控制电路可以分派多写命令到NVM(例如,以API操作的形式)。通过形成并分派多写命令,用户数据可以在NVM中被更高效地编程而不浪费宝贵的空间。在某些实施例中,系统可以具有几种选择以把数据写入分到多个写入路径中。图5示出了系统的例示性编程流500的图形视图。如上所讨论的,文件系统(例如,图2中的文件系统210)可以发出一个或者多个命令(例如,读取、写入和/或调整命令),其可以保存在系统中的一个或多个队列中。例如,如图5所示,队列502可以表示一个写入队列,该写入队列可以被配置以保留一个或者多个写入命令。然而,本领域技术人员可以认识到,系统可以包括用于存储读取和/或调整命令的额外队列。另选地,队列502可以被配置成存储写入、读取以及调整命令。在某些实施例中,在写入命令在队列502中被接收后,控制电路(例如,图I中的控制电路112)可以选择两条路径中的一条以分派该写入命令。例如,控制电路可以选择一条写入路径(例如,路径504)以分派写入命令到NVM510。NVM 510可以与NVM120 (图I)、NVM220 (图2)或NVM300(图3)相同或者相似。在某些情况下,通过选择路径504,写入命令可以被直接分派到硬件引擎506。硬件引擎506可以是例如直接存储器存取(“DMA”)引擎。在某些实施例中,在分派写入命令到硬件引擎506之前,控制电路可以通过使用加密模块(例如,图I中的加密模块116)来加密写入命令。如上所述,加密模块可以通过使用任何合适的加密标准来加密写入命令,这些加密标准比如是AES、DES或者RSA。接下来,控制电路可以将写入命令传递到NVM接口 508中。NVM接口 508可以与图2中的NVM接口 218相同或者实质上相似。一旦NVM接口 508接收到写入命令,NVM总线控制器(例如,图2中的NVM总线控制器216)就可以被指示以跨总线512将写入命令分派到NVM510。在某些情况下,代替选择路径504,控制电路可以为特定的写入命令选择缓冲路径(例如,路径520)。通过选择路径520,控制电路可以将写入命令从队列502传送到缓冲器522中。如上所讨论的,缓冲器522可以被存储在易失性存储器(例如,图I中的存储器·114)中,并能够被配置以存储任何合适数量的写入命令。通过在缓冲器522中存储一个或多个写入命令,控制电路可以在指示总线控制器经由路径524将多个命令同时分派到NVM510之前,等待从文件系统接收额外的写入命令。例如,多个命令可以组合为一个多写命令,该多写命令随后可以被分派到NVM510。在某些实施例中,控制电路可以指示加密模块在写入命令被传送到缓冲器522之前加密该写入命令。在对该写入命令进行加密之后,控制电路可以在缓冲器522中存储加密的写入命令。在其他实施例中,控制电路可将未加密的写入命令传送到缓冲器522。然而,在这些实施例中,控制电路可能需要复制一个或多个加密种子(例如,一个或多个密钥和IV)到易失性存储器(例如,图I中的存储器114)。随后,当写入命令准备好从缓冲器522被分派时,控制电路可指示加密模块使用所存储的加密种子来加密写入命令。因此,对这样的配置,缓冲器522可以与独特的加密特性(例如,一组固定的加密种子)相关联。为了保持系统的一致性,可以通过系统中的应用程序、操作系统或文件系统发出一个或者多个“边带信号”。这里所使用的“边带信号”可以指可以由应用程序、操作系统或者文件系统的高速缓存算法生成用以保持一致性的任何合适的信号。例如,一种类型的边带信号可以是同步高速缓存信号,其可以由系统中的一个或多个应用程序生成。另一种边带信号可以是强制单元访问(“FUA”)信号,其可以由HFS+生成。响应于接收到一个或多个这样的边带信号,控制电路可以指示总线控制器去清理缓冲器。也就是说,控制电路可以指示总线控制器经由路径524分派所有目前存储在缓冲器中的命令到NVM。因为路径520涉及从队列502到缓冲器522复制写入命令的额外步骤,所以系统中可能产生附加的通信量。因此,在某些情景中,路径520与路径504相比具有较低的效率。例如,如果所传送的命令是较大的命令,那么经由路径504直接编程该命令到NVM 510将具有更高的效率。另一方面,如果控制电路不加区分地选择路径504去分派所有命令(包括小命令),系统性能也会降低。因此,控制电路可能需要应用一种或者多种启发法去选择最适于分派特定写入命令的路径。可以使用的一种启发法是依据写入命令的大小。至少部分地基于写入命令的大小,控制电路可确定是否缓冲写入命令。例如,控制电路可以首先确定保存在队列502中的写入命令的大小。控制电路然后可以确定该写入命令的大小是否低于预定阈值。响应于确定写入命令的大小低于预定阈值(例如,写入命令是相对较小的写入命令),控制电路可以确定对该写入命令进行缓冲。因此,控制电路可以将写入命令经由路径520从队列502传送到缓冲器522。一旦写入命令被存储在缓冲器522中,该命令可以稍后与其他写入命令相组合。相反地,如果控制电路确定写入命令的大小高于预定阈值(例如,写入命令是相对较大的写入命令),那么该控制电路可以确定不缓冲该写入命令。结果,控制电路可以指示总线控制器经由路径504将写入命令从队列502分派到NVM510中。
因此,通过基于写入命令的大小选择路径,控制电路可以减少整个系统的用于执行写入命令总共所需的带宽。在其他实施例中,除了写入命令的大小之外,控制电路还可以使用其他的启发法以确定是选择路径504还是选择路径520。例如,控制电路可以使用一种或者多种启发法以确定通过将多个写入命令直接在队列502中组合成一个多写命令是否可以提高系统效率。特别地,一旦写入命令被组合成多写命令,就可经由路径504从队列502中直接将该多写命令分派出去。可以使用的一种启发法是依据队列502中所保存的写入命令的数量。例如,控制电路可以确定队列502中所保存的写入命令的数量是否超过预定数量。响应于确定写入命令的数量超过预定数量,控制电路可以把这些写入命令组合成多写命令,并且可以指示总线控制器将该多写命令从队列502分派到NVM 510。这样,控制电路可以获得同时分派多个写入命令的益处,同时也避免向缓冲器522复制写入命令的额外步骤。另外一种可以使用的启发法是I/O模式。例如,控制电路可以假设I/O —般是成批到达。例如,在特定的时间段期间,控制电路更可能接收一串读取命令或者写入命令,而不是散布有读取命令的写入命令。因此,如果控制电路已经接收了一系列连续的写入,那么该控制电路可能期望在不久的将来接收额外的连续的写入。在这样的假设下,控制电路可以确定在队列502中最新接收的一组写入命令是否是连续的。响应于确定最新接收的一组写入命令是连续的,控制电路可以等待以在队列502中接收额外的写入命令。一旦控制电路接收到那些额外的写入命令,控制电路就可以将这些额外的写入命令与最新接收的那组命令组合成多写命令。控制电路然后可以指示总线控制器以将该多写命令从队列502分派到NVM 510。因此,控制电路可以针对连续的写入命令而绕过缓冲器522。在某些实施例中,当控制电路正等待在队列502中接收额外的写入命令时,控制电路可以相反地服务于存储在存储器中的读取队列和/或调整队列。这样,控制电路可以忽略现有的公平准则,而允许写入命令在队列502中堆叠。作为另一个示例,控制电路可以基于紧接在写入命令之前的所分派的写入命令的数量、和/或自最后一个被分派的写入命令起经过的时间量,来确定是否缓冲较小的写入命令。也就是说,基于对过去访问模式的观察,该控制电路可以确定额外的写入命令可能在不久的将来到达。因此,在队列502中保持小写入命令并等待额外的写入命令可能更加高效。例如,如果控制电路确定紧接在写入命令之前的所分派的写入命令的数量超过了预定数量,那么控制电路可以等待以在队列502中接收一个或多个附加的写入命令。类似地,如果自最后一个被分派的写入命令起经过的时间量少于预定时间段(例如,若干毫秒),那么控制电路可以等待以接收额外的写入命令。一旦控制电路在队列502中接收到一个或者多个额外的写入命令,那么该控制电路可以把这些额外的写入命令与较小的写入命令组合成多写命令。控制电路随后可以指示总线控制器将多写命令从队列502分派到NVM 510。在上面所讨论的例子中,本领域技术人员可认识到,控制电路可以在经过的一段 时间(例如,若干毫秒)后从队列502传送一个或多个写入命令到缓冲器522。也就是,如果控制电路实际上并未接收到所期望的写入命令,那么该控制电路可将较小的写入命令传送到缓冲器522。作为有一个示例,控制电路可以基于保存在队列502中的剩余写入命令的数量来确定是否缓冲较小的写入命令。例如,如果队列502只有单个写入命令或者较少数量的写入命令,则控制电路可将较小的写入命令传送到缓冲器522。作为再一示例,控制电路可以至少部分地基于存储器中可用存储空间的量来确定是否执行缓冲。例如,如果存储器中可用空间的量低于预定阈值,那么控制电路将选择路径504并绕过缓冲。另一方面,如果可用空间的量高于预定阈值,那么控制电路可以选择路径520并且缓冲较小的写入命令。作为还一示例,控制电路可以使用I/O调度算法的过去的性能来确定是否进行缓冲。比如,控制电路可以保持调度算法的过去性能的记分卡,该记分卡可以包括过去缓冲决定的成功率。如果控制电路确定该成功率相对较低,那么控制电路可以调整用于确定是否进行缓冲的启发法。作为另一例子,控制电路可以基于缓冲器的大小,或者,特别地,基于缓冲器大小相对于写入命令的大小的关系,来确定是否进行缓冲。例如,如果写入命令的大小等于或大于缓冲器522的大小,那么控制电路可以确定不传送该写入命令到缓冲器522,并且相反地选择将该写入命令直接经由路径504分派到NVM510。然而,如果缓冲器的大小大于写入命令的大小,那么控制电路可以应用一种或者多种算法,以针对特定的写入范围减少跨管芯的碎片。特别地,可以假设用户数据以与其被编程时的粒度相同的粒度从NVM读取(例如,沿着类似的边界)。例如,系统可以保存文本文档到NVM。随后,系统也将可能加载整个文档。作为另一个例子,当系统在NVM中编程数据库时,使用较小的、随机的更新对数据库进行编程。同样地,稍后,将可能使用随机的读取来访问该数据库。这样,该系统可期望与一系列的较小的写入命令相关联的用户数据将被同步读取。通常,系统可以单独地编程每个写入命令到NVM中。结果,与写入命令相关联的用户数据可分在多个管芯中,这可以增加稍后读取用户数据的能量(例如,整体功率消耗)。这是因为每个管芯都需要被激活以读取用户数据。因此,为了最大化并行性(例如,最小化通道双重化(channel doubling))并且最小化读取能量,控制电路可以尝试沿着缓冲器的页对齐边界在队列中重新排序写入命令。特别地,控制电路可以尝试从队列中选择一个或多个命令以沿着一个或多个页对齐边界填充缓冲器。因此,在这样的情景中,当存储写入命令到缓冲器中时系统可以考虑到页对齐。例如,如图6所示,缓冲器600包括8个页对齐部分(例如,页对齐部分0至7),其中每个页对齐部分包括保持4个LBA的空间。缓冲器600的每个页对齐部分可以配置为存储与NVM (例如,图3中的NVM300或图5中的NVM510)中的一页相同量的数据。本领域技术人员可以认识到,缓冲器600可以包括任何合适数量的页对齐部分。例如,如所示出的,缓冲器600的页对齐部分0和I已经被写入命令完全填充,而缓冲器600的页对齐部分2仅被部分填充。特别地,写入命令0至3被存储在页对齐部分0中,写入命令4至7被存储在页对齐部分I中,而写入命令8和9被存储在页对齐部分2 中。缓冲器600中的其余部分为空。基于这些信息,控制电路可以确定存储在缓冲器600中的写入命令目前并未与至少一个页边界对齐(例如,页对齐部分2并未被完全填充)。响应于确定写入命令并未在缓冲器600中对齐,该控制电路可以检测填充缓冲器600到至少一个页边界所需要的填充大小。对于页对齐部分2,例如,该控制电路可以确定其填充大小是两个LBA的大小(例如,区域 602 和 604)。控制电路可以随后确定队列(例如,图5中的队列502)中是否有至少一个写入命令,其大小等于填充大小。例如,对于缓冲器600中的页对齐部分2,控制电路可以选择一个具有两个LBA大小的写入命令,或者选择两个各自具有一个LBA大小的写入命令。本领域技术人员可以认识到,可以采用任何合适的算法来确定在队列中是否具有至少一个写入命令,其大小等于填充大小,该算法例如可以是最佳适应(best-fit)算法。本领域技术人员还可以认识到,如果队列中有多个写入命令满足填充大小,在控制电路可以使用一种或多种上面所述的启发法来选择用于填充缓冲器的写入命令。因此,如果控制电路确定至少有一个写入命令大小等于填充大小,那么控制电路可以将该至少一个写入命令从队列传送到缓冲器600。在图6所示的例子中,例如,控制电路可以完全填充缓冲器600的页对齐部分2 (例如,使用一个或多个写入命令填充区域602和 604)。一旦缓冲器600被填充到至少一个页对齐部分(例如,存储在缓冲器600中的写入命令与页对齐部分2对齐),控制电路就可以把命令组合成一个多写命令。生成多写命令后,控制电路可以指示总线控制器从缓冲器600分派多写命令到NVM。在某些实施例中,如果存储在缓冲器600中的写入命令是经加密的命令,那么控制电路可以首先指示加密模块在将至少一个命令从队列传送到缓冲器600之前对其进行加密。在命令被加密之后,控制电路可以将该至少一个经加密命令存储在缓冲冲器600中。如上所讨论,控制电路可以在缓冲器600的页对齐部分被完全填充之前接收一个或多个边带信号(例如,同步高速缓存或FUA信号)。在这种情景下,控制电路可以使用无效数据填充缓冲器600到页对齐部分(例如,页对齐部分2)的末尾(例如,使用无效数据填充区域602和604)。控制电路随后可将存储在缓冲器600中的写入命令与无效数据组合成多写命令,并指示总线控制器从缓冲器600分派该多写命令到NVM。因此,通过对队列中的写入命令进行最优化重新排序以及适配这些写入命令中的一个或多个到缓冲器中的页对齐部分,系统可以最小化读取路径上的读取能量、最小化缓冲开销、并减少NVM中的碎片。回到图5,代替选择路径504 或路径520,控制电路可以将经缓冲的写入命令与队列写入命令经由路径530组合成相同的批处理或者事务处理(例如,作为一个多写命令)。例如,控制电路可以从队列502中选择至少第一写入命令并从缓冲器522中选择至少第二写入命令,其中第一和第二写入命令可以被选择为使得NVM510中的页交叉最小。在选择了第一和第二写入命令后,控制电路可以组合这些命令以形成一个多写命令。最终,控制电路可以指示总线控制器经由路径530向NVM分派多写命令。在某些情况下,在将缓冲器中的写入命令与队列中的写入命令组合时,控制电路可能需要在单个事务处理中组合多种类型的加密特性。例如,控制电路可以应用至少第一加密种子到从队列502选择的一个或多个写入命令。此外,如果存储在缓冲器522中的写入命令是未加密命令,那么控制电路可以从存储器(例如,图I中的存储器114)中获得一个或多个加密种子。在获得该一个或多个加密种子后,控制电路可以应用该一个或多个加密种子到从缓冲器522选择的一个或多个写入命令。控制电路随后可以将第一和第二经加密的写入命令组合成多写命令,并分派该多写命令到NVM 510。现在参考图7A-7B和图8,示出了根据本发明各实施例的例示性处理的流程图。这些处理可以由系统(例如,图I中的电子设备100或图2中的电子设备200)中的一个或多个部件执行。例如,图7A-7B和图8的处理中的至少一些步骤可以由控制电路(例如,图I中的SoC控制电路112)执行。本领域技术人员可以认识到,这些步骤中的一个或多个可由NVM接口(例如,图I中的NVM接口 118或者图2中的NVM接口 218)执行。虚线框意在例示其中的步骤基于系统的配置可能被执行也可能不被执行。首先转向图7A和图7B,示出了用于在NVM(例如,图I中的NVM 120、图2中的NVM220、图3中的NVM 300或者图5中的NVM 510)中进行高效缓冲的处理700。处理700可以起始于步骤702,并且在步骤704,控制电路可以从文件系统中(例如,图2中的文件系统210)接收第一写入命令用于编程到NVM。在步骤706,控制电路可在队列(例如,图5中的队列502)中保存第一写入命令。继续到步骤708,控制电路可以应用一种或多种启发法到第一写入命令,以确定是否传送该第一写入命令到缓冲器(例如,图5中的缓冲器522或图6中的缓冲器600)。也就是说,控制电路可以确定是否对第一写入命令执行缓冲操作。如果在步骤710控制电路确定不传送第一写入命令,那么处理700将转到步骤712。在步骤712,控制电路可以指示加密模块(例如,图I中的加密模块116)加密第一写入命令。随后,在步骤714,控制电路可以指示总线控制器(例如,图2中的NVM总线控制器216)分派该经加密的写入命令到NVM(例如,经由图5中的路径504)。例如,控制电路可配置为指示总线控制器分派经加密的写入命令到硬件引擎(例如,图5中的硬件引擎506)。处理700随后可以在步骤716处结束。相反地,如果在步骤710处控制电路确定传送第一写入命令,那么处理700将转到步骤718,或者,可选地转到步骤720。特别地,如果系统被配置成使得命令在被存储到缓冲器中之前被加密,那么随后在步骤718控制电路可以指示加密模块来加密第一写入命令。另一方面,如果系统被配置成将未加密命令存储在缓冲器中,那么处理700将直接转到步骤720。在这种配置下,控制电路也可以复制一个或多个加密种子到存储器(例如,图I中的存储器114)。因此,在步骤720,控制电路可以在缓冲器中存储已经加密的命令或者未加密的命令(例如,经由图5中的路径520)。继续到步骤722,控制电路可以确定缓冲器中所存储的写入命令当前是否与至少一个页边界对齐。如果在步骤722处控制电路确定存储在缓冲器中的写入命令当前与至少一个页边界对齐,那么处理700可以转到步骤724或步骤726。也就是说,如果缓冲器中存储的是未加密命令,那么在步骤724,控制电路可以指示加密模块使用一个或多个存储的加密种子来对写入命令进行加密。然而,如果缓冲器中存储的是已加密命令,那么处理700将直接转到步骤726。 在步骤726,控制电路可以将缓冲器中的写入命令组合成多写命令。随后,在步骤 728,控制电路可指示总线控制器从缓冲器分派多写命令到NVM(例如,经由图5中的路径524)。处理700可以在步骤716处结束。相反地,如果在步骤722处控制电路确定缓冲器中存储的写入命令当前没有与至少一个页边界对齐,那么处理700将转到步骤730。在步骤730,控制电路可以检测填充该缓冲器到至少一个页边界所需的填充大小。继续到步骤732,控制电路可以确定队列中是否有至少一个写入命令的大小等于填充大小。如果在步骤732中,控制电路确定有至少一个写入命令的大小等于填充大小,那么处理700将转到步骤734。在步骤734,控制电路可以从队列传送至少一个写入命令到缓冲器。处理700随后可以返回到步骤724或步骤726(例如,取决于缓冲器中的写入命令是否被加密)。相反地,如果在步骤732控制电路确定队列中没有大小等于填充大小的至少一个写入命令,那么处理700将转到步骤736。在步骤736处,控制电路可以等待额外的写入命令到来(例如,等待接收来自于文件系统的额外写入命令)。处理700随后可以在步骤716处结束。现在转到图8,示出了用于确定是否在NVM(例如,图I中的NVM 120、图2中的NVM220、图3中的NVM 300或图5中的NVM 510)中进行缓冲的处理800。在某些实施例中,处理800可以代表处理700中(图7)的应用至少一种启发法的步骤708和确定是否传送的步骤710的更详细的阐释。处理800可以始于步骤802,并且在步骤804处,控制电路可以确定队列(例如,图5中的队列502)中所保存的写入命令的大小。随后,在步骤806处,控制电路可确定写入命令的大小是否低于预定阈值。如果在步骤806处控制电路确定写入命令的大小不低于预定阈值(例如,写入命令是较大的命令),那么处理800将转到步骤808。在步骤808处,控制电路可以指示总线控制器从队列向NVM分派写入命令(例如,经由图5中的路径504)。处理800随后可以在步骤810处结束。相反地,如果在步骤806处控制电路确定写入命令的大小低于预定阈值(例如,写入命令是较小的命令),那么处理800将转到步骤812。在步骤812,控制电路可以确定队列中保存的写入命令的数量是否超过预定数量。如果在步骤812处控制电路确定队列中保存的写入命令的数量超过了预定数量,那么处理800将转到步骤814。在步骤814处,控制电路可以将写入命令组合成多写命令。处理800随后可以转到步骤808,在步骤808中可将多写命令从队列分派到NVM。相反地,如果在步骤812处控制电路确定队列中保存的写入命令的数量没有超过预定数量,则处理800将转到步骤816。在步骤816处,控制电路可确定队列中最新接收的一组写入命令是否为连续的。如果在步骤816处控制电路确定最新接收的一组写入命令为连续的,那么处理800将转到步骤818。在步骤818处,控制电路可以等待在队列中接收额外的写入命令。随后,在步骤 820,控制电路可以确定是否已经从文件系统(例如,图2中的文件系统210)接收到至少一个额外的写入命令。例如,控制电路可以在短的时间段(例如,若干毫秒)后再做出这个确定。如果在步骤820处控制电路确定已经从文件系统接收到至少一个额外的写入命令,则处理800将转到步骤814,在步骤814处可以将写入命令组合成多写命令。相反地,如果在步骤820处控制电路确定并未从文件系统接收到至少一个额外的写入命令,则处理800将转到步骤822。在步骤822处,控制电路可以传送写入命令到缓冲器(例如,经由图5的路径520)。处理800然后可以在步骤810处结束。相反地,如果在步骤816处控制电路确定队列中最新接收的一组写入命令不是连续的,那么处理800将转到步骤824。在步骤824处,控制电路可以确定紧接在该写入命令之前的被分派的写入命令的数量是否超过预定数量。如果在步骤824处控制电路确定被分派的写入命令的数量超过了预定数量,那么处理800可以转到步骤818,在步骤818中控制电路可以等待在队列中接收额外的命令。相反地,如果在步骤824处控制电路确定被分派的写入命令的数量并未超过预定数量,那么处理800可以转到步骤822,在步骤822中控制电路可以传送写入命令到缓冲器。应当理解,图7A-7B和图8中的处理700和800只是例示性的。在不脱离本发明的范围的情况下,可以对其中任何步骤进行删除、修改或组合,并且可以增加额外的步骤。给出本发明各实施例仅是出于例示的目的,并不构成对本发明的限制。
权利要求
1.一种用于将数据写入分到多条写入路径的方法,所述方法包括 从文件系统接收第一写入命令用以编程到非易失性存储器中(NVM); 在队列中保存所述第一写入命令; 确定所述第一写入命令的大小; 至少部分地基于所述第一写入命令的大小,确定是否执行缓冲;以及 响应于确定执行缓冲,从所述队列向缓冲器传送所述第一写入命令。
2.如权利要求I所述的方法,其中,响应于确定不执行缓冲,从所述队列向所述NVM分派所述第一写入命令。
3.如权利要求2所述的方法,进一步包括 确定自最后被分派的写入命令起经过的时间量是否少于预定时间段;以及响应于确定自最后被分派的写入命令起经过的时间量少于所述预定时间段,在从所述队列向所述NVM分派所述第一写入命令之前,等待在所述队列中接收额外的写入命令。
4.如权利要求1、2或3所述的方法,其中,所述确定是否执行缓冲进一步包括 确定是否所述第一写入命令的大小低于预定阈值;以及 响应于确定所述第一写入命令的大小低于所述预定阈值,确定保存在所述队列中的写入命令的数量是否超过预定数量。
5.如权利要求4所述的方法,进一步包括 响应于确定保存在所述队列中的写入命令的数量超过所述预定数量,将所述写入命令组合成多写命令;以及 从所述队列向所述NVM分派所述多写命令。
6.如权利要求1、2或3所述的方法,其中,所述确定是否执行缓冲进一步包括 确定所述队列中最新接收的一组写入命令是否为连续的; 响应于确定所述最新接收的一组写入命令为连续的,等待在所述队列中接收额外的写入命令。
7.如权利要求6所述的方法,进一步包括 从所述文件系统接收至少一个额外的写入命令; 将所述至少一个额外的写入命令与所述最新接收的一组写入命令组合为多写命令;以及 从所述队列向所述NVM分派所述多写命令。
8.一种用于访问非易失性存储器(NVM)的存储器接口,所述存储器接口包括 操作为与所述NVM通信的总线控制器;以及 控制电路,操作为 在队列中接收第一写入命令; 应用至少一种启发法到所述第一写入命令,以便确定是否传送所述第一写入命令到缓冲器; 响应于确定不传送所述第一写入命令到所述缓冲器,指示加密模块对所述第一写入命令进行加密;以及 指示所述总线控制器分派经加密的写入命令到所述NVM。
9.如权利要求8所述的存储器接口,其中,所述控制电路进一步操作为指示所述总线控制器分派所述经加密的写入命令到直接存储器存取(DMA)引擎。
10.如权利要求8或9所述的存储器接口,其中,响应于确定传送所述第一写入命令到所述缓冲器,所述控制电路进一步操作为 指示所述加密模块对所述第一写入命令进行加密;以及 在所述缓冲器中存储所述经加密的写入命令。
11.如权利要求8或9所述的存储器接口,其中,响应于确定传送所述第一写入命令到所述缓冲器,所述控制电路进一步操作为 复制至少一个加密种子到易失性存储器;以及 在所述缓冲器中存储所述第一写入命令。
12.如权利要求8、9、10或11所述的存储器接口,其中,所述至少一种启发法包括以下中的至少一个所述第一写入命令的大小、紧接在所述第一写入命令之前的被分派的写入命令的数量、保存在所述队列中的剩余写入命令的数量、所述易失性存储器中的可用空间的量、所述缓冲器的大小以及输入/输出模式。
13.如权利要求12所述的存储器接口,其中,所述控制电路进一步操作为 确定所述第一写入命令的大小是否等于或大于所述缓冲器的大小; 响应于确定所述第一写入命令的大小等于或大于所述缓冲器的大小,确定不传送所述第一写入命令到所述缓冲器。
14.如权利要求12所述的存储器接口,其中,所述控制电路进一步操作为 确定紧接在所述第一写入命令之前的被分派的写入命令的数量是否超过预定数量; 响应于确定所述被分派的写入命令的数量超过所述预定数量,等待在所述队列中接收至少一个额外的写入命令。
15.如权利要求14所述的存储器接口,其中,所述控制电路进一步操作为 在所述队列中接收至少一个额外的写入命令; 将所述至少一个额外的写入命令与所述第一写入命令组合为多写命令;以及 指示所述总线控制器从所述队列向所述NVM分派所述多写命令。
16.如权利要求8、9、10、11、12、13、14或15所述的存储器接口,其中,所述控制电路进一步操作为 接收至少一个边带信号;以及 指示所述总线控制器将存储在所述缓冲器中的所有命令分派到所述NVM。
17.一种用于组合写入命令以分派到非易失性存储器(NVM)的方法,所述方法包括 从队列选择至少第一写入命令并从缓冲器选择至少第二写入命令,其中所述至少第一和第二写入命令被选择为使得所述NVM中的页交叉最小; 组合所述至少第一和第二写入命令以形成多写命令;以及 分派所述多写命令到所述NVM。
18.如权利要求17所述的方法,其中,所述组合所述至少第一和第二写入命令进一步包括应用至少第一加密种子到所述至少第一写入命令。
19.如权利要求18所述的方法,其中,所述至少第二写入命令是未加密的。
20.如权利要求19所述的方法,其中,所述组合所述至少第一和第二写入命令进一步包括从易失性存储器中获得至少第二加密种子;以及 应用所述至少第二加密种子到所述至少第二写入命令。
21.—种系统,包括 包含多个页的非易失性存储器(NVM); 操作为与所述NVM通信的总线控制器; 包含队列和缓冲器以存储一组写入命令的易失性存储器;以及 控制电路,其操作为 确定存储在所述缓冲器中的所述一组写入命令是否当前与至少一个页边界对齐;响应于确定存储在所述缓冲器中的所述一组写入命令当前不与所述至少一个页边界对齐,检测填充所述缓冲器到所述至少一个页边界所需的填充大小; 确定所述队列中是否有至少一个写入命令的大小等于所述填充大小;以及响应于确定所述队列中有至少一个写入命令的大小等于所述填充大小,从所述队列向所述缓冲器传送所述至少一个写入命令。
22.如权利要求21所述的系统,其中,所述控制电路操作为使用最佳适应算法来确定所述队列中是否有至少一个写入命令的大小等于所述填充大小。
23.如权利要求21或22所述的系统,其中,响应于确定存储在所述缓冲器中的所述一组写入命令当前与所述至少一个页边界对齐,所述控制电路操作为 将所述一组写入命令组合为多写命令;以及 指示所述总线控制器从所述缓冲器向所述NVM分派所述多写命令。
24.如权利要求21、22或23所述的系统,其中,所述控制电路操作为 接收至少一个边带信号; 使用无效数据填充所述缓冲器到至少一个页对齐部的末尾; 将所述一组写入命令与所述无效数据组合为多写命令;以及 指示所述总线控制器从所述缓冲器向所述NVM分派所述多写命令。
25.如权利要求21、22、23或24所述的系统,其中,所述一组写入命令包括经加密的命令。
26.如权利要求25所述的系统,进一步包括加密模块,并且其中,响应于确定所述队列中有至少一个命令的大小等于所述填充大小,所述控制电路操作为 指示所述加密模块对所述至少一个命令进行加密;以及 在所述缓冲器中存储至少一个经加密的命令。
27.一种用于组合写入命令以分派到非易失性存储器(NVM)的装置,所述装置包括 用于从队列选择至少第一写入命令并从缓冲器选择至少第二写入命令的装置,其中所述至少第一和第二写入命令被选择为使得所述NVM中的页交叉最小; 用于组合所述至少第一和第二写入命令以形成多写命令的装置;以及 用于分派所述多写命令到所述NVM的装置。
28.如权利要求27所述的装置,其中,所述用于组合所述至少第一和第二写入命令的装置进一步包括用于应用至少第一加密种子到所述至少第一写入命令的装置。
29.如权利要求28所述的装置,其中,所述至少第二写入命令是未加密的。
30.如权利要求29所述的装置,其中,所述用于组合所述至少第一和第二写入命令的装置进一步包括 用于从易失性存储器中获得至少第二加密种子的装置;以及 用于应用所述至少第二加密种子到所述至少第二写入命令的装置。
全文摘要
本发明公开了用于具有非易失性存储器(NVM)的系统的高效缓冲的系统和方法。在一些实施例中,系统中的控制电路可以使用启发法来确定是否对从文件系统接收到的一个或多个写入命令执行缓冲。在其他实施例中,控制电路可以通过沿着缓冲器的页对齐边界有效地重新排序队列中的写入命令,来最小化读取能量和缓冲开销。在进一步的实施例中,所述控制电路可以最优地将来自缓冲器的写入命令与来自队列的写入命令进行行组合。在组合这些命令后,控制电路可以在单个事务处理中分派这些命令。
文档编号G06F12/08GK102750226SQ20121011470
公开日2012年10月24日 申请日期2012年2月28日 优先权日2011年2月28日
发明者D·J·波斯特, N·瓦卡特 申请人:苹果公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1