磁盘缓存专题之二:磁盘缓存的算法:读算法

磁盘缓存所带来的性能增长变化很大,它跟几个不同的因素有关。然而,在有些情况下,如果仅考虑处理一个应用的总时间,磁盘缓存能带来令人惊讶的性能改善。缓存产品的销售商总是喜欢向顾客展示:使用它们的缓存产品运行应用时,客户只需花费25%或更少的时间即可完成。

虽然对缓存不应抱有那么高的期望,但如果很好地配置缓存,进程运行速度达到原来的两倍并不是不可能的。

磁盘缓存建立在几种不同的算法上,这些算法取决于I / O操作是读还是写。缓存的实现不像在气体容器中倒入一瓶辛烷助推器,而获得辅助加速。事实上,磁盘缓存并不是使设备的运行速度更快,而是尽量缩短I / O路径的距离,尽可能地用内存的性能代替设备的性能。

为了获得最好的结果,需要设计如何存放数据的缓存算法,该算法应该与应用的访问模式相匹配,匹配得越好,效率也就越高。更为重要的是,在断电的情况下,缓存算法甚至能确定易失内存中的数据是否有永久丢失的危险。

下面包括了简单的缓存算法的描述。这些描述并不基于任何特定产品的缓存设计,其主要目的是帮助读者理解缓存的基本功能。掌握了这些知识以后,读者将能更有效地计划、实现和管理磁盘缓存。

1. 读算法

像前面所讨论的,缓存可能改善系统的性能。其基本思想是:按照应用的类型,可以使用不同的智能方法对系统最近需要的数据做出预言。目前普遍采用的算法有两种,即:
• 最近最少使用(LRU)缓存。
• 预先读缓存。

1) LRU缓存
LRU的基本思想是:最近读出过的数据不久将被再次被读出。在数据库上,应用产生的数据访问模式有时被称为热区。热区是指设备或子系统上的一组存储区域,这些设备或子系统承担着大量的操作。假如热区不是放在磁盘设备,而是放在缓存中,那么,对它的访问速度将要快得多。图描述了热区的概念。

 

在正常的I / O操作期间,一旦L R U被请求,它就将数据装入缓存。术语“ L R U”起源于虚拟内存技术,描述将不经常使用的数据和代码迁移到虚拟存储的方法,即将丢弃最近最少使用的缓存数据。换言之,LRU得名是因为丢弃数据的方式,而不是装入或保存数据的方式。从某种意义上说,将这类缓存命名为最近最多使用缓存更有道理,因为算法真正地描述了缓存所能提供的性能优势。图显示了在缓存中装入数据的过程。

 

2) LRU缓存的应用
在应用连续地访问和修改同样数据的情况下, L R U缓存能够带来最大的利益。事务处理系统就是这种应用的一个例子。L U R缓存可以为许多E R P(企业资源规划)应用和工具提供性能优势。同时, L R U还能够为使操作处理频繁和多用户关系数据库应用提供性能优势。图表示使用L R U缓存的通用的、多用户关系数据库系统。


除了以上的例子以外,下面一组应用也可以从L R U磁盘缓存中获得性能优势:
• 事务处理系统。
• ERP 和M R P系统。
• Internet电子商务服务器。
• 顾客服务和支持系统。
• 其他多用户数据库应用。


但是,对于顺序访问数据的数据库系统, L R U缓存技术不能很好地工作。这方面的例子包括数据仓库和多媒体数据库服务器。这些应用最好使用另外一种技术,即预先读缓存,下面将要讨论这种技术。


3) 预先读缓存

预先读缓存的基本思想是:已经读入的数据将不再需要,而依次需要的是即将读入的几个数据块。换言之,预先读缓存根据过去从磁盘读入数据的情况,推测下一步将需要的数据。预先读的关键概念是预取。预取是在数据被请求之前就将它从非易失存储中读出,并把它放在易失的缓存内存中。然而, L R U仅缓存已经被请求的或写的数据,由此可以看出,预先读缓存与L R U缓存之间存在很大的差别。图显示了预先读的过程。



如果数据已经老化,或在近期内没有别的用处,它就从预先读缓存中丢弃。虽然这样做乍看起来似乎有点奇怪,却经常很好地用于预先读的应用。预先读缓存的目的是把大量的数据移到更靠近C P U的地方,并在此一并处理这些数据。这些类型的应用将数据总量作为一个整体处理,因而,在处理过程中不必改变个别数据块,也就没有必要在缓存中保留读数据块。


预先读的实现初看起来似乎很平常,但事实上,并不像想像的那样简单,它面临着几个困难的挑战。缓存总是与块数据传输打交道,对于磁盘文件或数据库系统组织是不可见的。由于文件被散布在整个磁盘各个地方,而预先读缓存却总是读出连续的数据块,所以经常错误地读出一些不需要的数据。


综上所述,为了预先读缓存工作得更好,可以使用某些进程移动或重新分布磁盘数据,当然这种做法也可能产生问题。磁盘整理程序就是这样的例子,因为它总是力图把数据存放在一些更少、更连续的大块区域中,所以它能够提高预先读缓存性能。此外,对于存储子系统,重新配置更大的存储块也是有益的。

重新组织目录结构通常会增加该卷中的磁盘碎片数量,这是由于将一些目录结构拷贝到同一存储卷中的新位置的结果。同时,建立和删除大量文件也会给所在卷增添磁盘碎片。卷中的碎片越多,读缓存的性能就越差。


4) 预先读缓存的应用
预先读缓存大多用于顺序I / O模式的应用,如文件服务、备份及数据仓库等。对于像图形处理这样的应用,预读缓存可以提供非常有益的性能优势。一般地说,哪里存在顺序访问的大文件,哪里就需要预读缓存技术。以下是一些可能受益于预读缓存的应用:
• 文件服务。
• 多媒体;音频和视频。
• 图形学。
• 数据仓库。
• 顺序文件的匹配处理。


图是一个用于文件服务器的预读缓存


 

之前在社区发布了一系列的文章,后来因为图片问题,很多的文章无法看了,朋友都反应了这个问题,现在发布出来,持续的更新,请大家顶起来 :http://www.itpub.net/thread-1703788-1-1.html

posted @ 2012-08-21 09:56  小洋(燕洋天)  阅读(3383)  评论(5编辑  收藏  举报