自適應混合讀/寫緩存的方法
【技術領域】
[0001]本發明涉及計算機存儲技術,尤其涉及一種自適應混合讀/寫的緩存的方法。
【背景技術】
[0002]目前市面上大部分存儲產品的緩存都是讀寫分離的,讀緩存的數據結構與寫緩存的數據結構不復用,在內存中表現為兩個區域,兩份數據。
[0003]上述讀寫方式的優點是比較容易管理,但具有以下缺點:(I)如果對同一段數據先讀后寫,那么要么必須同時更新兩份緩存,要么將讀緩存設置為失效或刪除。(2)如果對同一段數據先寫后讀,那么要么將寫緩存中的臟數據回寫完成后才可以進行讀,要么將寫緩存復制到讀緩存,然后再進行讀緩存。(3)在最差的情況下,同一份數據在緩存中可能會有兩份,浪費了內存資源。
【發明內容】
[0004]本發明提供一種自適應混合讀/寫緩存的方法,通過控制讀緩存和寫緩存的大小,自適應地調節讀寫緩存的比例。
[0005]根據上述目的,本發明提供一種自適應混合讀/寫緩存的方法,其特征在于,所述方法包括:
[0006]將緩存按設定的大小劃分成多個塊,并設置成每個緩存節點為一個塊;
[0007]使用紅黑樹對所述每個緩存節點進行索引;
[0008]在寫入或讀取緩存時,找到對應的緩存節點,然后在所述緩存節點上進行相應的寫入或讀取;
[0009]其中,在進行寫入或讀取緩存時,統計所述讀寫緩存的使用情況及讀寫比例,對所述寫入或讀取的緩存比例進行調節。
[0010]其中,所述步驟S3具體包括:
[0011]當寫入緩存時,找到對應的緩存節點,然后將數據填充到所找到的緩存節點上;
[0012]當讀取緩存時,找到對應的緩存節點,然后在找到的緩存節點上查找緩存。
[0013]其中,所述步驟S3還包括:
[0014]在讀取緩存時,如果沒有讀取到完整的數據,則讀取所述緩存對應的外存,并將讀取的數據存入到所述緩存。
[0015]其中,對所述寫入或讀取的緩存比例進行調節的過程具體包括:統計每個磁盤陣列組RAID的讀寫緩存的使用情況以及讀寫輸入輸出1的比例,如果讀1比例升高,則升高讀緩沖在該RAID緩存的占比,反之升高寫緩存在該RAID緩存中的占比。
[0016]其中,所述步驟S3還包括:
[0017]當所述緩存的空間不足時,釋放熱度最低的非臟緩存,將所述非臟緩存釋放到指定的占比位置。
[0018]其中,所述步驟S3還包括:
[0019]在寫緩存使用超過一定百分比時或寫緩存余量不足時,則放緩或停止執行寫1/0,啟動回寫動作,待清空掉足夠的臟數據之后再啟動寫I/O。
[0020]其中,根據緩存的最后一次操作判定所述緩存為讀緩沖還是寫緩存,如果最后一次是讀取,則為讀緩存,否則為寫緩存。
[0021 ] 其中,所述方法還包括:
[0022]使用雙控I/O鎖對緩存的訪問進行保護;所述對緩存的訪問包括讀取、寫入和回與ο
[0023]根據本發明的另一個方面,提供一種自適應混合讀/寫緩存的系統,所述系統包括:
[0024]緩沖塊劃分模塊,用于將所述存儲器的緩存按設定的大小劃分成多個塊;
[0025]索引模塊,用于使用紅黑樹對所述每個緩存節點進行索引;
[0026]緩存讀/寫模塊,用于進行緩存讀寫。
[0027]其中,所述緩存讀/寫模塊包括:
[0028]讀緩存單元,用于讀取緩存;
[0029]寫緩存單元,用于寫入緩存;
[0030]緩存占比調節單元,用于以磁盤陣列組RAID的形式統計讀寫緩存的使用情況以及讀寫輸入輸出1的比例并進行調節;
[0031]緩存釋放單元,用于在所述存儲器空間不足時釋放所述緩存;
[0032]回寫單元,用于在寫緩存超過設定比例或寫緩存余量不足時進行回寫動作。
[0033]本發明的自適應混合讀/寫緩存的方法及系統,通過控制讀緩存的大小和寫緩存的大小,很容易保證緩存的讀寫一致性,并可以自適應地調節讀寫緩存的比例,從而可以對緩存做到內存資源的合理利用,同時在讀取時查找速度快,并且不需要二次遍歷。
【附圖說明】
[0034]通過參考附圖會更加清楚的理解本發明的特征和優點,附圖是示意性的而不應理解為對本發明進行任何限制,在附圖中:
[0035]圖1示出了本發明的自適應混合讀/寫緩存的方法的流程圖。
[0036]圖2示出了本發明的自適應混合讀/寫緩存的系統的結構框圖。
[0037]圖3示出了本發明的自適應混合讀/寫緩存的系統的緩存讀/寫模塊的結構框圖。
【具體實施方式】
[0038]下面將結合附圖對本發明的實施例進行詳細描述。
[0039]圖1示出了本發明的自適應混合讀/寫緩存的方法的流程圖。
[0040]參照圖1,本發明的自適應混合讀/寫緩存的方法包括步驟:
[0041]S1、將緩存按設定的大小劃分成多個塊,并設置成每個緩存節點為一個塊;從而將緩存的每個扇區的地址轉換為塊地址。
[0042]S2、使用紅黑樹對所述每個緩存節點進行索引,從而可以加快查找速度。
[0043]S3、在寫入或讀取緩存時,找到對應的緩存節點,然后在所述緩存節點上進行相應的寫入或讀取;
[0044]具體地,當寫入緩存時,找到對應的緩存節點,然后將數據填充到所找到的緩存節點上;
[0045]當讀取緩存時,找到對應的緩存節點,然后在找到的緩存節點上查找緩存。讀緩沖時查找到的緩存可能是上一次讀取出來的讀緩沖,也可能是之前被寫入的寫緩存。如果沒有讀取到完整的數據,則讀取所述緩存對應的外存,并將讀取的數據存入到所述緩存。
[0046]另外,在進行寫入或讀取緩存時,統計所述讀寫緩存的使用情況及讀寫比例,對所述寫入或讀取的緩存比例進行調節。其過程為:
[0047]統計每個磁盤陣列組RAID的讀寫緩存的使用情況以及讀寫輸入輸出1的比例,如果讀1比例