本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種基于混合磁盤的數(shù)據(jù)存取方法及裝置。
背景技術(shù):
隨著固態(tài)硬盤技術(shù)的成熟,目前市場(chǎng)上出現(xiàn)了大量的基于機(jī)械磁盤與固態(tài)硬盤的混合磁盤的存儲(chǔ)產(chǎn)品,這些產(chǎn)品中,其中一種是把固態(tài)硬盤當(dāng)作緩存盤使用,將機(jī)械磁盤當(dāng)作數(shù)據(jù)盤使用,寫數(shù)據(jù)的時(shí)候先寫到固態(tài)硬盤中緩存,然后再轉(zhuǎn)寫到機(jī)械磁盤;把熱點(diǎn)數(shù)據(jù)緩存在固態(tài)硬盤里面,如果讀的數(shù)據(jù)正好在固態(tài)硬盤,則直接從固態(tài)硬盤讀取。
固態(tài)硬盤作為一種高速存儲(chǔ)介質(zhì),當(dāng)其作為機(jī)械磁盤的高速大容量緩存時(shí),可以極大地改善存儲(chǔ)產(chǎn)品的性能。首先會(huì)把寫操作的數(shù)據(jù)緩存到固態(tài)硬盤上面,即寫緩存,然后再把寫緩存對(duì)應(yīng)的數(shù)據(jù)重回寫到機(jī)械磁盤上面,當(dāng)前為了加快數(shù)據(jù)回寫到機(jī)械磁盤的速度,當(dāng)出現(xiàn)一些寫緩存的地址是連續(xù)的,或者是重疊的時(shí)候,就把多個(gè)寫緩存合并成一個(gè)大的寫緩存,然后一次性將大的寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入到機(jī)械磁盤上去,加快數(shù)據(jù)從緩存盤回寫到數(shù)據(jù)盤的速度,但是,在寫緩存的地址不連續(xù)的時(shí)候,就不能將多個(gè)寫緩存進(jìn)行合并,這就導(dǎo)致仍然需要多次寫操作才能把數(shù)據(jù)寫入到數(shù)據(jù)盤里。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種基于混合磁盤的數(shù)據(jù)存取方法及裝置,其主要目的在于解決在寫緩存的地址不連續(xù)的時(shí)候,需要多次寫操作才能把數(shù)據(jù)寫入到數(shù)據(jù)盤的問(wèn)題。
為實(shí)現(xiàn)上述目的,本發(fā)明提供一種基于混合磁盤的數(shù)據(jù)存取方法,該基于混合磁盤的數(shù)據(jù)存取方法包括:
從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量;
當(dāng)統(tǒng)計(jì)的數(shù)量大于第二預(yù)設(shè)數(shù)目時(shí),從數(shù)據(jù)盤中讀取所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存之間的間隔數(shù)據(jù);
將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)合并,生成一個(gè)總寫緩存,并將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤。
優(yōu)選地,所述將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)合并,生成一個(gè)總寫緩存,并將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤的步驟包括:
根據(jù)所述不連續(xù)的寫緩存的數(shù)量,從系統(tǒng)內(nèi)存中申請(qǐng)空間,將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)放入所述空間;
在所述空間中將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)合并,生成一個(gè)總寫緩存;
將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤。
優(yōu)選地,所述從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量的步驟之前,所述基于混合磁盤的數(shù)據(jù)存取方法還包括步驟:
判斷是否有多個(gè)寫緩存的地址連續(xù)或者重疊;
當(dāng)有多個(gè)寫緩存的地址連續(xù)或者重疊時(shí),將地址連續(xù)或者重疊的多個(gè)寫緩存合并成一個(gè)寫緩存,并將合并成的所述寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入到所述數(shù)據(jù)盤;
當(dāng)沒(méi)有寫緩存的地址連續(xù)或者重疊時(shí),執(zhí)行從第一個(gè)寫緩存起,統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量的步驟。
優(yōu)選地,所述從第一個(gè)寫緩存起,統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量的步驟之后,所述基于混合磁盤的數(shù)據(jù)存取方法還包括步驟:
當(dāng)統(tǒng)計(jì)的數(shù)量小于或者等于所述第二預(yù)設(shè)數(shù)目時(shí),判斷所述緩存盤中的緩存空間是否充足;
若當(dāng)前所述緩存盤中緩存空間不足,則從第一個(gè)寫緩存起,逐一按照寫入的地址的順序?qū)懢彺鎸?duì)應(yīng)的數(shù)據(jù)寫入到所述數(shù)據(jù)盤。
優(yōu)選地,所述當(dāng)統(tǒng)計(jì)的數(shù)量小于或者等于所述第二預(yù)設(shè)數(shù)目時(shí),判斷所述緩存盤中的緩存空間是否充足的步驟之后,所述基于混合磁盤的數(shù)據(jù)存取 方法還包括步驟:
若所述緩存盤中當(dāng)前的緩存空間充足,則繼續(xù)執(zhí)行從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量的步驟。
此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種基于混合磁盤的數(shù)據(jù)存取裝置,該基于混合磁盤的數(shù)據(jù)存取裝置包括:
數(shù)量統(tǒng)計(jì)模塊,用于從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量;
間隔讀取模塊,用于當(dāng)統(tǒng)計(jì)的數(shù)量大于第二預(yù)設(shè)數(shù)目時(shí),從數(shù)據(jù)盤中讀取所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存之間的間隔數(shù)據(jù);
數(shù)據(jù)合并模塊,用于將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)合并,生成一個(gè)總寫緩存;
數(shù)據(jù)寫入模塊,用于將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤。
優(yōu)選地,所述數(shù)據(jù)合并模塊,還用于根據(jù)所述不連續(xù)的寫緩存的數(shù)量,從系統(tǒng)內(nèi)存中申請(qǐng)空間,將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)放入所述空間;以及在所述空間中將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)合并,生成一個(gè)總寫緩存;
所述數(shù)據(jù)寫入模塊,還用于將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤。
優(yōu)選地,所述基于混合磁盤的數(shù)據(jù)存取裝置還包括:
地址判斷模塊,用于判斷是否有多個(gè)寫緩存的地址連續(xù)或者重疊;
所述數(shù)據(jù)合并模塊,還用于當(dāng)有多個(gè)寫緩存的地址連續(xù)時(shí),將地址連續(xù)的多個(gè)寫緩存合并成一個(gè)寫緩存;
所述數(shù)據(jù)寫入模塊,還用于將合并的所述寫緩存寫入到所述數(shù)據(jù)盤;
所述數(shù)量統(tǒng)計(jì)模塊,還用于當(dāng)沒(méi)有寫緩存的地址連續(xù)或者重疊時(shí),從第一個(gè)寫緩存起,統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量。
優(yōu)選地,所述基于混合磁盤的數(shù)據(jù)存取裝置還包括:
緩存判斷模塊,用于當(dāng)統(tǒng)計(jì)的數(shù)量小于或者等于所述第二預(yù)設(shè)數(shù)目時(shí),判斷所述緩存盤中的緩存空間是否充足;
所述數(shù)據(jù)寫入模塊,用于若當(dāng)前所述緩存盤中緩存空間不足,則從第一個(gè)寫緩存起,逐一按照寫入的地址的順序?qū)懢彺鎸?duì)應(yīng)的數(shù)據(jù)寫入到所述數(shù)據(jù)盤。
優(yōu)選地,所述數(shù)量統(tǒng)計(jì)模塊,還用于若所述緩存盤中當(dāng)前的緩存空間充足,則從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量。
本發(fā)明提出的基于混合磁盤的數(shù)據(jù)存取方法及裝置,從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量,當(dāng)統(tǒng)計(jì)的間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量大于第二預(yù)設(shè)數(shù)目時(shí),從數(shù)據(jù)盤中讀取這些不連續(xù)的寫緩存之間的間隔數(shù)據(jù),將這些不連續(xù)的寫緩存和間隔數(shù)據(jù)進(jìn)行合并,形成一個(gè)總寫緩存,并將其對(duì)應(yīng)的數(shù)據(jù)寫入到數(shù)據(jù)盤中,本發(fā)明用一次讀操作和一次寫緩存代替了多次寫緩存,無(wú)需單獨(dú)將緩存盤中地址不連續(xù)的寫緩存逐一寫入到數(shù)據(jù)盤中,提升了數(shù)據(jù)從緩存盤寫入到機(jī)械盤的速度,解決了在寫緩存的地址不連續(xù)的時(shí)候,需要多次寫操作才能把數(shù)據(jù)寫入到數(shù)據(jù)盤的問(wèn)題。
附圖說(shuō)明
圖1為本發(fā)明基于混合磁盤的數(shù)據(jù)存取方法第一實(shí)施例的流程圖;
圖2為本發(fā)明基于混合磁盤的數(shù)據(jù)存取方法第一實(shí)施例中寫緩存與間隔數(shù)據(jù)拼接示意圖;
圖3為本發(fā)明基于混合磁盤的數(shù)據(jù)存取方法第二實(shí)施例中讀取間隔數(shù)據(jù)的步驟的細(xì)化流程示意圖;
圖4為本發(fā)明基于混合磁盤的數(shù)據(jù)存取裝置第一實(shí)施例的功能模塊示意圖。
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說(shuō)明。
具體實(shí)施方式
應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種基于混合磁盤的數(shù)據(jù)存取方法。
參照?qǐng)D1所示,為本發(fā)明基于混合磁盤的數(shù)據(jù)存取方法第一實(shí)施例的流程圖。
在第一實(shí)施例中,該基于混合磁盤的數(shù)據(jù)存取方法包括:
步驟s10,從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量。
本實(shí)施例提出的方法適用于混合磁盤,一般將機(jī)械磁盤作為數(shù)據(jù)盤,將高速隨機(jī)存儲(chǔ)介質(zhì)作為緩存盤,其讀寫速度快且容量大,可以把經(jīng)常讀取的一些熱點(diǎn)數(shù)據(jù)緩存到高速的緩存盤中,作為讀緩存,是讀操作對(duì)應(yīng)的緩存數(shù)據(jù),以后就直接從緩存盤讀取,把要寫的數(shù)據(jù)暫時(shí)緩存到緩存盤上,作為寫緩存,是寫操作對(duì)應(yīng)的緩存數(shù)據(jù),后面再慢慢地把這些寫緩存回寫到數(shù)據(jù)盤上。因此,緩存盤中一般是當(dāng)前系統(tǒng)進(jìn)程運(yùn)行更新的數(shù)據(jù),這些數(shù)據(jù)需要寫入到數(shù)據(jù)盤中,但是由于數(shù)據(jù)盤的數(shù)據(jù)寫入速度較慢,為了進(jìn)程的正常運(yùn)行,先將這些更新的數(shù)據(jù),緩存到數(shù)據(jù)盤的緩存空間中,形成所述寫緩存,但是由于數(shù)據(jù)更新時(shí)并不是全部更新,可能只有部分?jǐn)?shù)據(jù)更新,因此會(huì)產(chǎn)生一些寫入地址不連續(xù)的寫緩存。
需要說(shuō)明的是,本實(shí)施例中的緩存盤可以是高速隨機(jī)存儲(chǔ)介質(zhì),此處所說(shuō)的高速隨機(jī)存儲(chǔ)介質(zhì)可以是目前已經(jīng)很成熟的ssd(solidstatedrives,固態(tài)硬盤),也可以是目前還不太成熟但是未來(lái)可能會(huì)得到廣泛使用的nvram(non-volatilerandomaccessmemory,非易失性隨機(jī)訪問(wèn)存儲(chǔ)器)類存儲(chǔ)器。
因此,緩存空間中的每一個(gè)寫緩存的數(shù)據(jù)中都包含有需要寫入到數(shù)據(jù)盤中的物理地址,而硬盤的讀寫以扇區(qū)作為基本單位,一般以柱面/磁頭/扇區(qū)表示的絕對(duì)扇區(qū)為物理地址,可以用來(lái)標(biāo)示扇區(qū),故,物理地址一般由柱面號(hào)→磁頭號(hào)→扇區(qū)號(hào)來(lái)表示,其中,柱面從外向內(nèi)自0開始順序進(jìn)行編號(hào),即由第一個(gè)柱面至最后一個(gè)柱面按照0、1、2、3……的順序編號(hào),磁頭用于確定數(shù)據(jù)在哪個(gè)盤面上,由第一個(gè)磁頭至最后一個(gè)磁頭按照1、2、3……的順序編號(hào),扇區(qū)數(shù)表示每條磁道上有幾個(gè)扇區(qū),編號(hào)從1開始,按照1、2、3……的順序編號(hào)。
磁盤的物理地址按照以下方式排列,假設(shè)每磁道17個(gè)扇區(qū)為例進(jìn)行說(shuō)明,從柱面0,磁頭1,扇區(qū)0開始,第一個(gè)扇區(qū)編號(hào)為0,該磁道上剩余的扇區(qū)編號(hào)為1到16,然后是磁頭號(hào)為2,柱面為0的17個(gè)扇區(qū),形成的扇區(qū)號(hào)從17到33,直到該柱面的所有磁頭。然后再移到柱面1,磁頭1,扇區(qū)1繼續(xù)進(jìn)行編號(hào),即按扇區(qū)號(hào),磁頭號(hào),柱面號(hào)增長(zhǎng)的順序連續(xù)。因此,在判斷寫緩存是否連續(xù)時(shí),根據(jù)其物理地址來(lái)判斷其是否連續(xù)。
從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量;即可以將第一個(gè)寫緩存作為當(dāng)前寫緩存,統(tǒng)計(jì)從當(dāng)前寫緩存往后的第一預(yù)設(shè)數(shù)目的扇區(qū)的地址空間內(nèi)寫緩存的數(shù)量,其中第一預(yù)設(shè)數(shù)目可以由用戶設(shè)置,本實(shí)施例中,優(yōu)選地,第一預(yù)設(shè)數(shù)目取2048個(gè)扇區(qū)-6144個(gè)扇區(qū),或者第一預(yù)設(shè)數(shù)目取4096個(gè)扇區(qū),即2m的數(shù)據(jù)。
步驟s30,當(dāng)統(tǒng)計(jì)的數(shù)量大于第二預(yù)設(shè)數(shù)目時(shí),從數(shù)據(jù)盤中讀取所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存之間的間隔數(shù)據(jù)。
設(shè)置上述第一預(yù)設(shè)數(shù)目的限制主要是因?yàn)椋喝绻g隔的扇區(qū)較大,則其中的間隔數(shù)據(jù)也會(huì)比較大,而當(dāng)間隔的數(shù)據(jù)比較大時(shí),會(huì)導(dǎo)致需要從數(shù)據(jù)盤中讀取的數(shù)據(jù)也比較多,這樣即使能夠?qū)⒍鄠€(gè)寫緩存合并,但是由于數(shù)據(jù)盤的讀寫速度比較慢,讀取間隔數(shù)據(jù)的讀操作比較慢,反而會(huì)較低整個(gè)讀寫緩存的性能,因此需要對(duì)間隔扇區(qū)的數(shù)量作出限制,以便于實(shí)現(xiàn)在寫緩存的地址不連續(xù)的時(shí)候,把多個(gè)寫緩存合并成一個(gè)寫緩存,然后一次性寫入到機(jī)械磁盤上去,加快數(shù)據(jù)從緩存盤回寫到數(shù)據(jù)盤的速度。
在統(tǒng)計(jì)完成之后,判斷統(tǒng)計(jì)的數(shù)量是否大于預(yù)設(shè)數(shù)目,其中,第二預(yù)設(shè)數(shù)目可以由用戶設(shè)置,本實(shí)施例中,第二預(yù)設(shè)數(shù)目?jī)?yōu)選為3-6個(gè),或者第二預(yù)設(shè)數(shù)目?jī)?yōu)選為4個(gè)??紤]到如果當(dāng)前能夠合并的不連續(xù)的寫緩存的數(shù)量過(guò)少時(shí),反而得不償失,因此經(jīng)過(guò)調(diào)試,確定出能夠進(jìn)行合并寫緩存的最少數(shù)量,即上述第二預(yù)設(shè)數(shù)目,當(dāng)能夠合并的寫緩存?zhèn)€數(shù)大于第二預(yù)設(shè)數(shù)目時(shí),從數(shù)據(jù)盤中讀取間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存之間的間隔數(shù)據(jù)。
步驟s40,將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)合并,生成一個(gè)總寫緩存,并將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤。
從內(nèi)存中行申請(qǐng)一個(gè)足夠大的空間,將從數(shù)據(jù)盤中讀取的間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存之間的間隔數(shù)據(jù)以及上述間隔的寫緩存放入申請(qǐng)的內(nèi)存 空間中,將上述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存與間隔數(shù)據(jù)拼接起來(lái),并替換掉間隔數(shù)據(jù)中對(duì)應(yīng)的原始數(shù)據(jù),形成一個(gè)總寫緩存,將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤,參照?qǐng)D2所示。
進(jìn)一步地,在步驟s20之前,該基于混合磁盤的數(shù)據(jù)存取方法還包括以下步驟:
判斷是否有多個(gè)寫緩存的地址連續(xù)或者重疊;
當(dāng)有多個(gè)寫緩存的地址連續(xù)或者重疊時(shí),將地址連續(xù)或者重疊的多個(gè)寫緩存合并成一個(gè)寫緩存,并將合并成的所述寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入到所述數(shù)據(jù)盤。
當(dāng)沒(méi)有寫緩存的地址連續(xù)或者重疊時(shí),執(zhí)行從第一個(gè)寫緩存起,統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量的步驟。
由于緩存盤中會(huì)有一些寫緩存的地址是連續(xù)的,對(duì)于這些地址連續(xù)的寫緩存來(lái)說(shuō),沒(méi)有間隔數(shù)據(jù)需要讀取,可以直接將其合并為一個(gè)大的寫緩存,直接將其對(duì)應(yīng)的數(shù)據(jù)寫入到數(shù)據(jù)盤中,因此在其他實(shí)施例中,可以在將緩存盤中的寫緩存按照地址排序后,先判斷是否有多個(gè)寫緩存的地址連續(xù)或者重疊,此處對(duì)于地址連續(xù)或者重疊的寫緩存沒(méi)有數(shù)量的限制,當(dāng)有兩個(gè)或者兩個(gè)以上的寫緩存地址連續(xù)或者重疊時(shí),可以將地址連續(xù)或者重疊的多個(gè)寫緩存合并成一個(gè)寫緩存,并將合并形成的大的寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入到數(shù)據(jù)盤中。
本實(shí)施例提出的基于混合磁盤的數(shù)據(jù)存取方法,從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量,當(dāng)統(tǒng)計(jì)的間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量大于第二預(yù)設(shè)數(shù)目時(shí),從數(shù)據(jù)盤中讀取這些不連續(xù)的寫緩存之間的間隔數(shù)據(jù),將這些不連續(xù)的寫緩存和間隔數(shù)據(jù)進(jìn)行合并,形成一個(gè)總寫緩存,并將其對(duì)應(yīng)的數(shù)據(jù)寫入到數(shù)據(jù)盤中,本發(fā)明用一次讀操作和一次寫緩存代替了多次寫緩存,無(wú)需單獨(dú)將緩存盤中地址不連續(xù)的寫緩存逐一寫入到數(shù)據(jù)盤中,提升了數(shù)據(jù)從緩存盤寫入到機(jī)械盤的速度,解決了在寫緩存的地址不連續(xù)的時(shí)候,需要多次寫操作才能把數(shù)據(jù)寫入到數(shù)據(jù)盤的問(wèn)題。
參照?qǐng)D3所示,基于本發(fā)明基于混合磁盤的數(shù)據(jù)存取方法的第一實(shí)施例 提出本發(fā)明基于混合磁盤的數(shù)據(jù)存取方法的第二實(shí)施例。在本實(shí)施例中,所述方法與第一實(shí)施例的區(qū)別在于,步驟s20包括以下細(xì)化步驟:
步驟s21,根據(jù)所述不連續(xù)的寫緩存的數(shù)量,從系統(tǒng)內(nèi)存中申請(qǐng)空間,將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)放入所述空間;
步驟s22,在所述空間中將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)合并,生成一個(gè)總寫緩存;
步驟s23,將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤。
從內(nèi)存中行申請(qǐng)一個(gè)足夠大的空間,將從數(shù)據(jù)盤中讀取的間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存之間的間隔數(shù)據(jù)放入內(nèi)存中,將間隔的寫緩存和間隔數(shù)據(jù)進(jìn)行合并,即將上述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存與間隔數(shù)據(jù)拼接起來(lái),并替換掉間隔數(shù)據(jù)中對(duì)應(yīng)的原始數(shù)據(jù),形成一個(gè)總寫緩存,將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤。
進(jìn)一步地,在步驟s10之后,該基于混合磁盤的數(shù)據(jù)存取方法還包括以下步驟:
當(dāng)統(tǒng)計(jì)的數(shù)量小于或者等于所述第二預(yù)設(shè)數(shù)目時(shí),判斷所述緩存盤中的緩存空間是否充足;
若當(dāng)前所述緩存盤中緩存空間不足,則從第一個(gè)寫緩存起,逐一按照寫入的地址的順序?qū)懢彺鎸?duì)應(yīng)的數(shù)據(jù)寫入到所述數(shù)據(jù)盤。
進(jìn)一步地,在斷所述緩存盤中的緩存空間是否充足的步驟之后,若所述緩存盤中當(dāng)前的緩存空間充足,則繼續(xù)執(zhí)行從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量的步驟。
如果高速介質(zhì)的空間還足夠時(shí),對(duì)于不能合并的寫緩存,可以暫時(shí)讓其繼續(xù)緩存在高速介質(zhì)中,當(dāng)緩存更多的寫緩存的時(shí)候再進(jìn)行合并。如果高速介質(zhì)的空間不夠了,那么就逐一將按照地址排列的寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入到所述數(shù)據(jù)盤。
本實(shí)施例提出的基于混合磁盤的數(shù)據(jù)存取方法,當(dāng)要讀取的間隔數(shù)據(jù)被讀緩存到了高速隨機(jī)存儲(chǔ)介質(zhì)中時(shí),就從讀緩存的高速隨機(jī)存儲(chǔ)介質(zhì)中讀取間隔數(shù)據(jù),這樣就可以進(jìn)一步提升數(shù)據(jù)讀寫的速度。
本發(fā)明還提出一種基于混合磁盤的數(shù)據(jù)存取裝置。
參照?qǐng)D4所示,為本發(fā)明基于混合磁盤的數(shù)據(jù)存取裝置第一實(shí)施例的功能模塊示意圖。
在該實(shí)施例中,該基于混合磁盤的數(shù)據(jù)存取裝置包括:
數(shù)量統(tǒng)計(jì)模塊10,用于從第一個(gè)寫緩存起,統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量。
本實(shí)施例提出的裝置采用混合磁盤,一般將機(jī)械磁盤作為數(shù)據(jù)盤,將高速隨機(jī)存儲(chǔ)介質(zhì)作為緩存盤,其讀寫速度快且容量大,可以把經(jīng)常讀取的一些熱點(diǎn)數(shù)據(jù)緩存到高速的緩存盤中,作為讀緩存,是讀操作對(duì)應(yīng)的緩存數(shù)據(jù),以后就直接從緩存盤讀取,把要寫的數(shù)據(jù)暫時(shí)緩存到緩存盤上,作為寫緩存,是寫操作對(duì)應(yīng)的緩存數(shù)據(jù),后面再慢慢地把這些寫緩存回寫到數(shù)據(jù)盤上。因此,緩存盤中一般是當(dāng)前系統(tǒng)進(jìn)程運(yùn)行更新的數(shù)據(jù),這些數(shù)據(jù)需要寫入到數(shù)據(jù)盤中,但是由于數(shù)據(jù)盤的數(shù)據(jù)寫入速度較慢,為了進(jìn)程的正常運(yùn)行,先將這些更新的數(shù)據(jù),緩存到數(shù)據(jù)盤的緩存空間中,形成所述寫緩存,但是由于數(shù)據(jù)更新時(shí)并不是全部更新,可能只有部分?jǐn)?shù)據(jù)更新,因此會(huì)產(chǎn)生一些寫入地址不連續(xù)的寫緩存。
需要說(shuō)明的是,本實(shí)施例中的緩存盤可以是高速隨機(jī)存儲(chǔ)介質(zhì),此處所說(shuō)的高速隨機(jī)存儲(chǔ)介質(zhì)可以是目前已經(jīng)很成熟的ssd(solidstatedrives,固態(tài)硬盤),也可以是目前還不太成熟但是未來(lái)可能會(huì)得到廣泛使用的nvram(non-volatilerandomaccessmemory,非易失性隨機(jī)訪問(wèn)存儲(chǔ)器)類存儲(chǔ)器。
因此,緩存空間中的每一個(gè)寫緩存的數(shù)據(jù)中都包含有需要寫入到數(shù)據(jù)盤中的物理地址,而硬盤的讀寫以扇區(qū)作為基本單位,一般以柱面/磁頭/扇區(qū)表示的絕對(duì)扇區(qū)為物理地址,可以用來(lái)標(biāo)示扇區(qū),故,物理地址一般由柱面號(hào)→磁頭號(hào)→扇區(qū)號(hào)來(lái)表示,其中,柱面從外向內(nèi)自0開始順序進(jìn)行編號(hào),即由第一個(gè)柱面至最后一個(gè)柱面按照0、1、2、3……的順序編號(hào),磁頭用于確定數(shù)據(jù)在哪個(gè)盤面上,由第一個(gè)磁頭至最后一個(gè)磁頭按照1、2、3……的順序編號(hào),扇區(qū)數(shù)表示每條磁道上有幾個(gè)扇區(qū),編號(hào)從1開始,按照1、2、3……的順序編號(hào)。
磁盤的物理地址按照以下方式排列,假設(shè)每磁道17個(gè)扇區(qū)為例進(jìn)行說(shuō)明,從柱面0,磁頭1,扇區(qū)0開始,第一個(gè)扇區(qū)編號(hào)為0,該磁道上剩余的扇區(qū)編號(hào)為1到16,然后是磁頭號(hào)為2,柱面為0的17個(gè)扇區(qū),形成的扇區(qū)號(hào)從 17到33,直到該柱面的所有磁頭。然后再移到柱面1,磁頭1,扇區(qū)1繼續(xù)進(jìn)行編號(hào),即按扇區(qū)號(hào),磁頭號(hào),柱面號(hào)增長(zhǎng)的順序連續(xù)。因此,在判斷寫緩存是否連續(xù)時(shí),根據(jù)其物理地址來(lái)判斷其是否連續(xù)。
數(shù)量統(tǒng)計(jì)模塊10從第一個(gè)寫緩存起,統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量;即可以將第一個(gè)寫緩存作為當(dāng)前寫緩存,統(tǒng)計(jì)從當(dāng)前寫緩存往后的第一預(yù)設(shè)數(shù)目的扇區(qū)的地址空間內(nèi)寫緩存的數(shù)量,其中第一預(yù)設(shè)數(shù)目可以由用戶設(shè)置,本實(shí)施例中,優(yōu)選地,第一預(yù)設(shè)數(shù)目取2048個(gè)扇區(qū)-6144個(gè)扇區(qū),或者第一預(yù)設(shè)數(shù)目取4096個(gè)扇區(qū),即2m的數(shù)據(jù)。
間隔讀取模塊20,用于當(dāng)統(tǒng)計(jì)的數(shù)量大于第二預(yù)設(shè)數(shù)目時(shí),從數(shù)據(jù)盤中讀取所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存之間的間隔數(shù)據(jù)。
設(shè)置上述第一預(yù)設(shè)數(shù)目的限制主要是因?yàn)椋喝绻g隔的扇區(qū)較大,則其中的間隔數(shù)據(jù)也會(huì)比較大,而當(dāng)間隔的數(shù)據(jù)比較大時(shí),會(huì)導(dǎo)致需要從數(shù)據(jù)盤中讀取的數(shù)據(jù)也比較多,這樣即使能夠?qū)⒍鄠€(gè)寫緩存合并,但是由于數(shù)據(jù)盤的讀寫速度比較慢,反而讀取間隔數(shù)據(jù)的讀操作比較慢,反而會(huì)較低整個(gè)讀寫緩存的性能,因此需要對(duì)間隔扇區(qū)的數(shù)量作出限制,以便于實(shí)現(xiàn)在寫緩存的地址不連續(xù)的時(shí)候,把多個(gè)寫緩存合并成一個(gè)寫緩存,然后一次性寫入到機(jī)械磁盤上去,加快數(shù)據(jù)從緩存盤回寫到數(shù)據(jù)盤的速度。
在數(shù)量統(tǒng)計(jì)模塊10統(tǒng)計(jì)完成之后,判斷統(tǒng)計(jì)的數(shù)量是否大于預(yù)設(shè)數(shù)目,其中,第二預(yù)設(shè)數(shù)目可以由用戶設(shè)置,本實(shí)施例中,第二預(yù)設(shè)數(shù)目?jī)?yōu)選為3-6個(gè),或者第二預(yù)設(shè)數(shù)目?jī)?yōu)選為4個(gè)??紤]到如果當(dāng)前能夠合并的不連續(xù)的寫緩存的數(shù)量過(guò)少時(shí),反而得不償失,因此經(jīng)過(guò)調(diào)試,確定出能夠進(jìn)行合并寫緩存的最少數(shù)量,即上述第二預(yù)設(shè)數(shù)目,當(dāng)能夠合并的寫緩存?zhèn)€數(shù)大于第二預(yù)設(shè)數(shù)目時(shí),間隔讀取模塊20從數(shù)據(jù)盤中讀取間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存之間的間隔數(shù)據(jù)。
數(shù)據(jù)合并模塊30,用于將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)合并,生成一個(gè)總寫緩存;
數(shù)據(jù)寫入模塊40,用于將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤。
從內(nèi)存中行申請(qǐng)一個(gè)足夠大的空間,將從數(shù)據(jù)盤中讀取的間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存之間的間隔數(shù)據(jù)以及上述間隔的寫緩存放入申請(qǐng)的內(nèi)存空間中,數(shù)據(jù)合并模塊30將上述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存與間隔數(shù) 據(jù)拼接起來(lái),,并替換掉間隔數(shù)據(jù)中對(duì)應(yīng)的原始數(shù)據(jù)形成一個(gè)總寫緩存,數(shù)據(jù)寫入模塊40將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤,參照?qǐng)D2所示。
進(jìn)一步地,該基于混合磁盤的數(shù)據(jù)存取裝置還包括以下模塊:
地址判斷模塊,用于判斷是否有多個(gè)寫緩存的地址連續(xù)或者重疊;
數(shù)據(jù)合并模塊30,還用于當(dāng)有多個(gè)寫緩存的地址連續(xù)時(shí),將地址連續(xù)的多個(gè)寫緩存合并成一個(gè)寫緩存
數(shù)據(jù)寫入模塊40,還用于將合并的所述寫緩存寫入到所述數(shù)據(jù)盤。
數(shù)量統(tǒng)計(jì)模塊10,還用于當(dāng)沒(méi)有寫緩存的地址連續(xù)或者重疊時(shí),從第一個(gè)寫緩存起,統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量。
由于緩存盤中會(huì)有一些寫緩存的地址是連續(xù)的,對(duì)于這些地址連續(xù)的寫緩存來(lái)說(shuō),沒(méi)有間隔數(shù)據(jù)需要讀取,數(shù)據(jù)合并模塊30可以直接將其合并為一個(gè)大的寫緩存,數(shù)據(jù)寫入模塊40將其對(duì)應(yīng)的數(shù)據(jù)寫入到數(shù)據(jù)盤中,因此在其他實(shí)施例中,可以在將緩存盤中的寫緩存按照地址排序后,地址判斷模塊先判斷是否有多個(gè)寫緩存的地址連續(xù)或者重疊,此處對(duì)于地址連續(xù)或者重疊的寫緩存沒(méi)有數(shù)量的限制,當(dāng)有兩個(gè)或者兩個(gè)以上的寫緩存地址連續(xù)或者重疊時(shí),數(shù)據(jù)合并模塊30可以將地址連續(xù)或者重疊的多個(gè)寫緩存合并成一個(gè)寫緩存,數(shù)據(jù)寫入模塊40將合并形成的大的寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入到數(shù)據(jù)盤中。
本實(shí)施例提出的基于混合磁盤的數(shù)據(jù)存取裝置,從第一個(gè)寫緩存起,按照寫入的地址的順序統(tǒng)計(jì)間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量,當(dāng)統(tǒng)計(jì)的間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間不連續(xù)的寫緩存的數(shù)量大于第二預(yù)設(shè)數(shù)目時(shí),從數(shù)據(jù)盤中讀取這些不連續(xù)的寫緩存之間的間隔數(shù)據(jù),將這些不連續(xù)的寫緩存和間隔數(shù)據(jù)進(jìn)行合并,形成一個(gè)總寫緩存,并將其對(duì)應(yīng)的數(shù)據(jù)寫入到數(shù)據(jù)盤中,本發(fā)明用一次讀操作和一次寫緩存代替了多次寫緩存,無(wú)需單獨(dú)將緩存盤中地址不連續(xù)的寫緩存逐一寫入到數(shù)據(jù)盤中,提升了數(shù)據(jù)從緩存盤寫入到機(jī)械盤的速度,解決了在寫緩存的地址不連續(xù)的時(shí)候,需要多次寫操作才能把數(shù)據(jù)寫入到數(shù)據(jù)盤的問(wèn)題。
基于本發(fā)明基于混合磁盤的數(shù)據(jù)存取裝置的第一實(shí)施例提出本發(fā)明基于混合磁盤的數(shù)據(jù)存取裝置的第二實(shí)施例。在本實(shí)施例中,所述裝置與第一實(shí)施例的區(qū)別在于:
數(shù)據(jù)合并模塊30,還用于根據(jù)所述不連續(xù)的寫緩存的數(shù)量,從系統(tǒng)內(nèi)存中申請(qǐng)空間,將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)放入所述空間;以及在所述空間中將所述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)之間的寫緩存和所述間隔數(shù)據(jù)合并,生成一個(gè)總寫緩存;
數(shù)據(jù)寫入模塊40,還用于將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤。
數(shù)據(jù)合并模塊30從內(nèi)存中行申請(qǐng)一個(gè)足夠大的空間,將從數(shù)據(jù)盤中讀取的間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存之間的間隔數(shù)據(jù)放入內(nèi)存中,將間隔的寫緩存和間隔數(shù)據(jù)進(jìn)行合并,即將上述間隔第一預(yù)設(shè)數(shù)目的扇區(qū)的寫緩存與間隔數(shù)據(jù)拼接起來(lái),并替換掉間隔數(shù)據(jù)中對(duì)應(yīng)的原始數(shù)據(jù),形成一個(gè)總寫緩存,數(shù)據(jù)寫入模塊40將生成的所述總寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入數(shù)據(jù)盤。
進(jìn)一步地,該基于混合磁盤的數(shù)據(jù)存取裝置還包括以下模塊:
緩存判斷模塊,用于當(dāng)統(tǒng)計(jì)的數(shù)量小于或者等于所述第二預(yù)設(shè)數(shù)目時(shí),判斷所述緩存盤中的緩存空間是否充足;
數(shù)據(jù)寫入模塊40,還用于若當(dāng)前所述緩存盤中緩存空間不足,則從第一個(gè)寫緩存起,逐一按照寫入的地址的順序?qū)懢彺鎸?duì)應(yīng)的數(shù)據(jù)寫入到所述數(shù)據(jù)盤。
進(jìn)一步地,數(shù)據(jù)排序模塊,還用于若所述緩存盤中當(dāng)前的緩存空間充足,則將緩存盤中的寫緩存按照寫入的物理地址由小至大的順序排列。
如果高速介質(zhì)的空間還足夠時(shí),對(duì)于不能合并的寫緩存,可以暫時(shí)讓其繼續(xù)緩存在高速介質(zhì)中,當(dāng)緩存更多的寫緩存的時(shí)候再進(jìn)行合并。如果高速介質(zhì)的空間不夠了,那么數(shù)據(jù)寫入模塊40就逐一將按照地址排列的寫緩存對(duì)應(yīng)的數(shù)據(jù)寫入到所述數(shù)據(jù)盤。
本實(shí)施例提出的基于混合磁盤的數(shù)據(jù)存取裝置,當(dāng)要讀取的間隔數(shù)據(jù)被讀緩存到了高速隨機(jī)存儲(chǔ)介質(zhì)中時(shí),就從讀緩存的高速隨機(jī)存儲(chǔ)介質(zhì)中讀取間隔數(shù)據(jù),這樣就可以進(jìn)一步提升數(shù)據(jù)讀寫的速度。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說(shuō)明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。