执行防电源故障高速缓存而无需原子元数据的技术的制作方法

文档序号:6601395阅读:175来源:国知局
专利名称:执行防电源故障高速缓存而无需原子元数据的技术的制作方法
技术领域
本发明涉及高速缓存,更具体但非排他地涉及非易失介质中的防电源故障回写或 直写高速缓存。背景描述存储子系统是计算机系统最慢的子系统之一,尤其是当存储子系统利用例如硬盘 驱动器(HDD)的存储介质时。由于读/写头需要机械移动至HDD盘组上的特定位置以读/ 写数据,HDD需要相对长的存取时间。为了提高HDD的性能,非易失高速缓存存储器可用来保留最近从HDD读取和写至 HDD的结果。通过对HDD数据进行高速缓存,计算机系统的性能得以提高,且HDD可在更长 的周期内保持停止运作(spun down)以减少计算机系统的功耗。然而,如果计算机系统的供电被始料未及地断开,则非易失高速缓存存储器中的 数据必须再次与HDD关联以防止数据败坏。通过高速缓存数据写入支持原子元数据写入的 专用高速缓存硬件可用来确保这种恢复准确地完成,但这增加了计算机系统的成本。附图简述本发明的实施例的特征和优点将从下面对主题事项的详细说明中得以明暸,其 中

图1示出根据本发明一个实施例的用于实现本文描述的方法的系统;图2示出根据本发明一个实施例的I/O控制器的方框图;图3示出根据本发明一个实施例的操作系统中的模块的方框图;图4示出根据本发明一个实施例的高速缓存设备的配置;图5示出根据本发明一个实施例的直写高速缓存方案的流程图;图6A示出根据本发明一个实施例的回写高速缓存方案的流程图;图6B示出根据本发明一个实施例的回写高速缓存方案的流程图;图6C示出根据本发明一个实施例的回写高速缓存方案的流程图;图7示出根据本发明一个实施例的将数据插入高速缓存行的方法的流程图;以及图8A和8B示出根据本发明一个实施例的实现回写高速缓存方案的伪代码。详细说明本文描述的本发明实施例是通过示例示出的而不是在附图中作出限定。为了解说 的简单和清楚,附图中示出的要素不一定按比例绘出。例如,一些要素的尺寸可相对于其它 要素放大以清楚表示。此外,在认为合适的情形下,在附图中重复出现的许多附图标记用来 指示相应或相似的要素。说明书中对本发明“一个实施例”或“一实施例”的引述表示结合 该实施例描述的具体特征、结构或特点包含在本发明的至少一个实施例中。因此,在说明书 中多处出现的短语“在一个实施例中”不一定全部指向同一实施例。本发明的实施例提供一种方法和系统,允许在永久存储设备中将数据防电源故障 回写或直写高速缓存入高速缓存设备的一条或多条高速缓存行,该高速缓存设备不要求原 子元数据。当存储设备中的数据被高速缓存时,没有与任意高速缓存行关联的元数据原子地写入高速缓存设备。如此,就不需要在高速缓存数据的过程中原子地写入元数据的专门 的高速缓存硬件。在本发明的一个实施例中,与高速缓存行关联的元数据包括但不局限于数据在 经过高速缓存的存储设备上的位置,例如数据的逻辑块地址(LBA);序列号;高速缓存行状 态,例如数据是干净的还是腐败的;存储设备的高速缓存LBA的牵制(pin)信息等。存储设 备包括但不局限于固态驱动器(SSD)、HDD、独立盘卷的冗余(RAID)组盘、磁带驱动器、压缩 盘(CD)、软盘、通用串行总线(USB)闪存驱动器或任意其它形式的非易失或永久计算机数 据存储介质。高速缓存设备包括但不局限于非易失介质、SSD、NAND闪存、相变存储器或任 意其它形式的非易失或永久计算机数据存储介质。图1示出用于实现根据本发明一个实施例在本文中披露的方法的系统100。系统 100包括但不局限于台式计算机、膝上计算机、笔记簿计算机、上网本计算机、个人数字助理 (PDA)、服务器、工作站、蜂窝电话、移动计算设备、互联网设施或任意其它类型的计算设备。 在另一实施例中,用来实现本文描述方法的系统100可以是芯片系统上(SOC)的系统。系统100包括存储器/图形控制器120和I/O控制器150。存储器/图形控制器 120 一般提供存储器和I/O管理功能,还有可由处理器110访问或使用的许多通用和/或 专用寄存器、定时器等。处理器110可使用一个或多个处理器实现或使用多核处理器实现。 根据本发明的一个实施例,I/O控制器150允许将存储设备160中的数据防电源故障回写 或直写高速缓存入高速缓存设备170或非易失存储器144的一条或多条高速缓存行。存储器/图形控制器120执行多种功能,以使处理器110访问包含易失存储器142 和/或非易失存储器144的主存储器140并与之通信。在本发明的另一实施例中,另一易 失存储器142(图1未示出)内嵌在存储设备160中以对存储设备160的数据进行高速缓 存。根据本发明的另一实施例,存储器/图形控制器120可取代I/O控制器150而允许将 存储设备160中的数据防电源故障回写或直写高速缓存入高速缓存设备170的一条或多条 高速缓存行。易失存储器142包括但不局限于同步动态随机存取存储器(SDRAM)、动态随机存 取存储器(DRAM)、RAMBUS DRAM (RDRAM)和/或任意其它类型的随机存取存储器设备。非易 失存储器144包括但不局限于NAND闪存、只读存储器(ROM)、电可擦除可编程ROM(EEPROM) 和/或任意其它要求类型的存储器设备。主存储器140存储由处理器110执行的信息和指 令。在处理器110执行指令的同时,主存储器140也可存储临时变量或其它中间信息。在 本发明的另一实施例中,存储器/图形控制器120是处理器110的一部分。存储器/图形控制器120连接于显示设备130,该显示设备130包括但不局限于液 晶显示器(LCD)、阴极射线管(CRT)显示器或任何其它形式的视频显示设备。I/O控制器150 耦合于但不局限于存储设备160、高速缓存设备170、网络接口 180和键盘/鼠标190。具体 地说,I/O控制器150执行多种功能以使处理器110与存储设备160、高速缓存设备170、网 络接口 180和键盘/鼠标190通信。在一个实施例中,高速缓存设备170可以是存储设备 160的一部分。网络接口 180是使用任意类型的公知网络接口标准实现的,包括但不局限于以太 网接口、USB接口、外围组件互连(PCI)直通接口、无线接口和/或任意其它合适类型的接 口。无线接口根据但不局限于电气和电子工程师协会(IEEE)无线标准族802. 11、家用插头AV(HPAV)、超宽带(UWB)、蓝牙、WiMax或任意其它形式的无线通信协议而工作。在本发明的一个实施例中,图1所示的总线是由与之相连的全部组件共享的通信 链路。在本发明的另一实施例中,图1所示总线是彼此连接的多对组件之间的点对点通信 链路。尽管图1示出的组件作为系统100中的分立模块予以描述,然而由这些模块中的一 些实现的功能可集成在单个半导体电路中或使用两个或更多分立集成电路来实现。例如, 尽管存储器/图形控制器120和I/O控制器150表示为分立模块,然而本领域内技术人员 很容易理解存储器/图形控制器120和I/O控制器150可集成在单个半导体电路中。图2示出根据本发明一个实施例的I/O控制器150的方框图200。I/O控制器150 具有复原控制器212和运行控制器214。在本发明的一个实施例中,运行控制器214具有基 于探试的高速缓存策略以确定存储设备160的数据是被高速缓存还是从高速缓存设备170 中逐出。探试包括但不局限于最近访问的LBA、LBA的牵制(pin)信息等。在本发明的一个 实施例中,运行控制器214也执行高速缓存方案,例如检测高速缓存命中或高速缓存未命 中以及高速缓存或逐出命令的队列化。在本发明的一个实施例中,运行控制器214利用高速缓存设备170的完整数据容 量以高速缓存存储设备160的数据。在本发明的另一实施例中,运行控制器214利用高速 缓存设备170完整数据容量的一部分以高速缓存存储设备160的数据。例如,在本发明的 一个实施例中,运行控制器214利用高速缓存设备170的一半完整数据容量来高速缓存存 储设备160的数据并将高速缓存设备170的另一半完整数据容量用作存储介质。 在本发明的一个实施例中,复原控制器212和运行控制器214允许将存储设备160 中的数据防电源故障回写或直写高速缓存入高速缓存设备170。相关领域技术人员很容易 理解,也可采用其它的高速缓存方案而不会影响本发明的工作。在本发明的一个实施例中, 在系统100出故障的情形下,复原控制器212和运行控制器214保持存储设备160中的数 据和高速缓存设备170中高速缓存的数据的完整性或一致性。系统100的故障事件包括但 不局限于,功率丢失故障、操作系统(OS)崩溃故障、系统100的不正当停止运作以及不在系 统100正常操作状态下的其它事件。在本发明一个实施例中,复原控制器212在已发生故障事件后复原高速缓存设备 170中的高速缓存行的高速缓存状态。在本发明的其它实施例中,复原控制器212处理其它 事件,包括但不局限于分离检测和处理、在运行控制器214初始化前处理全部I/O数据等。 尽管复原控制器212和运行控制器214描述为图2中I/O控制器150的一部分,然而这并 不构成限制。复原控制器212和运行控制器214可一同实现在同一硬件或软件模块中或在 不同硬件或软件模块中单独实现。在本发明的一个实施例中,复原控制器212和运行控制器214是存储器/图形控 制器120的一部分。在本发明的另一实施例中,复原控制器212和运行控制器214也可合 并为单个控制器。相关领域内技术人员很容易理解可采用不同配置的复原控制器212和运 行控制器214而不会影响本发明的工作。例如,在本发明的一个实施例中,复原控制器212 实现为存储在系统100的供选ROM中的固件,而运行控制器214实现在系统100上执行的 OS的块存储驱动器中。图3示出根据本发明一个实施例的OS中的模块的方框图300。OS具有应用层310 和文件系统320。应用层310能访问由文件系统320组织的文件。OS还具有存储驱动器堆栈330和块驱动器340。根据本发明的一个实施例,块驱动器340具有运行/复原控制器 344。块驱动器340可包括运行控制器、复原控制器或运动控制器和复原控制器两者。运行/复原控制器344耦合于存储设备160和高速缓存设备170并且将存储设 备160中的数据高速缓存入高速缓存设备170。在高速缓存存储设备160中的数据的过程 中,没有与高速缓存设备170的任何高速缓存行关联的状态信息或元数据原子地存储在高 速缓存设备170中。在本发明的一个实施例中,OS利用回写高速缓存方案,其中要写至存 储设备160的任何数据首先被写至高速缓存设备170。OS系统在写将数据至高速缓存设备 170后不是立即将该数据写至存储设备160,而是等待适宜时间才将数据写至存储设备。如 此,存储设备160的数据访问被最小化并且OS在执行其它指令前不需要等待将数据写至存 储设备160。由于高速缓存设备170的数据访问速率高于存储设备160的数据访问速率,回 写高速缓存方案有利于加速系统100的存储子系统。当利用回写高速缓存方案时,存储设备160中的数据可与高速缓存设备170中的 高速缓存数据不同步。在本发明的一个实施例中,当系统100的处理器110、存储设备160 或高速缓存设备170的利用率是正被使用时,运行/复原控制器344使高速缓存设备170 中的高速缓存数据与存储设备160中的数据同步。例如,在本发明的一个实施例中,运行/ 复原控制器344确定系统100中处理器110的利用率低于某一阈值就使高速缓存设备170 中尚未同步的高速缓存数据与存储设备160中的数据同步。相关领域内技术人员很容易理 解可采用其它方案或策略以执行高速缓存设备170中的数据的背景同步而不会影响本发 明的工作。OS可将定期刷新命令发布给I/O控制器150以确保所有之前写入的数据是非易失 的。在本发明的一个实施例中,当刷新命令结束时,I/O控制器150确保数据和元数据更新 在存储设备160和高速缓存设备170中是非易失的,并且即使出现例如系统100电源故障 的不当停止运作,也能恢复全部之前写入的数据。在本发明的另一实施例中,OS利用直写高速缓存方案,这种情况下存储设备160 中的数据和高速缓存设备170中高速缓存的数据永远是同步的。当OS执行写操作时,高速 缓存设备170和存储设备160被写入同一数据。由于不需要专门的高速缓存硬件来启用防电源故障直写和回写高速缓存,因此本 发明的实施例允许降低系统100的研发成本。例如,在本发明的一个实施例中,使用相对小 尺寸的SSD来高速缓存一个或多个大尺寸硬盘驱动器而不需要专门的高速缓存硬件。图4示出根据本发明一个实施例的高速缓存设备170的配置400。高速缓存设备 170的配置400示出分组的元数据401的逻辑段以及高速缓存行402的另一逻辑段。高速 缓存设备170的块宽度405表示高速缓存设备170的数据位宽度。在本发明的另一实施例 中,高速缓存设备170的配置400也可包括针对例如数据存储或数据索引的其它目的的其 它逻辑段(图4中未示出)。作为示例,高速缓存行402的逻辑段示出具有八个高速缓存行(高速缓存行0-7), 它们用来高速缓存存储设备160的数据。高速缓存行402的逻辑段不包含与任意高速缓存 行402关联的任何元数据。本领域内技术人员很容易理解,高速缓存设备170可具有多于 八个高速缓存行以高速缓存存储设备160的数据。在本发明的一个实施例中,高速缓存设 备170的每个高速缓存行存储存储设备160的紧邻数据。在本发明的另一实施例中,高速
9缓存设备170的每个高速缓存行不存储存储设备160的紧邻数据。块宽度405不局限于特 定的位宽度。在本发明的一个实施例中,块宽度405是高速缓存设备和运行/复原控制器 344之间的通信链路的总线宽度。例如,在本发明的一个实施例中,如果高速缓存设备和运 行/复原控制器344之间的通信链路的总线宽度为64位,则块宽度405可设置成等于64 位的倍数的位宽度。在本发明的另一实施例中,块宽度405可设置成存储存储设备160的 LBA的倍数。例如,高速缓存设备的每个高速缓存行被设置成能存储存储设备160的四个 LBA的块宽度405。在本发明的一个实施例中,分组的元数据401的逻辑段具有以分组方式存储的元 数据0-7因而多个元数据彼此紧邻地存储,每个元数据与一个不同的高速缓存行关联。例 如,元数据0 410关联于高速缓存行0 450,元数据1 411关联于高速缓存行1 415,依此类 推。在本发明的一个实施例中,分组的元数据401针对每个元数据块具有一个完整性标记。 元数据0-3 410、411、412和413具有完整性标记1 430而元数据4-7 414、415、416和417 具有完整性标记2 440。完整性标记430、440防止系统100始料未及的停止运作或故障事 件而破坏数据结构。在本发明的一个实施例中,分组元数据401的逻辑段紧邻地位于高速 缓存设备170中以加快对分组元数据401的访问。在本发明的另一实施例中,分组元数据 401的逻辑段不紧邻地位于高速缓存设备170中。在又一实施例中,完整性标记430和440 未被存储在分组元数据401的逻辑段中。在本发明一个实施例中,为了促成高速缓存设备170中的回写或直写高速缓存, OS维持易失存储器142中的高速缓存行的信息。该高速缓存行的信息包括但不局限于未 经使用或不留有存储设备160的任何数据的高速缓存行的清单、具有存储设备160中的数 据或LBA和存储该数据或LBA的高速缓存设备170中的高速缓存行之间的链接信息的高速 缓存表、高速缓存设备170中能以分组形式或不同形式存储的全部高速缓存行的元数据、 易失存储器142中仍要写至高速缓存设备170的元数据的各个元数据的高速缓存行的列表 等。在本发明的一个实施例中,OS保留易失存储器142中的高速缓存设备170的分组元数 据401的逻辑段的副本以利于高速缓存设备170中的回写或直写。在本发明的一个实施例 中,高速缓存表可实现为散列表、树形表或任意其它搜索数据结构。图5示出根据本发明一个实施例的直写高速缓存方案的流程图500。在步骤510 中,运行控制器检查故障事件是否发生。在本发明的一个实施例中,运行控制器检查寄存器 或标志是否指示故障事件已发生。在本发明的一个实施例中,步骤510检查系统100是否 不当地断电。在本发明的另一实施例中,步骤510检查OS是否已崩溃或出故障。如果存在 故障事件,则在步骤512运行控制器将高速缓存设备170复位。流程在步骤512将高速缓存设备170复位后回到步骤510。在本发明的一个实施 例中,运行控制器通过将高速缓存设备170的全部高速缓存行添加至空闲或未使用的高速 缓存行的清单而将高速缓存设备170复位。高速缓存行的清单告知运行控制器清单中的高 速缓存行可用于高速缓存存储设备160的数据。在本发明的另一实施例中,运行控制器通 过将高速缓存设备170的全部高速缓存行著录或标记为未使用而将高速缓存设备170复 位。如果不存在故障事件,运行控制器在步骤520检查是否存在正当地使系统100断 电的请求。系统100的正当断电或停止运作指OS向系统100发布例如但不局限于重启命
10令、停止运作命令、休眠命令、待机命令或使系统100断电的任意命令的事件。如果存在正 当地使系统100断电的请求,则运行控制器在步骤522将与高速缓存设备170的全部高速 缓存行关联的分组元数据从易失存储器142复制至高速缓存设备170。在本发明的一个实 施例中,运行控制器将与高速缓存设备170的全部高速缓存行关联的分组元数据从易失存 储器142复制至分组元数据401的逻辑段。在可选步骤524,运行控制器将高速缓存表从易 失存储器142复制至高速缓存设备170且流程500回到步骤510。如果不存在正当地使系统100断电的请求,则运行控制器在步骤530中检查是否 存在更新数据或将数据插入高速缓存设备170的高速缓存行的请求。例如,在本发明的一 个实施例中,当OS想要将数据写至存储设备160中的特定地址位置时,运行控制器检查高 速缓存表以判断存储设备160中特定地址位置的数据是否被高速缓存在高速缓存设备170 中。如果存在高速缓存命中,即在该特定地址位置的数据被高速缓存在高速缓存设备170 中,则运行控制器接收一请求以更新存储特定地址位置数据的匹配高速缓存行。如果存在 高速缓存未命中,即特定地址位置的数据不被高速缓存在高速缓存设备170中,则运行控 制器接收一请求以将特定地址位置的数据插入高速缓存设备170的高速缓存行。如果存在更新数据或将数据插入高速缓存设备170的高速缓存行的请求,则运行 控制器在步骤532基于要写入的新数据,在易失存储器142中更新与高速缓存行关联的分 组元数据或状态信息。在步骤534,运行控制器用新数据更新高速缓存行和存储设备160。 当步骤534结束时,高速缓存设备170和存储设备160中的数据是同步的。如果没有请求更新数据或将数据插入高速缓存设备170的高速缓存行,则复原控 制器在步骤540检查是否存在任何系统100的上电通知。如果是,则复原控制器在步骤542 恢复高速缓存设备170中经分组的元数据或将其复制入易失存储器142。在可选步骤544, 如果高速缓存表已在系统100停止运转之前被保存,则复原控制器恢复高速缓存设备170 中的高速缓存表或将其复制至易失存储器142,随后流程500返回到步骤510。如果不是,运行控制器在步骤550检查是否存在从高速缓存设备170读取数据的 请求。例如,在本发明的一个实施例中,当OS想要从存储设备160中的特定地址位置读取 数据时,运行控制器接收请求以从高速缓存设备170读取数据。如果存在从高速缓存设备 170读取数据的请求,则运行控制器在步骤552检查高速缓存表以判断在存储设备160中 特定地址位置的数据是否被高速缓存在高速缓存设备170中。如果不存在从高速缓存设备 170读取数据的请求,则流程返回到步骤510。在步骤554,运行控制器检查是否存在高速缓存命中,即存储设备160中特定地址 位置的数据是否被高速缓存在高速缓存设备170中。如果是,运行控制器在步骤556从高 速缓存设备170读取数据并将数据返回给0S,然后流程500回到步骤510。如果不是,运行 控制器在步骤558将高速缓存未命中发送给OS。在本发明的一个实施例中,当存在高速缓 存未命中时,运行控制器在步骤558访问存储设备160中特定地址位置的数据并将数据返 回给0S,然后流程500返回到步骤510。在本发明的一个实施例中,当利用直写高速缓存方案时,运行控制器不在运行过 程中在高速缓存设备170中写入或更新分组数据。由于存储设备160和高速缓存设备170 中的数据永远是同步的,当例如功率丢失事件的故障事件发生时,可将高速缓存设备170 复位。由于即使在功率丢失事件中也能维持存储设备160中的数据完整,因此系统100是防电源故障的。图6A示出根据本发明一个实施例的回写高速缓存方案的流程图600。在步骤610 中,运行控制器检查是否存在更新高速缓存设备170的高速缓存行的请求。如果存在更新 高速缓存行的请求,则运行控制器在步骤612用新数据更新相关的高速缓存行。在步骤 614,运行控制器基于要写入到易失存储器142中的新数据更新与高速缓存行关联的分组 元数据或状态数据。在步骤616,运行控制器基于要写入高速缓存设备170的新数据更新与 高速缓存行关联的分组元数据或状态信息。在本发明的另一实施例中,运行控制器在步骤 616将易失存储器142中与高速缓存行关联的分组元数据或状态信息复制入与高速缓存设 备170的分组元数据401的逻辑段中的高速缓存行关联的相关分组元数据中。流程600在 步骤616结束后返回到步骤610。如果不存在更新高速缓存行的请求,则运行控制器在步骤620检查是否存在请求 以正当地使系统100的断电。如果存在正当地使系统100掉电的请求,则运行控制器在可选 步骤624将高速缓存表从易失存储器142复制至高速缓存设备170,然后流程600返回到步 骤610。如果不存在正当地使系统100的断电的请求,则运行控制器在步骤630检查OS是 否已发布刷新命令。如果OS已发布刷新命令,则运行控制器在步骤632刷新存储设备160 和高速缓存设备170两者中的任意易失数据。如果OS尚未发布刷新命令,则复原控制器在步骤640检查是否存在任何系统100 的上电通知。如果是,则复原控制器在步骤642恢复高速缓存设备170中的分组元数据并 将其复制入易失存储器142。在可选步骤644中,如果高速缓存表已在系统100停止运转之 前被保存,则复原控制器恢复高速缓存设备170中的高速缓存表或将其复制至易失存储器 142,然后流程600返回到步骤610。如果不是,运行控制器在步骤650检查是否存在从高速缓存设备170读取数据的 请求。如果存在从高速缓存设备170读取数据的请求,则运行控制器在步骤652检查高速缓 存表以判断存储设备160中特定地址位置的数据是否被高速缓存在高速缓存设备170中。 如果不存在从高速缓存设备170读取数据的请求,则流程返回到步骤610。在步骤654,运行控制器检查是否存在高速缓存命中,即存储设备160中特定地址 位置的数据被高速缓存入高速缓存设备170。如果是,运行控制器在步骤656从高速缓存设 备170读取数据并将数据返回给0S,然后流程600回到步骤610。如果不是,运行控制器在 步骤658将高速缓存未命中发送给OS。在本发明的一个实施例中,当存在高速缓存未命中 时,运行控制器在步骤658访问存储设备160中特定地址位置的数据并将数据返回给0S,随 后流程600回到步骤610。图6A的回写高速缓存方案要求对高速缓存设备170附加写入操 作,以对新数据的每次高速缓存行写操作更新与这些高速缓存行关联的分组元数据。图6B示出根据本发明一个实施例的回写高速缓存方案的流程图660。在步骤610 中,运行控制器检查是否存在更新高速缓存设备170的高速缓存行的请求。如果存在更新 高速缓存行的请求,则运行控制器在步骤612用新数据更新相关高速缓存行。在步骤614, 运行控制器基于要写入的新数据在易失存储器142更新与高速缓存行关联的分组元数据 或状态信息。在步骤615,运行控制器基于高速缓存设备170中的新数据将高速缓存行标记 为等待与高速缓存行关联的分组元数据的更新。在本发明的一个实施例中,运行控制器通 过将高速缓存行添加至等待元数据写入的易失存储器142中的清单而对高速缓存行作出标记。等待元数据写入的清单包括具有在易失存储器142和高速缓存设备170之间没有同 步的关联的分组元数据的高速缓存行。如果不存在更新高速缓存行的请求,则运行控制器在步骤620检查是否存在正当 地使系统100断电的请求。如果存在正当地使系统100断电的请求,则运行控制器将易失 存储器142中全部等待的分组元数据写入高速缓存设备170中的分组元数据。在本发明的 一个实施例中,运行控制器从等待元数据写入的清单确定要更新或写入哪个元数据。在可 选步骤624中,运行控制器将高速缓存表从易失存储器142复制至高速缓存设备170,然后 流程660回到步骤610。如果不存在正当地使系统100断电的请求,则运行控制器在步骤630检查OS是否 已发布刷新命令。如果已发布刷新命令,则运行控制器在步骤631将易失存储器142中的 全部等待的分组元数据更新为高速缓存设备170中的分组元数据。在本发明的另一实施 例中,运行控制器在步骤631的一次连续写操作中将全部分组元数据从易失存储器142更 新或复制至高速缓存设备170。在步骤632,运行控制器刷新存储设备160和高速缓存设备 170中的任何易失数据。如果没有发布刷新命令,复原控制器在步骤640检查是否存在任何系统100的上 电通知。如果是,复原控制器在步骤642将高速缓存设备170中的分组元数据恢复或复制 入易失存储器142。在可选步骤644中,如果在系统100停止运转之前已保存高速缓存表, 则复原控制器将高速缓存设备170中的高速缓存表恢复或复制至易失存储器142,流程660 回到步骤610。如果不是,运行控制器在步骤650检查是否存在从高速缓存设备170读取数据的 请求。如果存在从高速缓存设备170读取数据的请求,则运行控制器在步骤652检查高速 缓存表以判断在存储设备160中特定地址位置的数据是否被高速缓存在高速缓存设备170 中。如果不存在从高速缓存设备170读取数据的请求,则流程660返回到步骤610。在步骤654,运行控制器检查是否存在高速缓存命中,即存储设备160中特定地址 位置的数据是否被高速缓存在高速缓存设备170中。如果是,运行控制器在步骤656从高速 缓存设备170读取数据并将数据返回给0S,然后流程660回到步骤610。如果不是,运行控 制器在步骤658将高速缓存未命中发送给OS。在本发明的一个实施例中,当存在高速缓存 未命中时,运行控制器在步骤658访问存储设备160中特定地址位置的数据并将数据返回 给0S,然后流程660返回到步骤610。图6B的回写高速缓存方案需要对高速缓存设备170 的可选附加写入,以对应每次刷新或断电事件更新与高速缓存行关联的分组元数据。图6C示出根据本发明一个实施例的回写高速缓存方案的流程图680。图6C是结 合图6B讨论的,因为流程680是流程660的变化形式。除了步骤631,流程660中的所有 步骤均适用于流程680,并且不再对这些步骤予以重复说明。在流程680中,在步骤630从 OS接收刷新命令后,运行控制器在步骤662检查等待的元数据写入清单中是否存在邻近的 等待写入。作为示例,假设等待元数据写入清单具有针对七个高速缓存行(高速缓存行5、 6、7、9、12、13和45)的等待元数据写入。在假定的场景中,由于高速缓存行5、6、7是紧邻的且高速缓存行12和13也是紧 邻的,流程680进至步骤664。在步骤664中,运行控制器将针对高速缓存行5、6和7的元 数据写入合并为一次元数据写入。另外将针对高速缓存行12和13的元数据写入合并为另一次元数据写入。因此,运行控制器具有四次元数据写入(5、6和7、9的合并写入,12、13和 45的合并写入)而不是原始的七次元数据写入。在步骤670,运行控制器执行步骤664的 四次元数据写入。在另一示例中,假设等待元数据写入的列表具有针对五个高速缓存行(高速缓存 行3、9、11、14和45)的等待元数据写入。在假定的场景中,流程680进至步骤662以检查 在等待高速缓存行要写入的地址位置是否存在小间隔。在本发明的一个实施例中,如果一 起写入高速缓存行所花费的时间短于将这些高速缓存行单独写入所花费的时间,则认为高 速缓存行之间的间隔小。例如,如果更新与高速缓存行9、10、11关联的元数据所需的时间 短于单独更新与高速缓存行9、11关联的元数据所需的时间,则认为高速缓存行9、11之间 的间隔小。在本发明的一个实施例中,即便不需要更新与高速缓存行10关联的元数据,将 高速缓存行的元数据更新结合起来仍然减少了更新高速缓存行所需的时间。在假定的场景中,高速缓存行9、11之间的间隔以及高速缓存行11、14之间的间隔 假设为小并且流程进至步骤668。在步骤668,运行控制器将其间具有小间隔的高速缓存行 合并为一个大的元数据高速缓存写。例如,在假定的场景中,运行控制器将针对高速缓存行
9、11和14的元数据更新结合为针对高速缓存行9-14的一次元数据更新,即便高速缓存行
10、12和13不需要修正。在步骤670,运行控制器执行步骤664中的组合元数据写入并且 流程进至流程660中的步骤634。步骤664和668优化操作以更新高速缓存设备170中等 待的分组元数据。在流程680,在本发明的另一实施例中,只执行步骤662、664和步骤666、 668中的一个步骤。相关领域内技术人员很容易理解可进行其它优化以减少更新高速缓存 设备170中等待的元数据更新的时间而不会影响本发明的工作。图6A、6B和6C所示的回写高速缓存方案不解释为限定。相关领域内技术人员很 容易理解可实现步骤的多种组合或修正而不影响本发明工作。系统100的用户可确定利用 图6A、6B和6C中三个回写高速缓存方案中的一个并也可利用图6A、6B和6C的三个回写高 速缓存方案的任意组合形式。图7示出根据本发明一个实施例的将数据插入高速缓存设备170的高速缓存行的 方法的流程图700。在步骤710,运行控制器检查是否存在将数据插入高速缓存设备170的 高速缓存行的请求。例如在本发明的一个实施例中,当OS想要将数据写至存储设备160的 特定地址位置时,运行控制器检查高速缓存表以判断存储设备160中特定地址位置的数据 是否被高速缓存在高速缓存设备170中。如果不存在高速缓存命中,即特定地址位置的数 据未高速缓存在高速缓存设备170中,则运行控制器可接收请求以将数据插入高速缓存设 备170的高速缓存行。如果不存在将数据插入高速缓存行的请求,流程结束。如果存在将数据插入高速 缓存行的请求,则运行控制器在步骤720检查高速缓存设备170中是否存在任何空闲的高 速缓存行。在本发明的一个实施例中,高速缓存设备170中全部未使用的高速缓存行被著 录或标记为空闲的高速缓存行。在本发明的另一实施例中,高速缓存设备170中未使用的 高速缓存行的固定部分被著录或标记为空闲高速缓存行。例如在一个实施例中,运行控制 器可将高速缓存设备170的五个高速缓存行标记为空闲高速缓存行。如果不存在空闲高速 缓存行,则运行控制器在步骤722基于逐出策略选择高速缓存设备170要被逐出的一个或 多个高速缓存行。逐出策略包括但不局限于逐出最近很少使用的高速缓存行、逐出高速缓
14存设备170的第一高速缓存行等。在步骤724,所选择的高速缓存行被运行控制器逐出。在本发明的一个实施例中, 运行控制器通过将所选高速缓存行中已高速缓存的数据(如果其尚未同步)写至存储设备 160而逐出所选择的高速缓存行。在步骤726,运行控制器将逐出的高速缓存行著录或标记 为空闲高速缓存行并且流程进至步骤730。如果存在空闲的高速缓存行,则运行控制器在步 骤730选择高速缓存设备170的一个或多个空闲的高速缓存行以高速缓存要写入的数据。 空闲高速缓存行的选择策略包括但不局限于,首先可用的空闲高速缓存行、最近很少使用 的空闲高速缓存行等。在步骤740,运行控制器将数据写至选定的空闲高速缓存行。在步骤750,运行控制器基于新数据更新易失存储器142中与所选高速缓存行关 联的分组元数据或状态信息。在步骤750后,如果利用流程660或680的回写高速缓存方 案,流程700执行可选步骤760,其中运行控制器基于新数据将高速缓存设备170中的高速 缓存行标记为等待更新与高速缓存行关联的分组元数据,或如果利用流程600的回写高速 缓存方案,则执行可选步骤770,其中运行控制器基于新数据更新与高速缓存设备170中的 所选高速缓存行关联的分组元数据或状态信息。流程在可选步骤760或770完成后结束。由于例如系统100电源故障的故障事件可能导致存储设备160和高速缓存设备 170中的数据完整性问题,高速缓存行的逐出需要立即更新与高速缓存设备170中的高速 缓存行关联的分组元数据。如此,高速缓存行的逐出在每次逐出后都需要与高速缓存设备 170中的高速缓存行关联的元数据写入。然而,在高速缓存行每次逐出后执行附加的元数据 写入引发开销。为了避免开销,图7展示的将数据插入高速缓存设备170的高速缓存行的 方法包括将新数据插入空闲的高速缓存行而不是具有高速缓存数据的高速缓存行。例如,为了便于说明,假设运行控制器接收对存储设备160的LBAl插入数据的请 求。假设高速缓存行4从存储设备160的LBA5开始存储数据。如果在用来自存储设备160 的LBAl的数据写入高速缓存行4之后但在更新与高速缓存行4关联的元数据之前发生故 障事件,系统100 —旦重启或重引导事件发生就会看到高速缓存行4具有基于与高速缓存 行4关联的元数据的来自LBA5的数据。然而这是错误的,由于高速缓存行4已用来自存储 设备160的LBAl的数据予以更新。通过如图7的流程700所述地将新数据插入空闲高速缓存行,发生的故障事件不 影响存储设备160和高速缓存设备170的数据完整性。例如,为了便于说明,当运行控制器 接收将来自存储设备160的LBAl的数据插入高速缓存设备170的请求时,运行控制器选择 空闲的高速缓存行以高速缓存来自存储设备160的LBAl的数据。如果故障事件发生在用 来自存储设备160的LBAl的数据更新空闲高速缓存行之后但发生在更新与空闲高速缓存 行关联的元数据之前,则故障事件不影响存储设备160和高速缓存设备170的数据完整性。 由于发生的是故障事件而不是刷新事件,因此可丢弃新数据而不会影响系统100。直写高速缓存方案不局限于图5所示的算法。在本发明的另一实施例中,直写高 速缓存方案可利用图6A、6B和6C所示的回写高速缓存算法之一。回写高速缓存方案可利 用图6A、6B和6C所示的回写高速缓存算法以及图7的算法之一。如果直写高速缓存方案 利用图6A、6B和6C所示回写高速缓存算法和图7所示算法之一,则直写高速缓存在不当地 停止运作期间也能保持激活。图8A和8B示出用于实现本发明一个实施例的回写高速缓存方案的伪代码800和
15850。为了便于说明,将HDD作为存储设备160的例示并将SSD作为高速缓存设备170的例 示。相关领域内技术人员很容易理解伪代码800、850的工作机理并不再对其进行详细说 明。尽管已描述了所披露的主题事项的实施例示例,然而本领域内技术人员很容易理 解可代替地使用实现所披露主题事项的许多其它方法。在前面的描述中已记载了所披露主 题事项的多个方面。为了便于说明,给出具体的数目、系统和配置以提供对主题事项的透彻 理解。然而,本领域内技术人员可从实践本公开明确主题事项得益而无需具体细节。在其 它情形下,将公知的特征、组件或模块省去、简化、组合或分割以不混淆所披露的主题事项。术语“可作用”在本文中表示设备、系统、协议等当处于掉电状态时可作用或可适 应地实现其想要的功能。所披露主题事项的各个实施例可实现为硬件、固件、软件或其组 合,或参照或结合例如指令、功能、进程、数据结构、逻辑、应用程序、当由机器访问时致使机 器执行任务和定义关键数据类型或低层硬件背景或产生结果的设计的模拟、模仿和制作的 设计表示或格式的程序代码进行描述。附图中示出的技术可使用在例如通用计算机或计算设备的一个或多个计算设备 上存储和执行的代码和数据来实现。这些计算设备存储并传输(在内部或与网络上的其它 计算设备)代码和数据,例如运用机器可读存储介质(例如磁盘、光盘、随机存取存储器、只 读存储器、闪存设备、相变存储器)和计算机可读通信介质(例如电、光、声或其它形式的传 播信号——例如载波、红外信号、数字信号等)。尽管已结合示例性实施例对所披露的主题事项进行了说明,然而这种说明不应当 解释成限定的意思。本领域内技术人员所熟知的主题事项的示例性实施例以及其它实施例 的多种修正形式视为落在所披露主题事项的范围内。
1权利要求
一种方法,包括将第一设备的数据高速缓存入第二设备的多个高速缓存行中的一个或多个,其中在所述数据的高速缓存期间,没有任何关联于任何所述高速缓存行的状态信息要随所述数据原子地存储在所述第二设备中。
2.如权利要求1所述的方法,其特征在于,将所述第一设备的数据高速缓存入所述第 二设备的所述一个或多个高速缓存行包括从关联于所述多个高速缓存行的状态信息判断所述多个高速缓存行中是否有任何高 速缓存行被标记为未使用;如果没有,则逐出所述多个高速缓存行中的至少一个;以及在所述状态信息中将所述至少一个被逐出的高速缓存行标记为未使用;选择在所述状态信息中被标记为未使用的一个或多个高速缓存行;以及将所述第一设备的所述数据高速缓存入所选择的一个或多个高速缓存行。
3.如权利要求1所述的方法,其特征在于,还包括当所述第一设备的所述数据被高速 缓存入所述第二设备的一个或多个高速缓存行时,将关联于所述一个或多个高速缓存行的 状态信息存储在存储器中。
4.如权利要求3所述的方法,其特征在于,还包括当新数据要被写至所述一个或多个高速缓存行时,用所述新数据更新所述一个或多个 高速缓存行中被高速缓存的数据;以及基于所述新数据,在所述存储器中更新关联于所述一个或多个高速缓存行的所述状态 fn息ο
5.如权利要求4所述的方法,其特征在于,还包括当接收到重启、停机、休眠、或待机命令中的一个时,将所述存储器中的全部状态信息 复制至所述第二设备。
6.如权利要求4所述的方法,其特征在于,还包括当发生电源或系统故障时将所述第二设备复位。
7.如权利要求4所述的方法,其特征在于,所述第二设备包括与所述存储器中的所述 一个或多个高速缓存行关联的状态信息的副本,所述方法还包括响应于更新所述被高速缓 存的数据,基于所述第二设备中所述状态信息的副本中的所述新数据来更新与所述一个或 多个高速缓存行关联的状态信息。
8.如权利要求4所述的方法,其特征在于,所述第二设备包括与所述存储器中所述一 个或多个高速缓存行关联的状态信息的副本,所述方法还包括响应于更新所述被高速缓存 的数据,基于所述第二设备中所述状态信息的副本中的所述新数据来将所述一个或多个高 速缓存行标记为等待与所述一个或多个高速缓存行关联的状态信息的更新。
9.如权利要求8所述的方法,其特征在于,还包括当接收到刷新、重启、停机、休眠或待 机命令之一时,更新所述第二设备中的所述状态信息的副本中与所述一个或多个标记的高 速缓存行关联的状态信息。
10.如权利要求4所述的方法,其特征在于,还包括当接收到刷新命令时,将所述存储 器中与所述一个或多个高速缓存行关联的状态信息复制到所述第二设备。
11.如权利要求10所述的方法,其特征在于,将所述存储器中与所述一个或多个高速 缓存行关联的状态信息复制到所述第二设备包括优化复制操作的次数。
12.一种装置,包括NAND闪存,其具有多个高速缓存行的第一逻辑段以及多个元数据的第二逻辑段,每个 元数据关联于所述多个高速缓存行中相应的一个,其中所述第二逻辑段不具有任何元数 据;以及控制器,用来将存储设备的数据高速缓存入一个或多个高速缓存行。
13.如权利要求12所述的装置,其特征在于,所述第二逻辑段的每个元数据在其关联 的对应高速缓存行中包括被高速缓存的数据的序列号、逻辑块地址、状态信息、和牵制信息 中的至少一个。
14.如权利要求12所述的装置,其特征在于,所述多个高速缓存行包括多个空闲的高 速缓存行,且所述控制器进一步用来确定是否所有的空闲高速缓存行被使用;如果是,逐出一个或多个选择的高速缓存行,所述选择基于逐出策略;将逐出的一个或多个选择的高速缓存行添加至空闲高速缓存行;且其中用于将所述存 储设备的数据高速缓存入所述一个或多个高速缓存行的控制器用于将所述存储设备的数 据高速缓存入所述一个或多个空闲的高速缓存行。
15.如权利要求12所述的装置,其特征在于,还包括用于存储多个元数据的存储器,其 中所述控制器进一步用来当新数据要被写至所述一个或多个高速缓存行时,用所述新数据更新所述一个或多个 高速缓存行的被高速缓存的数据;以及基于存储器中的新数据更新与所述一个或多个高速缓存行关联的元数据。
16.如权利要求15所述的装置,其特征在于,所述控制器进一步用来用所述新数据更新所述存储设备;以及当所述装置要被重引导、停机、或置于休眠状态时,用所述存储器中与所述一个或多个 高速缓存行关联的元数据覆写所述NAND闪存中与所述一个或多个高速缓存行关联的元数 据。
17.如权利要求15所述的装置,其特征在于,所述存储器进一步存储高速缓存表,所述 高速缓存表包含所述存储设备中的数据与所述多个高速缓存行之间的链接信息,并且当所 述装置要被重引导、刷新、停机、或置于休眠状态时,所述控制器进一步用于将所述存储器 中的所述高速缓存表复制至所述NAND闪存。
18.如权利要求15所述的装置,其特征在于,当新数据要被写至所述一个或多个高速 缓存行时,响应于更新被高速缓存的数据,所述控制器基于所述NAND闪存中的新数据更新 与所述一个或多个高速缓存行关联的元数据。
19.如权利要求15所述的装置,其特征在于,所述控制器进一步将所述一个或多个高 速缓存行添加至清单,所述清单用来指示所述NAND闪存中与所述一个或多个高速缓存行 关联的元数据正在等待用与所述存储器中的所述一个或多个高速缓存行关联的元数据更 新。
20.如权利要求19所述的装置,其特征在于,当所述装置被断电或重引导时或当所述 NAND闪存要被刷新时,所述控制器进一步用所述存储器中与所述一个或多个高速缓存行关 联的元数据来更新所述NAND闪存中与所述一个或多个高速缓存行关联的元数据。
21.如权利要求14所述的装置,其特征在于,当接收到由所述系统上执行的操作系统 (OS)发布的刷新命令时,所述控制器进一步用所述存储器中的元数据覆写所述非易失介质 中的元数据。
22.如权利要求20所述的装置,其特征在于,当所述装置要被上电或重启时,所述控制 器进一步用所述NAND闪存中的元数据恢复所述存储器中的元数据。
23.如权利要求17所述的装置,其特征在于,当所述装置要被上电或重启时,所述控制 器进一步将所述高速缓存表从所述NAND闪存复制至所述存储器。
24.如权利要求12所述的装置,其特征在于,所述存储设备是硬盘、磁带驱动器、压缩 盘、zip盘、闪存和固态驱动器中的一个。
25.如权利要求12所述的装置,其特征在于,所述控制器是块存储驱动器。
26.一种其上存储有指令的计算机可读存储介质,当所述指令执行时使处理器执行下 列方法将存储设备的数据回写或直写高速缓存入高速缓存设备的多个高速缓存行中的一个 或多个,其中当所述数据被高速缓存时没有任何关联于任何所述高速缓存行的元数据要被 原子地写入所述高速缓存设备。
27.如权利要求26所述的介质,其特征在于,将所述存储设备的数据回写或直写高速 缓存入所述高速缓存设备的一个或多个高速缓存行包括确定所述多个高速缓存行中是否有任何高速缓存行被标记为未使用; 如果没有,逐出所述多个高速缓存行中的至少一个;以及将所述至少一个逐出的高速缓存行标记为未使用;选择一个或多个标记为未使用的高速缓存行;以及将所述存储设备的数据高速缓存入所选择的一个或多个高速缓存行。
28.如权利要求26所述的介质,其特征在于,数据的直写高速缓存包括 确定所述高速缓存设备的所述一个或多个高速缓存行要用新数据更新; 用所述新数据更新所述一个或多个确定的高速缓存行;在存储器中至少基于所述新数据来更新与所述一个或多个确定的高速缓存行关联的 元数据;以及用所述新数据来更新所述存储设备。
29.如权利要求26所述的介质,其特征在于,所述数据的回写高速缓存包括 确定所述高速缓存设备的所述一个或多个高速缓存行要用新数据更新;在存储器中至少基于所述新数据来更新与所述一个或多个确定的高速缓存行关联的 元数据;用所述新数据来更新所述一个或多个确定的高速缓存行;以及 标记所述一个或多个确定的高速缓存行,其中所述标记用于指示与所述高速缓存设备 中的所述一个或多个确定的高速缓存行关联的元数据是要用所述存储器中与所述一个或多个确定的高速缓存行关联的元数据来更新的。
30.如权利要求26所述的介质,其特征在于,所述数据的回写高速缓存还包括 当接收到断电、重引导或刷新命令时,用所述存储器中与所述一个或多个确定的高速缓存行关联的元数据来更新所述高速缓存设备中与所述一个或多个确定的高速缓存行关 联的元数据。
31.一种系统,包括NAND闪存,其具有多个高速缓存行的第一逻辑段和多个元数据的第二逻辑段,每个元 数据关联于所述多个高速缓存行中对应的一个,其中所述第二逻辑段不具有任何元数据; 以及存储器控制器,用来将存储介质的数据回写或直写高速缓存入所述NAND闪存的所述 第一逻辑段的一个或多个高速缓存行,其中当所述数据被高速缓存时没有任何元数据要被 原子地写入所述第一逻辑段。
32.如权利要求31所述的系统,其中所述第二逻辑段的每个元数据在其关联的对应高 速缓存行中包括被高速缓存的数据的序列号、逻辑块地址、状态信息和牵制信息中的至少 一个。
全文摘要
一种方法和系统允许将永久存储设备中的数据防电源故障地回写或直写高速缓存入高速缓存设备的一个或多个高速缓存行。当存储设备中的数据被高速缓存时,没有与任一高速缓存行关联的元数据被原子地写至高速缓存设备。如此,在高速缓存数据期间不需要专门的高速缓存硬件来允许元数据的原子写入。
文档编号G06F11/14GK101923499SQ201010158039
公开日2010年12月22日 申请日期2010年3月29日 优先权日2009年3月30日
发明者S·N·特里卡 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1