一種多路順序流的檢測方法及裝置與流程
2024-02-04 13:06:15
本發明涉及計算機存儲技術領域,特別是涉及一種多路順序流的檢測方法及裝置。
背景技術:
在存儲系統中,許多功能模塊需要知道當前的數據訪問是順序的還是隨機的,根據相應的數據訪問的特點做出相應的處理,以期能夠得到更高的數據訪問系統。例如存儲系統的緩存預讀功能,因為緩存在從磁碟中預讀數據時,總是期望把接下來會被訪問到的數據提前讀取到緩存中,相比隨機訪問,順序訪問時預讀數據被命中的可能性更高,因此緩存預讀功能模塊需要知道當前的數據訪問是順序訪問還是隨機訪問。只有在順序訪問時才進行預讀操作,提高緩存的命中率,進而提升系統訪問性能。又如在具有SSD Cache功能的混合存儲陣列中,因為SSD設備作為緩存使用,其相比後端的HDD設備的性能優勢在於隨機訪問時,對於順序訪問其優勢微乎其微,因此SSD Cache期望緩存的數據為隨機訪問的數據,而對於順序訪問的數據則不予緩存,因此SSD Cache功能模塊需要知道當前的數據訪問是順序訪問還是隨機訪問,以便做相應的處理。由於存儲系統是多個用戶並發訪問的,因此存儲系統需要能夠識別多路並發訪問的順序流。
一般的順序流識別方法能夠很好的識別單路順序流訪問,但是對不同地址空間區段的多路並發順序訪問,會識別成隨機訪問。因此,提供一種對多路並發訪問的順序流進行檢測的方法及裝置是非常有必要的。
技術實現要素:
本發明的目的是提供一種多路順序流的檢測方法及裝置,目的在於解決現有技術中不能對多路並發訪問的順序流進行檢測的問題。
為解決上述技術問題,本發明提供一種多路順序流的檢測方法,包括:
接收IO數據訪問的請求;
查找歷史IO中是否有與當前IO的訪問位置連續的IO,所述歷史IO包含預設個數通過數組形式保存的IO信息;
如果有,則將歷史IO與所述當前IO合併,更新訪問位置以及連續訪問長度信息,把合併後的IO移到LRU鍊表的尾部;
判斷更新後的連續訪問長度是否大於預設閾值;如果是,則認定為順序IO流。
可選地,在查找歷史IO中是否有與當前IO的訪問位置連續的IO之後還包括:
如果沒有與當前IO的訪問位置連續的IO,則把所述當前IO的信息加入LRU鍊表的尾部,將LRU鍊表頭部的IO淘汰。
可選地,所述查找歷史IO中是否有與當前IO的訪問位置連續的IO包括:
通過當前IO的訪問起始位置key,定位到相對應的hash桶,從所述hash桶中查找與當前IO滿足連續條件的歷史IO。
可選地,所述IO信息至少包含用於判斷當前IO與歷史IO的訪問位置是否連續的第一成員變量以及用於標識連續訪問長度的第二成員變量。
可選地,所述預設個數為64個。
本發明還提供了一種多路順序流的檢測裝置,包括:
接收模塊,用於接收IO數據訪問的請求;
查找模塊,用於查找歷史IO中是否有與當前IO的訪問位置連續的IO,所述歷史IO包含預設個數通過數組形式保存的IO信息;
合併模塊,用於當歷史IO中有與當前IO的訪問位置連續的IO時,將歷史IO與所述當前IO合併,更新訪問位置以及連續訪問長度信息,把合併後的IO移到LRU鍊表的尾部;
判定模塊,用於判斷更新後的連續訪問長度是否大於預設閾值;如果是,則認定為順序IO流。
可選地,還包括:
鍊表更新模塊,用於當歷史IO中沒有與當前IO的訪問位置連續的IO時,把所述當前IO的信息加入LRU鍊表的尾部,將LRU鍊表頭部的IO淘汰。
可選地,所述查找模塊具體用於:
通過當前IO的訪問起始位置key,定位到相對應的hash桶,從所述hash桶中查找與當前IO滿足連續條件的歷史IO。
本發明所提供的多路順序流的檢測方法及裝置,通過接收IO數據訪問的請求;查找歷史IO中是否有與當前IO的訪問位置連續的IO,歷史IO包含預設個數通過數組形式保存的IO信息;如果有,則將歷史IO與當前IO合併,更新訪問位置以及連續訪問長度信息,把合併後的IO移到LRU鍊表的尾部;判斷更新後的連續訪問長度是否大於預設閾值;如果是,則認定為順序IO流。本發明所提供的多路順序流的檢測方法及裝置,不僅能夠識別單路的順序流,而且能夠很好的識別多路並發訪問的順序流。為具有緩存預讀功能、SSD Cache功能的存儲系統提供一種多路順序流的識別方法,有效提高了系統的整體性能。
附圖說明
為了更清楚的說明本發明實施例或現有技術的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對於本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明所提供的多路順序流的檢測方法的一種具體實施方式的流程圖;
圖2為本發明所提供的多路順序流的檢測方法的另一種具體實施方式中歷史IO信息的示意圖;
圖3為本發明所提供的多路順序流的檢測方法的另一種具體實施方式中歷史IO的hash鍊表組織形式示意圖;
圖4為本發明所提供的多路順序流的檢測方法的另一種具體實施方式中歷史IO的LRU鍊表組織形式示意圖;
圖5為本發明所提供的多路順序流的檢測方法的另一種具體實施方式的方法流程圖;
圖6為本發明所提供的多路順序流的檢測方法的另一種具體實施方式中合併示意圖;
圖7為本發明實施例提供的多路順序流的檢測裝置的結構框圖。
具體實施方式
為了使本技術領域的人員更好地理解本發明方案,下面結合附圖和具體實施方式對本發明作進一步的詳細說明。顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基於本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬於本發明保護的範圍。
本發明所提供的多路順序流的檢測方法的一種具體實施方式的流程圖如圖1所示,該方法包括:
步驟S101:接收IO數據訪問的請求;
步驟S102:查找歷史IO中是否有與當前IO的訪問位置連續的IO,所述歷史IO包含預設個數通過數組形式保存的IO信息;
步驟S103:如果有,則將歷史IO與所述當前IO合併,更新訪問位置以及連續訪問長度信息,把合併後的IO移到LRU鍊表的尾部;
步驟S104:判斷更新後的連續訪問長度是否大於預設閾值;如果是,則認定為順序IO流。
需要指出的是,本申請中順序流指,對存儲系統的數據訪問是順序進行的,即從小到大連續的訪問一段地址空間內的數據。
多路順序流存在於多個主機同時對存儲系統進行訪問的過程,每個主機對存儲的系統的訪問都是順序的訪問一段地址空間內的數據,多個主機訪問的地址空間區段可能不同。
本發明所提供的多路順序流的檢測方法,通過接收IO數據訪問的請求;查找歷史IO中是否有與當前IO的訪問位置連續的IO,歷史IO包含預設個數通過數組形式保存的IO信息;如果有,則將歷史IO與當前IO合併,更新訪問位置以及連續訪問長度信息,把合併後的IO移到LRU鍊表的尾部;判斷更新後的連續訪問長度是否大於預設閾值;如果是,則認定為順序IO流。本發明所提供的多路順序流的檢測方法,不僅能夠識別單路的順序流,而且能夠很好的識別多路並發訪問的順序流。為具有緩存預讀功能、SSD Cache功能的存儲系統提供一種多路順序流的識別方法,有效提高了系統的整體性能。
在上述任一實施例的基礎上,本發明所提供的多路順序流的檢測方法中,在步驟S202查找歷史IO中是否有與當前IO的訪問位置連續的IO之後還可以包括:
如果沒有與當前IO的訪問位置連續的IO,則把所述當前IO的信息加入LRU鍊表的尾部,將LRU鍊表頭部的IO淘汰。
進一步地,步驟S202查找歷史IO中是否有與當前IO的訪問位置連續的IO的過程可以具體為:
通過當前IO的訪問起始位置key,定位到相對應的hash桶,從所述hash桶中查找與當前IO滿足連續條件的歷史IO。
需要指出的是,本發明上述任一實施例中,IO信息至少包含用於判斷當前IO與歷史IO的訪問位置是否連續的第一成員變量以及用於標識連續訪問長度的第二成員變量。
預設個數為64個,當然其數目可以根據實際情況進行設置,這均不影響本發明的實現。
如圖2本發明所提供的多路順序流的檢測方法的另一種具體實施方式中歷史IO信息的示意圖所示,本實施例維護了64個最近的歷史IO,該64個IO通過數組的形式保存。其中IO信息中的last成員變量為該IO訪問的最後一個扇區,作為上述第一成員變量,當前IO可以通過last成員判斷當前IO與該歷史IO訪問位置是否連續;sequential成員為該IO連續訪問的長度,即連續度,作為上述第二成員變量。當連續度達到設定的閾值時,即認定為順序IO流。如圖2所示,成員變量還可以包括其他變量,並不限於這兩種。
對於這64個歷史IO有兩種數據組織形式,為了快速的查找當前IO與歷史IO是否連續,一種是組織成hash鍊表的形式,如圖3本發明所提供的多路順序流的檢測方法的另一種具體實施方式中歷史IO的hash鍊表組織形式示意圖所示。hash key為IO的訪問起始位置,通過key定位到相應的hash bucket,並從該bucket中遍歷歷史IO,從中找與當前IO滿足連續關係的歷史IO。該hash表的hash桶個數為64個,所以一般情況下不會存在hash衝突,時間複雜度為O(1),最壞的情況的時間複雜度為O(n)。
第二種是把這64個歷史IO組織成LRU鍊表的形式,如圖4本發明所提供的多路順序流的檢測方法的另一種具體實施方式中歷史IO的LRU鍊表組織形式示意圖所示。由於本方法中維護的是64個最近的歷史IO,隨著IO訪問的進行,會對相對陳舊的歷史IO進行淘汰,把最新的IO信息放入LRU鍊表的尾部,把鍊表頭部相對陳舊的歷史IO信息淘汰掉。
本發明所提供的多路順序流的檢測方法的另一種具體實施方式的方法流程圖如圖5所示,用當前IO的訪問起始位置為key,從維護的歷史IO的hash的鍊表中尋找與當前IO滿足連續條件(即滿足讀寫位置連續)的歷史IO,如果找到滿足的條件的歷史IO,對這兩個IO進行合併,如圖6合併示意圖所示,把合併後的IO移動到LRU鍊表的尾部,新合併IO會根據新的last值調整在hash表中的位置,如果合併後的IO的sequntial成員即訪問連續度達到設定的閾值,即認定為順序IO流,如果找不到與當前IO滿足連續關係的歷史IO,則把當前IO信息放入LRU鍊表的尾部,把LRU鍊表的頭部歷史IO淘汰掉。
下面對本發明實施例提供的多路順序流的檢測裝置進行介紹,下文描述的多路順序流的檢測裝置與上文描述的多路順序流的檢測方法可相互對應參照。
圖7為本發明實施例提供的多路順序流的檢測裝置的結構框圖,參照圖7多路順序流的檢測裝置可以包括:
接收模塊100,用於接收IO數據訪問的請求;
查找模塊200,用於查找歷史IO中是否有與當前IO的訪問位置連續的IO,所述歷史IO包含預設個數通過數組形式保存的IO信息;
合併模塊300,用於當歷史IO中有與當前IO的訪問位置連續的IO時,將歷史IO與所述當前IO合併,更新訪問位置以及連續訪問長度信息,把合併後的IO移到LRU鍊表的尾部;
判定模塊400,用於判斷更新後的連續訪問長度是否大於預設閾值;如果是,則認定為順序IO流。
在上述實施例的基礎上,本發明所提供的多路順序流的檢測裝置還可以進一步包括:
鍊表更新模塊,用於當歷史IO中沒有與當前IO的訪問位置連續的IO時,把所述當前IO的信息加入LRU鍊表的尾部,將LRU鍊表頭部的IO淘汰。
進一步地,本實施例中上述查找模塊200可以具體用於:
通過當前IO的訪問起始位置key,定位到相對應的hash桶,從所述hash桶中查找與當前IO滿足連續條件的歷史IO。
本發明所提供的多路順序流的檢測裝置,通過接收IO數據訪問的請求;查找歷史IO中是否有與當前IO的訪問位置連續的IO,歷史IO包含預設個數通過數組形式保存的IO信息;如果有,則將歷史IO與當前IO合併,更新訪問位置以及連續訪問長度信息,把合併後的IO移到LRU鍊表的尾部;判斷更新後的連續訪問長度是否大於預設閾值;如果是,則認定為順序IO流。本發明所提供的多路順序流的檢測裝置,不僅能夠識別單路的順序流,而且能夠很好的識別多路並發訪問的順序流。為具有緩存預讀功能、SSD Cache功能的存儲系統提供一種多路順序流的識別方法,有效提高了系統的整體性能。
本說明書中各個實施例採用遞進的方式描述,每個實施例重點說明的都是與其它實施例的不同之處,各個實施例之間相同或相似部分互相參見即可。對於實施例公開的裝置而言,由於其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。
專業人員還可以進一步意識到,結合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬體、計算機軟體或者二者的結合來實現,為了清楚地說明硬體和軟體的可互換性,在上述說明中已經按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬體還是軟體方式來執行,取決於技術方案的特定應用和設計約束條件。專業技術人員可以對每個特定的應用來使用不同方法來實現所描述的功能,但是這種實現不應認為超出本發明的範圍。
結合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬體、處理器執行的軟體模塊,或者二者的結合來實施。軟體模塊可以置於隨機存儲器(RAM)、內存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬碟、可移動磁碟、CD-ROM、或技術領域內所公知的任意其它形式的存儲介質中。
以上對本發明所提供的多路順序流的檢測方法以及裝置進行了詳細介紹。本文中應用了具體個例對本發明的原理及實施方式進行了闡述,以上實施例的說明只是用於幫助理解本發明的方法及其核心思想。應當指出,對於本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以對本發明進行若干改進和修飾,這些改進和修飾也落入本發明權利要求的保護範圍內。