磁盤緩存(英語: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).