适应性的块转换表(BTT)的制作方法

文档序号:16367038发布日期:2018-12-22 08:29阅读:851来源:国知局
适应性的块转换表(BTT)的制作方法

存储级存储器(scm)是一种持久性存储器,其结合了固态存储器的特性和传统硬盘磁存储器的特性。scm可以以字节粒度执行输入/输出(i/o)。块设备驱动器可以用于将这样的存储公开为传统块设备。然而,也可能需要扇区原子性保证来提供针对撕裂扇区的保护以及当写入操作正在进行时可能由电源故障导致的其他问题。块转换表(btt)为scm提供原子扇区更新语义。btt是用于重新映射给定存储设备上的块的间接表。



技术实现要素:

本文公开了用于促进多个计算设备的操作的方法和系统。实施例可以包括接收针对i/o操作的请求。该请求可以包括指示物理块地址是否可以被改变以及扇区原子性是否被需要的信息。基于该信息,可以使用以下各项来执行所请求的i/o操作:(1)未修改的块转换表(btt),其中与所请求的i/o操作相关联的物理位置被改变并且扇区原子性被提供;(2)经修改的btt,其中与所请求的i/o操作相关联的物理位置未被改变;或者(3)经修改的btt,其中与所请求的i/o操作相关联的物理位置未被改变并且原子性被提供。

应当理解,上述主题可以实现为计算机控制的装置、计算机进程、计算系统、或者诸如一个或多个计算机可读存储介质之类的制品。通过阅读以下“具体实施方式”和对相关附图的评论,这些和各种其他特征将是显而易见的。

提供本“发明内容”是为了以简化的形式介绍一些概念,这些概念将在下面的“具体实施方式”中进一步描述。本“发明内容”不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。此外,所要求保护的主题不限于解决在本公开的任何部分中提到的任何或所有缺点的实现。

附图说明

以下将参考附图更全面地描述本公开的实施例,在附图中:

图1描绘了btt方案的示例。

图2描绘了对持久性存储器的块访问的示例,以及对持久性存储器的示例直接访问。

图3描绘了用于选择btt操作的示例操作过程。

图4描绘了用于执行存储器操作的示例操作过程。

图5描绘了其中可以实施本文所描述的技术的示例通用计算环境。

具体实施方式

当在系统中实现诸如scm之类的持久性存储器存储时,期望在提供原子性保证的同时提供块级i/o。btt(块转换表)是一种这样的方法。btt建立系统的其余部分看到的逻辑块地址(lba)与指定块实际上存储在物理介质上的位置的物理块地址(pba)之间的映射。在持久性存储器存储的情况下,pba被用于指示块的内容的物理存储器地址。当未修改的btt被启用时,首先对未使用的空闲块执行对给定lba的写入操作。然后在btt映射中原子交换与lba相对应的pba。也就是说,与lba相关联的映射条目被原子地改变为指向被写入的空闲块的pba。因为映射更新是原子的,所以系统要么看到块的旧内容(即,旧的pba),要么看到块的新内容(即,新的pba),并且永远不会看到部分写入的块。

当在给定环境中实现诸如btt之类的方法时,为了提供更安全和更有效的操作,可以考虑以下内容:(1)支持对持久性存储器的直接访问(dax)(也称为零复制访问);(2)允许现有的用户模式应用无需修改即可运行;以及(3)允许扇区粒度故障模式以实现应用兼容性。

本公开描述了用于修改或扩充诸如btt之类的方法以提供与各种操作环境的更大兼容性和功能的技术。在一个实施例中,可以实现“每次写入btt”方案。在一些环境中,期望在每次写入操作上标识关于是否允许正在写入的lba的pba被改变。例如,在直接访问环境中,可能不期望始终执行pba更新,因为物理存储器地址正在由系统的其他组件使用,而对于某些文件系统元数据,可能期望执行pba更新以保证扇区原子性。因此,在每次写入的基础上控制btt的实现的能力可以提供这种灵活性。

在一些实施例中,可以提供“就地btt”能力。在写入操作期间,可以遍历btt转换表以便找到pba但是不执行原子写入。相反,数据被直接复制到与现有pba相对应的物理存储器地址。例如,当不需要bttpba更新时,系统可以在给定的写入操作上提供就地btt支持,因为与正在写入的lba相对应的物理地址正在由不同的组件使用。

在一些实施例中,可以提供“复制btt支持”能力,其中实现现有btt结构和过程并且提供原子性保证但是不改变块的pba。当提供复制btt支持时,在写入操作期间标识空闲块并且将数据复制到其中如对未修改的btt所做的那样。不是将空闲块作为新pba,而是将数据再次写入与当前pba相关联的物理存储器地址。因此,数据被写入两次,一次写入空闲页面,并且然后写入当前pba。如果在现有pba复制期间断电,则可以重新尝试将数据复制到现有pba以提供原子性保证。这是可能的,因为创建指示到现有pba的复制被中断并且写入新pba的数据被保留的日志。

在一些实施例中,可以实现每文件btt方案,其中可以在打开时间或稍后时间标记文件,指示i/o操作应当使用上面讨论的btt模式之一。

尽管在scm和btt实现的修改的上下文中提供以下示例,但是所描述的技术可以被应用于涉及在i/o操作期间重新映射逻辑和物理地址的任何技术。如本文中使用的,“未修改的btt”被用于指代未经如本文所述进行调节或修改的btt技术。此外,本文中描述的技术可以在os在虚拟化硬件上运行的场景中实现。例如,虚拟化技术可以通过向每个用户提供由物理计算设备托管的一个或多个虚拟机实例来允许物理计算设备在多个用户之间被共享。虚拟机实例可以是用作不同逻辑计算系统的特定物理计算系统的软件仿真。

如本文中使用的,“存储堆栈”是指可以包括可以用于处理数据/信息从主存储器到其他存储的传输/转换的各种驱动器、过滤器、加密逻辑、反病毒逻辑等的分层的实体。例如,对于i/o请求(例如,“读/写”请求),可以“封装”数据块(例如,使用诸如irp(i/o请求分组)之类的构造)并且将其沿着堆栈向下传递;因此,堆栈中的实体处理这些数据从主存储器到存储的传输。通常,这样的“i/o”操作(例如,“读/写”操作)涉及比可能在cpu与主存储器之间直接发生的传统“加载/存储”操作(例如,没有“存储堆栈”参与这样的操作)更多的处理时间(以及因此更多的延迟时间)。

术语“文件系统”通过示例的方式被使用,并且本文中示例技术的讨论也可以应用于其他类型的文件系统。在此上下文中,“文件系统”可以包括组织持久化数据的一个或多个硬件和/或软件组件。例如,持久化数据可以被组织在可以被称为“文件”的单元,并且因此,“文件系统”可以被用于组织和以其他方式管理和/或控制这样的持久化数据。例如,“文件”可以与相应的文件名、文件长度和文件属性相关联。文件句柄可以包括由文件系统用来唯一地引用特定活动文件的指示符(例如,数字)。

“高速缓存”可以是指被用于存储用于有效获取的项目的实体。更一般地,在计算中,高速缓存是透明地存储数据以便可以更快地服务针对该数据的未来请求的组件。例如,存储在高速缓存中的数据可以是先前已经被计算的值或者存储在别处的原始值的副本。如果请求的数据存储在高速缓存中,则可以通过简单地访问(例如,读取)高速缓存来服务请求,这可以相对更快。否则,可能需要从其原始存储位置重新计算或提取数据,这可能相对较慢。因此,可以从高速缓存被服务的请求数目越多,整体系统性能通常就越快。例如,高速缓存可以物理地位于ram中。例如,高速缓存也可以位于持久性存储中。

各种实施例可以支持“直接访问”存储模型,该模型可以使得应用能够直接访问持久性存储器存储,从而可以在不需要通过存储堆栈发出读/写入操作的情况下对其进行修改。在一些示例中,存储器映射文件实现可以包括修改以提供对持久性存储器的直接访问。在这个上下文中,“字节”是指设备处理器可访问的最小可寻址存储器单元。例如,字节通常可以具有8位(二进制数字)的大小,但是计算领域的技术人员将理解,在各种硬件(和/或软件)配置中也可以使用“字节”的其他大小。

在一些实施例中,可以实现文件系统卷(或“存储系统”卷),其在持久性存储器(或字节可寻址存储)设备上的行为与用于存储器映射、高速缓存和非高速缓存的i/o(输入/输出操作)的传统卷的行为不同。这种不同的行为可以提供对卷的显著的更快的访问时间(例如,经由减少的延迟和增加的吞吐量)。例如,当正在处理存储器映射或高速缓存的i/o时,由于绕过大部分文件系统和所有存储堆栈,因此可以实现更快的访问时间。例如,不是逐步操作这些堆栈,而是可以通过读取或写入经由文件系统公开的字节可寻址范围来直接在存储器总线上(即,经由“直接访问”)提供对设备的访问(例如,对设备的应用级访问)。在一些实施例中,内核的存储器管理器和高速缓存管理器在创建映射表条目时被涉及以使得文件系统能够使该直接访问存储可用于应用。例如,可以将非高速缓存的i/o转换为高速缓存的i/o,使得i/o可以至少避免遍历存储堆栈。

在一些实施例中,持久性的字节可寻址存储可以作为存储设备(即,不作为存储器)公开给文件系统。可以允许来自应用、操作系统和文件系统的各种级别的软件消耗和优化持久性存储器。可以基于底层存储能力来优化文件系统。例如,优化持久性存储器的文件系统可以有利地提供“零副本”存储(即,仅需要“主”或“原始”版本,并且除了“主”版本之外不需要“副本”)。

在各种实施例中,可以允许内核(例如,经由存储器管理器、高速缓存管理器)向文件系统公开字节可寻址范围。“存储器映射的文件”可以是指已经被分配与文件的某个部分直接逐字节相关性的虚拟存储器片段。

如本文中使用的,可以参考各种计算机系统实体,包括存储器管理器(mm)和高速缓存管理器(cc)。直接访问存储或直接访问(dax)可以是指其中文件系统为应用提供经由存储器总线直接访问持久性存储器的方式的操作模式。存储类存储器(scm)可以是指经由存储器总线可访问的持久性的字节可寻址存储器。scm可以是指可以包括双倍数据速率类型4(ddr4)非易失性双列直插式存储器模块(dimm)(nvdimm-n)的技术。计算领域的技术人员将理解,其他术语也可以指代这样的存储。例如,bas可以是指“字节可寻址存储”,nvm“非易失性存储器”和pm“持久性存储器”也可以指代这样的存储。

所描述的技术可以使得操作系统(例如,microsoftwindows)能够利用该技术。任何存储器总线可访问的持久性存储技术可以与本文中讨论的示例技术一起使用。例如,microsoft新技术文件系统(ntfs)和/或microsoft弹性文件系统(refs)可以使用这样的技术。当检测到具有dax能力的设备时(例如,在安装时),可以经由隐式模式或显式模式来实现直接访问存储(dax模式)。例如,在隐式模式下,整个卷隐式地在dax模式下,并且所有映射的部分都可以在dax模式下被映射,除非文件系统指示mm不执行这样的映射。在显式模式下,卷可以使用dax模式,但应用显式地请求系统在dax模式下创建给定的映射部分。

“部分”可以是指存储器区域。例如,存储器区域可以是逻辑上连续的范围(例如,不一定是物理上连续的存储)。例如,文件的一部分可以被映射到ram,并且一部分可以是文件的存储器中表示。多个应用可以为相同(公共)的文件创建相应的多个部分。每个相应应用中的虚拟地址可以是不同的(作为虚拟地址),但是可以转换为公共文件内的参考数据的相同(公共)的物理地址。使用scm驱动器,可以创建卷,其行为类似于任何其他存储设备卷,其中i/o操作流经文件系统和存储堆栈。“卷”或逻辑驱动器可以是指通常(但不一定)驻留在硬盘的单个分区上的具有单个文件系统的单个可访问存储区域。尽管卷可能与物理磁盘驱动器不同,但仍然可以通过操作系统的逻辑接口被访问。例如,在某些系统中,卷可以由卷管理器或内核来处理。

图2是示出对非易失性存储器的示例块访问以及对持久性存储器的示例直接访问的框图200。如图2所示,持久性存储器202可以经由块访问204以及直接访问206来访问。持久性存储器202可以耦合到计算设备的存储器总线。应用208、210使用块访问204访问持久性存储器202,而应用212使用直接访问206访问持久性存储器202。应用212可以经由标准文件应用程序编程接口(api)或经由加载/存储214操作(例如,经由存储器映射的i/o)访问持久性存储器202。如图2所示,应用208、210、212以用户模式216操作,而其他实体(如图2的块访问204和直接访问206图块的下部中所示)以内核模式218操作(如图所示)。

如图2所示,用于块访问204的应用208可以利用标准原始磁盘经由持久性存储器磁盘驱动器220访问持久性存储器202。应用210可以利用标准文件api来经由文件系统222获取对持久性存储器202的访问,文件系统222经由持久性存储器磁盘驱动器220访问持久性存储器202。持久性存储器磁盘驱动器220利用存储器总线224来访问持久性存储器202。

如图2所示,用于直接访问206的应用212可以利用标准文件api经由持久性存储器感知文件系统226访问持久性存储器202。如图2所示,持久性存储器感知文件系统226可以使用加载/存储操作经由持久性存储器磁盘驱动器220访问用于文件系统元数据的持久性存储器202。此外,持久性存储器感知文件系统226还可以经由高速缓存的i/o操作(具有持久性存储器202的加载/存储部分228)来访问持久性存储器202。如图2所示,应用212可以利用用于用户数据的加载/存储214操作(例如,经由存储器映射的i/o),经由加载/存储214操作(例如,经由存储器映射的i/o),经由存储器管理单元(mmu)映射230来访问持久性存储器202的加载/存储部分228。

字节可寻址存储级存储器可以提供两种访问数据的方式。一种方式是物理存储器,其可以被称为直接存储器访问、直接访问或dax。这是设备可以本机支持的访问方法。在该方法中,设备没有扇区(或块)的概念,并且因此没有扇区原子性。另一种方式是传统的块i/o模式,其可以由磁盘驱动器实现。由于本机支持不提供扇区原子性,因此磁盘驱动器可以用软件实现扇区原子性。

如上所述,块转换表(btt)是一种为scm设备提供原子扇区更新语义的方法。btt可以实现为将外部逻辑块地址(lba)映射到内部物理块地址(pba)的查找/间接表。诸如文件系统之类的外部组件通常只能看到lba。这也可以被称为外部lba,并且如果竞技场被抽象出来,通常可以被称为预映射lba。物理块地址(pba)是真正的物理块地址,并且只能由磁盘驱动器看到。pba也可以被称为postmaplba。通常,pba的数目大于lba的数目。竞技场是512gb的块,在btt方案中,磁盘被划分成多个竞技场。每个竞技场具有下面进一步讨论的关键btt结构以执行转换。图1示出了btt实现的一个示例。

关键btt结构包括:

1.将每个lba映射到pba的表,其可以被称为映射函数btt(x)。

2.一组保留的物理块。这样的块的数目决定了可以支持的并发写入的数目。该数目可以被称为nfree。

3.具有nfree个记录的空闲列表日志。每条记录具有两个副本。序列号被用于找到最新的空闲记录。每当日志被更新时,都会写入旧的副本并且更新序列号以将其标识为新副本。日志记录存储{lba,pbatofree,pbatouse}。日志被用于:

a.在引导时标识空闲物理块。以这种方式,进程可以避免读取整个btt映射以在每次引导时标识空闲物理块。

b.如果机器在日志记录被持久化之后但在对btt表的更新可以被持久化之前崩溃(或遭受掉电),则使用newpba更新btt映射,即btt(lba)←newpba。

4.读取跟踪表(rtt)(未示出),其跟踪由线程正在读取的物理块。这确保了如果线程仍然从块读取则不写入空闲块。

在一个实施例中,写入操作的操作序列可以如下所示。当块(在这个示例中为lba-15)未被直接映射时,可以使用以下步骤执行未修改的块写入:

1.获取对日志记录的独占访问,查找空闲pba(在这个示例中

为newpba)

2.写入newpba

3.oldpba←btt(lba-15);

4.使用{lba-15,oldpba,newpba}更新空闲块列表日志

5.确保数据被持久化到持久性存储器

6.更新上述空闲块列表日志记录中的序列号

7.确保数据被持久化到持久性存储器中。在这个操作之后,这个日志条目指示oldpba是空闲的,这是可接受的,因为它尚未被释放。

8.更新btt(lba-15)←newpba

9.确保数据被持久化到持久性存储器中

10.释放对日志记录的访问。

该重新映射改变了与块相对应的物理地址。该过程在使用物理地址访问文件内容的情况下可以被避免。该过程可以读取陈旧数据或写入旧物理块,这可能导致数据损坏或丢失。例如,物理块oldpba可能已经被分配给某个其他lba,在这种情况下,该过程可能会破坏该块。

参考上述步骤,以下指示在一些实施例中可以响应于系统崩溃或其他这样的事件而采取的动作:

1.没有持久的变化,因此不需要响应。

2.数据被写入空闲块——即使只执行了部分写入,这是无关紧要的,因此不需要响应。

3.没有新的持续变化,因此不需要响应。

4.不需要考虑日志记录的这个更新,因为序列号不是新的,因此部分更新不是问题。

5.不需要考虑日志记录的这个更新,因为序列号不是新的,因此部分更新不是问题。

6.如果序列号更新尚未被持久化,则这个不是问题。

7.日志记录的这个更新(或复制)被处理如下:

a.如果btt(lba)=oldpba,则写入btt(lba)←newpba

b.oldpba被认为是空闲的

如果这个步骤之后出现崩溃,则btt(lba-15)将为oldpba,并且更新可以在恢复时被处理

8.恢复——步骤7将在恢复时更新btt表。

9.由于btt映射条目是持久的,因此不需要进一步的恢复步骤。

10.使用newpba的btt更新已经被持久化,即释放oldpba。因此,可以安全地将oldpba释放为其他线程,即释放对日志记录的独占访问是安全的。

在一个实施例中,用于复制btt(cbtt)操作的操作序列可以如下所示。当使用直接映射正在读取或写入块时可以使用cbtt,因为块的物理地址不会改变。可以继续使用btt方案的关键结构。在以下示例中,可以如下实现对lba-15的块写入:

1.获取对日志记录的独占访问并且查找空闲pba(在这个示例

中被称为newpba)。

2.写入newpba。

3.oldpba←btt(lba-15)。

4.使用{lba-15,oldpba,newpba}更新空闲块列表日志。

5.确保数据被持久化到持久性存储器中

6.更新上述空闲块列表日志记录中的序列号

7.确保数据被持久化到持久性存储器中

8.写入oldpba。

9.使用{lba-15,newpba,oldpba}更新相同的记录,但更新为空闲块列表日志的不同副本。更新相同的记录,因为pba不应当在一个记录中被指示为空闲并且在另一记录中被使用。应当注意,日志记录的数目等于空闲物理块的数目。在一个实施例中,空闲块列表日志不是严格的仅附加日志。可以独占访问日志条目,直到写入操作完成。因此可以将新版本写入日志。

10.确保数据被持久化到持久性存储器中

11.更新上述空闲块列表日志记录中的序列号。

12.确保数据被持久化到持久性存储器中

使用上述操作,不会改变与块相对应的物理地址。

参考cbtt的上述步骤,以下恢复步骤描述在一些实施例中可以响应于系统崩溃或其他这样的事件而采取的动作:

1.没有持久的变化,因此不需要响应。

2.数据被写入空闲块——即使只执行了部分写入,这是无关紧要的,因此不需要响应。

3.没有新的持续变化,因此不需要响应。

4.不需要考虑日志记录的这个更新,因为序列号不是新的,因此部分更新不是问题。

5.不需要考虑日志记录的这个更新,因为序列号不是新的,因此部分更新不是问题。

6.如果序列号更新尚未被持久化,则这个不是问题。否则,执行与下面的恢复——步骤7中相同的操作。

7.如果序列号更新尚未被持久化,则这个不是问题。否则,这个日志记录的更新(或复制)将成为最新的并且被如下处理:

a.如果btt(lba)=oldpba,则将newpba的内容复制到oldpba

b.newpba仍然是空闲的

在一些实施例中,可以实现以下替代方法,其可以提供更好的性能但是可以将磁盘分段:

a.如果btt(lba)=oldpba,则btt(lba)←newpba

b.oldpba被认为是空闲的

如果在这个步骤之后发生崩溃或其他事件,则btt(lba-15)将为oldpba,并且可以在恢复时被更新。

8.恢复——上述步骤7将在恢复时更新oldpba的内容或者更新btt表,并且因此不存在对写入oldpba的错误的担忧

9.不考虑这个更新(或副本),因为序列号尚未持久化。

10.不考虑这个更新(或副本),因为序列号尚未持久化。

11.如果序列号更新尚未持久化,则与上述相同。如果序列号更新被持久化,则这与下面的恢复步骤12相同。

12.如果序列号更新尚未持久化,则恢复——步骤7将执行必要的步骤。否则,处理在步骤12中被持久化的更新(或复制)。这样的处理与恢复——步骤7相同。因为lba-15已经映射到oldpba(即,btt和日志同意映射),所以不需要进一步的恢复步骤。

在一些实施例中,可以实现关于何时执行btt写入或何时执行经修改的btt写入过程之一的指示。在一个实施例中,i/o请求分组(irp)中的标志可以被用于指示是否允许未修改的btt。在一个示例实现中,将使用未修改的btt来执行任何写入操作,除非irp标志指示不应当执行未修改的btt。例如,如果文件具有直接映射的数据部分,则文件系统可以在irp中设置指示不应当执行常规btt的标志。在一个实施例中,可以实现irp中的堆栈标志(sl_persistent_memory_fixed_mapping)以指示给定的lba地址是否可以被重新映射。如果标志是clear,则可以重新映射给定的lba并且可以使用未修改的btt。在一些实现中,系统可以通过将标志设置为clear来默认允许所有现有驱动器使用未修改的btt。如果标志是set,则不应当重新映射给定的lba,并且因此不应当使用未修改的btt。

在一些实施例中,可以提供就地btt选项。如果单个卷或磁盘需要支持需要扇区原子性保证的文件和不需要扇区原子性保证的文件,则需要就地btt。对于就地btt写入操作,遍历btt表以找到与lba相对应的pba。然而,写入相同的pba而不是重新映射、复制和记录。对于可以处理撕裂扇区的一些应用,以及对于要避免直接访问模式中正被使用文件的lba到pba映射变化的那些应用,扇区撕裂的风险可能是可以接受的。在一些实施例中,可以实现指示不应当改变lba到pba映射以执行所请求的i/o操作的标志。

在一些实施例中,可以实现每次写入btt方案,其中可以提供指示是否应当允许cbtt和就地btt的指示。在一个实现中,该指示可以提供三态信息,其可以在一个示例中通过两个标志来实现。三个状态可以包括:

1.驱动器可以重新映射lba的pba,但应当提供i/o操作的扇区原子性。

2.驱动器不应当重新映射lba的pba,并且不需要提供i/o的扇区原子性。通常,预计这将提供更高的性能。

3.驱动器不应当重新映射lba的pba,但驱动器应当为i/o操作提供扇区原子性。

在一些实施例中,可以实现每文件btt方案,其中可以在打开时间或稍后时间标记文件,指示i/o操作应当使用上面讨论的btt模式之一。

尽管非高速缓存的i/o可以被转换为高速缓存的i/o或者可以沿着io堆栈向下流动,但是高速缓存的i/o和存储器映射的i/o结束在同一地方,因此不需要一致性刷新和清除。由于与cbtt相关联的附加写入操作,在一些实施例中,如果数据部分被拆除,则可以使用常规btt。

图3示出了用于在提供存储器地址转换的系统中实现i/o的示例过程。过程300可以在操作302处开始,其中可以接收i/o请求,例如,作为irp。例如,可以解析该请求以标识指示与操作304处的btt实现有关的一个或多个标志的信息。操作306可以包括确定是否允许lba到pba映射改变以用于写入操作。如果允许映射改变,则可以执行操作308,其包括利用未修改的btt执行写入操作。如果不允许映射改变,则操作306之后可以是操作310,其中确定是否需要扇区原子性。如果需要原子性,则操作310之后可以是操作312,其中可以使用cbtt执行写入操作。如果不需要原子性,则操作310之后可以是操作314,其中可以利用就地btt执行写入操作。

图4示出了用于促进多个计算设备的操作的示例操作过程。在一个实施例中,该过程可以至少部分地在与图5中的基于配置的评估系统500相对应的系统或功能中实现。

参考图4,操作400开始操作过程。操作400之后可以是操作402。操作402示出了接收针对i/o操作的请求。在一个实施例中,该请求可以包括指示物理存储器地址是否可以被改变的信息。该请求还可以包括关于扇区原子性是否被需要的信息。操作402之后可以是操作404、406或408。基于该信息,可以如操作404所示的使用未修改的块转换表(btt)来执行所请求的i/o操作,其中与所请求的i/o操作相关联的物理位置被改变并且扇区原子性被提供。基于该信息,替代地,可以如操作406所示的使用经修改的btt来执行所请求的i/o操作,其中与所请求的i/o操作相关联的物理位置未被改变。基于该信息,替代地,可以如操作408所示的使用经修改的btt来执行所请求的i/o操作,其中与所请求的i/o操作相关联的物理位置未被改变并且原子性被提供。

在所公开的实施例的一个示例中,一种用于执行存储器操作的方法,其中直接存储器访问和逻辑地址转换被实现,包括:

接收针对i/o操作的请求,该请求包括指示物理存储器地址是否可以被改变以及扇区原子性是否被需要的信息;

当该信息指示物理存储器地址可以被改变并且扇区原子性被需要时,使用未修改的块转换表(btt)执行所请求的i/o操作,其中与所请求的i/o操作相关联的物理位置被改变并且扇区原子性被提供;并且否则:

执行经修改的btt,其中与所请求的i/o操作相关联的物理位置未被改变,并且如果扇区原子性被需要则原子性被提供;或者

执行经修改的btt,其中与所请求的i/o操作相关联的物理位置未被改变。

在一个实施例中,该方法进一步包括遍历btt以确定物理块地址(pba)并且将数据直接复制到与所确定的pba相对应的物理存储器地址。

在一个实施例中,该方法进一步包括:

标识空闲块并且将数据复制到空闲块;以及

将数据写入与当前物理块地址相关联的物理存储器地址。

在一个实施例中,该请求作为i/o请求分组(irp)被接收。

在一个实施例中,该方法进一步包括解析该请求以标识指示与btt实现有关的一个或多个标志的信息。

在一个实施例中,该方法进一步包括确定lba到pba映射改变是否被允许以用于所请求的i/o操作。

在一个实施例中,该方法进一步包括:当映射改变被允许时,利用未修改的btt执行所请求的i/o操作。

在一个实施例中,该方法进一步包括:当映射改变不被允许时,确定扇区原子性是否被需要。

在一个实施例中,该方法进一步包括:当原子性被需要时,使用复制btt(cbtt)执行所请求的i/o操作。

在一个实施例中,该方法进一步包括:当原子性不被需要时,利用就地btt执行所请求的i/o操作。

在一个实施例中,文件被标记以指示所请求的i/o操作应当使用哪种btt模式。

在一个实施例中,irp中的标志被用于指示未修改的btt是否被允许。

在一个实施例中,使用未修改的btt执行所请求的i/o操作,除非irp标志指示未修改的btt不应当被执行。

在一个实施例中,irp中的堆栈标志指示给定的lba地址是否可以被重新映射。

在一个实施例中,irp中的标志被用于指示三个状态中的一个状态,这三个状态包括:第一状态,该第一状态指示可以针对lba重新映射pba并且针对所请求的i/o操作的扇区原子性应当被提供;第二状态,该第二状态指示不应当针对lba重新映射pba并且针对所请求的i/o操作的扇区原子性不需要被提供;第三状态,该第三状态指示不应当针对lba重新映射pba并且针对所请求的i/o操作的扇区原子性应当被提供。

在一个实施例中,可以实现一种用于有效执行存储器操作的系统,其中直接存储器访问和逻辑地址转换被实现。该系统包括处理器和存储器,并且该系统被编程为执行以下操作:

接收针对写入操作的请求,该请求包括指示物理存储器地址是否可以被改变以及扇区原子性是否被需要的信息;

基于该信息:

如果物理存储器地址可以被改变并且扇区原子性被需要,则使用未修改的btt执行所请求的写入操作,其中与所请求的写入操作相关联的物理位置被改变并且扇区原子性被提供;并且否则:

执行经修改的btt,其中与所请求的写入操作相关联的物理位置未被改变,并且如果扇区原子性被需要则提供原子性。

在一个实施例中,该系统被编程为执行以下操作:遍历btt以确定物理块地址并且将数据直接复制到与所确定的物理块地址相对应的物理存储器地址。

在一个实施例中,该系统被编程为执行以下操作:

标识空闲块并且将数据复制到空闲块;以及

将数据写入与当前物理块地址相关联的物理存储器地址。

在一个实施例中,该请求作为i/o请求分组(irp)被接收,并且该irp分组指示未修改的btt是否被允许。

在一个实施例中,该系统解析该请求以标识指示与btt实现有关的一个或多个标志的信息。

在一个实施例中,该系统确定lba到pba映射改变是否被允许以用于所请求的i/o操作。

在一个实施例中,可以实现一种计算机可读存储介质,其上存储有指令,这些指令在由至少一个处理器执行时,引起至少一个处理器执行用于有效执行存储器操作的操作,其中直接存储器访问和逻辑地址转换被实现,这些操作包括:

接收针对i/o操作的请求,该请求包括指示物理存储器地址是否可以被改变以及扇区原子性是否被需要的信息;

基于该信息,如果该信息指示与所请求的i/o操作相关联的物理位置可以被改变并且扇区原子性被需要,则使用未修改的btt执行所请求的i/o操作,其中与所请求的i/o操作相关联的物理位置被改变并且扇区原子性被提供;以及

否则,执行经修改的btt,其中与所请求的i/o操作相关联的物理位置未被改变,其中如果该信息指示扇区原子性被需要,则原子性被提供。

如上所述,上述技术可以在一个或多个计算设备或环境上实现。图4描绘了其中可以实施本文中描述的一些技术的示例通用计算环境。计算系统环境1002仅是合适的计算环境的一个示例,并且不旨在对本公开主题的使用范围或功能提出任何限制。也不应当将计算环境1002解释为对示例操作环境1002中示出的任一组件或其组合有任何依赖性或要求。在一些实施例中,各种所描绘的计算元件可以包括被配置为实例化本公开的特定方面的电路。例如,本公开中使用的术语电路可以包括被配置为通过固件或开关执行功能的专用硬件组件。在其他示例实施例中,术语电路可以包括由包含可操作以执行功能的逻辑的软件指令配置的通用处理单元、存储器等。在电路包括硬件和软件的组合的示例实施例中,实现者可以编写实施逻辑的源代码,并且源代码可以被编译成可以由通用处理单元处理的机器可读代码。由于本领域技术人员可以理解,现有技术已经发展到硬件、软件或硬件/软件的组合之间几乎没有差异的程度,因此选择硬件与软件来实现特定功能是一种留给实现者的设计选择。更具体地,本领域技术人员可以理解,软件过程可以被转换为等效的硬件结构,并且硬件结构本身可以被转换为等效的软件过程。因此,硬件实现与软件实现的选择是设计选择之一,并且留给实现者。

可以包括移动设备或智能电话、平板电脑、膝上型电脑、台式计算机等中的任何一种的计算机1002通常包括各种计算机可读介质。计算机可读介质可以是可以由计算机1002访问的任何可用介质,并且包括易失性和持久性介质、可移动和不可移动介质。系统存储器1022包括易失性和/或持久性存储器形式的计算机可读存储介质,诸如只读存储器(rom)1023和随机存取存储器(ram)160。包含有助于诸如在启动期间在计算机1002内的元件之间传送信息的基本例程的基本输入/输出系统1024(bios)通常存储在rom1023中。ram1060和scm1062通常包含由处理单元1059立即可访问和/或当前正在由处理单元1059操作的数据和/或程序模块。作为示例而非限制,图5示出了操作系统1025、应用程序1026、其他程序模块1027和程序数据1028。

计算机1002还可以包括其他可移动/不可移动、易失性/持久性计算机存储介质。仅作为示例,图5示出了从不可移动的持久性磁性介质读取或写入不可移动的持久性磁性介质的硬盘驱动器1038、从可移动的持久性磁盘1054读取或写入可移动的持久性磁盘1054的磁盘驱动器1039、以及从诸如cdrom或其他光学介质之类的可移动的非易失性光盘1053读取或写入可移动的非易失性光盘1053的光盘驱动器14。可以在示例操作环境中使用的其他可移动/不可移动、易失性/非易失性计算机存储介质包括但不限于磁带盒、闪存卡、数字通用盘、数字录像带、固态ram、固态rom等。硬盘驱动器1038通常通过存储适配器1034连接到系统总线1021,并且磁盘驱动器1039和光盘驱动器1004通常通过控制器1035连接到系统总线1021。

上面讨论并且在图5中示出的驱动器及其相关联的计算机存储介质为计算机1002提供计算机可读指令、数据结构、程序模块和其他数据的存储。例如,在图5中,硬盘驱动器1038被示出为存储操作系统1058、应用程序1057、其他程序模块1056和程序数据1055。注意,这些组件可以与操作系统1025、应用程序1026、其他程序模块1027和程序数据1028相同或不同。这里向操作系统1058、应用程序1057、其他程序模块1056和程序数据1055给出不同的数字以说明它们至少是不同的副本。用户可以通过诸如键盘1051和定点设备1052(通常被称为鼠标、轨迹球或触摸板)之类的输入设备将命令和信息输入到计算机1002中。其他输入设备(未示出)可以包括麦克风、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪等。这些和其他输入设备通常通过耦合到系统总线的用户输入接口1036连接到处理单元1059,但是可以通过其他接口和总线结构来连接,诸如并行端口、游戏端口或通用串行总线(usb)。显示器1042或其他类型的显示设备也经由诸如视频接口1032之类的接口连接到系统总线1021。除了显示器之外,计算机还可以包括可以通过输出外围接口1033连接的其他外围输出设备,诸如扬声器1044和打印机1043,诸如3d打印机。

计算机1002可以使用到诸如远程计算机1046之类的一个或多个远程计算机的逻辑连接在联网环境中操作。远程计算机1046可以是个人计算机、服务器、路由器、网络pc、对等设备或其他公共网络节点,并且通常包括上面相对于计算机1002描述的很多或所有元件,尽管图5中仅示出了存储器存储设备1047。图5中描绘的逻辑连接包括局域网(lan)1045和广域网(wan)1049,但是也可以包括其他网络。这样的网络环境在办公室、企业范围的计算机网络、内联网和互联网中是常见的。

当在lan网络环境中使用时,计算机1002通过网络接口或适配器1037连接到lan1045。当在wan网络环境中使用时,计算机1002通常包括调制解调器1005或用于通过诸如互联网之类的wan1049建立通信的其他装置。可以是内部的或外部的调制解调器1005可以经由用户输入接口1036或其他适当的机制连接到系统总线1021。在联网环境中,关于计算机1002或其部分描述的程序模块可以存储在远程存储器存储设备中。远程应用程序可以驻留在存储器设备1047上。可以理解,所示的网络连接是示例,并且可以使用在计算机之间建立通信链路的其他装置。

在一些方面,其他程序1027可以包括附加应用1065。在一些情况下,应用1065可以通过图形接口1031、视频接口1032、输出外围接口1033和/或一个或多个显示器或触摸屏设备1042来提供用户界面。

前面部分中描述的每个过程、方法和算法可以通过一个或多个计算机或计算机处理器执行的代码模块来实现,并且完全或部分地通过其来自动化。代码模块可以存储在任何类型的非暂态计算机可读介质或计算机存储设备上,诸如硬盘驱动器、固态存储器、光盘等。过程和算法可以部分或全部地在专用电路中实现。所公开的过程和过程步骤的结果可以持久地或以其他方式存储在任何类型的非暂态计算机存储器中,诸如例如易失性或持久性存储。上述各种特征和过程可以彼此独立地使用,或者可以以各种方式组合。所有可能的组合和子组合都旨在落入本公开的范围内。另外,在一些实现中可以省略某些方法或过程框。本文中描述的方法和过程也不限于任何特定序列,并且与其相关的框或状态可以以其他适当的序列执行。例如,所描述的框或状态可以以不同于具体公开的顺序执行,或者多个框或状态可以组合成单个框或状态。示例框或状态可以串行、并行或以某种其他方式执行。可以向所公开的示例实施例添加框或状态或从其中移除框或状态。本文中描述的示例系统和组件可以被与所描述的不同地配置。例如,与公开的示例实施例相比,可以添加、移除或重新布置元件。

还应当理解,各种项目被示出为在使用的同时存储在存储器中或在存储上,并且这些项目或其部分可以在存储器与其他存储设备之间传送以用于存储器管理和数据完整性的目的。或者,在其他实施例中,一些或所有软件模块和/或系统可以在另一设备上的存储器中执行,并且经由计算机间通信与所示的计算系统通信。此外,在一些实施例中,一些或全部系统和/或模块可以以其他方式实现或提供,诸如至少部分地以固件和/或硬件,包括但不限于一个或多个专用集成电路(asic)、标准集成电路、控制器(例如,通过执行适当的指令,并且包括微控制器和/或嵌入式控制器)、现场可编程门阵列(fpga)、复杂可编程逻辑器件(cpld)等。一些或所有模块、系统和数据结构也可以存储在诸如硬盘、存储器、存储级存储器、网络或便携式介质物品之类的计算机可读介质上(例如,作为软件指令或结构化数据)以由适当的驱动器或经由适当的连接来读取。系统、模块和数据结构还可以作为生成的数据信号(例如,作为载波或其他模拟或数字传播信号的一部分)在各种计算机可读传输介质上传输,包括基于无线和基于有线/电缆的介质,并且可以采用各种形式(例如,作为单个或多路复用模拟信号的一部分,或者作为多个离散数字分组或帧)。在其他实施例中,这样的计算机程序产品也可以采用其他形式。因此,本公开可以用其他计算机系统配置来实践。

除非另有明确说明或者在所使用的上下文中以其他方式理解,否则本文中使用的条件语言,诸如,除其他之外,“可以(can)”、“可以(could)”、“可能(might)”、“可以(may)”、“例如”通常旨在表达某些实施例包括而其他实施例不包括某些特征、元件和/或步骤。因此,这样的条件语言通常不旨在暗示一个或多个实施例以任何方式需要特征、元件和/或步骤,也不旨在暗示一个或多个实施例必须包括用于在具有或没有作者输入或提示的情况下做出决定的逻辑,而不管这些特征、元件和/或步骤是否被包括在任何特定实施例中或将在任何特定实施例中执行。术语“包括(comprising)”、“包括(including)”、“具有(having)”等是同义的并且以开放式的方式包括性地被使用,并且不排除其他元件、特征、动作、操作等。此外,术语“或”以其包括性意义被使用(而不是以其排他性的意义),因此当用于例如连接元件列表,术语“或”表示列表中的一个、一些或所有元件。

虽然已经描述了某些示例实施例,但是这些实施例仅作为示例呈现,并且不旨在限制本文中公开的发明的范围。因此,前面的描述中的任何内容都不旨在暗示任何特定的特征、特性、步骤、模块或框是必需的或必不可少的。实际上,本文中描述的新颖方法和系统可以以各种其他形式实施;此外,在不脱离本文中公开的本发明的精神的情况下,可以对本文中描述的方法和系统的形式进行各种省略、替换和改变。所附权利要求及其等同物旨在涵盖落入本文中公开的某些发明的范围和精神内的这样的形式或修改。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1