本公開的實施例總體上涉及存儲技術(shù)領(lǐng)域,具體地,涉及用于管理數(shù)據(jù)訪問的方法及裝置。
背景技術(shù):
在數(shù)據(jù)讀寫處理中,讀寫操作對存儲設(shè)備進行訪問,然而存儲設(shè)備例如磁盤、磁盤陣列、緩存等是io最慢的設(shè)備,數(shù)據(jù)拷貝耗時。同時,數(shù)據(jù)訪問場景下,多用戶操作和多線程應(yīng)用非常廣泛,進程并發(fā)時需要用鎖來控制實現(xiàn)串行化。這些因素都導(dǎo)致數(shù)據(jù)系統(tǒng)的性能下降。
為了改善上述串行化的數(shù)據(jù)訪問方式,一種直觀的方案是例如減小磁盤管理單位,從而降低讀寫操作中多個請求沖突的機會,然而,如果是小讀寫數(shù)據(jù),該方案并不可擴展,另外,存儲設(shè)備的消耗和管理開銷也將大幅增加。因此,需要對現(xiàn)有的數(shù)據(jù)讀寫性能進一步優(yōu)化。
技術(shù)實現(xiàn)要素:
本公開的實施例通過將虛擬存儲塊的概念引入到數(shù)據(jù)寫操作,提出一種優(yōu)化數(shù)據(jù)訪問和寫操作性能的方案,實現(xiàn)多個寫操作的并行數(shù)據(jù)傳送。
根據(jù)本公開的第一方面,提供一種用于管理數(shù)據(jù)訪問的方法,包括:接收數(shù)據(jù)寫請求,其中該寫請求用于將數(shù)據(jù)寫入一個或多個存儲塊;在確定特定的存儲塊不可用時,將需要被寫入特定存儲塊的數(shù)據(jù)寫入與特定存儲塊對應(yīng)的虛擬存儲塊;以及在確定特定的存儲塊變?yōu)榭捎脮r,將虛擬存儲塊存儲的數(shù)據(jù)拷貝到特定的存儲塊。
根據(jù)本公開的實施例,該方法還包括:基于寫請求,按照順序獲取多個存儲塊。
根據(jù)本公開的實施例,所述順序包括邏輯塊地址的升序或降序。
根據(jù)本公開的實施例,在確定特定的存儲塊不可用時,將需要被寫入特定存儲塊的數(shù)據(jù)寫入與特定存儲塊對應(yīng)的虛擬存儲塊包括:按照逐個的順序確定需要寫入數(shù)據(jù)的存儲塊是否可用;將可用的存儲塊加鎖;在確定特定的存儲塊不可用時,創(chuàng)建與特定的存儲塊對應(yīng)的虛擬存儲塊;創(chuàng)建與需要寫入后續(xù)數(shù)據(jù)的存儲塊對應(yīng)的虛擬存儲塊;以及將數(shù)據(jù)分別寫入可用的存儲塊以及虛擬存儲塊。
根據(jù)本公開的實施例,在確定特定的存儲塊變?yōu)榭捎脮r,將虛擬存儲塊存儲的數(shù)據(jù)拷貝到特定的存儲塊包括:響應(yīng)于確定特定的存儲塊可用,對特定的存儲塊加鎖,以將虛擬存儲塊存儲的數(shù)據(jù)拷貝到特定的存儲塊。
根據(jù)本公開的實施例,該方法進一步包括:響應(yīng)于完成將數(shù)據(jù)寫入一個或多個存儲塊,對一個或多個存儲塊解鎖。
根據(jù)本公開的實施例,每個存儲塊包含相同數(shù)目的邏輯頁。
根據(jù)本公開的實施例,在確定特定的存儲塊不可用時,將需要被寫入特定存儲塊的數(shù)據(jù)寫入與特定存儲塊對應(yīng)的虛擬存儲塊包括:創(chuàng)建與特定的存儲塊相對應(yīng)的虛擬存儲塊;以及從存儲池中分配與虛擬存儲塊大小對應(yīng)的邏輯頁,并將需要被寫入特定存儲塊的數(shù)據(jù)寫入分配的邏輯頁。
根據(jù)本公開的實施例,在確定所述特定的存儲塊變?yōu)榭捎脮r,將虛擬存儲塊存儲的數(shù)據(jù)拷貝到特定的存儲塊包括:將虛擬存儲塊遷移至特定存儲塊,或者將虛擬存儲塊存儲的數(shù)據(jù)合并到特定的存儲塊。
根據(jù)本公開的第二方面,提供一種用于管理數(shù)據(jù)訪問的裝置,包括:接收單元,被配置為接收數(shù)據(jù)寫請求,其中該寫請求用于將數(shù)據(jù)寫入一個或多個存儲塊;以及數(shù)據(jù)訪問控制單元,被配置為在確定特定的存儲塊不可用時,將需要被寫入特定存儲塊的數(shù)據(jù)寫入 與特定存儲塊對應(yīng)的虛擬存儲塊;以及在確定特定的存儲塊變?yōu)榭捎脮r,將虛擬存儲塊存儲的數(shù)據(jù)拷貝到特定的存儲塊。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,基于寫請求,按照順序獲取多個存儲塊。
根據(jù)本公開的實施例,其中所述順序包括邏輯塊地址的升序或降序。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,按照逐個的順序確定需要寫入數(shù)據(jù)的存儲塊是否可用;將可用的存儲塊加鎖;在確定特定的存儲塊不可用時,創(chuàng)建與特定的存儲塊對應(yīng)的虛擬存儲塊;創(chuàng)建與需要寫入后續(xù)數(shù)據(jù)的存儲塊對應(yīng)的虛擬存儲塊;以及將數(shù)據(jù)分別寫入可用的存儲塊以及虛擬存儲塊。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,響應(yīng)于確定特定的存儲塊可用,對特定的存儲塊加鎖,以將虛擬存儲塊存儲的數(shù)據(jù)拷貝到特定的存儲塊。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,響應(yīng)于完成將數(shù)據(jù)寫入一個或多個存儲塊,對一個或多個存儲塊解鎖。
根據(jù)本公開的實施例,每個存儲塊包含相同數(shù)目的邏輯頁。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,創(chuàng)建與特定的存儲塊相對應(yīng)的虛擬存儲塊;以及從存儲池中分配與虛擬存儲塊大小對應(yīng)的邏輯頁,并將需要被寫入特定存儲塊的數(shù)據(jù)寫入分配的邏輯頁。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,將虛擬存儲塊遷移至特定存儲塊,或者將虛擬存儲塊存儲的數(shù)據(jù)合并到特定的存儲塊。
根據(jù)本公開的第三方面,提供一種計算機可讀存儲介質(zhì),具有存儲在其上的計算機可讀程序指令,所述計算機可讀程序指令用于執(zhí)行本公開的實施例的管理數(shù)據(jù)訪問的方法。
根據(jù)本公開的第四方面,提供一種存儲系統(tǒng),其包括上述的根據(jù)本公開實施例的管理數(shù)據(jù)訪問的裝置。
通過在數(shù)據(jù)訪問中引入虛擬存儲塊,實現(xiàn)了多個寫操作的并行數(shù)據(jù)傳送。由于寫操作最耗時的部分被并行執(zhí)行,極大提升了數(shù)據(jù)寫性能。進一步地,通過引入新的數(shù)據(jù)加鎖順序方案,本公開的實施例還能避免可能產(chǎn)生的死鎖現(xiàn)象。
附圖說明
通過參考下列附圖所給出的對非限制性實施例的詳細描述,將更好地理解本公開的實施例,并且本公開的實施例的其他目的、細節(jié)、特點和優(yōu)點將變得更明顯。在附圖中:
圖1是示出一種典型單個寫操作io流程圖;
圖2是示出根據(jù)本公開的實施例的用于管理數(shù)據(jù)訪問的方法流程圖;
圖3是示出根據(jù)本公開的實施例的單個寫操作io流程圖;
圖4是示出根據(jù)本公開的實施例避免死鎖方法的示意圖;以及
圖5是示出根據(jù)本公開的實施例的用于管理數(shù)據(jù)訪問的裝置示意圖。
具體實施方式
現(xiàn)將結(jié)合附圖對本公開的實施例進行具體的描述。所附附圖僅僅通過示例的方式示出了能夠?qū)崿F(xiàn)本公開的特定的實施例,示例的實施例并不旨在窮盡根據(jù)本公開的所有實施例。本領(lǐng)域的技術(shù)人員可以在不偏離本公開的實施例精神和保護范圍的基礎(chǔ)上從下述描述得到替代的實施方式,進行結(jié)構(gòu)性或者邏輯性的修改。因此,以下的具體描述并非限制性的,且本公開的實施例的范圍由所附的權(quán)利要求所限定。需要說明的是,盡管附圖中以特定順序描述了本公開的實施例中有關(guān)方法的步驟,但是這并非要求或者暗示必須按照該特定順序來執(zhí)行這些操作,或是必須執(zhí)行全部所示的操作才能實現(xiàn)期望的結(jié)果,相反,本文中所描述的步驟可以改變執(zhí)行順序。附加地或備選地,可以省略某些步驟,將多個步驟合并為一個步驟執(zhí)行, 和/或?qū)⒁粋€步驟分解為多個步驟執(zhí)行。
如前所述,本公開的實施例旨在提供一種優(yōu)化數(shù)據(jù)訪問性能的方案。在不同類型的存儲設(shè)備中,由于緩存運行速度快,能夠進行高速數(shù)據(jù)交換,其被廣泛應(yīng)用,更具體地,例如數(shù)據(jù)處理系統(tǒng)中廣泛應(yīng)用大的動態(tài)隨機訪問存儲器(ram)作為來自或到物理磁盤的數(shù)據(jù)緩存,但對其進行數(shù)據(jù)寫操作同樣存在前述的問題。為了便于描述,現(xiàn)以存儲介質(zhì)為緩存為例,詳細描述本公開的原理和精神,但應(yīng)該理解的是,本領(lǐng)域技術(shù)人員根據(jù)現(xiàn)有技術(shù)以及本領(lǐng)域的公知常識容易知曉在本公開的各個實施例中數(shù)據(jù)寫操作如何對其他存儲介質(zhì)訪問。
考慮到數(shù)據(jù)處理效率和便于管理的目的,緩存通常被分為固定大小的緩存頁,例如8k大小的緩存頁。緩存頁存儲一組相鄰磁盤分區(qū)數(shù)據(jù),是最小的緩存管理單位。緩存邏輯頁(clp)由多個緩存頁(例如8個)組成,用于存儲更大片的連續(xù)磁盤數(shù)據(jù)。clp是磁盤數(shù)據(jù)的基本管理單位,它在磁盤上維系緩存頁和數(shù)據(jù)之間的映射。另外,除了存儲和磁盤映射,clp必須也維護一些控制信息,例如在磁盤陣列應(yīng)用中,磁盤陣列通常有多個控制器,必須保持不同控制器中的緩存數(shù)據(jù)同步和一致,當(dāng)一個控制器失效時,必須保證其他控制器中的緩存數(shù)據(jù)可用,或例如另一種情況,當(dāng)系統(tǒng)斷電時,也必須確保緩存中主機確認的臟數(shù)據(jù)不被丟失。因此,考慮到多線程應(yīng)用和并行多控制器io,當(dāng)已經(jīng)存在一個寫操作在使用clp時,clp必須專用地被訪問,也即寫操作需要對clp對應(yīng)的固定大小的磁盤lba(邏輯塊地址)范圍具有鎖定的特性。
當(dāng)應(yīng)用是并行順序?qū)憰r,如果它們嘗試訪問同一個clp的同一磁盤范圍,這些寫操作可能互相競爭。如果某個寫操作正在使用clp,該clp將無法被授予給其他寫操作。另外,為了避免可能的死鎖,所有寫操作還必須以相同的順序獲取對多個clp的訪問,例如以lba的升序或降序順序。
為了更容易理解本公開提出的方案,下面首先結(jié)合圖1對一個 具體應(yīng)用場景描述典型的單個寫io流程。在該場景中,多個控制器可對磁盤陣列進行操作,每個控制器都具有緩存,緩存被用于在主機和磁盤陣列之間進行數(shù)據(jù)交換存儲。
在步驟s101,緩存接收寫請求,該寫請求可以是直接來自主機的,或者是來自上層驅(qū)動例如虛擬lun驅(qū)動的,寫請求中包含該數(shù)據(jù)寫操作涉及的磁盤卷號如lun序號、起始lba、數(shù)據(jù)大小等信息。
在步驟s102,根據(jù)寫請求中數(shù)據(jù)寫操作的起始lba和數(shù)據(jù)大小,在頁表中搜索數(shù)據(jù)將被寫入的clp,并判斷是否命中clp。該頁表中維護有clp與緩存頁之間的映射關(guān)系,同時還包括lba和clp之間的映射關(guān)系。在具體實施方式中,例如以哈希表形式實現(xiàn)。在該步驟中,寫操作基于寫請求嘗試尋找需要的clp。
在步驟s103,響應(yīng)于未命中clp,主機創(chuàng)建相應(yīng)的clp,該數(shù)據(jù)寫操作獲得訪問新創(chuàng)建clp的專用權(quán)限,寫操作可實現(xiàn)對clp加鎖。
如果響應(yīng)于步驟s102,命中數(shù)據(jù)將被寫入的clp,在步驟s108中,寫操作嘗試獲取對該clp的訪問,并在步驟s109中,判斷是否能夠獲得該clp,如果判斷該clp忙,寫操作將無法獲取該clp的訪問,只能等待直至能夠獲得對該clp的訪問;如果步驟s109中判斷沒有其他寫操作正在使用該clp,意味著寫操作可以獲得該clp加鎖,能夠進行訪問及寫入數(shù)據(jù),之后將轉(zhuǎn)到步驟s104。
在后續(xù)步驟s104中,獲得訪問clp后,可從存儲池中分配緩存頁,并在步驟s105中,從主機或上層驅(qū)動中的緩沖(buffer)中將數(shù)據(jù)拷貝到緩存頁中,從而將數(shù)據(jù)寫入緩存。值得注意的是,數(shù)據(jù)還被鏡像到其他控制器的緩存(如果存在的話)。
之后,在步驟s106,在數(shù)據(jù)傳送完成后釋放clp,也即對clp解鎖,并在步驟s107中通知主機或上層驅(qū)動該寫操作結(jié)束。
值得注意的是,上述是針對寫請求涉及的一個clp的寫操作流程示意,根據(jù)一種實施方式,當(dāng)寫操作涉及多個clp時,可以逐個獲取對該多個clp的訪問,也即對多個clp加鎖,之后再進行對多 個clp的數(shù)據(jù)寫入。另外,如前所述,寫操作通常以相同的順序獲取對多個clp的訪問,例如以lba的升序或降序順序。
通過分析上述單個寫io流程,可以發(fā)現(xiàn),在一種最差的情況下,上述流程在多個寫操作中可能導(dǎo)致鏈?zhǔn)揭蕾?,并?yán)重降低系統(tǒng)性能,例如,寫操作1占用clp1和clp2訪問,寫操作2占用clp3但仍然希望訪問clp2,寫操作3占用clp4但仍然希望訪問clp3,等等,那么所有寫操作必須完全串行。還可以發(fā)現(xiàn),如果寫操作不需要等待獲取clp訪問,最耗時的步驟是數(shù)據(jù)拷貝(步驟s105)。由于數(shù)據(jù)拷貝花費了絕大部分io時間,基于阿姆達爾定律(amdahllaw),實現(xiàn)競爭同一個clp的不同寫操作的并行數(shù)據(jù)拷貝將會帶來最好性能提升。
基于以上,本公開的一個實施例引入虛擬存儲塊的概念,虛擬存儲塊是臨時分配的,其在拷貝數(shù)據(jù)時提供臨時緩沖(buffer)以保存主機數(shù)據(jù),并在數(shù)據(jù)遷移到實際存儲塊之后被釋放。
圖2是示出根據(jù)本公開的實施例的用于管理數(shù)據(jù)訪問的方法流程圖。下面對圖2示出本公開的實施例進行說明。
在步驟s201,接收數(shù)據(jù)寫請求,其中該寫請求用于將數(shù)據(jù)寫入一個或多個存儲塊,也即該請求涉及將被寫入一個或多個存儲塊的數(shù)據(jù)。這里的存儲塊可以是任何合適的存儲管理單元,例如邏輯頁等。
在步驟s202,在確定特定的存儲塊不可用時,將需要被寫入特定存儲塊的數(shù)據(jù)寫入與特定存儲塊對應(yīng)的虛擬存儲塊。在該步驟中,針對寫請求所需要進行寫操作的存儲塊,判斷存儲塊是否可用,也即該存儲塊是否被其他寫操作加鎖;響應(yīng)于確定該存儲塊不可用,無法獲得對該存儲塊的訪問加鎖,則創(chuàng)建與該存儲塊對應(yīng)的虛擬存儲塊,并將相應(yīng)的數(shù)據(jù)寫入該虛擬存儲塊。
在步驟s203,在確定特定的存儲塊變?yōu)榭捎脮r,將虛擬存儲塊存儲的數(shù)據(jù)拷貝到特定的存儲塊。在該步驟中,判斷上述不可用的存儲塊是否轉(zhuǎn)變?yōu)榭捎?,響?yīng)于確定該存儲塊變?yōu)榭捎?,對其加鎖, 并將虛擬存儲塊存儲的數(shù)據(jù)拷貝到該存儲塊中。
由上可見,本公開的方案實現(xiàn)了多個寫操作并行數(shù)據(jù)傳送,大幅提高了系統(tǒng)性能。為了便于理解,以下仍然以對緩存的寫操作為具體示例進行描述。
根據(jù)本公開的一個實施例,引入虛擬clp概念,相應(yīng)地,將最終保存主機數(shù)據(jù)的clp稱之為實際clp。當(dāng)寫操作訪問實際clp失敗時,將創(chuàng)建虛擬clp,虛擬clp如實際clp一樣對應(yīng)于相同磁盤范圍。之后,為該虛擬clp分配緩存頁并啟動來自主機或上層驅(qū)動的數(shù)據(jù)傳送。因此,競爭同一個實際clp的多個寫操作能并行數(shù)據(jù)傳送。在數(shù)據(jù)傳送完成后,使用虛擬clp的寫操作嘗試獲取相應(yīng)的實際clp。一旦成功,該寫操作移動或合并虛擬緩存頁到實際clp。最后,寫操作釋放實際clp并通知主機或上層驅(qū)動寫結(jié)束。
圖3是示出根據(jù)本公開的實施例的單個寫操作io流程圖。下面描述根據(jù)本公開的一個實施例的單個寫操作io流程,對于與圖1所示單個寫操作io流程類似的步驟,這里將僅作簡略說明。
步驟s301至s305與圖1中步驟s101至s105類似。在這些步驟中,緩存接收寫請求,該寫請求可以是直接來自主機的,或者是來自上層驅(qū)動例如虛擬lun驅(qū)動的。根據(jù)寫請求中數(shù)據(jù)寫操作的起始lba和數(shù)據(jù)大小,在頁表中搜索數(shù)據(jù)將被寫入的clp,并判斷是否命中clp。響應(yīng)于未命中clp,主機創(chuàng)建相應(yīng)的clp,該數(shù)據(jù)寫操作獲得訪問新創(chuàng)建clp的專用權(quán)限,能夠?qū)υ揷lp加鎖。接著,獲得訪問clp后,可從存儲池中分配緩存頁,并從主機或上層驅(qū)動中的緩沖(buffer)中將數(shù)據(jù)拷貝到緩存頁中,從而實現(xiàn)將數(shù)據(jù)寫入緩存。
同樣地,如果響應(yīng)于步驟s302命中數(shù)據(jù)將被寫入的clp,在步驟s308中,寫操作嘗試獲取對該clp的訪問,并在步驟s109中,判斷是否能夠獲得該clp,如果判斷沒有其他寫操作正在使用該clp,意味著寫操作可以獲得該clp加鎖,能夠進行訪問寫入數(shù)據(jù),之后將轉(zhuǎn)到步驟s304及其后續(xù)步驟。
如果在步驟s309,判斷該clp忙,寫操作將無法獲取該clp的訪問,那么在步驟s10,創(chuàng)建虛擬clp,該虛擬clp與實際的clp對應(yīng),具有相同的磁盤范圍。在步驟s311,從存儲池中為該虛擬clp分配緩存頁,并在步驟s312,從主機或上層驅(qū)動中的緩沖(buffer)中將數(shù)據(jù)拷貝到虛擬clp對應(yīng)的緩存頁中。
在步驟s313,判斷是否獲得實際的clp加鎖。在具體實現(xiàn)中,根據(jù)本公開的一個實施例,例如建立寫請求和相應(yīng)clp的等待隊列,一旦能夠獲得某個clp加鎖,即觸發(fā)步驟s313的判斷操作。本領(lǐng)域技術(shù)人員根據(jù)現(xiàn)有技術(shù)以及本領(lǐng)域的公知常識容易知曉,也可以采取其他任何合適的實現(xiàn)方式觸發(fā)步驟s313。
響應(yīng)于步驟s313中確定能夠獲得該實際的clp加鎖,則進行到步驟s314,將虛擬clp頁中的數(shù)據(jù)移動/合并至實際的clp中,該步驟僅僅是在同一存儲介質(zhì)中的數(shù)據(jù)遷移,相對于數(shù)據(jù)寫入更為高效;同時,根據(jù)本公開的一個實施例,當(dāng)寫入虛擬clp的數(shù)據(jù)可以整體遷移時,只需將虛擬clp指向?qū)嶋H的clp位置即可,不需要進行實際的數(shù)據(jù)拷貝過程。
當(dāng)完成寫請求所涉及的數(shù)據(jù)傳送后,也即完成步驟305和314之后,在步驟s306,釋放實際的clp,也即對實際的clp解鎖,并在步驟s307中通知主機或上層驅(qū)動寫操作結(jié)束。
值得注意的是,上述是針對寫請求涉及的一個clp的寫操作流程示意,根據(jù)本公開的一個實施例,當(dāng)該寫操作涉及多個clp時,可以逐個獲取對該多個clp的訪問,也即獲得對該寫請求所需要的所有的實際或虛擬clp訪問權(quán)限,之后再進行對多個clp的數(shù)據(jù)寫入。另外,如前所述,寫操作通常以相同的順序獲取對多個clp的訪問,例如以lba的升序或降序順序。應(yīng)理解的是,本領(lǐng)域技術(shù)人員也可以以其他合適的方式控制單個寫操作對其需要的clp的訪問。
通過上述描述可知,根據(jù)本公開的一個實施例,對存儲介質(zhì)的數(shù)據(jù)拷貝步驟,實現(xiàn)了多個寫操作的并行處理,例如對于一個寫操 作,在執(zhí)行步驟s305和s312時,其他寫操作即使需要相同的clp也可以進行數(shù)據(jù)傳送,實現(xiàn)了多個寫操作并行數(shù)據(jù)傳送。而在步驟s314中,僅是將數(shù)據(jù)從虛擬clp向?qū)嶋H的clp的遷移過程,是更為快速的數(shù)據(jù)傳送方式。
如前所述,當(dāng)寫操作訪問多個實際clp時,寫操作通常以例如lba的上升或下降順序獲得所有clp,以避免可能的與需要獲取相同的clp的其他寫操作可能產(chǎn)生的死鎖。引入虛擬clp后,也存在多個寫操作可能會處于死鎖的情況。下面以圖4為例進行說明。
圖4是示出根據(jù)本公開的一個實施例避免死鎖方法的示意圖。首先參考圖4的上半部分,示意了一種可能存在的多個寫操作死鎖情況。假設(shè)有兩個寫操作,寫操作1和寫操作2,其中寫操作1需要將其數(shù)據(jù)寫入clp3至clp6,寫操作2需要將其數(shù)據(jù)寫入clp1至clp6,每個寫操作所需的多個clp在lba上是連續(xù)的。
假設(shè)寫操作2獲得實際的clp1和clp2(r-clp1和r-clp2),同時寫操作1獲得實際的clp3(r-clp3)。根據(jù)本公開的實施例的方案,此時,由于寫操作2無法獲取r-clp3加鎖,于是創(chuàng)建對應(yīng)的虛擬clp即v-clp3。寫操作2繼續(xù)獲得實際的clp4(r-clp4),而之后寫操作1由于無法獲取r-clp4,其已被寫操作2獲得了,因此創(chuàng)建對應(yīng)的虛擬clp即v-clp4。最后,寫操作2獲得實際的clp5和clp6(r-clp5和r-clp6),寫操作1使用虛擬的clp5和clp6(v-clp5和v-clp6)。也即如圖4所示,此時所有的clp都已經(jīng)為寫操作1和寫操作2做好準(zhǔn)備,兩個寫操作開始數(shù)據(jù)寫入,將各自數(shù)據(jù)寫入相應(yīng)的實際clp和虛擬clp中。之后,寫操作2將嘗試獲取訪問r-clp3,寫操作1將嘗試獲取訪問r-clp4。在這種情況下,導(dǎo)致了多個寫操作的死鎖。
根據(jù)本公開的一個實施例,為了避免可能產(chǎn)生的死鎖現(xiàn)象,采用如下方法:如果寫操作無法獲得訪問實際的clp,那么,即使該寫操作能夠獲得訪問后續(xù)的實際clp中的一些,仍然為所有后續(xù)的實際clp均使用虛擬clp。圖4描述了這樣的示例。參考圖4的下 半部分,采用該方法后,對于寫操作2,由于無法獲取r-clp3(被寫操作1獲得加鎖),則對需要數(shù)據(jù)寫入的后續(xù)clp,均使用虛擬clp,也即寫操作2使用v-clp3至v-clp6,對于寫操作1,由于可獲得需要的實際clp,其使用r-clp3至r-clp6。可以看出,采用提出的新的加鎖順序方案,如圖4中所示的死鎖并不會發(fā)生,因為當(dāng)寫操作2發(fā)現(xiàn)其無法獲取訪問r-clp3時,寫操作2將為r-clp3至r-clp6使用虛擬clp。
應(yīng)該理解,圖4中所示僅是兩個寫操作的示意,本領(lǐng)域技術(shù)人員容易知曉,在存在多個寫操作的情形下,本公開的一個實施例將容易地得到應(yīng)用。
圖5是示出根據(jù)本公開的實施例的用于管理數(shù)據(jù)訪問的裝置示意圖。根據(jù)本公開的實施例,用于管理數(shù)據(jù)訪問的裝置包括:接收單元501,被配置為接收數(shù)據(jù)寫請求,其中該寫請求用于將數(shù)據(jù)寫入一個或多個存儲塊;以及數(shù)據(jù)訪問控制單元502,被配置為在確定特定的存儲塊不可用時,將需要被寫入特定存儲塊的數(shù)據(jù)寫入與特定存儲塊對應(yīng)的虛擬存儲塊;以及在確定特定的存儲塊變?yōu)榭捎脮r,將虛擬存儲塊存儲的數(shù)據(jù)拷貝到特定的存儲塊。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,基于所述寫請求,按照順序獲取多個存儲塊。
根據(jù)本公開的實施例,其中為數(shù)據(jù)寫操作按照順序獲取多個存儲塊中的順序包括邏輯塊地址的升序或降序。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,按照逐個的順序確定需要寫入數(shù)據(jù)的存儲塊是否可用;將可用的存儲塊加鎖;在確定特定的存儲塊不可用時,創(chuàng)建與特定的存儲塊對應(yīng)的虛擬存儲塊;創(chuàng)建與需要寫入后續(xù)數(shù)據(jù)的存儲塊對應(yīng)的虛擬存儲塊;以及將數(shù)據(jù)分別寫入可用的存儲塊以及虛擬存儲塊。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,響應(yīng)于確定特定的存儲塊可用,對特定的存儲塊加鎖,以將虛擬存儲塊存儲的數(shù)據(jù)拷貝到特定的存儲塊。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,響應(yīng)于完成將數(shù)據(jù)寫入一個或多個存儲塊,對一個或多個存儲塊解鎖。
根據(jù)本公開的實施例,每個存儲塊包含相同數(shù)目的邏輯頁。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,創(chuàng)建與特定的存儲塊相對應(yīng)的虛擬存儲塊;以及從存儲池中分配與虛擬存儲塊大小對應(yīng)的邏輯頁,并將需要被寫入特定存儲塊的數(shù)據(jù)寫入分配的邏輯頁。
根據(jù)本公開的實施例,數(shù)據(jù)訪問控制單元進一步被配置為,將虛擬存儲塊遷移至特定存儲塊,或者將虛擬存儲塊存儲的數(shù)據(jù)合并到特定的存儲塊。
根據(jù)本公開的實施例,還提供一種計算機可讀存儲介質(zhì),具有存儲在其上的計算機可讀程序指令,所述計算機可讀程序指令用于執(zhí)行本公開的實施例的管理數(shù)據(jù)訪問的方法。
根據(jù)本公開的實施例,還提供一種存儲系統(tǒng),其包括上述的根據(jù)本公開實施例的管理數(shù)據(jù)訪問的裝置。
通過以上描述和相關(guān)附圖中所給出的教導(dǎo),這里所給出的本公開的許多修改形式和其它實施方式將被本公開相關(guān)領(lǐng)域的技術(shù)人員所意識到。因此,所要理解的是,本公開的實施方式并不局限于所公開的具體實施方式,并且修改形式和其它實施方式意在包括在本公開的范圍之內(nèi)。此外,雖然以上描述和相關(guān)附圖在部件和/或功能的某些示例組合形式的背景下對示例實施方式進行了描述,但是應(yīng)當(dāng)意識到的是,可以由備選實施方式提供部件和/或功能的不同組合形式而并不背離本公開的范圍。就這點而言,例如,與以上明確描述的有所不同的部件和/或功能的其它組合形式也被預(yù)期處于本公開的范圍之內(nèi)。雖然這里采用了具體術(shù)語,但是它們僅以一般且描述性的含義所使用而并非意在進行限制。
對于本領(lǐng)域技術(shù)人員而言,顯然本公開的實施例不限于上述示范性實施例的細節(jié),而且在不背離本公開的實施例的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本公開的實施例。因此, 無論如何來看,均應(yīng)將實施例看作是示范性的,而且是非限制性的。此外,明顯的,“包括”一詞不排除其他元素和步驟,并且措辭“一個”不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個元件也可以由一個元件來實現(xiàn)。