緩存調度方法和裝置的製作方法
2023-06-12 14:25:01 1
專利名稱:緩存調度方法和裝置的製作方法
技術領域:
本發明涉及數據存儲技術,特別涉及一種緩存調度方法、以及一種緩存調度裝置。
背景技術:
現有的視頻監控系統會採用IP SAN(Storage Area Network,存儲區域網路)技術來實現數據的存儲。即,將攝像頭拍攝的視頻數據都存儲到IPSAN存儲設備中,當用戶需要查看歷史錄像時再從IP SAN存儲設備中讀取錄像數據。採用IP SAN技術實現數據存儲的視頻監控系統的一種典型組網方式如圖1所示, 包括EC (Encoder,視頻編碼器)、DC (Decoder,解碼器)、VC (Video Client,監控客戶端)、 DM (Data Management,數據管理伺服器)、VM (Video Management,視頻管理伺服器)、以及IP SAN存儲設備。當需要錄像存儲時,EC可以通過iSCSianternet Small Computer System hterface,小型計算機系統接口 )將數據寫入至IP SAN存儲設備中;當需要錄像回放時, VC或DC可以向VM發出申請,再由VM調度DM讀取IPSAN存儲設備中的數據、並轉發給VC 或DC。其中,錄像存儲過程對存儲實時性的要求比較高、而EC內部的緩存資源又十分有限,因而就需要IP SAN存儲設備具有較高的響應速度,以避免EC需要寫入至IP SAN的數據發生丟包。但是,現有用於視頻監控的IP SAN存儲設備中的RAID (Redundant Array of Independent Disk,獨立磁碟冗餘陣列)通常會選用RAID5作為陣列類型,而且,多路EC通道共用一臺IP SAN存儲設備。這樣,就容易導致IP SAN存儲設備在存儲數據時產生RAID5 的小寫問題,從而容易導致IP SAN存儲設備的響應速度慢。具體先參見如圖2,多路EC通道會同時向IP SAN存儲設備連續地發送包含有數據的寫命令,屬於不同路EC通道的寫命令會相互交錯地進入存儲控制器(Target)命令隊列中等待,然後再按照進入命令隊列(本文將「Target命令隊列」簡稱為「命令隊列」)的順序,分別屬於不同路EC通道的寫命令包含的數據(圖2中以虛線方塊表示數據)會分別從命令隊列中被寫入至RAID5中。對於包含有多路EC通道的視頻監控系統來說,IP SAN存儲設備的RAID5中會為每路EC通道劃分出對應的一個LUN(Logical Unit Number,邏輯單元號),每路EC通道所對應的一個LUN由RAID5中屬於該路EC通道的各條帶(Mrip)組成。因此,向RAID5的寫操作實際上就是分別針對每路EC通道的對應LUN的一個條帶的寫操作。而相互交錯地進入命令隊列的各路EC通道的寫命令可以看作是離散分布的、而不是相對集中分布的,因此,每次針對一路EC通道的對應LUN的一個條帶的寫操作只能寫入少量的數據,從而導致對RAID5的小寫。由於RAID5的小寫會使IP SAN存儲設備產生很大的開銷,因而也就會影響IP SAN存儲設備的響應速度。為了減小RAID5的小寫問題對IP SAN存儲設備的響應速度的影響,現有技術中在 IP SAN存儲設備中增設了寫緩存。如圖3所示,多路EC通道會同時向IP SAN存儲設備連續地發送包含有數據的寫命令,屬於不同路EC通道的寫命令會相互交錯地進入命令隊列中等待,然後,各路EC通道的寫命令中的寫數據被移交(還包括地址類型的轉換等各種處理、但由於與本文無關因而在說明時均予以省略)至寫緩存內,以使隨寫命令離散分布的各路EC通道的數據在寫緩存中被整合為相對集中分布的狀態;當寫緩存的刷新時刻到來時,寫緩存中屬於每一路EC通道的數據均已積累至一定的數量,此時再將已積累至一定數量的屬於各路EC通道的數據(圖3中以方塊表示寫數據)分別刷新至RAID5的對應LUN 中,就能夠提高對應LUN的一個條帶的一次寫操作可寫入的數據量,有效地避免RAID5的小寫情況發生。然而,隨著視頻監控的不斷發展,用於監控的EC通道的路數也在不斷增加,因而使得容量有限的寫緩存難以同時為多路EC通道提供足夠的空間實現數據積累。從而,每當刷新時刻到來時,多數EC通道在寫緩存中所積累的數據量都不足以避免小寫。
發明內容
有鑑於此,本發明提供了一種緩存調度方法、以及一種緩存調度裝置,能夠減少 RAID5的小寫情況的發生。本發明提供的一種緩存調度方法,該緩存調度方法應用於包含有存儲控制器、 RAID5、以及寫緩存的存儲設備,所述存儲控制器的命令隊列中存放的包含有數據的寫命令來自各數據通道,所述寫緩存中存放的數據從所述命令隊列中移交而來、並等待刷新至 RAID5的屬於對應數據通道的條帶,該緩存調度方法包括aO、在每次刷新時刻到來時,判斷分別屬於各數據通道的條帶在所述寫緩存中的
數據量;al、在步驟aO判斷出有條帶在所述寫緩存中的數據量大於第一閾值時,允許對該條帶執行所述刷新;其中,第一閾值大於等於1/2個條帶且小於1個條帶;a2、在步驟aO判斷出有條帶在所述寫緩存中的數據量小於第二閾值時,禁止對該條帶執行所述刷新;其中,第二閾值大於0且小於1/2個條帶;a3、在步驟aO判斷出有條帶在所述寫緩存中的數據量處於第一閾值與第二閾值之間的區間內時,如果當前的刷新時刻是由於定時間隔到達而被觸發則禁止對該數據通道的當前條帶執行所述刷新、如果當前的刷新時刻是由於所述寫緩存達到上水位線而被觸發則允許對該數據通道的當前條帶執行所述刷新。該緩存調度方法進一步包括b0、在步驟aO判斷出的數據量大於第一閾值的條帶在所有條帶中所佔的比例小於預定值時,分別針對各數據通道的條帶觸發執行步驟bl ;bl、判斷當前條帶在所述命令隊列中對應的寫命令所包含的數據與所述寫緩存中的數據的總量是否大於第三閾值;其中,第三閾值大於等於1/2個條帶且小於1個條帶、第
三閾值小於等於第一閾值;b2、在步驟bl判斷出當前條帶的所述總量大於第三閾值時,調取當前條帶在所述命令隊列中對應的寫命令所包含的數據、並將所調取的數據與所述寫緩存中屬於當前條帶的數據同時刷新;b3、在步驟bl判斷出當前條帶的所述總量未大於第三閾值時,如果所述命令隊列當前已滿時,則調取當前條帶在所述命令隊列中對應的寫命令所包含的數據、並將所調取的數據與所述寫緩存中屬於當前條帶的數據同時刷新。每一條帶所屬的數據通道分別對應RAID5中的一個LUN,每個LUN的地址可被循環使用;當所述命令隊列中同時存在寫地址分別為同一 LUN的尾地址和首地址的多條寫命令時,步驟1^2和步驟b3針對對應的當前條帶所調取的數據僅限於寫地址為該LUN的尾地址的寫命令所包含的數據。該緩存調度方法進一步在所述比例小於預定值時,禁止所述命令隊列中的寫命令所包含的數據向所述寫緩存移交。該緩存調度方法進一步包括CO、監測各數據通道是否有丟包信息;Cl、在步驟cO監測到有數據通道的丟包信息時,判斷該數據通道丟包是否是由於網絡發生擁塞所致;c2、在步驟Cl判斷出該數據通道丟包不是由於網絡發生擁塞所致時,針對屬於該數據通道的條帶觸發步驟bl。本發明提供的一種緩存調度裝置,該緩存調度裝置應用於包含有存儲控制器、 RAID5、以及寫緩存的存儲設備,所述存儲控制器的命令隊列中存放的包含有數據的寫命令來自各數據通道,所述寫緩存中存放的數據從所述命令隊列中移交而來、並等待刷新至 RAID5的屬於對應數據通道的條帶,該緩存調度裝置包括刷新控制判決模塊,用於在每次刷新時刻到來時,判斷分別屬於各數據通道的條帶在所述寫緩存中的數據量;刷新控制執行模塊,用於在刷新控制判決模塊判斷出有條帶在所述寫緩存中的數據量大於第一閾值時,允許對該條帶執行所述刷新;在刷新控制判決模塊判斷出有條帶在所述寫緩存中的數據量小於第二閾值時,禁止對該條帶執行所述刷新;在刷新控制判決模塊判斷出有條帶在所述寫緩存中的數據量處於第一閾值與第二閾值之間的區間內時,如果當前的刷新時刻是由於定時間隔到達而被觸發則禁止對該條帶執行所述刷新、如果當前的刷新時刻是由於所述寫緩存達到上水位線而被觸發則允許對該條帶執行所述刷新;其中, 第一閾值大於等於1/2個條帶且小於1個條帶,第二閾值大於0且小於1/2個條帶。該緩存調度裝置進一步包括隊列交互觸發模塊,用於在刷新控制判決模塊判斷出的數據量大於第一閾值的條帶在所有條帶中所佔的比例小於預定值時,分別針對各數據通道的條帶觸發隊列交互判決模塊;隊列交互判決模塊,用於判斷當前條帶在所述命令隊列中對應的寫命令所包含的數據與所述寫緩存中的數據的總量是否大於第三閾值;其中,第三閾值大於等於1/2個條帶且小於1個條帶、第三閾值小於等於第一閾值;隊列交互執行模塊,用於在隊列交互判決模塊判斷出當前條帶的所述總量大於第三閾值時,調取當前條帶在所述命令隊列中對應的寫命令所包含的數據、並將所調取的數據與所述寫緩存中屬於當前條帶的數據同時刷新;在隊列交互判決模塊判斷出當前條帶的所述總量未大於第三閾值時,如果所述命令隊列當前已滿時,則調取當前條帶在所述命令隊列中對應的寫命令所包含的數據、並將所調取的數據與所述寫緩存中屬於當前條帶的數據同時刷新。每一條帶所屬的數據通道分別對應RAID5中的一個LUN,每一 LUN的地址可被循環使用;當所述命令隊列中同時存在寫地址分別為同一 LUN的尾地址和首地址的多條寫命令時,隊列交互執行模塊針對對應的當前條帶所調取的數據僅限於寫地址為該LUN的尾地址的寫命令所包含的數據。隊列交互觸發模塊進一步在所述比例小於預定值時禁止所述命令隊列中的寫命令所包含的數據向所述寫緩存移交。該緩存調度裝置進一步包括通道丟包監測模塊,用於監測各數據通道是否有丟包信息;丟包處理判決模塊,用於在通道丟包監測模塊監測到有數據通道的丟包信息時, 判斷該數據通道丟包是否是由於網絡發生擁塞所致;丟包處理執行模塊,用於在丟包處理判決模塊判斷出該數據通道丟包不是由於網絡發生擁塞所致時,針對屬於該數據通道的條帶觸發隊列交互判決模塊。由上述技術方案可見,本發明在每次刷新時刻到時,只允許對較大數據量的條帶執行刷新、並禁止對小數據量的條帶執行刷新。由於寫緩存在每次較大數據量的一部分條帶的刷新後,能夠立即為小數據量的另一部分條帶提供數據積累的空閒空間,因此,小數據量的另一部條帶能夠在後續刷新時刻到來之前儘快地積累至大數量、並被刷新,如此反覆, 即可實現各條帶交替地使用有限的寫緩存積累數據,並以此來避免小數據量刷新所導致的小寫情況。更優地,當條帶數量過多(例如實現錄像存儲的EC數量突增)而導致各條帶的數據均無法達到可被刷新的數據量而滯留在寫緩存內時,本發明可以從命令隊列中調取尚未移交至寫緩存的數據、並使調取的數據被提前與寫緩存中屬於同一條帶的數據合併下刷, 即,利用從命令隊列中調取的數據來補充寫緩存中的條帶數據量、並以補充後的數據量執行刷新,從而,能夠在避免小數據量刷新的同時儘快清空寫緩存中被滯留數據所佔用的空間。進一步地,當出現丟包的情況時,只要丟包不是由於網絡擁塞所導致,即表示丟包是由於存儲設備的性能不足所致,對此,可以有針對性地利用命令隊列的數據補充來加快對相應條帶的刷新。
圖1為現有技術中採用IP SAN技術實現數據存儲的視頻監控系統的一種典型組網方式的示意圖;圖2為現有技術中的一種IP SAN存儲設備的數據存儲過程的示意圖;圖3為現有技術中設置有寫緩存的另一種IP SAN存儲設備的數據存儲過程的示意圖;圖4為本發明實施例中緩存調度方法所採用的刷新控制過程的一優選流程示意圖;圖5為本發明實施例中緩存調度方法所採用的隊列交互過程的一優選流程示意圖;圖6為本發明實施例中緩存調度方法所採用的丟包處理過程的一優選流程示意圖;圖7a至圖7c為本發明實施例中緩存調度裝置的優選結構示意圖。
具體實施例方式為使本發明的目的、技術方案及優點更加清楚明白,以下參照附圖並舉實施例,對本發明進一步詳細說明。對於寫緩存的容量> EC通道的路數X條帶大小的情況,採用現有方式即可避免小寫情況的發生,因此,本實施例主要還是針對寫緩存(由於本實施例主要應用於IP SAN 存儲設備,因而本實施例中所提及的「寫緩存」均是指IP SAN存儲設備中的寫緩存)的容量不足以為多路EC通道提供足夠空間的情況,即寫緩存的容量< EC通道的路數X條帶大小。其中,對於只包含一個RAID5的IP SAN存儲設備來說,所有路EC通道對應的LUN 均屬於同一個RAID5,相應地,各路EC通道的條帶大小相同。而對於包含多於一個RAID5 的IP SAN存儲設備來說,各路EC通道對應的LUN可能分屬於不同RAID5。這樣,由於不同 RAID5的配置可能會不同,因而對應LUN分屬於不同RAID5的各路EC通道的條帶大小也就有可能會不同,此時,寫緩存的容量<EC通道的路數X條帶大小可以表示為寫緩存的容量 < EC通道的路數X最大的條帶大小。為了在寫緩存的容量不足以為多路EC通道提供足夠空間的情況下減少小寫情況的發生,本實施例要通過對刷新的控制來儘可能避免的是小數據量的刷新。為此,本實施例在每次刷新時刻到時,需要先判斷各路EC通道的條帶在寫緩存中的數據量是否足夠避免小寫,只有較大數據量的條帶才允許被執行刷新、而小數據量的條帶則禁止被執行刷新,而不是像現有技術那樣即便條帶在寫緩存中的數據量很小時也仍然刷新。由於寫緩存在每次較大數據量的一部分條帶的刷新後,能夠立即為小數據量的另一部分條帶提供數據積累的空閒空間,因此,小數據量的另一部條帶能夠在後續刷新時刻到來之前儘快地積累至大數量、並被刷新。如此反覆地執行一部分條帶的刷新、另一部分條帶的積累,即可實現各條帶交替地使用有限的寫緩存積累數據,並以此來避免小數據量刷新所導致的小寫情況。圖4為本發明實施例中緩存調度方法所採用的刷新控制過程的一優選流程示意圖。如圖4所示,本實施例中的緩存調度方法所採用的刷新控制過程在每次刷新時刻到來時,可以針對每一 EC的條帶執行如下的步驟步驟401,判斷該條帶在寫緩存中的數據量是否大於A,如果是則執行步驟402,否則執行步驟403。其中,A的取值大於等於1/2個條帶且小於1個條帶,即A大於等於1/2 個條帶、且小於1個條帶,例如,A可以取2/3個條帶。步驟402,對該條帶的刷新不屬於小寫,因此允許針對該條帶執行刷新,然後結束本次流程、並等待下一次刷新時刻的到來。步驟403,判斷該條帶在寫緩存中的數據量是否小於C,如果是則執行步驟404,否則執行步驟405。其中,C的取值大於0且小於1/2個條帶,即A大於等於1/2個條帶、且小於1個條帶,例如,C可以取1/3個條帶。
步驟404,對該條帶的刷新屬於小寫,因此禁止針對該條帶執行刷新,然後結束本次流程、並等待下一次刷新時刻的到來。步驟405,判斷當前刷新時刻是否是由於寫緩存達到上水位線所致,如果是則執行步驟406,否則(例如當前的刷新時刻是由於定時間隔所致)執行步驟407。步驟406,即便該條帶當前可刷新的數據量較少,但寫緩存中已無空閒空間可使該條帶的數據量繼續積累,因而允許針對該條帶執行刷新,然後結束本次流程、並等待下一次刷新時刻的到來。步驟407,寫緩存中的空閒空間還足以使該條帶的數據量繼續積累,因而暫時禁止對該條帶執行刷新,然後結束本次流程、並等待下一次刷新時刻的到來。至此,針對一個條帶的一種優選刷新控制流程結束。上述流程僅僅是一種優選的實現方式,實際應用中,上述涉及判斷的各步驟之間的先後順序可以任意調整、多個條帶也可以共用一個流程來實現上述的若干判斷,只要滿足如下的刷新控制原理即可任意調整刷新判斷流程的具體實現aO、在每次刷新時刻到來(可依據監測刷新時刻的觸發條件來識別、例如定時間隔到達或寫緩存達到上水位線)時,判斷分別屬於各路EC通道的條帶在寫緩存中的數據量;al、在aO判斷出有條帶在寫緩存中的數據量達到A時,允許對該條帶執行刷新;a2、在aO判斷出有條帶在寫緩存中的數據量小於C時,禁止對該條帶執行刷新;a3、在aO判斷出有條帶在寫緩存中的數據量處於A與C之間的區間內(即小於等於A、且大於等於C)時,如果當前的刷新時刻是由於定時間隔到達而被觸發則禁止對該條帶執行刷新、以使該條帶在寫緩存中的數據量可以繼續積累,而如果當前的刷新時刻是由於寫緩存達到上水位線而被觸發則允許對該條帶執行刷新、以避免由於寫緩存沒有空閒空間而導致丟包。可見,利用刷新控制能夠在一定程度上避免小數據量刷新所導致的小寫情況。但是,當條帶數量過多時,寫緩存中為各條帶提供的用於數據積累的空間不足使所有條帶均能夠積累至允許被執行刷新的數據量,從而造成寫緩存中的大量條帶備禁止執行刷新,進而出現大量條帶的數據量在寫緩存中滯留,此時,刷新控制的效果就會受到影響。因此,為了在條帶數量過多時能夠及時清除寫緩存中滯留的數據,本實施例可以通過與命令隊列的交互,適當地從命令隊列中調取尚未移交至寫緩存的數據、並使調取的數據被提前與寫緩存中屬於同一條帶的數據合併下刷,即,利用從命令隊列中調取的數據來補充寫緩存中的條帶數據量、並以補充後的數據量執行刷新,從而,能夠在避免小數據量刷新的同時清空寫緩存中被滯留數據所佔用的空間,以使各條帶能夠基於前述的刷新控制下交替地在寫緩存中積累數據。具體說,當寫緩存中出現大量數據滯留時,多數條帶在寫緩存中的數據顯然無法被刷新。即,此時在寫緩存中的數據量大於A的條帶在所有條帶中所佔的比例會很小,例如 1 5、1 10。因此,本實施例可以在每次刷新時刻之後,統計在該次刷新時刻執行刷新控制時判斷出的數據量大於A的條帶在所有條帶中所佔的比例,當統計的比例小於預定值時再分別針對各路EC通道(即LUN)的條帶觸發隊列交互過程。圖5為本發明實施例中緩存調度方法所採用的隊列交互過程的一優選流程示意圖。如圖5所示,本實施例中的緩存調度方法所採用的隊列交互過程,在統計的比例小於預定值時分別針對每一 EC通道(即LUN)的條帶觸發如下流程從步驟501開始執行步驟501,判斷當前條帶在命令隊列中對應的寫命令所包含的數據與當前條帶在寫緩存中的數據的總量是否大於B,如果是則執行步驟502,否則執行步驟503。其中,B的取值大於等於1/2個條帶且小於1個條帶,即B大於等於1/2個條帶、 且小於1個條帶。而且,B與A同樣是作為允許刷新的數據量標準。雖然B與A的取值範圍相同、即B小於等於A,但由於本流程被觸發是由於寫緩存中已發生數據滯留,因此,也可以為了儘快清空寫緩存而設置B小於A,即,適當降低允許刷新的數據量標準。步驟502,調取當前條帶在命令隊列中對應的寫命令所包含的數據、並將所調取的數據與寫緩存中屬於當前條帶的數據同時刷新,然後結束針對當前條帶的流程。其中,由於本流程不是在刷新時刻到來時執行的,因此,在本流程中所執行的刷新不屬於刷新時刻到來時的正常刷新、而是可以看作是一種強制刷新。另需要說明的是,每一路EC通道對應的LUN的地址可被循環使用,即上層應用可以對LUN循環寫入。因此,可能會出現命令隊列中同時存在寫地址分別為同一 LUN的尾地址和首地址的多條寫命令。此時,寫地址為該LUN的尾地址的寫命令中所包含的可能是該 LUN最後一個條帶的結尾處的數據,而寫地址為該LUN的首地址的寫命令中所包含的則可能是該LUN第一個條帶的起始處的數據。也就是說,雖然多個寫命令包含的數據屬於同一 LUN,但卻屬於同一 LUN內的不同條帶,因此,本步驟中僅調取寫地址為對應LUN的尾地址的寫命令所包含的數據,而不調取同時存在於命令隊列中的寫地址為對應LUN的首地址的寫命令包含的數據。例如,當前條帶命令隊列中的寫命令的寫地址按順為0Xfff00、0Xfff80、 0x00080,0x00100...,本步驟僅調取寫地址為OxfffOO、Oxfff80兩個寫命令中的數據、並與寫緩存中屬於當前條帶的數據一起強制刷新。步驟503,判斷命令隊列當前是否已滿,如果是,則執行步驟504,否則結束針對當前條帶的流程。在本步驟中,可能存在兩種情況一種情況是,所有EC通道對應的LUN在命令隊列中共用唯一的一個隊列,此時,判斷命令隊列當前是否已滿就是指這唯一的一個隊列當前是否已滿。 另一種情況是,每個EC通道對應的LUN在命令隊列中分別有一個獨立的對應子隊列,即,存在與LUN數量(即EC通道路數)相同、且一一對應的若干子隊列,此時,判斷命令隊列當前是否已滿則是指對應的子隊列當前是否已滿。步驟504,雖然當前條帶在命令隊列和寫緩存中的數據總量未能大於B,但由於命令隊列此時已滿,因而仍調取當前條帶在命令隊列中對應的寫命令所包含的數據、並將所調取的數據與寫緩存中屬於當前條帶的數據同時刷新,然後結束針對當前條帶的流程。本步驟與步驟502的具體實現方式可以相同,即,同樣在當前條帶在命令隊列中同時存在寫地址分別為對應的LUN的尾地址和首地址的多條寫命令時,僅調取寫地址為對應的LUN的尾地址的寫命令所包含的數據。至此,針對當前條帶的隊列交互流程結束。針對任意條帶的上述流程均是在刷新時刻之後判斷出統計的比例小於預定值時被觸發執行的,因此,隊列交互過程可以看作是在刷新控制過程間歇時的一種輔助過程。
而且,針對各路EC通道(即LUN)的條帶所分別執行的上述如圖5所示流程,可以是同時執行的,也可以是順序執行的。在前一種同時執行的情況下,所需要的開銷會比較大,因此,優選地選用順序執行的後一種情況。基於如圖5所示的流程可見,經過隊列交互流程的處理後,寫緩存中能夠立即出現大量可供數據積累的空閒空間。當隊列交互流程處理後的空閒空間能夠使寫緩存中出現足夠比例的條帶數據量大於A時,即可停止隊列交互、並等待刷新時刻到來時執行刷新控制;即便針對若干條帶執行了隊列交互流程處理後的空閒空間,仍不足以在下一次刷新時刻到來時使寫緩存中出現足夠比例的條帶數據量大於A,也可以在下一次刷新時刻之後繼續執行隊列交互流程。另外,在針對任意EC通道對應的LUN的條帶執行上述流程時,均需要在步驟501 判斷當前條帶在命令隊列和寫緩存的數據總量是否大於B,而該判斷過程主要通過分別查詢命令隊列和寫緩存中的數據量、然後求和。因此,較佳地應在此過程中禁止命令隊列中的寫命令所包含的數據向寫緩存的正常移交,以確保步驟501的判斷結果的準確性。除了以上所述的刷新控制和隊列交互過程之外,本實施例的緩存調度方法還可以針對發生丟包的任意EC通道進行高優先的緊急處理。圖6為本發明實施例中緩存調度方法所採用的丟包處理過程的一優選流程示意圖。如圖6所示,本實施例中的緩存調度方法所採用的丟包處理過程包括如下步驟步驟601,監測各EC通道是否有丟包信息,在監測到有丟包信息後觸發步驟601。關於本步驟中的丟包信息如何產生、如何傳遞、以及如何監測,均為本領域技術人員能夠實現,因此本文不再予以贅述。步驟602,EC通道的丟包通常是由兩種情況導致,一種則是由於網絡擁塞而導致數據無法到達IP SAN存儲設備,另一種是IP SAN存儲設備由於未能及時完成數據刷新而無法返回成功響應,顯然對於前一種情況無法由IP SAN存儲設備解決、應當予以排除,因此,判斷該EC通道丟包是否是由於網絡發生擁塞所致,如果是則結束本流程,否則針對該 EC通道對應的LUN的條帶觸發如圖5所示流程中的步驟501。本步驟中,判斷丟包是否是由於網絡發生擁塞所致的具體實現方式可以多種多樣。而本實施例還提供了一種較佳方式,該方式可以利用數據報文中的擁塞標記來判斷。具體說在網絡發生擁塞時,網絡中的交換設備會在承載寫命令的數據報文中設置擁塞標記, 因此,本步驟中可以依據來自任意EC通道的承載寫命令的數據報文中是否被網絡中的交換設備設置有擁塞標記,判斷該EC通道的丟包是否是由於網絡發生擁塞而網絡發生擁塞所致。至此,一次丟包處理過程的流程結束。實際應用中,步驟601可以是實時執行的步驟,無論步驟602是否被觸發、也無論步驟602的判斷結果如何,步驟601均可以保持不間斷地執行。以上,是對本實施例中的緩存調度方法的詳細說明。雖然以上說明均是結合了 IP SAN存儲設備及其應用的視頻監控場景,但除了 IP SAN存儲設備及其應用的視頻監控場景之外,本實施例中的緩存調度方法同樣還能夠適用於其它包含有RAID5的存儲設備,或者, 與視頻監控同樣具有多路與EC通道類似的其它數據通道、不同路數據通道的數據分區域存儲、以及每路數據通道的數據連續性特點的其他應用場景。
實際應用中,該緩存調度方法可以利用電腦程式予以實現,因此,本實施例還對應該緩存調度方法提供了相應的緩存調度裝置。本實施例中提供的一種緩存調度裝置如圖7a所示,該裝置主要可應用於包含有存儲控制器、RAID5、以及寫緩存的存儲設備(例如IP SAN存儲設備),存儲控制器內的命令隊列中的寫命令所包含的數據先被移交至寫緩存中緩存後、再從所述寫緩存被刷新至 RAID5中。參見圖7a,該裝置包括刷新控制判決模塊711,用於在每次刷新時刻到來(可依據監測刷新時刻的觸發條件來識別、例如定時間隔到達或寫緩存達到上水位線)時,判斷分別屬於各數據通道的條帶在寫緩存中的數據量。刷新控制執行模塊712,用於在刷新控制判決模塊711判斷出有條帶在寫緩存中的數據量大於A時,允許對該條帶執行刷新;在刷新控制判決模塊711判斷出有條帶在寫緩存中的數據量小於C時,禁止對該條帶執行刷新;在刷新控制判決模塊711判斷出有條帶在寫緩存中的數據量處於A與C之間的區間內(即小於等於A、且大於等於C)時,如果當前的刷新時刻是由於定時間隔到達而被觸發則禁止對該條帶執行刷新、如果當前的刷新時刻是由於寫緩存達到上水位線而被觸發則允許對該條帶執行刷新。實際應用中,刷新控制執行模塊712可依據監測刷新時刻的觸發條件來來判斷當前的刷新時刻到來的原因,或者由刷新控制判決模塊711監測刷新時刻的觸發條件並通告刷新控制執行模塊712。其中,A和C 的取值如方法部分所述。可見,如圖7a所示的緩存調度裝置可利用刷新控制來僅允許大數據量的刷新、而限制小數據量的刷新,並使得寫緩存在每次較大數據量的一部分條帶的刷新後能夠立即為小數據量的另一部分條帶提供數據積累的空閒空間,因此,小數據量的另一部條帶能夠在後續刷新時刻到來之前儘快地積累至允許被刷新的大數量。如此反覆地執行一部分條帶的刷新、另一部分條帶的積累,即可實現各條帶交替地使用有限的寫緩存積累數據,並以此來避免小數據量刷新所導致的小寫情況。但是,在條帶數量過多而導致寫緩存空間不足以被所有條帶交替地積累數據時, 容易出現寫緩存中的大量數據滯留,此時,如圖7a所示緩存調度裝置的刷新控制效果就會受到影響。為此,本實施例還提供了如圖7b所示的另一種緩存調度裝置。如圖7b所示的另一種緩存調度裝置是基於如圖7a所示裝置的基礎上,進一步增加了如下結構隊列交互觸發模塊721,用於統計刷新控制判決模塊711每次判斷出的在寫緩存中的數據量大於A的條帶在所有條帶中所佔的比例,並在該比例小於預定值(例如1 5、 1 10等)時分別針對各數據通道的條帶觸發隊列交互判決模塊722。隊列交互判決模塊722,用於判斷當前條帶在命令隊列中對應的寫命令所包含的數據與寫緩存中的數據的總量是否大於B。實際應用中,為了確保隊列交互判決模塊722的判斷結果的準確性,較佳地應由隊列交互觸發模塊721在其統計的比例小於預定值時禁止命令隊列中的寫命令所包含的數據向寫緩存正常移交。隊列交互執行模塊723,用於在隊列交互判決模塊722判斷出當前條帶的所述總量大於B時,調取當前條帶在命令隊列中對應的寫命令所包含的數據、並將所調取的數據與寫緩存中屬於當前條帶的數據同時刷新;在隊列交互判決模塊722判斷出當前條帶的所述總量未大於B時,如果命令隊列當前已滿時,則調取當前條帶在命令隊列中對應的寫命令所包含的數據、並將所調取的數據與寫緩存中屬於當前條帶的數據同時刷新,如果命令隊列當前未滿則不做處理。其中,B的取值如方法部分所述。S卩,在當前條帶的所述總量未大於B時,隊列交互執行模塊723僅在命令隊列當前已滿時,調取當前條帶在命令隊列中對應的寫命令所包含的數據、並將所調取的數據與寫緩存中屬於當前條帶的數據同時刷新。其中,隊列交互執行模塊723的觸發不是由於刷新時刻的到來,因此,隊列交互執行模塊723所執行的刷新不屬於刷新時刻到來時的正常刷新、而是可以看作是一種強制刷新。而且,當出現當前條帶在命令隊列中同時存在寫地址分別為同一 LUN的尾地址和首地址的多條寫命令時,隊列交互執行模塊723所調取的數據,僅限於寫地址為對應LUN的尾地址的寫命令所包含的數據。另外,對於命令隊列當前是否已滿的條件存在兩種情況如果所有數據通道對應的LUN在命令隊列中共用唯一的一個隊列,則判斷命令隊列當前是否已滿就是指這唯一的一個隊列當前是否已滿;而如果每個數據通道對應的LUN在命令隊列中分別有一個獨立的對應子隊列,則判斷命令隊列當前是否已滿則是指對應的子隊列當前是否已滿。如上可見,如圖7b所示的緩存調度裝置可以通過隊列交互的處理,使寫緩存中立即出現大量可供數據積累的空閒空間。當隊列交互處理後的空閒空間能夠使寫緩存中出現足夠比例的條帶數據量大於A時,隊列交互觸發模塊721即可取消對隊列交互判決模塊722 的觸發、以使隊列交互判決模塊722停止工作,相應地,隨著隊列交互判決模塊722停止工作,隊列交互執行模塊也就不會再被觸發並停止工作。實際應用中,隊列交互判決模塊722、以及隊列交互執行模塊723針對各路數據通道(即LUN)的條帶所分別執行的處理過程可以是同時執行的,也可以是順序執行的。在前一種同時執行的情況下,需要設置與數據通道數量相等的多套隊列交互判決模塊722、以及隊列交互執行模塊723,此時的開銷會比較大,因此,優選地選用順序執行的後一種情況,此時只需要一套隊列交互判決模塊722、隊列交互執行模塊723。除了以上的如圖7a和圖7b所示的兩種緩存調度裝置之外,本實施例還提供了又一種如圖7c所示的緩存調度裝置。如圖7c所示的緩存調度裝置以如圖7b所示裝置為基礎,進一步增加了如下結構通道丟包監測模塊741,用於監測各數據通道是否有丟包信息。丟包處理判決模塊742,用於在通道丟包監測模塊741監測到有數據通道的丟包信息時,判斷該數據通道丟包是否是由於網絡發生擁塞所致。實際應用中,丟包處理判決模塊742可以依據來自任意數據通道的用於承載寫命令的數據報文中是否被網絡中的交換設備設置有擁塞標記,判斷出該數據通道的丟包是否是由於網絡發生擁塞而網絡發生擁塞所致。丟包處理執行模塊743,用於在丟包處理判決模塊742判斷出該數據通道丟包不是由於網絡發生擁塞所致時,針對該數據通道對應的LUN的條帶觸發隊列交互判決模塊 722。可見,本實施例中如圖7c所示的緩存調度裝置可以進一步針對發生丟包的任意數據通道進行高優先的緊急處理。
14
以上所述僅為本發明的較佳實施例而已,並非用於限定本發明的保護範圍。凡在本發明的精神和原則之內,所作的任何修改、等同替換以及改進等,均應包含在本發明的保護範圍之內。
權利要求
1.一種緩存調度方法,該緩存調度方法應用於包含有存儲控制器、RAID5、以及寫緩存的存儲設備,所述存儲控制器的命令隊列中存放的包含有數據的寫命令來自各數據通道, 所述寫緩存中存放的數據從所述命令隊列中移交而來、並等待刷新至RAID5的屬於對應數據通道的條帶,其特徵在於,該緩存調度方法包括aO、在每次刷新時刻到來時,判斷分別屬於各數據通道的條帶在所述寫緩存中的數據量;al、在步驟aO判斷出有條帶在所述寫緩存中的數據量大於第一閾值時,允許對該條帶執行所述刷新;其中,第一閾值大於等於1/2個條帶且小於1個條帶;a2、在步驟aO判斷出有條帶在所述寫緩存中的數據量小於第二閾值時,禁止對該條帶執行所述刷新;其中,第二閾值大於0且小於1/2個條帶;a3、在步驟aO判斷出有條帶在所述寫緩存中的數據量處於第一閾值與第二閾值之間的區間內時,如果當前的刷新時刻是由於定時間隔到達而被觸發則禁止對該數據通道的當前條帶執行所述刷新、如果當前的刷新時刻是由於所述寫緩存達到上水位線而被觸發則允許對該數據通道的當前條帶執行所述刷新。
2.如權利要求1所述的緩存調度方法,其特徵在於,該緩存調度方法進一步包括 b0、在步驟aO判斷出的數據量大於第一閾值的條帶在所有條帶中所佔的比例小於預定值時,分別針對各數據通道的條帶觸發執行步驟bl ;bl、判斷當前條帶在所述命令隊列中對應的寫命令所包含的數據與所述寫緩存中的數據的總量是否大於第三閾值;其中,第三閾值大於等於1/2個條帶且小於1個條帶、第三閾值小於等於第一閾值;b2、在步驟bl判斷出當前條帶的所述總量大於第三閾值時,調取當前條帶在所述命令隊列中對應的寫命令所包含的數據、並將所調取的數據與所述寫緩存中屬於當前條帶的數據同時刷新;b3、在步驟bl判斷出當前條帶的所述總量未大於第三閾值時,如果所述命令隊列當前已滿時,則調取當前條帶在所述命令隊列中對應的寫命令所包含的數據、並將所調取的數據與所述寫緩存中屬於當前條帶的數據同時刷新。
3.如權利要求2所述的緩存調度方法,其特徵在於,每一條帶所屬的數據通道分別對應RAID5中的一個LUN,每個LUN的地址可被循環使用;當所述命令隊列中同時存在寫地址分別為同一 LUN的尾地址和首地址的多條寫命令時,步驟1^2和步驟b3針對對應的當前條帶所調取的數據僅限於寫地址為該LUN的尾地址的寫命令所包含的數據。
4.如權利要求2或3所述的緩存調度方法,其特徵在於,該緩存調度方法進一步在所述比例小於預定值時,禁止所述命令隊列中的寫命令所包含的數據向所述寫緩存移交。
5.如權利要求2或3所述的緩存調度方法,其特徵在於,該緩存調度方法進一步包括 cO、監測各數據通道是否有丟包信息;Cl、在步驟cO監測到有數據通道的丟包信息時,判斷該數據通道丟包是否是由於網絡發生擁塞所致;c2、在步驟cl判斷出該數據通道丟包不是由於網絡發生擁塞所致時,針對屬於該數據通道的條帶觸發步驟bl。
6.一種緩存調度裝置,該緩存調度裝置應用於包含有存儲控制器、RAID5、以及寫緩存的存儲設備,所述存儲控制器的命令隊列中存放的包含有數據的寫命令來自各數據通道, 所述寫緩存中存放的數據從所述命令隊列中移交而來、並等待刷新至RAID5的屬於對應數據通道的條帶,其特徵在於,該緩存調度裝置包括刷新控制判決模塊,用於在每次刷新時刻到來時,判斷分別屬於各數據通道的條帶在所述寫緩存中的數據量;刷新控制執行模塊,用於在刷新控制判決模塊判斷出有條帶在所述寫緩存中的數據量大於第一閾值時,允許對該條帶執行所述刷新;在刷新控制判決模塊判斷出有條帶在所述寫緩存中的數據量小於第二閾值時,禁止對該條帶執行所述刷新;在刷新控制判決模塊判斷出有條帶在所述寫緩存中的數據量處於第一閾值與第二閾值之間的區間內時,如果當前的刷新時刻是由於定時間隔到達而被觸發則禁止對該條帶執行所述刷新、如果當前的刷新時刻是由於所述寫緩存達到上水位線而被觸發則允許對該條帶執行所述刷新;其中,第一閾值大於等於1/2個條帶且小於1個條帶,第二閾值大於0且小於1/2個條帶。
7.如權利要求6所述的緩存調度裝置,其特徵在於,該緩存調度裝置進一步包括隊列交互觸發模塊,用於在刷新控制判決模塊判斷出的數據量大於第一閾值的條帶在所有條帶中所佔的比例小於預定值時,分別針對各數據通道的條帶觸發隊列交互判決模塊;隊列交互判決模塊,用於判斷當前條帶在所述命令隊列中對應的寫命令所包含的數據與所述寫緩存中的數據的總量是否大於第三閾值;其中,第三閾值大於等於1/2個條帶且小於1個條帶、第三閾值小於等於第一閾值;隊列交互執行模塊,用於在隊列交互判決模塊判斷出當前條帶的所述總量大於第三閾值時,調取當前條帶在所述命令隊列中對應的寫命令所包含的數據、並將所調取的數據與所述寫緩存中屬於當前條帶的數據同時刷新;在隊列交互判決模塊判斷出當前條帶的所述總量未大於第三閾值時,如果所述命令隊列當前已滿時,則調取當前條帶在所述命令隊列中對應的寫命令所包含的數據、並將所調取的數據與所述寫緩存中屬於當前條帶的數據同時刷新。
8.如權利要求7所述的緩存調度裝置,其特徵在於,每一條帶所屬的數據通道分別對應RAID5中的一個LUN,每一 LUN的地址可被循環使用;當所述命令隊列中同時存在寫地址分別為同一 LUN的尾地址和首地址的多條寫命令時,隊列交互執行模塊針對對應的當前條帶所調取的數據僅限於寫地址為該LUN的尾地址的寫命令所包含的數據。
9.如權利要求7或8所述的緩存調度裝置,其特徵在於,隊列交互觸發模塊進一步在所述比例小於預定值時禁止所述命令隊列中的寫命令所包含的數據向所述寫緩存移交。
10.如權利要求7或8所述的緩存調度裝置,其特徵在於,該緩存調度裝置進一步包括通道丟包監測模塊,用於監測各數據通道是否有丟包信息;丟包處理判決模塊,用於在通道丟包監測模塊監測到有數據通道的丟包信息時,判斷該數據通道丟包是否是由於網絡發生擁塞所致;丟包處理執行模塊,用於在丟包處理判決模塊判斷出該數據通道丟包不是由於網絡發生擁塞所致時,針對屬於該數據通道的條帶觸發隊列交互判決模塊。
全文摘要
本發明公開了一種緩存調度方法和裝置。本發明在每次刷新時刻到時,只允許對較大數據量的條帶執行刷新、並禁止對小數據量的條帶執行刷新,以此來避免小數據量刷新所導致的小寫情況。更優地,當條帶數量過多而導致各條帶的數據均無法達到可被刷新的數據量而滯留在寫緩存內時,本發明可以利用從命令隊列中調取的數據來補充寫緩存中的條帶數據量、並以補充後的數據量執行刷新,從而,能夠在避免小數據量刷新的同時儘快清空寫緩存中被滯留數據所佔用的空間。進一步地,當出現丟包的情況時,本發明可以有針對性地利用命令隊列的數據補充來加快對相應條帶的刷新。
文檔編號H04N5/76GK102223510SQ20111014983
公開日2011年10月19日 申請日期2011年6月3日 優先權日2011年6月3日
發明者周迪, 陳乾業 申請人:杭州華三通信技術有限公司