本發明涉及存儲系統領域,具體涉及一種混合固態盤(SSD)和機械磁盤(HDD)進行優化存儲的存儲系統及存儲方法。
背景技術:
由機械磁盤(HDD)構成的存儲系統的I/O效率一直以來都是計算機系統性能的瓶頸,尤其當前需求和計算能力不斷提高的背景下,使得存儲系統和計算之間性能的差距越來越大,I/O瓶頸的問題也越來越嚴重。引起I/O瓶頸的原因主要在于機械磁盤的物理訪問特點。近年來,固態盤(SSD)技術取得了很大發展,其成本大大降低,性價比也已接近機械磁盤,因此在存儲系統中逐漸被廣泛采用。
與機械磁盤不同,固態盤由半導體芯片組成,具有可隨機訪問、高可靠性、高性能、低功耗等特點。不過盡管固態盤具有非常明顯的性能優勢,但其中由于組成固態盤的基本部件是一種可擦寫可編程只讀內存(EEPROM)芯片,使得固態盤的內存芯片進行原地覆寫(in-place update)的代價很高,并且只具有有限次的擦寫次數壽命。所以研究在現代存儲系統中如何最大限度地利用固態盤,與其同時避免其內在缺陷,具有重要研究意義。
技術實現要素:
本發明利用固態盤和機械磁盤在性能、容量、成本、壽命等方面具有互補的優缺點,提出一種固態盤與機械磁盤混合的存儲系統及存儲方法。
本發明的技術方案是:一種基于固態盤緩存的混合式存儲系統,其特征在于,包括:機械磁盤,存儲空間被劃分為若干緩存塊的固態盤,以及請求分類模塊、請求分派器、緩存管理器;所述緩存管理器包括寫請求管理單元;
所述請求分類模塊:用于判斷所到達的請求的類型,若所到達的請求為寫請求,則系統進行寫操作;若所到達的請求為讀請求,則系統進行讀操作;
所述請求分派器:用于當所到達的請求為寫請求時,判斷所到達寫請求與其之前相鄰達到的歷史寫請求的訪問地址是否連續,若連續,則該寫請求為連續請求,若非連續,則該寫請求為分割請求;當所到達寫請求為分割請求時,判斷該分割請求和上一個分割請求之間的連續請求的個數,若連續請求的個數大于預設高閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個大請求,將該大請求寫到機械磁盤,若連續請求的個數小于等于預設高閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個中請求,將中請求發送到固態盤;
所述寫請求管理單元:用于當寫請求到達固態盤時,尋找固態盤的空閑緩存塊,若固態盤內存在空閑緩存塊,則將到達的寫請求寫入空閑緩存塊;若固態盤內無空閑緩存塊,則釋放固態盤的緩存塊,并將到達的寫請求寫入釋放出的緩存塊。
進一步地,所述緩存管理器還包括讀請求管理單元,
所述讀請求管理單元:用于當所到達的請求為讀請求時,查找固態盤中的緩存塊,若命中,則訪問固態盤執行讀操作;若未命中,則訪問機械磁盤或訪問機械磁盤的日志區域執行讀操作,并判斷所到達讀請求所對應數據塊的未命中次數是否超過預設最高次閾值,若該數據塊的未命中次數超過預設最高次閾值,則將該數據塊添加到第一遷移列表。
進一步地,固態盤中預設數量的緩存塊組合成一個緩存組,所有緩存塊劃分為若干緩存組;
寫請求管理單元:還用于當寫請求到達固態盤時,根據該寫請求訪問的地址按哈希算法查找該寫請求對應的緩存組,并尋找該緩存組內的空閑緩存塊,若該緩存組內存在空閑緩存塊,則將到達的寫請求寫入空閑緩存塊;若該緩存組內無空閑緩存塊,則釋放該緩存組內的緩存塊,并將到達的寫請求寫入釋放出的緩存塊;
讀請求管理單元:還用于當所到達的請求為讀請求時,根據該讀請求訪問的地址按哈希算法查找該讀請求對應的緩存組,在該緩存組內查找緩存塊,若命中,則訪問固態盤執行讀操作;若未命中,則訪問機械磁盤或訪問機械磁盤的日志區域執行讀操作。
進一步地,該系統還包括:緩存清理模塊;
所述緩存清理模塊:用于周期性掃描固態盤的緩存塊的狀態,選擇出待遷移的緩存塊,并將待遷移的緩存塊添加到第二遷移列表。
進一步地,該系統還包括:數據遷移模塊;
所述數據遷移模塊:用于掃描第一遷移列表和第二遷移列表,并將第一遷移列表中的數據塊遷移到固態盤,將第二遷移列表中的緩存塊寫回機械磁盤。
進一步地,請求分派器:還用于當所到達寫請求為分割請求時,若該分割請求和上一個分割請求之間的連續請求的個數小于預設低閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個小請求,將該小請求寫到機械磁盤的日志區域;若該分割請求和上一個分割請求之間的連續請求的個數小于等于預設高閾值且大于等于預設低閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個中請求,將中請求發送到固態盤。
一種基于固態盤緩存的混合式存儲方法,包括:機械磁盤,固態盤;所述固態盤的存儲空間劃分為若干緩存塊,預設數量的緩存塊組合成一個緩存組,所有緩存塊劃分為若干緩存組;
還包括以下步驟:
S1:判斷所到達請求的類型,若所到達請求為讀請求,則進入步驟S6,若所到達請求為寫請求,則進入步驟S2;
S2:判斷所到達寫請求與其之前相鄰達到的歷史寫請求的訪問地址是否連續,若連續,則該寫請求為連續請求,若非連續,則該寫請求為分割請求;當所到達寫請求為分割請求時,判斷該分割請求和上一個分割請求之間的連續請求的個數;
S3:若該分割請求和上一個分割請求之間的連續請求的個數大于預設高閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個大請求,將該大請求寫到機械磁盤;若該分割請求和上一個分割請求之間的連續請求的個數小于預設低閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個小請求,將該小請求寫到機械磁盤的日志區域;若該分割請求和上一個分割請求之間的連續請求的個數小于等于預設高閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個中請求,將中請求發送到固態盤,并進入步驟S4;
S4:根據所到達寫請求訪問的地址按哈希算法在固態盤查找該寫請求對應的緩存組,并尋找該緩存組內的空閑緩存塊;
S5:若該緩存組內存在空閑緩存塊,則將到達的寫請求寫入空閑緩存塊;若該緩存組內無空閑緩存塊,則釋放該緩存組內的緩存塊,并將到達的寫請求寫入釋放出的緩存塊;
S6:根據所達到讀請求訪問的地址按哈希算法在固態盤查找該讀請求對應的緩存組,在該緩存組內查找緩存塊;
S7:若命中,則訪問固態盤執行讀操作;若未命中,則訪問機械磁盤或訪問機械磁盤的日志區域執行讀操作,并進入步驟S8;
S8:判斷所到達讀請求所對應數據塊的未命中次數是否超過預設最高次閾值;
S9:若該數據塊的未命中次數超過預設最高次閾值,則將該數據塊添加到第一遷移列表。
進一步地,還包括以下步驟:
S10:周期性掃描固態盤的緩存塊的狀態,選擇出待遷移的緩存塊,并將待遷移的緩存塊添加到第二遷移列表。
進一步地,還包括以下步驟:
S11:掃描第一遷移列表和第二遷移列表,將第一遷移列表中的數據塊遷移到固態盤,將第二遷移列表中的緩存塊寫回機械磁盤。
本發明提供的基于固態盤緩存的混合式存儲系統及存儲方法,選擇性地將最合適的請求緩存在固態盤上,既利用固態盤來提升系統整體性能,同時延長固態盤使用時間,在性能和壽命之間選擇一個折衷的權衡點。相比固態盤,既能提高系統性能,又能大量地減少到達機械磁盤的寫數據量,從而提高固態盤的使用壽命。
附圖說明
圖1是本發明具體實施例原理示意圖。
圖2是本發明具體實施例系統架構示意圖。
具體實施方式
下面結合附圖并通過具體實施例對本發明進行詳細闡述,以下實施例是對本發明的解釋,而本發明并不局限于以下實施方式。
本發明的混合式存儲系統建立在linux的設備映射(device-mapper,下文簡稱為DM)機制基礎上,將固態盤和機械磁盤抽象成一個統一的邏輯設備,用戶可以使用DM提供的管理工具dmsetup方便地創建這類設備,由固態盤和機械式磁盤混合組成的DM目標設備類型flashcache而實現的。在flashcache內部,固態盤是以緩存層的形式工作在機械磁盤上層 (可見于圖1),并且釆用相應的請求分配策略和緩存管理算法,將最友好、與性能密切相關的數據塊放置在固態盤緩存中,其目標在于既利用固態盤的高性能,同時又避免它過快地磨損,延長其使用壽命。這類混合式存儲系統的目標是以機械式磁盤的成本獲得固態盤級的性能,在性能和成本之間找到一個最優的平衡點,為用戶提供一個透明的高性能、大容量、低功耗的塊級設備。
本發明提供的基于固態盤緩存的混合式存儲系統,包括機械磁盤和固態盤,固態盤和機械磁盤的存儲空間都被劃分為固定的塊大小,并以塊為單位進行緩存和替換。塊大小值是一個用戶可以配置的參數,在目標設備創建時由用戶傳遞給目標設備,通常是4KB。具體的,固態盤的存儲空間被劃分為若干緩存塊。
如圖2所示,在本實施例中,混合式存儲系統主要由五個軟件模塊協同工作來實現對固態盤和機械磁盤的統一管理。分別是請求分類模塊、請求分派器(request dispatcher)、緩存管理器(cache manager)、緩存清理模塊(cache cleaner)和數據遷移模塊(data migrator)。
(1)請求分類模塊:用于判斷所到達的請求的類型,若所到達的請求為寫請求,則系統進行寫操作;若所到達的請求為讀請求,則系統進行讀操作。
(2)請求分派器:用于當所到達的請求為寫請求時,判斷所到達寫請求與其之前相鄰達到的歷史寫請求的訪問地址是否連續,若連續,則該寫請求為連續請求,若非連續,則該寫請求為分割請求;當所到達寫請求為分割請求時,判斷該分割請求和上一個分割請求之間的連續請求的個數,若連續請求的個數大于預設高閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個大請求,將該大請求寫到機械磁盤,若連續請求的個數小于等于預設高閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個中請求,將中請求發送到固態盤。
進一步地,當所到達寫請求為分割請求時若該分割請求和上一個分割請求之間的連續請求的個數小于預設低閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個小請求,將該小請求寫到機械磁盤的日志區域;若該分割請求和上一個分割請求之間的連續請求的個數小于等于預設高閾值且大于等于預設低閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個中請求,將中請求發送到固態盤。
請求分派器采用“雙閾值”法確定是將請求發送到固態盤緩存層或直接寫到磁盤上,或者暫時寫到磁盤的日志區域內。“雙閾值”法的工作原理是設定一個低閾值(即預設低閾值)和一個高閾值(即預設高閾值),將到達的寫請求分為“大請求”、“中請求”、“小請求”三種類型。請求分派器判斷寫請求為大請求、中請求或小請求時,保存了過去一定數量連續請求的訪問記錄,然后判斷當前到達的寫請求是否與它之前相鄰到達的歷史請求的訪問地址是否連續,這在原理上與內存ghost緩存相似。與之前請求不連續的新到達請求叫做“分割請求”。系統每次遇到“分割請求”時,都將請求歷史清零,并以該“分割請求”為起點對后續到達請求的連續性進行判斷。比如連續請求3次后,第四次與前三次不是連續的,那么前面連續三次的請求為一個中請求。對于“大請求”,直接將其寫到機械磁盤上,一方面可以利用機械磁盤的良好順序訪問性能,另一方面可以增加固態盤的有效緩存空間。對于“中請求”,則將其發送到固態盤上進行緩存,防止固態盤性能的快速下降以及延長了其使用壽命。對于“小請求”,則先將其緩存在與磁盤相關聯的日志區域內,以避免磁盤的隨機訪問操作。“小請求”在日志區域內以訪問地址的順序排序等待并且在兩種情況下被寫到磁盤上,第一種情況叫做“乘機寫”,即每次有“大請求”寫到磁盤時,系統檢查日志區域中是否存在與其連續的“小請求”,若存在則將“小請求”與“大請求”合并一起寫到磁盤。第二種情況叫“迫寫”,即當日志空間中的剩余空閑空間小于設定的最低值時,系統將日志區域清空,將所有緩存的“小請求”都寫回到磁盤。
(3)緩存管理器包括寫請求管理單元和讀請求管理單元。
寫請求管理單元:用于當寫請求到達固態盤時,尋找固態盤的空閑緩存塊,若固態盤內存在空閑緩存塊,則將到達的寫請求寫入空閑緩存塊;若固態盤內無空閑緩存塊,則釋放固態盤的緩存塊,并將到達的寫請求寫入釋放出的緩存塊。
讀請求管理單元:用于當所到達的請求為讀請求時,查找固態盤中的緩存塊,若命中,則訪問固態盤執行讀操作;若未命中,則訪問機械磁盤或訪問機械磁盤的日志區域執行讀操作,并判斷所到達讀請求所對應數據塊的未命中次數是否超過預設最高次閾值,若該數據塊的未命中次數超過預設最高次閾值,則將該數據塊添加到第一遷移列表。
在本實施例中,為了提高固態盤的緩存效率,flashcache采用分層的緩存管理策略,將一定數量(如512)的塊組合成一個組,將所有的緩存塊劃分成若干個組。請求到達時,先根據其所訪問的地址按哈希算法找到其對應的組,然后再在該組內查找其對應的塊。I/O請求到對應的組采用組相聯策略,組內塊釆用全相聯策略。
具體地,在固態盤中預設數量的緩存塊組合成一個緩存組,所有緩存塊劃分為若干緩存組。
寫請求管理單元在當寫請求到達固態盤時,先根據該寫請求訪問的地址按哈希算法查找該寫請求對應的緩存組,并尋找該緩存組內的空閑緩存塊,若該緩存組內存在空閑緩存塊,則將到達的寫請求寫入空閑緩存塊;若該緩存組內無空閑緩存塊,則釋放該緩存組內的緩存塊,并將到達的寫請求寫入釋放出的緩存塊。寫請求管理單元按照先進先出算法(FIFO)和最近最少使用算法(LRU)釋放緩存塊,先進先出算法(FIFO)和最近最少使用算法(LRU)都是指同一組內的塊替換算法,它們指分別按照緩存塊訪問的先后順序和近期性來管理同組內的緩存塊。
讀請求管理單元在所到達的請求為讀請求時,根據該讀請求訪問的地址按哈希算法查找該讀請求對應的緩存組,在該緩存組內查找緩存塊,若命中,則訪問固態盤執行讀操作;若未命中,則訪問機械磁盤或訪問機械磁盤的日志區域執行讀操作。
(4)緩存清理模塊:用于周期性掃描固態盤的緩存塊的狀態,選擇出待遷移的緩存塊,并將待遷移的緩存塊添加到第二遷移列表。清理功能可以在系統空閑的時候運行,減少寫請求到達時由于沒有空閑緩存塊而引起的同步緩存塊寫回操作。緩存清理模塊選擇出需要寫回的緩存塊后,將它們按機械磁盤地址排序后插入到遷移的列表中。
(5)數據遷移模塊:用于掃描第一遷移列表和第二遷移列表,并將第一遷移列表中的數據塊遷移到固態盤,將第二遷移列表中的緩存塊寫回機械磁盤。如前所述,緩存管理器監控未命中的讀請求所訪問的數據塊,若數據塊的未命中次數超過了設置的閾值,則說明該數據塊的訪問需求是很高的,因此將其從磁盤上遷移到固態盤緩存層中。數據遷移模塊根據負載的實時特征在固態盤緩存層和磁盤之間進行數據遷移操作,確保了固態盤緩存的數據塊是最優的,因而提高了系統總體性能。
在本實施例中,對于緩存到固態盤的中請求和緩存到機械磁盤日志區域的小請求提供三種緩存模式,分別是“寫回”、“寫直達”和“寫繞過”。
寫回模式:“寫回”模式是速度最快的緩存模式,同時它也是最不安全的。在“寫回”模式下,所有的寫操作只需要寫到固態盤緩存上,然后將緩存塊對應的元數據中的臟標識位置位表示該緩存塊與磁盤上的狀態不一致,即報告寫操作完成。緩存中的數據塊什么時候寫回到磁盤取決于所釆用的緩存替換算法、應用的訪問模式以及定期刷新策略。其缺點是固態盤緩存中的數據與磁盤數據存在不一致隱患,而且“寫回”模式中緩存塊元數據信息所需要的內存也是最多的。
寫直達模式:“寫直達“模式是這三種模式中最安全的模式。在“寫直達模式下,每一個寫操作只有同時成功地被寫到固態盤和磁盤上才向上層報告請求完成,因此它也是速度最慢的模式。這種模式下,緩存層與磁盤之間的狀態總是一致的。
寫繞過模式:“寫繞過”模式介于以上兩種模式之間。在“寫繞過模式下,每一個寫操作都繞過固態盤緩存而直接寫到磁盤上,只有當數據塊第一次被訪問后才將其寫到緩存中。這種模式下緩存利用率是最高的。
本發明提供的基于固態盤緩存的混合式存儲方法,包括以下步驟:
S9:若該數據塊的未命中次數超過預設最高次閾值,則將該數據塊添加到第一遷移列表。
S8:判斷所到達讀請求所對應數據塊的未命中次數是否超過預設最高次閾值;
S7:若命中,則訪問固態盤執行讀操作;若未命中,則訪問機械磁盤或訪問機械磁盤的日志區域執行讀操作,并進入步驟S8;
S6:根據所達到讀請求訪問的地址按哈希算法在固態盤查找該讀請求對應的緩存組,在該緩存組內查找緩存塊;
S5:若該緩存組內存在空閑緩存塊,則將到達的寫請求寫入空閑緩存塊;若該緩存組內無空閑緩存塊,則釋放該緩存組內的緩存塊,并將到達的寫請求寫入釋放出的緩存塊;
S4:根據所到達寫請求訪問的地址按哈希算法在固態盤查找該寫請求對應的緩存組,并尋找該緩存組內的空閑緩存塊;
S3:若該分割請求和上一個分割請求之間的連續請求的個數大于預設高閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個大請求,將該大請求寫到機械磁盤;若該分割請求和上一個分割請求之間的連續請求的個數小于預設低閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個小請求,將該小請求寫到機械磁盤的日志區域;若該分割請求和上一個分割請求之間的連續請求的個數小于等于預設高閾值,則該分割請求和上一個分割請求之間的連續請求、和上一個分割請求組成一個中請求,將中請求發送到固態盤,并進入步驟S4;
S2:判斷所到達寫請求與其之前相鄰達到的歷史寫請求的訪問地址是否連續,若連續,則該寫請求為連續請求,若非連續,則該寫請求為分割請求;當所到達寫請求為分割請求時,判斷該分割請求和上一個分割請求之間的連續請求的個數;
S1:判斷所到達請求的類型,若所到達請求為讀請求,則進入步驟S6,若所到達請求為寫請求,則進入步驟S2;
S10:周期性掃描固態盤的緩存塊的狀態,選擇出待遷移的緩存塊,并將待遷移的緩存塊添加到第二遷移列表。
S11:掃描第一遷移列表和第二遷移列表,將第一遷移列表中的數據塊遷移到固態盤,將第二遷移列表中的緩存塊寫回機械磁盤。
以上公開的僅為本發明的優選實施方式,但本發明并非局限于此,任何本領域的技術人員能思之的沒有創造性的變化,以及在不脫離本發明原理前提下所作的若干改進和潤飾,都應落在本發明的保護范圍內。