本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種io數(shù)據(jù)的讀寫方法和裝置。
背景技術(shù):
現(xiàn)有技術(shù)中,當(dāng)從上層接收io數(shù)據(jù)時,將數(shù)據(jù)保存到硬盤后,發(fā)送響應(yīng)消息。硬盤的響應(yīng)速度影響了整個進(jìn)程的速度。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的實(shí)施例提供了一種io數(shù)據(jù)的讀寫方法和裝置,本發(fā)明能夠加快系統(tǒng)的響應(yīng)速度。
為了實(shí)現(xiàn)上述目的,本發(fā)明采取了如下技術(shù)方案。
一種io數(shù)據(jù)的讀寫方法,包括:
系統(tǒng)從上層接收io數(shù)據(jù);
將所述io數(shù)據(jù)保存到第一硬盤中,將所述io數(shù)據(jù)保存到系統(tǒng)內(nèi)存中;
給所述上層發(fā)送接收到所述io數(shù)據(jù)的響應(yīng)消息;
判斷是否滿足預(yù)定條件;
當(dāng)滿足所述預(yù)定條件時,將所述系統(tǒng)內(nèi)存中的io數(shù)據(jù)同步到第二硬盤中;其中,所述第一硬盤的響應(yīng)速度大于所述第二硬盤的響應(yīng)速度;
對從所述系統(tǒng)內(nèi)存中同步到所述第二硬盤的io數(shù)據(jù)在所述第一硬盤中進(jìn)行標(biāo)記。
一種數(shù)據(jù)的讀寫裝置,包括:
接收單元,系統(tǒng)從上層接收io數(shù)據(jù);
保存單元,將所述io數(shù)據(jù)保存到第一硬盤中,將所述io數(shù)據(jù)保存到系統(tǒng)內(nèi)存中;
發(fā)送單元,給所述上層發(fā)送接收到所述io數(shù)據(jù)的響應(yīng)消息;
判斷單元,判斷是否滿足預(yù)定條件;
同步單元,當(dāng)滿足所述預(yù)定條件時,將所述系統(tǒng)內(nèi)存中的io數(shù)據(jù)同步到第二硬盤中;其中,所述第一硬盤的響應(yīng)速度大于所述第二硬盤的響應(yīng)速度;
標(biāo)記單元,對從所述系統(tǒng)內(nèi)存中同步到所述第二硬盤的io數(shù)據(jù)在所述第一硬盤中進(jìn)行標(biāo)記。
由上述本發(fā)明的實(shí)施例提供的技術(shù)方案可以看出,本發(fā)明實(shí)施例中,將第一硬盤作為第二硬盤的緩存,解決傳統(tǒng)的第一硬盤性能慢的問題,加快系統(tǒng)的響應(yīng)速度。
本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種io數(shù)據(jù)的讀寫方法的處理流程圖;
圖2為本發(fā)明實(shí)施例中第一硬盤的劃分示意圖;
圖3為本發(fā)明實(shí)施例中元數(shù)據(jù)塊的示意圖。
圖4a為本發(fā)明一實(shí)施例中第一元數(shù)據(jù)區(qū)的示意圖;
圖4b為本發(fā)明一實(shí)施例中的第一元數(shù)據(jù)區(qū)的示意圖;
圖4c為本發(fā)明一實(shí)施例中的第一元數(shù)據(jù)區(qū)的示意圖;
圖4d為本發(fā)明一實(shí)施例中的第一元數(shù)據(jù)區(qū)的示意圖;
圖4e為本發(fā)明一實(shí)施例中的第一元數(shù)據(jù)區(qū)的示意圖;
圖5為本發(fā)明實(shí)施例提供的一種io數(shù)據(jù)的讀寫裝置的連接示意圖。
具體實(shí)施方式
下面詳細(xì)描述本發(fā)明的實(shí)施方式,所述實(shí)施方式的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施方式是示例性的,僅用于解釋本發(fā)明,而不能解釋為對本發(fā)明的限制。
如圖1所示,為本發(fā)明所述的一種io數(shù)據(jù)的讀寫方法,包括:
步驟110,系統(tǒng)從上層接收io數(shù)據(jù);
步驟120,將所述io數(shù)據(jù)保存到第一硬盤中,將所述io數(shù)據(jù)保存到系統(tǒng)內(nèi)存中;
步驟130,給所述上層發(fā)送接收到所述io數(shù)據(jù)的響應(yīng)消息;
步驟140,判斷是否滿足預(yù)定條件;其中,所述預(yù)定條件為:是否滿足預(yù)定時長;或者,所述第一硬盤中的記錄的所述io數(shù)據(jù)的大小超過預(yù)定值。
步驟150,當(dāng)滿足所述預(yù)定條件時,將所述系統(tǒng)內(nèi)存中的io數(shù)據(jù)同步到第二硬盤中;其中,所述第一硬盤的響應(yīng)速度大于所述第二硬盤的響應(yīng)速度;
步驟160,對從所述系統(tǒng)內(nèi)存中同步到所述第二硬盤的io數(shù)據(jù)在所述第一硬盤中進(jìn)行標(biāo)記。
由上述本發(fā)明的實(shí)施例提供的技術(shù)方案可以看出,本發(fā)明實(shí)施例中,將第一硬盤作為第二硬盤的緩存,解決傳統(tǒng)的第一硬盤性能慢的問題,加快系統(tǒng)的響應(yīng)速度。
可選的,所述方法還包括:
步驟170,當(dāng)所述系統(tǒng)重啟后,根據(jù)所述標(biāo)記,獲取所述第一硬盤中的未同步到所述第二硬盤中的io數(shù)據(jù);
步驟180,將所述第一硬盤中的未同步到所述第二硬盤中io數(shù)據(jù)同步到所述第二硬盤中。
其中,所述第一硬盤可以為ssd;所述第二硬盤可以為hdd。當(dāng)然,也可以為其他硬盤。
其中,步驟12中的將所述io數(shù)據(jù)保存到系統(tǒng)內(nèi)存中的步驟包括:
步驟121,將所述第一硬盤分為第一元數(shù)據(jù)區(qū)、第二元數(shù)據(jù)區(qū)和數(shù)據(jù)存儲區(qū);例如,如圖2所示。
步驟122,將所述數(shù)據(jù)存儲區(qū)分為預(yù)定大小的至少一個數(shù)據(jù)塊,所述數(shù)據(jù)塊用于存儲所述io數(shù)據(jù);
步驟123,將所述第二元數(shù)據(jù)區(qū)分為與所述數(shù)據(jù)塊相同數(shù)量的至少一個元數(shù)據(jù)塊,所述元數(shù)據(jù)塊用于存儲所述io數(shù)據(jù)在與所述元數(shù)據(jù)塊序號相同的數(shù)據(jù)塊中的第一位置信息;如圖3所示,所述第一位置信息包括:所述io數(shù)據(jù)所在的數(shù)據(jù)塊的序號、所述io數(shù)據(jù)在所述數(shù)據(jù)塊中的偏移量以及所述io數(shù)據(jù)的數(shù)據(jù)大小。也就是說,一個元數(shù)據(jù)塊對應(yīng)一個數(shù)據(jù)塊,元數(shù)據(jù)塊記錄對應(yīng)的數(shù)據(jù)塊的位置信息。
步驟124,所述第一元數(shù)據(jù)區(qū)用于存儲所述第一位置信息在所述第二元數(shù)據(jù)區(qū)的第二位置信息;如圖4a所示,所述第二位置信息包括:當(dāng)前待存儲所述io數(shù)據(jù)的數(shù)據(jù)塊的當(dāng)前物理序號cur、當(dāng)前待存儲所述io數(shù)據(jù)的數(shù)據(jù)塊的當(dāng)前遞增序號seq、每個數(shù)據(jù)塊的遞增序號以及對應(yīng)的指示每個數(shù)據(jù)塊中的io數(shù)據(jù)是否同步到第二硬盤的標(biāo)記;所述當(dāng)前物理序號cur的初始值為0,所述當(dāng)前遞增序號seq的初始值為1;也就是說,第二元數(shù)據(jù)區(qū)保存有數(shù)據(jù)存儲區(qū)的元數(shù)據(jù);第一元數(shù)據(jù)區(qū)保存有第二元數(shù)據(jù)區(qū)的元數(shù)據(jù)的元數(shù)據(jù)。
步驟124,將所述io數(shù)據(jù)依次保存到各個所述數(shù)據(jù)塊;如圖4b所示,當(dāng)?shù)谝粩?shù)據(jù)塊存滿時,將所述io數(shù)據(jù)存入第二數(shù)據(jù)塊,并對所述當(dāng)前物理序號cur進(jìn)行加一運(yùn)算;并對所述當(dāng)前遞增序號seq進(jìn)行加一運(yùn)算。如圖4c所示,當(dāng)所述第一硬盤的最后一數(shù)據(jù)塊存滿時,從所述第一個數(shù)據(jù)塊開始存儲所述io數(shù)據(jù),進(jìn)行新的循環(huán);對所述當(dāng)前物理序號cur初始化,并對所述當(dāng)前遞增序號seq進(jìn)行加一運(yùn)算。假設(shè)劃分了64個數(shù)據(jù)塊,在物理序號為0的數(shù)據(jù)塊在第一次循環(huán)時對應(yīng)的遞增序號為1,在第二次循環(huán)時對應(yīng)的遞增序號為65。
步驟124,根據(jù)所述io數(shù)據(jù)在所述數(shù)據(jù)存儲區(qū)中的數(shù)據(jù)塊的保存信息,生成所述數(shù)據(jù)塊的第一位置信息;
步驟125,將所述數(shù)據(jù)塊的所述第一位置信息保存在與所述數(shù)據(jù)塊對應(yīng)的所述元數(shù)據(jù)塊中;
步驟126,根據(jù)所述第一位置信息在所述第二元數(shù)據(jù)區(qū)的元數(shù)據(jù)塊中的保存信息,生成第二位置信息;
步驟127,將所述第二位置信息保存在所述第一元數(shù)據(jù)區(qū)中。
其中,步驟16包括:
步驟161,獲取同步的所述io數(shù)據(jù)所在的數(shù)據(jù)塊;
步驟162,在所述第二位置信息中,生成對同步的所述io數(shù)據(jù)所在的數(shù)據(jù)塊的標(biāo)記。該步驟具體為:將同步的所述io數(shù)據(jù)所在的數(shù)據(jù)塊的遞增序號清零。例如,圖4b中,物理序號為1的數(shù)據(jù)塊,對應(yīng)的遞增序號為2,已經(jīng)被同步,所以對應(yīng)的標(biāo)記為0。圖4c中,物理序號為65的數(shù)據(jù)塊,對應(yīng)的遞增序號為66,已經(jīng)被同步,所以對應(yīng)的標(biāo)記為0。
步驟18包括:
步驟181,根據(jù)所述第二位置信息中的標(biāo)記,查找出沒有同步到所述第二硬盤中的數(shù)據(jù)塊;該步驟181包括:查找遞增序號不等于當(dāng)前遞增序號且遞增序號不為零的數(shù)據(jù)塊,作為沒有同步到所述第二硬盤中的數(shù)據(jù)塊。
步驟182,從遞增序號最小的數(shù)據(jù)塊開始,依次將沒有同步到所述第二硬盤中的數(shù)據(jù)塊中的所述io數(shù)據(jù)同步到所述第二硬盤。從遞增序號最小的數(shù)據(jù)塊開始同步,保證了數(shù)據(jù)同步的正確性和完整性。
以下描述本發(fā)明的應(yīng)用場景。
本應(yīng)用場景中,以第一硬盤為ssd、第二硬盤為hdd為例。hdd為機(jī)械硬盤,速度慢、容量大,但價格便宜。ssd為固態(tài)硬盤,速度快、容量小,但是價格比hdd貴。本發(fā)明在存儲系統(tǒng)中,將ssd作為hdd的cache緩存使用,解決了傳統(tǒng)的hdd性能慢的問題。
ssd的使用規(guī)劃(以10g為例):
|元數(shù)據(jù)區(qū)(1g)|數(shù)據(jù)區(qū)(8g)|
元數(shù)據(jù)區(qū)(相當(dāng)于上述的第一元數(shù)據(jù)區(qū)和第二元數(shù)據(jù)區(qū))保存需要寫入的數(shù)據(jù)的位置信息,數(shù)據(jù)區(qū)為需要寫入的數(shù)據(jù)。
元數(shù)據(jù)區(qū):
|元數(shù)據(jù)使用信息(128m)|元數(shù)據(jù)塊1(8m)|元數(shù)據(jù)塊2(8m)|.......|元數(shù)據(jù)塊64(8m)|。
元數(shù)據(jù)使用信息(等同于上述的第二位置信息)保存有:當(dāng)前使用到的數(shù)據(jù)塊的物理序號,遞增序號(用來重啟時重新寫入數(shù)據(jù)時使用),已用每個數(shù)據(jù)塊的信息(每個數(shù)據(jù)塊的遞增序號、數(shù)據(jù)偏移、已經(jīng)寫入數(shù)據(jù)數(shù)量、需要刷入的hdd的數(shù)據(jù)數(shù)量)。
元數(shù)據(jù)塊中保存:需要寫入數(shù)據(jù)的大小、偏移量、數(shù)據(jù)在數(shù)據(jù)塊中的偏移、數(shù)據(jù)校驗crc、元數(shù)據(jù)校驗crc。
數(shù)據(jù)區(qū)用于保存需要寫入的數(shù)據(jù),可以為64個。
數(shù)據(jù)區(qū):
|數(shù)據(jù)塊1(128m)|數(shù)據(jù)塊2(128m)|......|數(shù)據(jù)塊64(128m)|
需要準(zhǔn)備的fd有:ssd的direct(直接)方式fd(文件描述符).
hdd的內(nèi)存pagecache(頁面緩存)方式的fd.
hdd的sync同步方式的fd.
啟動一個線程,該線程的功能為:將ssd中的緩存數(shù)據(jù)每隔一定時間刷新到hdd。
當(dāng)有數(shù)據(jù)需要寫入時,先寫入ssd(ssd的direct方式fd),同時寫入hdd內(nèi)存的pagecache中(hdd的內(nèi)存pathcache方式的fd),然后返回。
將數(shù)據(jù)由后臺線程同步到hdd上(hdd的sync方式的fd)。
其中,將數(shù)據(jù)寫入ssd的步驟具體包括:
將數(shù)據(jù)寫入數(shù)據(jù)區(qū),數(shù)據(jù)區(qū)的偏移由第二元數(shù)據(jù)區(qū)的元數(shù)據(jù)塊中的信息記錄。
然后,將數(shù)據(jù)的大小、偏移、數(shù)據(jù)在數(shù)據(jù)區(qū)的偏移、數(shù)據(jù)校驗crc、元數(shù)據(jù)校驗crc寫入到元數(shù)據(jù)的元數(shù)據(jù)塊中。
當(dāng)使用一個新的數(shù)據(jù)塊時,將元數(shù)據(jù)信息中的當(dāng)前使用的數(shù)據(jù)塊編號記錄,遞增序號往上增加1,保存到元數(shù)據(jù)信息中所使用的元數(shù)據(jù)塊的信息中。
其中,后臺線程將數(shù)據(jù)寫入hdd的步驟包括:
每隔一段時間。具體為:當(dāng)ssd中的數(shù)據(jù)超過一定量,或超過一定時間,將內(nèi)存pagecache中的數(shù)據(jù)寫入到hdd上。并將已經(jīng)寫入hdd的數(shù)據(jù)進(jìn)行標(biāo)記。這樣就有一個問題,如果機(jī)器重啟或斷電,就有一定的數(shù)據(jù)量沒有寫入hdd上,仍然在ssd當(dāng)中,所以,在每次系統(tǒng)啟動的時候首先加載ssd中未寫入hdd的數(shù)據(jù),并寫入hdd.
加載時,先遍歷每個元數(shù)據(jù)的數(shù)據(jù)塊信息,從遞增序號最小的數(shù)據(jù)塊開始加載。并寫入hdd,并且寫入hdd完成后,將已寫入的數(shù)據(jù)標(biāo)記。
如圖5所示,為本發(fā)明所述的一種數(shù)據(jù)的讀寫裝置,包括:
接收單元21,系統(tǒng)從上層接收io數(shù)據(jù);
保存單元22,將所述io數(shù)據(jù)保存到第一硬盤中,將所述io數(shù)據(jù)保存到系統(tǒng)內(nèi)存中;
發(fā)送單元23,給所述上層發(fā)送接收到所述io數(shù)據(jù)的響應(yīng)消息;
判斷單元24,判斷是否滿足預(yù)定條件;
同步單元25,當(dāng)滿足所述預(yù)定條件時,將所述系統(tǒng)內(nèi)存中的io數(shù)據(jù)同步到第二硬盤中;其中,所述第一硬盤的響應(yīng)速度大于所述第二硬盤的響應(yīng)速度;
標(biāo)記單元26,對從所述系統(tǒng)內(nèi)存中同步到所述第二硬盤的io數(shù)據(jù)在所述第一硬盤中進(jìn)行標(biāo)記。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。