用于虚拟存储设备的高速缓存降级的制作方法_3

文档序号:9769164阅读:来源:国知局
32和134。例如,用于将行添加到队列130、132和134的队列深度阈值4可以是针对队列130、13 2和134中的每一个的最大阈值(例如,8 )的50%。当然,用于添加到队列的阈值可以取决于各种因素而变化,诸如驱动的速度,并且可以是固定的数目或可以是最大阈值的某一百分比(例如,40%、50%、60%等等)。例如,当期望的队列深度是八时,至少一个驱动的队列深度下降到50%(例如,四)以下时,可以将附加的行添加到队列。
[0036]高速缓存112连同主存储122—起可以共同地被称为虚拟存储设备。当应用108将数据写到虚拟存储设备时,数据可以初始地写到高速缓存112并且然后降级到主存储122。将数据写到高速缓存112并且然后将数据降级到主存储122从应用108的视角来看可以是透明的。应用108可以写到虚拟存储设备,就像虚拟存储设备是一个或多个驱动的集合那样。应用108可以不知道高速缓存112和降级过程。
[0037]驱动114、116、118、124、126或128中的一个或多个可以包括驱动高速缓存154和存储区域156。因为许多驱动(SSD和硬驱动二者)包括驱动高速缓存154,所以可以不选择候选行120的集合,直到从高速缓存112接收到数据的100%已经提交(例如存储在高速缓存驱动114、116和118中的每一个的对应存储区域156中)的确认。因此,如果候选行120的集合无意中丢失(例如,由于重启),则候选行120的集合可以重新建立,因为行存储在高速缓存112中。高速缓存112的内容可以幸免于重启,因为高速缓存112可以包括非易失性存储器。可以不移除写到主存储122的行,直到从主存储122接收到数据的特定百分比(例如,100%)已经提交(例如存储在驱动124、126和128中的每一个的对应存储区域156中)的确认。
[0038]降级线程110可以维持针对主存储122中的每一个的特定队列深度,使得(I)驱动具有其对应队列中的足够显著的写入使得驱动不是空闲的(或者针对相对小量的时间是空闲的)并且(2)没有过载有太多写入,其可能使可以发送给驱动的其他输入/输出(I/O)减速(例如,绕过高速缓存的读取、写入等等)。可以执行使用不同队列深度的试验以识别针对特定架构或系统的适当队列深度(例如,4)。在以下提供的示例中,假定队列深度D已经被确定为适合的。
[0039]在一些情况中,一旦已经达到特定队列深度,降级线程110就可以考虑通过确定队列130、132或134中的一个或多个中的行的位置并且然后识别来自靠近(例如,在预定阈值内)队列130、132或134中的行的位置的高速缓存112的附加行来进一步改进写入效率。如果降级线程110识别靠近队列中的行的位置的高速缓存112中的行,则所识别的行可以代替队列130、132、134中的其他行。在一些情况中,基于行中的每一个将写到的位置,可以对队列130、132和134中的每一个中的行进行重新排序。例如,如果第一行148将写到第一驱动124上的位置L,则降级线程110可以针对将写到位置L附近的位置的行搜查高速缓存112。假定降级线程110识别将在位置L附近写入的行R。降级线程110可以将行R放置在第一队列130中以减少写入第一行136和行R时第一驱动122的读写头的搜索时间。行R可以替换第一队列130中的另一行。例如,通过将行R放置在第一行130中并且从第一队列130移除第二行138,行R可以代替第一队列130中的第二行138。因此,降级线程110可以识别队列中的特定行的位置,执行基于位置的搜查,并且利用更靠近队列中的特定行的其他行来替换队列中的一些行。
[0040]对于主存储122中的每一个而言,深度队列计数器148、150和152可以是发送(或者期望不久发送)给对应队列的降级写入的计数。深度队列计数器148、150和152的初始值可以是零,并且降级线程可以针对如可以接合的主存储122的许多驱动而维持至少D的队列深度。除深度队列计数器148、150和152之外,降级线程110可以针对主存储122中的每一个维持降级候选的阵列(用于降级的行中的下一个并且可以写到主存储122中的一个或多个的行)。例如,可以针对驱动124、126和128中的每一个创建降级候选行的集合,诸如降级候选行120的集合。
[0041 ]当降级线程110确定重新填充队列130、132和134时,可以通过降级线程110使用候选阵列和队列深度计数器148、150和152。第一,可以重置针对所有主存储122的降级候选阵列(例如,可以清除降级候选阵列的内容)。主存储122可以包括平板。平板是指虚拟存储设备中的顺序位置的集合,其包括以可选地可靠方式跨多个硬驱动分布的顺序位置的一个或多个集合。平板包括多个行。在图2和图5中更详细地讨论平板。
[0042]通过将平板所使用的所有驱动标记为适合于候选选择并且搜寻属于平板并具有借由年龄(例如,从最旧的写入到最新的写入)分类的高速缓存中的数据的行的列表,可以从平板选择降级候选行。每个行可以识别N个高速缓存元件列表,一个用于每个目的地驱动。如果高速缓存元件列表是空的或者在校验空间的情况下,则列是校验列,假定列(驱动)将作为降级的一部分而写入的话。对于每个这样的列(驱动)而言,可以以这样的方式将行插入到驱动的候选阵列:通过由节点参考的最旧日志元件的日志顺序号(LSN)对候选阵列进行分类。如果节点未适配在驱动的候选阵列中(所有槽已经被用于比手头的节点更旧的较好候选),则可以将驱动标记为不适合于候选选择。对于只要存在标记为适合的驱动,继续搜寻平板的行并且将其添加到候选阵列。在针对所有平板完成该过程之后,对于主存储122中的每一个,存在(跨所有平板的)最旧降级候选的列表,其降级将具有导致到驱动的写入的高几率。注意,归因于镜像和/或校验考虑,特定行可以被认为针对超过一个驱动的候选。因此,降级线程110可以使用两个回路,外部回路和内部回路。外部回路可以搜寻所有平板,依次选择每个平板。针对每个平板,内部回路可以以使年龄下降的顺序搜寻该平板的所有行以选择候选行。因此,内部回路可以被用于识别针对每个平板接合大多数驱动的候选。一旦外部回路完成,则可能已经针对所有平板识别候选的集合。
[0043]在针对每个驱动识别降级候选之后,填充队列130、132和134。对于驱动124、126和128中的每一个而言,如果显著/期望的降级写入的对应队列深度计数器148、150或152处于期望的队列深度D或以上,那么不采取另外的动作。否则,如果显著/期望的降级写入的对应队列深度计数器148、150或152在期望的队列深度D以下,则从降级候选选择下一候选。针对向主存储122的最终写入创建分组并且将其提交给负责OS中的那些驱动的驱动器。如果在分组创建和提交期间未遭遇误差,则显著/期望的降级写入的计数器可以针对每个驱动增量一。分组可以由操作系统的不同部分(例如,设备驱动器)使用以进行通信。当应用确定执行写入时,应用可以利用一些参数调用操作系统功能或驱动器,诸如文件句柄、文件中的偏移、写入的大小和向需要写入的数据的指针。被称为I/O管理器的OS的一部分可以创建被称为I/O请求分组(IRP)的内部结构,其中可以存储来自应用的信息。可以使用文件系统栈将IRP发送给驱动器。驱动器可以检查信息并且确定文件在卷上定位于何处。驱动器可以调节偏移并且将分组发送给负责卷的第二驱动器。该第二驱动器可以更新分组并且将分组发送给负责磁盘的第三驱动程序,等等。在一些情况中,特定驱动器可以将分组划分为多个分组以使得行能够并行写到多个驱动。
[0044]对于具有任何候选的主存储122中的每一个而言,已经发起大概D个显著/期望的写入。实际数目可能更高,如果所有行影响超过一个驱动并且使一个驱动饱和导致另一驱动过饱和(例如,队列中的项目数目超过D)的话,或者更低,如果所有校验列将受影响的初始假定是错误的话。
[0045]如果队列深度计数器148、150和152中的一些小于D,则以上所描述的过程的部分可以重复超过一次,使得所有驱动具有显著/期望的排队的至少一些降级写入。
[0046]如果存在分配主存储122的部分的多个虚拟存储设备,那么可以针对多个虚拟存储设备中的每一个重复以上过程的部分。为了防止一些虚拟存储设备饥饿其他,具有待降级的数据的虚拟存储设备可以保持在列表中,其中允许第一虚拟存储设备首先对候选排队,接着是第二虚拟存储设备等等。每次重新填充队列130、132和134时,可以使列表中的虚拟存储设备的次序旋转。例如,当重新填充队列130、132和134时,可以允许第二虚拟存储设备首先对候选排队,可以允许第三虚拟存储设备接下来对候选排队,等等。
[0047]当以下各项之一发生时,可以重新填充队列130、132和134: (I)针对驱动之一的对应队列深度计数器下降到预定阈值(例如,D/2)或(2)将待降级的新虚拟存储设备添加到旋转列表。
[0048]回放分组遵循类似于以上所讨论的那些的规则。回放分组是具有与向校验日记304的写入的1:1对应关系的内部结构。降级线程110确定何时从高速缓存移除数据以降低清除数目。清除(例如,还被称为清除命令或同步高速缓存命令)可以指令驱动将驱动高速缓存154中的所有数据提交(例如,写入)到存储区域156。在一些情况中,清除是阻塞命令,因为不接受附加的写入(例如,阻塞附加的写入),直到驱动已经完成将驱动高速缓存154的内容写到存储区域156。因为清除是阻塞命令,所以降低执行清除的频繁可以改进向驱动的写入的吞吐量。因此,降级线程110可以使用算法来确定何时执行清除以便降低执行清除的频繁。例如,降级线程110可以等待以看是否另一线程(例如,应用108之一)执行清除。如果另一线程执行清除,那么降级线程可以从高速缓存112移除写入(和对应数据)或开始降级过程,这取决于候选行的集合是否已经被选择并且放置在队列130、132或134中。例如,如果另一线程发起清除并且降级线程110确定候选行已经放置在队列130、132或134中,则降级线程可以从高速缓存112移除发送给主存储122的特定写入(和对应数据),因为清除将导致特定写入提
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1