一種存儲系統的io讀加速緩存方法和系統的制作方法
【技術領域】
[0001]本發明屬于計算機存儲技術領域,具體涉及一種存儲系統的1讀加速緩存方法和系統。
【背景技術】
[0002]緩存是為了實現數據快速訪問而設立的臨時存儲區。當我們瀏覽一個web頁面,對應的頁面文件會被保存在瀏覽器目錄下的緩存目錄,再次瀏覽這個頁面時,瀏覽器從本地緩存目錄獲取頁面文件,避免從遠端服務器獲取頁面文件,因而縮短了訪問時間,也減輕了網絡負擔。與緩存相對應的是存儲原始數據的主存儲,在web訪問時,本地目錄是緩存,遠端服務器是主存儲。緩存在計算機系統中的應用非常廣泛,比如web瀏覽器將web頁面緩存在本地;數據庫服務器則將數據查找和更新所需的相關信息緩存在內存;操作系統將最近訪問的文件數據緩存在內存;CPU將訪問過的內存數據緩存在L1/L2緩存中。計算機系統中存在各種各樣的緩存技術,這些技術提高了系統的整體性能。數據進入緩存由讀/寫操作觸發,讀操作將從主存儲中讀取的數據寫入緩存,以供后續訪問;寫操作則可能將數據寫入緩存,或者更新緩存中已有的數據。
[0003]在存儲系統中,因為機械硬盤價格低廉,依然是目前應用最廣的數據存儲介質,但其訪問速度比較緩慢,并且多年來性能提升并不明顯,同時又稱為掣肘1性能的關鍵因素。在這種情況下,各種1緩存技術孕育而生。
[0004]目前,標準的內核存儲棧中存在的緩存機制是頁面緩存(pagecache),頁面緩存為文件(包括設備文件)提供緩存,頁面緩存本質上是一種回寫模式(write back)的緩存,因為沒有持久化機制,可能導致數據丟失。
[0005]使用緩存套件時,應用程序需要使用直接讀寫(Direct10)方式以繞開頁面緩存,1請求作用于目標硬盤前被緩存套件捕捉,然后進行處理。顯然,寫操作不能使用內存作為緩存,否則會存在與頁面緩存相同的問題,但是讀操作卻可以使用。但是,當前存在的緩存套件完全摒棄了對內存的使用,雖然固態硬盤的讀性能很好,但對于熱數據來說,從固態硬盤訪問的速度是遠遠低于內存的。
[0006]不管是讀操作還是寫操作場景,緩存設備大小是有限的,而且緩存設備存儲空間一般會遠小于主設備,所以,如何在緩存套件中合理使用內存以提高讀操作的性能是業界人員值得研究的問題。
【發明內容】
[0007]鑒于以上所述現有技術的缺點,本發明的目的在于提供一種存儲系統的1讀加速緩存方法和系統,用于解決現有技術中緩存設備大小受限、數據易丟失、未合理利用內存、緩存速度慢和讀操作性能低的問題。
[0008]為了達到上述目的,本發明采取以下技術方案:一種存儲系統的1讀加速緩存方法,包括以下步驟:從內存中查找所需數據,若命中,則讀取數據并返回;若未命中,則進入固態硬盤中查找所需數據,若命中,則將數據加載到內存中,并將該數據從固態硬盤中刪除;若未命中,則從磁盤讀取所需數據,并將數據加載到內存中。
[0009]于本發明的一實施方式中,當在內存里未命中所需數據時,判斷所述內存是否有空閑塊;若是,則從固態硬盤讀取所需數據,并將該數據加載到內存中;若否,則通過內存的算法選出淘汰塊寫入固態硬盤中。
[0010]于本發明的一實施方式中,在內存的算法選出淘汰塊寫入固態硬盤之前,判斷固態硬盤是否有空閑塊,若是,則將內存的算法選出的淘汰塊寫入固態硬盤中;若否,則通過固態硬盤的算法選出淘汰塊丟棄。
[0011]于本發明的一實施方式中,所述內存的算法和所述固態硬盤的算法均為LRU算法。
[0012]本發明還提供一種存儲系統的1讀加速緩存系統,安裝于主機,主要包括操作模塊、Linux內核模塊、固態硬盤和磁盤;所述Linux內核模塊包括1緩存套件模塊、內存和塊層接口模塊;所述內存用于數據的一級緩存;所述固態硬盤用于數據的二級緩存;所述塊層接口模塊為所述操作模塊提供服務,所述塊層接口模塊使用一般指令直接訪問所述內存,所述塊層接口模塊使用驅動程序提供的接口訪問所述固態硬盤和所述磁盤;所述1緩存套件模塊用于讀操作時數據的查找、加載和緩存;所述內存、所述固態硬盤和所述磁盤均通過所述塊層接口模塊發送數據至所述操作模塊;所述固態硬盤和所述磁盤通過所述1緩存套件模塊加載數據至所述內存;所述內存寫數據至所述固態硬盤;所述磁盤通過所述塊層接口模塊直接寫數據至所述操作模塊。
[0013]于本發明的一實施方式中,所述1緩存套件模塊用于在操作模塊訪問磁盤時查詢所述內存,還用于在所述內存里未命中數據時查詢所述固態硬盤,還用于在所述固態硬盤里未命中數據時查詢所述磁盤。
[0014]于本發明的一實施方式中,所述1緩存套件模塊還用于在所述內存里命中數據時讀取所述數據并返回,還用于在所述固態硬盤里命中數據時加載所述數據到所述內存中,還用于在所述磁盤里命中數據時加載所述數據到所述內存中。
[0015]于本發明的一實施方式中,所述1緩存套件模塊還用于在所述內存里未命中數據時判斷所述內存是否有空閑塊;所述內存的LRU算法用于在所述內存無空閑塊時選出淘汰塊寫入所述固態硬盤。
[0016]于本發明的一實施方式中,所述1緩存套件模塊還用于在所述淘汰塊寫入所述固態硬盤前判斷所述固態硬盤是否有空閑塊,還用于在所述固態硬盤有空閑塊時將所述淘汰塊寫入所述固態硬盤;所述固態硬盤的LRU算法用于在所述固態硬盤無空閑塊時從所述固態硬盤中選出淘汰塊丟棄。
[0017]如上所述,本發明的一種存儲系統的1讀加速緩存方法和系統,具有以下有益效果:
[0018]1.避免了頁面緩存寫操作丟數據的缺陷,同時又充分利用了內存的高速訪問性會K。
[0019]2.內存和固態硬盤緩存互斥分級,數據不會同時存在于內存和固態硬盤,因而不會形成重復浪費;從內存淘汰的數據會寫入固態硬盤,因而最熱的數據保存在內存,次熱的數據則保存在固態硬盤,避免了次熱數據被從內存淘汰后,再次訪問出現不命中的情況。
【附圖說明】
[0020]圖1顯示為標準Linux內核存儲棧示意圖。
[0021]圖2顯示為單純使用固態硬盤作為緩存的存儲棧示意圖。
[0022]圖3顯示為本發明存儲系統的1讀加速緩存系統的框架結構示意圖。
[0023]圖4顯示為本發明存儲系統的1讀加速緩存系統的存儲棧示意圖。
[0024]圖5顯示為本發明存儲系統的1讀加速緩存方法于一實施例中的讀操作流程圖。
[0025]圖6顯示為本發明存儲系統的1讀加速緩存系統于一實施例中的部署圖。
[0026]元件標號說明
[0027]I主機
[0028]11Linux 內核模塊
[0029]12操作模塊
[0030]13固態硬盤
[0031]14磁盤
[0032]1111緩存套件模塊
[0033]112內存
[0034]113塊層接口模塊
[0035]SOl ?S12 步驟
【具體實施方式】
[0036]以下通過特定的具體實例說明本發明的實施方式,本領域技術人員可由本說明書所揭露的內容輕易地了解本發明的其他優點與功效。本發明還可以通過另外不同的【具體實施方式】加以實施或應用,本說明書中的各項細節也可以基于不同觀點與應用,在沒有背離本發明的精神下進行各種修飾或改變。需說明的是,在不沖突的情況下,以下實施例及實施例中的特征可以相互組合。
[0037]需要說明的是,以下實施例中所提供的圖示僅以示意方式說明本發明的基本構想,遂圖式中僅顯示與本發明中有關的組件而非按照實際實施時的組件數目、形狀及尺寸繪制,其實際實施時各組件的型態、數量及比例可為一種隨意的改變,且其組件布局型態也可能更為復雜。
[0038]在緩存技術下,數據可能會有一份或多份副本,且通常是兩份,緩存中的數據稱之為緩存副本,而其對應的主存儲中的數據稱之為主副本。按前文所述,緩存技術的基本原理是將可能被頻繁訪問的數據緩存到可以更快訪問的地方,從而提升訪問效率。緩存也可以被用于寫加速;在這種情況下,數據先被寫入緩存副本,隨后再被同步到主副本,因此必須保證緩存副本被更新后,主副本最終可以與其保持一致。另外,如果只更新主副本而沒有更新緩存副本,應該將緩存副本置為無效,那么后續讀取數據時,就不會讀取緩存副本。最后,非常關鍵的一點是,緩存只有在數據后續會被重復訪問的場景下才起作用,在數據很少被重復訪問的場景幾乎不起作用。
[0039]不管哪種場景,緩存設備大小是有限的,而且緩存設備存儲空間一般會遠小于主設備,在緩存空間不夠時,緩存軟件會采取相應機制回收存儲空間來存放新的數據,類似的機制稱之為緩存置換算法,常見的緩存置換算法有FIFO、LRU、MRU等。
[0040]請參閱圖1,在Linux系統中,標準的內核存儲棧中存在的緩存機制是頁面緩存,頁面緩存為文件(包括設備文件)提供緩存,頁面緩存本質上是一種writeback模式的緩存,因為沒有持久化機制,可能導致數據丟失。
[0041]當前業界傾向于不使用頁面緩存,即讀寫操作使用direct模式,一些緩存套件使用固態硬盤(SSD)為磁盤提供緩存,提高讀寫性能,如f lashcache、enhance1、bcache等,圖2顯示為單純使用固態硬盤作為緩存的存儲棧示意圖。從圖2可以看出,使用緩存套件時,應用程序需要使用直接讀寫方式以繞開頁面緩存,讀寫請求作用于目標硬盤前被緩存套件捕捉,然后進行處理。顯然,寫操作不能使用內存作為緩存,否則會存在與頁面緩存相同的問題,但是讀操作卻可以使用。然而,當前存在的緩存套件完全摒棄了對內存的使用,雖然固態硬盤的讀性能很好,但是對于熱數據來說,從內存訪問的速度是遠遠高于固態硬盤的。因此,如果能在緩存套件中合理地使用內存,讀操作的性能將會得到相應的提高。
[0042]圖3顯示為本發明存儲系統的1讀加速緩存系統的框架結構示意圖。該系統安裝于主機I或是虛擬機,主要包括操作模塊12、Linux內核模塊11、固態硬盤13和磁盤14;所述Linux內核模塊11包括1緩存套件模塊111、內存112和塊層接口模塊113;所述內存112用于數據的一級緩存;所述固態硬盤13用于數據的二級緩存;所述塊層接口模塊113為所述操作模塊12提供服務,所述塊層接口模塊113使用一般指令直接訪問所述內存112,所述塊層接口模塊113使用驅動程序提供的接口訪問所述固態