磁碟缓存(英语:Disk Buffer、Disk Cache)硬盘缓存是硬盘控制器上的一块内存晶片,一般是DRAM。它具有极快的存取速度,对于硬盘的内部数据传输速度和外界装置的传输速度的差异,它起到缓冲作用,从而减少CPU访问硬盘时的等待时间。[1]
自二十世纪九十年代以来,电脑硬件技术的发展带来了磁碟存储密度每半年到一年提升一倍的速度,但没有相应的技术能够以同样的速度缩短存储介质的访问时间。[2]使用缓存技术的目的是为了减少IO子系统的响应时间、增加系统吞吐量的解决方案。这种技术已被广泛应用于存储系统。[3]
目的
- 减少交互的通讯量:磁碟缓存能缩小进程和网络间传输的数据量。
- 降低系统的处理量:记录处理结果,避免数据的重复处理。
- 由于磁碟内部传输速率要小于外部传输速率,操作系统内核为提高性能,在内存中缓存的机械硬盘数据,从而降低机械硬盘使用率。[2]
类型
DRAM
大部分操作系统在设计磁碟驱动程式时,都会优先考虑使用DRAM缓存机械硬盘的数据。硬盘制造商在制造硬盘时,会在硬盘控制器中加入DRAM晶片。利用数据的空间局部性原理,硬盘控制器在处理 IO请求时读取的数据量会略大于请求的数据量,读取的数据会在DRAM进行缓存,这样当系统下次请求数据时,可以先在DRAM中搜寻上次读取中多余的数据。DRAM缓存对于软件而言是透明的,硬盘中的控制器负责管理缓存,驱动不参与管理缓存的过程。[2][4]
在数据的读取过程中,硬盘的控制晶片发出指令,将系统正在读取的簇的下一个或几个簇的数据写入缓存里。当系统指令开始读取下一个簇的数据时硬盘便不需要重新开始一个读取的动作,而只需要将缓存中的数据传送到系统主内存中去就行了。因为从硬盘缓存到系统主内存的数据传输是电子运动,所以速度比硬盘做读取动作所需要的机械运动要快。而数据在硬盘盘片上的存储是相对连续的,因此预读的命中率很高。[5]
由于DRAM的易失性限制,通常DRAM作为读缓存提高机械硬盘的性能,对写性能几乎没有提高。如果也缓存写操作,为了避免待写入机械硬盘的数据由于掉电而丢失,磁碟控制器或是驱动程式必须将数据持续的从DRAM写回到机械硬盘,以降低数据丢失的风险。因此,使用DRAM进行写缓存面临可靠性和读写性能间的两难选择,即缓存越大性能提升越明显,停留在
缓存中的数据丢失的可能性也就越大。由于掉电的风险,任何缓存系统都会限制缓存中尚未写入的数据的停留时间和所占比例。[2]
NVRAM
NVRAM具备非易失性的据存储数优势,使得利用NVRAM作缓存提升存储系统写性能成为可能。[2]
常用的策略是集成NVRAM缓存与DRAM缓存。写操作时,同步写入数据到两种缓存。NVRAM的非易失性保证了数据的可靠性,DRAM的高性能保证了性能的提升。意外掉电情况发生时,NVRAM内的备份数据才会被启用,并重新写回到机械硬盘。[2]
另一种方法是合并DRAM和NVRAM为单个存储空间,缓存块存储于哪种类型的存储器由算法决定,涉及写操作的数据块必须存放于NVRAM。[2]
NVRAM的小容量特性,使得其对机械硬盘性能提升的贡献非常有限。虽然近年来的技术革新带来了NVRAM容量的不断提高,但是相比于增长更为迅速的机械硬盘存储空间,加上数据访问时呈现出一次性的访问特征,使得基于NVRAM的机械硬盘缓存命中率难以有大的提升,系统读写性能的提升效果有限。[2]
高转速磁碟
机械硬盘中磁碟盘片的物理转速直接决定了处理读写请求的速度。根据数据的访问热度、保留时间、优先级等指标,将访问频繁的热数据存储在转速为10000-15000RPM的高性能SCSI机械硬盘中;访问热度低的冷数据则被存储在转速为5400-7200RPM的普通性能IDE或SATA机械硬盘中。但由于机械硬盘内部物理器件的限制,不同转速盘片所带来的性能差距并不显著。而且,随着固态硬盘的出现,这种混存系统已很少被使用。[2]
固态硬盘
固态硬盘和机械硬盘之间性能的良好互补性,固态硬盘技术日益成熟。微软、LSI、Intel、EMC、IBM、Fusion IO等企业都已经或即将推出将固态硬盘作为缓存的混合储存方案。[2]
算法
缓存页面替换算法不断更新缓存内的数据,才能保证缓存中的数据被再次访问的概率最大,命中率才有保证。[2]
访问时间
LRU(Least Recently Used)替换算法通过缓存块最后一次访问距离当前的时长进行决策。当缓存没有空闲空间时,替换出最近最不常使用的缓存块。该算法实现时并不需要为每个缓存块记录访问时间,而是使用链表的方式组织缓存块。LRU的优点是替换算法实现简单,能够以很低的性能开销适应变化的数据访问;缺点是经常访问的数据也可能因为暂时不使用而被换出。[2]
使用频度
LFU(Least Frequently Used)替换算法利用缓存块的访问频数进行决策。当缓存中不存在空闲的缓存块时,替换出历史访问频度最小的缓存块。该算法的缺点是实现难度略高于LRU,且需要一定策略对计数器进行清零,否则新加入缓存块访问频度就会偏低,而曾经被频繁访问的缓存块则无法及时地被清理出去。[2]
综合算法
此算法使用冷、热两个链表管理缓存块。当冷链表已满,而又要加入新的缓存块时,则从冷链中移出一部分缓存块以释放空间,新的缓存块会加入到冷链的热端。缓存算法会判断被移出缓存块的引用计数,如果其引用计数大于一定数字,则清零其引用计数,并加入到热链表的热端;否则该缓存块空间将会被释放。访问计数增加时,将该数据块移动到该链表的热端。冷、热链表内部完成LRU替换算法,冷、热链表之间完成LFU替换算法。[2]
参考文献
- ^ 刘登峰,吴果林. 硬盘缓存. 桂林航天工业高等专科学校学报. 2005, 39 (3): 22-23.
- ^ 2.00 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10 2.11 2.12 2.13 闫林. 基于SSD的HDD缓存系统研究. 西安电子科技大学硕士学位论文. 2014.
- ^ 汪小林, 赖荣凤 , 王振林 , 罗英伟 , 李晓明. 基于SSD高速缓存的桌面虚拟机交互性能优化方法. 电脑应用与软件. 2011, 28 (11).
- ^ 苏海冰, 吴钦章. 用SDRAM在高速数据采集和存储系统中实现海量缓存. 光学和精密工程. 2002, 10 (5).
- ^ sEctiON 1. 图书馆里的故事—认识电脑中的Cache. 电脑爱好者. 2003, (17).