背景技术
现代计算机系统通常被配置以大量存储器以便向计算机系统中的一个或多个处理器提供数据和指令。
在历史上,处理器速度比针对特别是DRAM(动态随机访问存储器)的大部分存储器的存储器访问时间更快地有所提高。已经构建了存储器层级以减少处理器和存储器之间的性能不匹配。例如,大多数现代处理器被构建为具有L1(1级)高速缓存,其由处理器半导体芯片上的SRAM(静态随机访问存储器)所构建。L1高速缓存非常快,仅在处理器的一个或数个周期内提供读和写。然而,虽然非常快,但是L1高速缓存也十分小,可能是64KB(千字节)至256KB。经常还在处理器芯片上实现L2(2级)高速缓存。虽然一些处理器采用DRAM存储,但是L2高速缓存通常也使用SRAM存储进行构造。L2高速缓存通常在字节数量方面比L1高速缓存大数倍,但是读和写却更慢。一些现代处理器芯片还包含更高级别的高速缓存,诸如L3(3级)高速缓存。L3高速缓存能够保存数倍于L2高速缓存的数据。L3高速缓存有时利用DRAM存储进行构造。在一些计算机系统中,L3高速缓存在独立于处理器的一个或多个芯片上实现,并且利用印刷线路板(PWB)或多芯片模块(MCM)上的连线耦合至处理器。计算机系统的主存储器通常很大,经常为许多GB(前兆字节)并且通常以DRAM实现。
主存储器通常利用存储器控制器耦合至处理器,该存储器控制器可以与处理器集成在相同设备上或者与处理器分开定位,经常是位于相同的MCM(多芯片模块)或PWB上。存储器控制器从处理器接收加载或读命令以及存储或写命令并且对那些命令进行服务,从主存储器读数据或者向主存储器写数据。通常,存储器控制器具有一个或多个队列,例如读队列和写队列。读队列和写队列缓存包括一个或多个命令、控制、地址和数据在内的信息;由此使得处理器在给定时间能够有多个请求进行处理—包括读和/或写请求。
在持续的基础上,工业界进行了广泛的研究和开发工作以创建有所改进的创新性解决方案,以便通过改进存储器系统和存储器子系统的设计和操作而使得整体系统性能和密度最大化。
处于存储设备或存储子系统之前或内部的高速缓存经常能够产生非常大的性能增益。这是由联合、写命中、读命中、更低的响应时间以及突发吸收性(burst absorbency)带来的。这种非常大的性能增益在诸如具有许多小规模连续写入的日志之类的工作负载、具有高度空间关联以及低队列深度写入的事务工作负载中最为凸显,在上述工作负载中响应时间是最为重要的。
然而,高速缓存也可能成为危害。高速缓存需要更多的管理并且经常需要更多的硬件操作。这能够随两种极端工作负载而显然地看到。完全随机的小幅写入将快速填充高速缓存并且高速缓存将简单地成为管理开销。然而,根据确切的高速缓存算法以及高速缓存下的设备类型,高速缓存仍能惠及到该工作负载,因为其将操作(ops)重新排序为更具连续性。例如,利用自动扶梯(escalator)方案而使得操作离台的高速缓存可能使得旋转驱动器受益。完全顺序的大尺寸或最大尺寸的操作将受到影响,因为它们并没有从重写或联合获益,但是它们确实导致了额外的硬件操作以及软件/固件管理开销以在高速缓存中安全地存放数据。
作为示例,假设用于保存高速缓存的冗余副本的其间具有镜像机制的一对高速缓存存储适配器能够承受在两个卡之间镜像的最大1.3GB/s的写数据吞吐量。现在还假设当没有高速缓存时,每个卡能够向其之下的驱动器输送2.2GB/s。最后,假设适配器配对下的驱动器能够在大规模连续工作负载上保持5GB/s,在没有高速缓存的小规模随机工作负载上保持200MB/s,并且在具有高速缓存的小规模随机工作负载上保持800MB/s。
如果用户简单地开启高速缓存而运行,则大规模连续工作负载将达到1.3GB/s的极限而小规模随机工作负载将达到800MB/s的极限。
如果用户简单地在高速缓存禁用的情况下运行,则大规模连续工作负载将达到4.4GB/s的极限但是小规模随机工作负载将仅达到200MB/s。
应当注意的是,在几乎所有高速缓存存储系统中,启用和禁用高速缓存的操作都不是自由的。启用和禁用高速缓存伴随有硬件、固件和或软件的开销。
一些工作负载被非友好地高速缓存,这意味着启用高速缓存的操作将导致整体性能下降。然而,一些高速缓存被友好地高速缓存则意味着高速缓存的操作将减少对于存储系统中的一些其它组件的需求,这允许整体性能有所提升。一种已知的高速缓存非友好工作负载是大规模连续写入。所有数据都必须通过系统移动并且高速缓存没有提供联合或重写增益。然而,招致了与保持冗余副本、管理数据、存储非易失性数据、使得数据离台至驱动器和其它惩罚相关联的所有开销。
需要一种用于在计算机系统中实施高速缓存的动态启用和禁用以提高性能的有效机制。
如以下描述和权利要求中所使用的,术语控制器或存储器控制器应当被宽泛地理解为包括存储器控制器、存储控制器、输入/输出(I/O)适配器(IOA)和存储接口;并且术语高速缓存应当被宽泛地理解为包括各种高速缓存存储器部署形式,包括存储适配器高速缓存和处理器高速缓存。
具体实施方式
依据以下对本发明实施例的详细描述,对图示出可以通过其对本发明进行实践的示例实施例的附图加以参考。应当理解的是,可以采用其它实施并且可以进行结构变化而并不背离本发明的范围。
这里所使用的术语仅是出于描述特定实施例的目的,而并非意在对本发明进行限制。如这里所使用的,单数形式“一个”("a","an"和"the")意在也包括复数形式,除非上下文明确另外有所指示。将要进一步理解的是,当在该说明书中使用时,术语“包括”和/或“包括了”规定了存在所提到的特征、整数、步骤、操作、要素和/或组件,而并不排除存在或增加一个或多个其它征、整数、步骤、操作、要素、组件和/或其群组。
依据本发明的特征,提供了用于基于工作负载实施高速缓存的动态启用和禁用的方法、系统和存储器控制器。提供了一种低开销的方法以识别工作负载并且动态地启用和禁用高速缓存从而解决高速缓存在大规模连续或稍显连续的工作负载中成为危害的情形。
依据本发明的特征,执行一种低开销方法以在高速缓存被启用的同时识别大规模连续或稍显连续的写工作负载。执行一种低开销方法以在高速缓存并未被启用的同时识别大规模连续或稍显连续的写工作负载以外的工作负载。
依据本发明的特征,在高速缓存被启用的同时所执行的低开销方法必须在工作负载变为高速缓存非友好的情况下识别出工作负载的变化。这例如是使用多种不同的信息集合来实现的,诸如包括位置信息、高速缓存操作统计和性能度量。
现在参考附图,在图1中示出了依据优选实施例的总体上由附图标记100所指示的体现本发明的计算机系统,其用于基于工作负载实施高速缓存的动态启用和禁用。计算机系统100包括一个或多个处理器102或通用可编程中央处理单元(CPU)102,#1-N。如所示出的,计算机系统100包括多个处理器102,通常为相对大型的系统;然而,系统100可以包括单个CPU 102。计算机系统100包括连接至每个处理器102的高速缓存存储器104。
计算机系统100包括存储器系统106,其包括通过总线112进行连接的存储器控制器108和主存储器110。总线112是向主存储器110发送地址/命令信息以及从存储器110发送和接收数据的一个或多个总线。主存储器110是用于存储包括程序在内的数据的随机访问半导体存储器。主存储器110例如由动态随机访问存储器(DRAM)、同步直接随机访问存储器(SDRAM)、当前双倍数据速率(DDRx)SDRAM、非易失性存储器、光学存储和其它存储设备。
I/O总线接口114以及总线116、118在各种系统组件之间提供通信路径。总线116是处理器/存储器总线,其经常被称作前端总线,其提供用于在CPU 102和高速缓存104、存储器控制器108和I/O总线接口单元114之间传输数据的数据通信路径。I/O总线接口114进一步耦合至系统I/O总线118以便往来于各种I/O单元传输数据。
如所示出的,计算系统100包括存储接口120,其包括高速缓存121并且耦合至存储设备,该存储设备诸如直接访问存储设备(DASD)122和CD-ROM 124。计算机系统100包括耦合至多个终端128#1-M的终端接口126,耦合至诸如互联网、局域网或其它网络的网络132的网络接口130,以及耦合至诸如第一打印机/传真机136A和第二打印机136B的I/O设备的I/O设备接口134。
I/O总线接口114通过系统I/O总线116与多个I/O接口单元120、126、130、134进行通信,其也被称作I/O处理器(IOP)或I/O适配器(IOA)。系统I/O总线116例如是工业标准PCI总线或者其它适当总线技术。
依据本发明的特征,处理器102、存储器控制器108或存储接口120中所选择的一个能够被用来实施依据优选实施例的用于基于工作负载而动态地启用和禁用诸如高速缓存104和/或高速缓存121的高速缓存的方法,其包括用于在高速缓存被启用的同时识别大规模连续或稍显连续的写工作负载的低开销方法,以及用于在高速缓存并未启用的同时识别大规模连续或稍显连续的写工作负载以外的工作负载的低开销方法。
计算机系统100以足以理解本发明的简化形式所示出。所图示的计算机系统100并非意在暗示架构或功能限制。虽然主存储器110、高速缓存104和高速缓存121在图1中被概念地表示为单个实体,但是将要理解的是,如本领域所知的,这些实际上更为复杂并且高速缓存可以存在于多个不同级别。本发明可以随各种硬件、软件和固件实施方式以及系统、各种其它内部软件和固件和其它内部硬件设备而使用。
依据本发明的特征,一种低开销方法利用预定义的不同信息集合。保存在高速缓存中的每个数据块由高速缓存行或CL所表示。每个CL保存诸如数据与之相关联的驱动和逻辑块地址(LBA)之类的信息以及其它状态信息。此外,该CL有利地保存位置位,其提供了逻辑上处于该数据之前的数据是否存在于高速缓存之中的指示。在对每个写操作进行处理时,仅在逻辑上处于该写操作的第一CL之前的CL必须被检查,因为包括该写入的所有后续CL根据定义都是处于高速缓存中的逻辑上的后续数据。在第一CL具有被开启的位置为的情况下,在每次写入时被置入高速缓存的其位置位开启的CL的总数简单地是该操作的长度(以CL为单位)减1加1。随后在离台时,被离台的CL中的位置位之和轻易地使得能够在高速缓存被启用的情况下针对每个驱动器保存位置位的总数。
依据本发明的特征,除了CL中的信息之外,还能够保存与高速缓存的操作相关的统计。例如,有利地以非常小的开销保存写命中的数量、重写的数量、写的总数、快速写的总数和离台数量,上述快速写是并不等待空间被释放的写入。除了每种类型的事件的数量之外,每种类型的事件的块计数(CL计数)也可以被保留。
依据本发明的特征,使用被开启的位置位的总数、高速缓存中CL的总数以及其它高速缓存统计,有可能识别出可能为非友好的高速缓存工作负载。首先,如果位置位指示高速缓存中所有或几乎所有的数据具有位置,例如在被开启的位置位的总数除以高速缓存中的CL总数等于或大于95%的情况下,则能够完成进一步的检查。随后,如果作为被写入的全部块除以写总数的平均传入块大小较大,则能够完成进一步的检查。接下来,如果写命中数量相对于写数量非常低,例如2%或更低,或者如果离台数量接近于写数量,例如98%至120%,则这指示工作负载由大规模连续写入所构成。
依据本发明的特征,必须确定关闭高速缓存将会有所帮助。大规模连续写入工作负载可能处于非常低的队列深度,并且因此高速缓存通过提供非常低的响应时间而有利于该工作负载。或者,高速缓存可能由于驱动器无法继续而被填满并且因此关闭高速缓存也不会有所帮助。在这种情况下,清空高速缓存的成本可能非常高。然而,如果用于维护高速缓存的硬件或管理资源存在压力,则禁用高速缓存将提供益处。例如,在企业存储解决方案中,高速缓存数据被非易失性地进行保存并且被镜像到多个物理位置。该镜像动作和非易失性属性有时能够成为限制性因素。
依据本发明的特征,提供了用于检测这种高速缓存所导致的瓶颈的三种可能方法,包括:
1.使用各种高速缓存相关接口的统计查看吞吐量。在被写入高速缓存的块接近限制接口的极限时,例如处于5%之内,则能够假设该接口成为瓶颈。
2.检查利用计数器或队列深度计数器。当硬件或CPU指示其处于其极限时,我们了解到我们的工作负载将由于关闭高速缓存而获益。
3.监视硬件或软件/固件操作的响应时间。如果操作超过足够多操作的设定阈值,则能够假设在资源上备份了过多的工作。
依据本发明的特征,无论使用何种度量,都必须挑选阈值以指示高速缓存的清空并且变换为不进行高速缓存。例如,如果检测到瓶颈是由于10分钟间隔期间90%的时间都在对资源进行高速缓存,则存储系统能够清空高速缓存并使其禁用。而且,在高速缓存的同时,应当对平均运行的写操作到达率进行监视。当高速缓存即将被禁用时,此时的平均到达率应当作为高速缓存到达率而单独保存。
依据本发明的特征,除了使用高速缓存的同时可获得的数据动态地禁用高速缓存之外,还提供了在工作负载再次变换为高速缓存友好时动态地启用高速缓存。使高速缓存禁用的一个关键方面在于处理节约。因此,被用来识别变为高数缓存友好的工作负载的工作负载的任何机制都必须增加非常小的开销或者至少明显低于对高速缓存的维护。
依据本发明的特征,由于需要决定何时禁用高速缓存,因此当每个新的写操作到达时,运行的平均传入操作大小必须被进行维护。特定于启用被禁用的高速缓存,运行的平均到达率也必须被保留。对于并不被寻找和旋转延时所影响的固态驱动器而言,仅需要考虑平均传入块大小和到达率。如果到达率始终低于高速缓存到达率,则重新启用高速缓存将可能是有利的。因此,必须挑选一些与之比率和时间来作出该决策。例如,如果到达率低于高速缓存到达率30%达大于2分钟,则再次启用高速缓存可能是有益的。
依据本发明的特征,并且如果平均操作大小下降,高速缓存可能再次成为有利的。类似于高速缓存到达率,必须挑选阈值比率和时间。一个示例是:如果平均操作大小在大于2分钟的时间内下降至低于200K,则再次启用高速缓存可能是有利的。
应当注意的是,到达速率和平均操作大小可以进行交织。也就是说,具有高到达率的较小操作实际上对于高速缓存系统的税赋较低,因为整体数据速率可能会较低。通过评估这两个参数,能够确保如果工作负载再次变为高速缓存友好我们就将开始高速缓存。
依据本发明的特征,同样对于其性能被数据位置大幅影响的旋转驱动器或硬盘驱动器(HDD)而言,除了平均到达率和平均操作大小之外还必须要考虑平均寻找距离。就像其它两个参数一样,应当相对于预定义的阈值对平均寻找距离进行评估。一个示例是:如果平均寻找距离在3分钟内对于15%的操作大于驱动器的1/32,则再次启用高速缓存可能是有益的。为了考虑被请求的多个同时的连续流,并且不会虚假地计算出可能比其应该数值更高的平均寻找长度,必须要执行连续流的检测并且必须保存并使用距最接近的连续流的运行的平均距离。
依据本发明的特征,利用这些方法,能够获得高速缓存的好处而不会在每个高速缓存非友好的工作负载上感觉到高速缓存的危害。如以上所列出的示例之中,利用大规模连续工作负载,在预先设定的阈值时间之后将会实现4.4GB/s,而利用小的随机工作负载,在预先设定的阈值时间之后将会实现800MB/s。
参考图2A、2B和2C,示出了依据优选实施例的用于在图1的系统中基于工作负载实施高速缓存的动态启用和禁用的示例操作。
在图2A中,如框200中所指示的,接收新的操作并且执行检查以识别出读RD操作或写WR操作,如决策框202所示。对于所识别的读RD操作,如框204所示,读操作计数器CTR加1。随后如框206所示,读高速缓存行CL计数器CTR增加以该操作中高速缓存行CL的数量#。如框208所示,执行针对高速缓存命中的检查。对于所识别的高速缓存命中,如框210所示,读高速缓存命中计数器CTR增加。随后如框211所示,该操作结束。
对于所识别的写WR操作,如框212所示,写操作计数器CTR加1。随后如框214所示,写高速缓存行CL计数器CTR增加以该操作中高速缓存行CL的数量#。随后如框215所示,保存运行的WR操作的到达率。
如决策框216所示,执行针对被启用高速缓存的检查。如果高速缓存被启用,则如框218所示,针对操作CL,2-N个位置位被设置为等于1。如决策框220所示,检查高速缓存中在逻辑上处于该操作第一个CL之前的CL是否被执行。如果是,则如框222所示,该操作的第一个CL位置位被设置为1。随后,如决策框224所示,执行检查以确定高速缓存中是否有用于新的操作数据的空间。
如果高速缓存中有用于新的操作数据的空间,则如框226所示,快速写计数器被递增。随后如决策框228所示,执行检查以确定新的操作是否与已有高速缓存数据相重叠。如果新的操作与已有高速缓存数据重叠,则如框230所示,写命中计数器被递增。接下来如决策框232所示,执行检查以确定等于1的位置位的数量是否大于写CL计数器的95%。应当理解的是,95%仅是一个示例,并且能够使用其它数字。当等于1的位置位的数量小于或等于写CL计数器的95%时,则该操作在框211退出。否则,当等于1的位置位的数量大于写CL计数器的95%时,则该操作在图2B的框236继续。
在图2B中,如决策框236所示,执行检查以确定平均操作长度是否大于X个高速缓存行的预定数量。如果否,则该操作在图2A的框211退出。否则,如决策框238所示,执行检查以确定快速写%是否低于预定的Y%并且WC命中%是否低于预定的Z%。如果否,则该操作在图2A的框211退出。否则如决策框240所示,执行检查以确定离台计数器是否大于写操作计数器的98%并小于120%。如果否,则该操作在图2A的框211退出。否则,如决策框242所示,执行检查以确定平均RT是否大于预定义时间A ms,或者TP是否大于预定义速率B MB/s或者CPU利用是否大于预定义C%。如果否,则该操作在图2A的框211退出。否则,如框244所示保存高速缓存写操作到达率,并且如框246所示冲刷(flush)高速缓存。随后,如框248所示禁用高速缓存。随后,则该操作在图2A的框211退出。
现在参考图2C,在确定了高速缓存并未在图2A的决策框216被启用之后,执行检查以确定运行的高速缓存写操作的到达率是否是高速缓存写操作到达率的预定义M%达比预定义时间N分钟更长的时间。如果是,则如框252所示,高速缓存被启用。否则,如决策框254所示,执行检查以确定平均操作长度是否小于高速缓存行CL的预定义数量达比预定义时间N分钟更长的时间。如果是,则如框252所示,高速缓存被启用。否则,如决策框256所示,执行检查以确定该设备是否为硬盘驱动器HDD。如果该设备不是硬盘驱动器HDD,则该操作在图2A的框211退出。否则,当该设备是硬盘驱动器HDD时,如框258所示,针对连续流执行检查并且执行数学公式以确定距最近连续流的距离(即使没有)。随后,如框260所示,保存距最近连续流的运行平均距离。随后,如框262所示,检查距最近连续流的平均运行距离大于HDD大小的预定义数值A%达比预定义时间B分钟更长的时间。如果否,则该操作在图2A的框211退出。否则,在框252,高速缓存被启用。
现在参考图3,图示了本发明的制造品或计算机程序产品300。计算机程序产品300有形地体现于包括记录介质302的非瞬态计算机可读存储介质上,诸如软盘、光学读取紧致盘或CD-ROM形式的大容量只读存储器、磁带或者其它类似的计算机程序产品。记录介质302在介质302上存储程序装置304、306、308和310以便在图1的系统100中执行优选实施例的用于基于工作负载而实施高速缓存的动态启用和禁用的方法。
由所记录的程序装置304、306、308和310定义的程序指令的顺序或者一个或多个相关模块的逻辑组成对计算机系统100进行指示以便实施优选实施例的高速缓存基于工作负载的动态启用和禁用。
虽然已经参考图中所示的本发明实施例的细节对本发明进行了描述,但是这些细节并非意在对如所附权利要求中所请求保护的本发明的范围加以限制。