亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種內(nèi)存塊管理方法及系統(tǒng)與流程

文檔序號:11677458閱讀:282來源:國知局
一種內(nèi)存塊管理方法及系統(tǒng)與流程

本發(fā)明涉及存儲資源管理領(lǐng)域,特別涉及一種內(nèi)存塊管理方法及系統(tǒng)。



背景技術(shù):

rdma(remotedirectmemoryaccess,遠(yuǎn)程直接數(shù)據(jù)存取)是一種網(wǎng)卡技術(shù),采用該技術(shù)可以通過提前注冊到網(wǎng)卡的內(nèi)存塊,使一臺計算機直接將信息放入另一臺計算機的內(nèi)存中。在ceph(分布式文件系統(tǒng))集群中自建使用基于infiniband(無限帶寬技術(shù))的verbs接口封裝底層rdma通信架構(gòu)時,需要考慮對通過函數(shù)注冊內(nèi)存塊占用、釋放的管理。

基于infiniband的verbs接口封裝底層通信架構(gòu),在客戶端向服務(wù)端寫數(shù)據(jù)的過程中,客戶端需要先在自己注冊內(nèi)存中獲取可用的內(nèi)存,把要傳輸?shù)臄?shù)據(jù)寫入到其中,再調(diào)用函數(shù)提交寫任務(wù),當(dāng)數(shù)據(jù)被寫入到服務(wù)端的注冊內(nèi)存中后,客戶端通過函數(shù)可以獲取到之前占用的內(nèi)存信息,在合適的時機將其釋放掉。

一般情況下,程序在使用預(yù)分配的大塊內(nèi)存時,采用順序遍歷的方法,從頭開始使用,當(dāng)使用到結(jié)尾位置的時候,再從頭開始循環(huán)。這種方法存在一些缺陷,比如如下場景:程序?qū)?nèi)存的占用和釋放是多線程且異步的,預(yù)分配的內(nèi)存塊比較大(500m),而每個節(jié)點對應(yīng)的的內(nèi)存較小(50bytes),當(dāng)申請的內(nèi)存相對于節(jié)點較大(1m),則需要對調(diào)用多個節(jié)點才能滿足申請的內(nèi)存大小,在調(diào)用期間需要對整個鏈表加鎖,無法處理其他調(diào)用申請,并消耗較多時間,這樣在程序高速運行的過程中,鏈表節(jié)點過多,導(dǎo)致每次申請、釋放內(nèi)存時消耗的時間隨著程序運行而越來越長,嚴(yán)重影響程序運行效率。



技術(shù)實現(xiàn)要素:

有鑒于此,本發(fā)明的目的在于提供一種內(nèi)存塊管理方法及系統(tǒng),加快對申請和釋放內(nèi)存的處理速度,提高系統(tǒng)的運行效率。其具體方案如下:

一種內(nèi)存塊管理方法,包括:

當(dāng)目標(biāo)節(jié)點保存至鏈表之前,利用所述目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷所述目標(biāo)節(jié)點是否與所述鏈表中已保存的歷史節(jié)點相鄰;

若是,則將相鄰的節(jié)點合并,得到合并節(jié)點,并保存至所述鏈表中。

優(yōu)選的,所述利用所述目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷所述目標(biāo)節(jié)點是否與所述鏈表中已保存的歷史節(jié)點相鄰的過程,包括:

從所述目標(biāo)節(jié)點中獲取位置信息,并對所述鏈表進行遍歷,獲取歷史節(jié)點的位置信息,利用所述目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷所述目標(biāo)節(jié)點是否與歷史節(jié)點相鄰。

優(yōu)選的,所述位置信息,包括偏移位置和長度。

優(yōu)選的,所述若是,則將相鄰的節(jié)點合并,并保存至鏈表中的過程,包括:

將所述目標(biāo)節(jié)點與其相鄰的歷史節(jié)點合并,得到新節(jié)點,并保存至所述鏈表中;

利用所述新節(jié)點的指針中的歷史節(jié)點位置信息,判斷所述新節(jié)點是否與歷史節(jié)點相鄰;

若是,則將相鄰的節(jié)點合并,并保存至所述鏈表中。

本發(fā)明還公開了一種內(nèi)存塊管理系統(tǒng),包括:

判斷模塊,用于當(dāng)目標(biāo)節(jié)點保存至鏈表之前,利用所述目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷所述目標(biāo)節(jié)點是否與所述鏈表中已保存的歷史節(jié)點相鄰;

合并模塊,若是,則將相鄰的節(jié)點合并,得到合并節(jié)點,并保存至所述鏈表中。

優(yōu)選的,所述判斷模塊,包括:

遍歷單元,用于從所述目標(biāo)節(jié)點中獲取位置信息,并對所述鏈表進行遍歷,獲取歷史節(jié)點的位置信息;

第一判斷單元,用于利用所述目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷所述目標(biāo)節(jié)點是否與歷史節(jié)點相鄰。

優(yōu)選的,所述合并模塊,包括:

第一合并單元,用于將所述目標(biāo)節(jié)點與其相鄰的歷史節(jié)點合并,得到新節(jié)點,并保存至所述鏈表中;

第二判斷單元,用于利用所述新節(jié)點的指針中的歷史節(jié)點位置信息,判斷所述新節(jié)點是否與歷史節(jié)點相鄰;

第二合并單元,用于若是,則將相鄰的節(jié)點合并,并保存至所述鏈表中。

本發(fā)明中,內(nèi)存塊管理方法,包括:當(dāng)目標(biāo)節(jié)點保存至鏈表之前,利用目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷目標(biāo)節(jié)點是否與鏈表中已保存的歷史節(jié)點相鄰;若是,則將相鄰的節(jié)點合并,得到合并節(jié)點,并保存至鏈表中??梢?,本發(fā)明中,在保存目標(biāo)節(jié)點前,利用目標(biāo)節(jié)點中的位置信息和歷史節(jié)點的位置信息,判斷目標(biāo)節(jié)點在鏈表中的保存位置是否與鏈表中的歷史節(jié)點相鄰,當(dāng)判定相鄰后,則將相鄰的節(jié)點全部合并為一個節(jié)點,得到合并后的合并節(jié)點,并保存至鏈表中,從而減少了鏈表中的節(jié)點數(shù)量,實現(xiàn)了快速結(jié)束對鏈表的鎖定,加快對申請和釋放內(nèi)存的處理速度,提高了系統(tǒng)的運行效率。

附圖說明

為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。

圖1為本發(fā)明實施例公開的一種內(nèi)存塊管理方法流程示意圖;

圖2為本發(fā)明實施例公開的一種內(nèi)存塊管理系統(tǒng)結(jié)構(gòu)示意圖。

具體實施方式

下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

可以理解的是,鏈表是用于管理內(nèi)存塊的一種方法,鏈表中保存有多個節(jié)點,每個節(jié)點對應(yīng)一個內(nèi)存塊;當(dāng)內(nèi)存塊空閑時,與之相應(yīng)的節(jié)點保存在鏈表中,可以通過檢索鏈表對相應(yīng)的內(nèi)存塊進行調(diào)用;當(dāng)內(nèi)存塊被占用時,與之相應(yīng)的節(jié)點從鏈表中刪除,確保被占用的內(nèi)存塊不會再通過鏈表被調(diào)用;當(dāng)處于占用狀態(tài)內(nèi)存塊被釋放時,將生成與之相應(yīng)的新節(jié)點,并保存至鏈表中,以便被再次調(diào)用。由于,程序?qū)?nèi)存的占用和釋放是多線程且異步的,每次申請、釋放內(nèi)存需要對整個鏈表加鎖,每次釋放的內(nèi)存都放到鏈表中,這樣在程序高速運行的過程中,鏈表節(jié)點過多,導(dǎo)致每次申請、釋放內(nèi)存時消耗的時間隨著程序運行而越來越長,嚴(yán)重影響程序運行效率。

為此,本發(fā)明實施例公開了一種內(nèi)存塊管理方法,參見圖1所示,該方法包括:

步驟s11:當(dāng)目標(biāo)節(jié)點保存至鏈表之前,利用目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷目標(biāo)節(jié)點是否與鏈表中已保存的歷史節(jié)點相鄰。

具體的,與目標(biāo)節(jié)點相應(yīng)的目標(biāo)內(nèi)存塊,由占用狀態(tài)經(jīng)過釋放變?yōu)榭臻e狀態(tài),因此生成目標(biāo)節(jié)點,并準(zhǔn)備將目標(biāo)節(jié)點保存至鏈表中,由于鏈表中曾經(jīng)保存過與目標(biāo)內(nèi)存塊相應(yīng)的目標(biāo)節(jié)點,因此在生成目標(biāo)節(jié)點時,目標(biāo)節(jié)點中保存有其在鏈表中的位置信息,所以利用目標(biāo)節(jié)點中的位置信息和歷史節(jié)點的位置信息,通過判斷兩者位置是否連續(xù),便可以判斷目標(biāo)節(jié)點在鏈表中的保存位置是否與鏈表中已保存的歷史節(jié)點相鄰,如果連續(xù),則相鄰,如果不連續(xù),則不相鄰。

步驟s12:若是,則將相鄰的節(jié)點合并,得到合并節(jié)點,并保存至鏈表中。

具體的,當(dāng)判定目標(biāo)節(jié)點與歷史節(jié)點相鄰,則將相鄰的節(jié)點合并,得到一個合并節(jié)點,并保存至鏈表中,合并節(jié)點所對應(yīng)的內(nèi)存塊,也將變?yōu)橛赡繕?biāo)內(nèi)存塊和被合并的歷史節(jié)點所對應(yīng)的歷史內(nèi)存塊合并后,得到的合并內(nèi)存塊,合并節(jié)點的位置信息也將更新。

需要說明的是,在調(diào)用內(nèi)存時,若鏈表中的節(jié)點較少,可以快速的在鏈表中查找到滿足內(nèi)存大小的節(jié)點,同時,可以直接在大節(jié)點中申請部分內(nèi)存,而不用繼續(xù)對鏈表進行遍歷;且在釋放內(nèi)存塊,需要保存節(jié)點至鏈表時,也因節(jié)點數(shù)量的減少,加快了鏈表的遍歷速度,實現(xiàn)了快速結(jié)束對鏈表的鎖定,加快對申請和釋放內(nèi)存的處理速度,提高了系統(tǒng)的運行效率。

例如,當(dāng)需要申請1m的內(nèi)存塊,則在鏈表中進行遍歷并鎖定,當(dāng)?shù)谝粋€節(jié)點大小為500kb,不滿足所申請的內(nèi)存塊大小,則通過第一個節(jié)點的后繼指針指向第二個節(jié)點,第二個節(jié)點大小為20m,則從第二個節(jié)點中提取1m內(nèi)存塊,并結(jié)束對鏈表的鎖定,此時,被提取的1m內(nèi)存塊后續(xù)的操作過程已不再影響別的申請,且較少的節(jié)點數(shù),減少了釋放內(nèi)存塊時,對鏈表的遍歷時間,實現(xiàn)了快速結(jié)束對鏈表的鎖定,加快對申請和釋放內(nèi)存的處理速度,提高了系統(tǒng)的運行效率。

可見,本發(fā)明實施例,在保存目標(biāo)節(jié)點前,利用目標(biāo)節(jié)點中的位置信息和歷史節(jié)點的位置信息,判斷目標(biāo)節(jié)點在鏈表中的保存位置是否與鏈表中的歷史節(jié)點相鄰,當(dāng)判定相鄰后,則將相鄰的節(jié)點全部合并為一個節(jié)點,得到合并后的合并節(jié)點,并保存至鏈表中,從而減少了鏈表中的節(jié)點數(shù)量,實現(xiàn)了快速結(jié)束對鏈表的鎖定,加快對申請和釋放內(nèi)存的處理速度,提高了系統(tǒng)的運行效率。

本發(fā)明實施例公開了一種具體的內(nèi)存塊管理方法,相對于上一實施例,本實施例對技術(shù)方案作了進一步的說明和優(yōu)化。具體的:

上一實施例步驟s11中,利用目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷目標(biāo)節(jié)點是否與鏈表中已保存的歷史節(jié)點相鄰的具體過程,可以包括:

從目標(biāo)節(jié)點中獲取位置信息,并對鏈表進行遍歷,從而得到獲取歷史節(jié)點的位置信息,利用目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷目標(biāo)節(jié)點是否與歷史節(jié)點相鄰,其中,位置信息,包括偏移位置和長度,利用目標(biāo)節(jié)點的偏移位置和長度相加,可以得到目標(biāo)節(jié)點的結(jié)束位置,再利用歷史節(jié)點的偏移位置與目標(biāo)節(jié)點的結(jié)束位置進行對比,判斷是否相同,如果相同,則說明目標(biāo)節(jié)點與歷史節(jié)點相連,如果不同,則說明不相連。

例如,目標(biāo)節(jié)點偏移位置為10,長度為20,將偏移位置和長度相加,得到目標(biāo)節(jié)點的結(jié)束位置為30,通過對鏈表進行遍歷,查找到有歷史節(jié)點偏移位置為30,說明目標(biāo)節(jié)點與該歷史節(jié)點相鄰,可以合并。

上一實施例步驟s12中,若是,則將相鄰的節(jié)點合并,得到合并節(jié)點,并保存至鏈表中的過程,具體可以包括:

步驟s121:將目標(biāo)節(jié)點與其相鄰的歷史節(jié)點合并,得到新節(jié)點,并保存至鏈表中。

步驟s122:利用新節(jié)點的指針中的歷史節(jié)點位置信息,判斷新節(jié)點是否與歷史節(jié)點相鄰。

具體的,當(dāng)?shù)玫叫鹿?jié)點后,新節(jié)點可能會與其他歷史節(jié)點繼續(xù)相鄰,此時,可以利用新節(jié)點中的前驅(qū)指針中保存的前一個歷史節(jié)點的位置信息和后繼指針中后一個歷史節(jié)點中的位置信息,判斷新節(jié)點是否與歷史節(jié)點相鄰,如果相鄰,則繼續(xù)合并。

步驟s123:若是,則將相鄰的節(jié)點合并,并保存至鏈表中。

具體的,當(dāng)判定新節(jié)點與歷史節(jié)點相鄰,則將新節(jié)點與歷史節(jié)點合并,得到合并節(jié)點,并保存至鏈表中。

需要說明的是,若在合并過程中,持續(xù)出現(xiàn)可合并的節(jié)點,則一直進行合并,直到?jīng)]有節(jié)點可以進行合并操作。

相應(yīng)的,本發(fā)明實施例還公開了一種內(nèi)存塊管理系統(tǒng),參見圖2所示,該系統(tǒng)包括:

判斷模塊11,用于當(dāng)目標(biāo)節(jié)點保存至鏈表之前,利用目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷目標(biāo)節(jié)點是否與鏈表中已保存的歷史節(jié)點相鄰;

合并模塊12,若是,則將相鄰的節(jié)點合并,得到合并節(jié)點,并保存至鏈表中。

本發(fā)明實施例中,上述判斷模塊11,具體可以包括遍歷單元和第一判斷單元;其中,

遍歷單元,用于從目標(biāo)節(jié)點中獲取位置信息,并對鏈表進行遍歷,獲取歷史節(jié)點的位置信息;

第一判斷單元,用于利用目標(biāo)節(jié)點的位置信息和歷史節(jié)點的位置信息,判斷目標(biāo)節(jié)點是否與歷史節(jié)點相鄰。

上述合并模塊12,具體可以包括第一合并單元、第二判斷單元和第二合并單元;其中,

第一合并單元,用于將目標(biāo)節(jié)點與其相鄰的歷史節(jié)點合并,得到新節(jié)點,并保存至鏈表中;

第二判斷單元,用于利用新節(jié)點的指針中的歷史節(jié)點位置信息,判斷新節(jié)點是否與歷史節(jié)點相鄰;

第二合并單元,用于若是,則將相鄰的節(jié)點合并,并保存至鏈表中。

其中,上述位置信息,包括偏移位置和長度。

可見,本發(fā)明實施例,在保存目標(biāo)節(jié)點前,利用目標(biāo)節(jié)點中的位置信息和歷史節(jié)點的位置信息,判斷目標(biāo)節(jié)點在鏈表中的保存位置是否與鏈表中的歷史節(jié)點相鄰,當(dāng)判定相鄰后,則將相鄰的節(jié)點全部合并為一個節(jié)點,得到合并后的合并節(jié)點,并保存至鏈表中,從而減少了鏈表中的節(jié)點數(shù)量,實現(xiàn)了快速結(jié)束對鏈表的鎖定,加快對申請和釋放內(nèi)存的處理速度,提高了系統(tǒng)的運行效率。

最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。

以上對本發(fā)明所提供的一種內(nèi)存塊管理方法及系統(tǒng)進行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1