本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種目錄管理的方法、節(jié)點(diǎn)控制器和系統(tǒng)。
背景技術(shù):
在高性能的中央處理器(centralprocessingunit,cpu,后文也簡(jiǎn)稱處理器)組建的緩存一致性非對(duì)稱存儲(chǔ)器訪問(cachecoherencenon-uniformmemoryaccess,cc-numa)系統(tǒng)中,由于cpu本身的擴(kuò)展能力有限,所以需要將cc-numa系統(tǒng)中的多個(gè)cpu劃分到不同節(jié)點(diǎn)(node)中,再由nc(nodecontroller,nc)進(jìn)行多cpu擴(kuò)展,以增加可并行運(yùn)行的cpu個(gè)數(shù),從而提升cc-numa系統(tǒng)的性能。
一個(gè)簡(jiǎn)單的cc-numa系統(tǒng)的結(jié)構(gòu)示意圖如圖1所示。圖1所示的cc-numa系統(tǒng)共包含n+1個(gè)節(jié)點(diǎn)(node),分別為node0~noden。每個(gè)節(jié)點(diǎn)包含一個(gè)nc以及由該nc控制的n個(gè)cpu,例如圖1中的節(jié)點(diǎn)0包含一個(gè)nc和n個(gè)處理器,即處理器0~處理器n。各個(gè)節(jié)點(diǎn)之間通過nc進(jìn)行擴(kuò)展,每個(gè)cpu都有自己的高速緩沖存儲(chǔ)器(cache),例如,圖1中所示的l3cache(三級(jí)緩存),此外,每個(gè)cpu還可以進(jìn)行內(nèi)存擴(kuò)展,例如,可以在cpu原有的內(nèi)存的基礎(chǔ)上,通過如圖1所示的雙列直插內(nèi)存模組(dualin-linememorymodule,dimm)來實(shí)現(xiàn)對(duì)cpu的內(nèi)存擴(kuò)展。
在圖1所示的cc-numa系統(tǒng)中,由于每個(gè)cpu都具有l(wèi)3cache,并且每個(gè)cpu都可以進(jìn)行內(nèi)存擴(kuò)展,所以,在cc-numa系統(tǒng)中任意一個(gè)節(jié)點(diǎn)中的cpu都可以對(duì)cc-numa系統(tǒng)中其他節(jié)點(diǎn)cpu的內(nèi)存進(jìn)行一致性訪問。
因此,在每個(gè)nc上設(shè)計(jì)有目錄存儲(chǔ)器,在目錄存儲(chǔ)器中存儲(chǔ)有設(shè)計(jì)如圖1所示的dir(目錄,directory)來實(shí)現(xiàn)該nc所在節(jié)點(diǎn)內(nèi)的cpu內(nèi)存中的數(shù)據(jù)被其他節(jié)點(diǎn)(即不同于該nc所在節(jié)點(diǎn)的其他節(jié)點(diǎn),也稱遠(yuǎn)端節(jié)點(diǎn))的cpu緩存的情況,以維護(hù)不同節(jié)點(diǎn)間的數(shù)據(jù)一致性。一般在nc上設(shè)計(jì)兩級(jí)目錄共同維護(hù)數(shù)據(jù)一致性,分別是ld目錄(localdirectory)和rd目錄(remotedirectory),其中,ld用于記錄遠(yuǎn)端節(jié)點(diǎn)對(duì)本地節(jié)點(diǎn)中cpu的內(nèi)存數(shù)據(jù)的緩存情況,rd用于記錄本地節(jié)點(diǎn)內(nèi)處理器緩存其他遠(yuǎn)端節(jié)點(diǎn)內(nèi)存數(shù)據(jù)的情況。比如,node1中的cpu緩存了node0中cpu內(nèi)存中的x數(shù)據(jù),則node0的nc查詢其管理的ld目錄是否存在空閑的目錄項(xiàng),若存在空閑的目錄項(xiàng),則在ld目錄的一個(gè)空閑的目錄項(xiàng)上記錄該x數(shù)據(jù)在node1中緩存,node0的nc并在該ld目錄中對(duì)node1中的cpu對(duì)該x數(shù)據(jù)的占用狀態(tài)(可能為共享或獨(dú)占)進(jìn)行標(biāo)示。同時(shí),node1的nc查詢其管理的rd目錄是否存在空閑的目錄項(xiàng),若存在空閑的目錄項(xiàng),則node1的nc在其管理的rd目錄中的一個(gè)空閑的目錄項(xiàng)上記錄上述x數(shù)據(jù)被node1中的哪個(gè)或哪些cpu緩存,并標(biāo)識(shí)該x數(shù)據(jù)的占用狀態(tài)。
但是,如圖2所示,在節(jié)點(diǎn)0中,處理器ca1向nc發(fā)送針對(duì)遠(yuǎn)端節(jié)點(diǎn)(例如,節(jié)點(diǎn)0)的目標(biāo)數(shù)據(jù)的訪問請(qǐng)求,所述訪問請(qǐng)求中攜帶所述目標(biāo)數(shù)據(jù)的地址a;節(jié)點(diǎn)0的nc0將該數(shù)據(jù)訪問請(qǐng)求轉(zhuǎn)發(fā)給節(jié)點(diǎn)2的nc1,并且,節(jié)點(diǎn)0的nc0查詢其管理的rd目錄中是否存在空閑的目錄項(xiàng),如果所述nc0確定其管理的rd目錄的目錄項(xiàng)均被占用,則nc0從其管理的rd目錄中選擇一個(gè)已被占用的目錄項(xiàng),當(dāng)所述nc0從所述節(jié)點(diǎn)2處獲取到所述目標(biāo)數(shù)據(jù)之后,所述nc0將選擇出的目錄項(xiàng)的內(nèi)容清空。節(jié)點(diǎn)2的nc1根據(jù)地址a向緩存地址a的處理器發(fā)送請(qǐng)求,同時(shí)節(jié)點(diǎn)2的nc1在其管理的ld目錄中的一個(gè)空閑的目錄項(xiàng)上記載該地址a對(duì)應(yīng)的目標(biāo)數(shù)據(jù)在節(jié)點(diǎn)0中緩存,然后節(jié)點(diǎn)2的nc1將獲取的目標(biāo)數(shù)據(jù)傳遞 給節(jié)點(diǎn)0的nc0;節(jié)點(diǎn)0的nc0將該目標(biāo)數(shù)據(jù)發(fā)送給處理器ca1,處理器ca1將該目標(biāo)數(shù)據(jù)緩存在處理器ca1的內(nèi)存中,同時(shí),節(jié)點(diǎn)0的nc0將該目標(biāo)數(shù)據(jù)在處理器ca1中緩存的信息記錄在上述被清空內(nèi)容的目錄項(xiàng)上。在上文中,由于節(jié)點(diǎn)0的rd中沒有空閑的目錄項(xiàng),為了讀取和緩存所述目標(biāo)數(shù)據(jù),nc0不得不清空了其管理的rd目錄中已被占用的一個(gè)目錄項(xiàng)。由于rd目錄中保存的是遠(yuǎn)端節(jié)點(diǎn)的數(shù)據(jù)在本地節(jié)點(diǎn)的緩存信息,也就是說,rd目錄中的目錄項(xiàng)在遠(yuǎn)端節(jié)點(diǎn)的ld目錄中存在一個(gè)對(duì)應(yīng)的目錄項(xiàng)。如果節(jié)點(diǎn)0的rd目錄中的一個(gè)目錄項(xiàng)上的內(nèi)容被清空,就會(huì)造成nc1的ld目錄中對(duì)應(yīng)的目錄項(xiàng)上的內(nèi)容表項(xiàng)錯(cuò)誤。故當(dāng)節(jié)點(diǎn)0的rd目錄中的一個(gè)目錄項(xiàng)上的內(nèi)容被清空(例如,該內(nèi)容記載的是處理器2緩存了nc1中的內(nèi)存數(shù)據(jù)b)時(shí),節(jié)點(diǎn)0的nc0需要根據(jù)被清空的目錄項(xiàng)上原來記載的內(nèi)容向處理器2發(fā)起無效偵聽,用于將該處理器2緩存的內(nèi)存數(shù)據(jù)b清除掉,待節(jié)點(diǎn)0的nc0確定處理器2中已不再緩存內(nèi)存數(shù)據(jù)b之后,則向節(jié)點(diǎn)2的nc1發(fā)送溢出報(bào)文,該溢出報(bào)文用于指示節(jié)點(diǎn)0的nc0不再緩存內(nèi)存數(shù)據(jù)b;節(jié)點(diǎn)2的nc1收到該溢出報(bào)文之后,清空其管理的ld目錄中記載的該內(nèi)存數(shù)據(jù)b在節(jié)點(diǎn)0中緩存的內(nèi)容。
由于,處理器緩存和目錄緩存的cache結(jié)構(gòu)不同,處理器需要的內(nèi)存數(shù)據(jù)和在rd目錄的所有目錄項(xiàng)均被占用時(shí),管理rd目錄的nc發(fā)送偵聽消息清除的內(nèi)存數(shù)據(jù)可能存在沖突。例如,rd目錄一般是采用組相聯(lián)的cache設(shè)計(jì)的目錄,在一個(gè)組相聯(lián)的rd設(shè)計(jì)中,存儲(chǔ)在處理器的內(nèi)存中的數(shù)據(jù)可能被多次應(yīng)用,nc選擇清空一個(gè)已被占用的目錄項(xiàng)上內(nèi)容時(shí),由于當(dāng)該目錄項(xiàng)上的內(nèi)容被清除時(shí),該內(nèi)容指示的內(nèi)存數(shù)據(jù)也需要通過無效偵聽的方式在nc中被強(qiáng)制替換掉,由于nc并不能獲知處理器訪問處理器內(nèi)存中內(nèi)存數(shù)據(jù)的頻度以及此內(nèi)存數(shù)據(jù)在處理器中是否仍然需要,所以nc從其管理的目錄中選擇清除目錄項(xiàng)上內(nèi)容的對(duì)處理器來說是隨機(jī)的, 但是若該被清除的內(nèi)存數(shù)據(jù)為處理器正在應(yīng)用或需要多次應(yīng)用的內(nèi)存數(shù)據(jù)時(shí),被強(qiáng)制清除后,處理器則需要重新reload此內(nèi)存數(shù)據(jù),在處理器重新reload此內(nèi)存數(shù)據(jù)期間,程序運(yùn)行將被迫中斷,將嚴(yán)重響應(yīng)系統(tǒng)性能。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種目錄管理的方法、節(jié)點(diǎn)控制器和系統(tǒng),用以在目錄存儲(chǔ)器容量不變時(shí),有效增加目錄存儲(chǔ)器的利用率,同時(shí)減少由于目錄存儲(chǔ)器中目錄項(xiàng)上的內(nèi)容被清除而導(dǎo)致的處理器內(nèi)存數(shù)據(jù)失效的概率。
為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
第一方面,本發(fā)明實(shí)施例提供一種目錄管理的方法,應(yīng)用于一種多處理器系統(tǒng)中,該多處理器系統(tǒng)包括本地節(jié)點(diǎn)和至少一個(gè)遠(yuǎn)端節(jié)點(diǎn),其中,本地節(jié)點(diǎn)和遠(yuǎn)端節(jié)點(diǎn)之間通過數(shù)據(jù)通路構(gòu)成處理器緩存共享網(wǎng)絡(luò),該本地節(jié)點(diǎn)包括第一節(jié)點(diǎn)控制器nc、至少一個(gè)處理器以及用于記錄本地節(jié)點(diǎn)內(nèi)處理器緩存其他遠(yuǎn)端節(jié)點(diǎn)內(nèi)存數(shù)據(jù)的目錄內(nèi)容的第一目錄,其特征在于,本發(fā)明實(shí)施例提供一種目錄管理的方法包括:該第一nc接收本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的用于指示緩存遠(yuǎn)端節(jié)點(diǎn)中第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的第一數(shù)據(jù)訪問請(qǐng)求;其中,該第一處理器為所述本地節(jié)點(diǎn)中任意一個(gè)處理器;第一nc若確定在第一目錄中不存在第一訪問地址對(duì)應(yīng)的目錄項(xiàng),且第一目錄中不存在空閑目錄項(xiàng),則第一nc從第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容;該第一nc將第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入上述被清空的目錄項(xiàng)中;該第一nc若確定接收到用于指示該第一nc清除掉所述本地節(jié)點(diǎn)中第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的第一偵聽請(qǐng)求,則向本地節(jié)點(diǎn)中的處理器發(fā)送用于清除第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的第一偵聽消息;其中,第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)緩存在本地節(jié)點(diǎn)的處理器中。
結(jié)合第一方面,在第一方面的第一種可能的實(shí)現(xiàn)方式中,第一 偵聽請(qǐng)求為第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送的,該第一遠(yuǎn)端節(jié)點(diǎn)為第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的遠(yuǎn)端節(jié)點(diǎn)且第二數(shù)據(jù)訪問地址在第一遠(yuǎn)端節(jié)點(diǎn)的目錄中存在對(duì)應(yīng)的目錄內(nèi)容,該目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在本地節(jié)點(diǎn)中緩存;相應(yīng)的,第一nc向所述本地節(jié)點(diǎn)中的處理器發(fā)送第一偵聽消息,包括:第一nc若確定該第一偵聽請(qǐng)求為第一nc向第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送第二數(shù)據(jù)訪問請(qǐng)求之后接收的,則第一nc向所述本地節(jié)點(diǎn)中除第二處理器之外的每個(gè)處理器發(fā)送第一偵聽消息,該第二處理器為所述本地節(jié)點(diǎn)中向所述第一nc發(fā)送所述第二數(shù)據(jù)訪問請(qǐng)求的處理器;第一nc若確定該第一偵聽請(qǐng)求不是第一nc向第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送第二數(shù)據(jù)訪問請(qǐng)求之后接收的,則第一nc向本地節(jié)點(diǎn)中每個(gè)處理器發(fā)送所述第一偵聽消息。
結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式,在第一方面的第二種可能的實(shí)現(xiàn)方式中,在確定接收到第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送的第一偵聽請(qǐng)求之前,所述方法還包括:第一nc接收第二處理器發(fā)送的攜帶第二數(shù)據(jù)訪問地址和訪問類型的第二數(shù)據(jù)訪問請(qǐng)求;若確定該第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求且第一目錄中不存在該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng),則第一nc在第一目錄中選擇一個(gè)空閑目錄項(xiàng)用于記錄該第二數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容,并向第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送獨(dú)占請(qǐng)求;該獨(dú)占請(qǐng)求用于指示若第一遠(yuǎn)端節(jié)點(diǎn)的第二nc在確定第二目錄中存在第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng)且該目錄項(xiàng)上的目錄內(nèi)容指示該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在該本地節(jié)點(diǎn)中緩存時(shí),向所述本地節(jié)點(diǎn)發(fā)送第一偵聽請(qǐng)求;其中,所述第二目錄為所述第一遠(yuǎn)端節(jié)點(diǎn)的第二nc管理的目錄,所述第二目錄用于記錄遠(yuǎn)端節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)在本地節(jié)點(diǎn)中的緩存情況。
結(jié)合第一方面,在第一方面的第三種可能的實(shí)現(xiàn)方式中,確定接收到第一偵聽請(qǐng)求,包括:第一nc接收所述本地節(jié)點(diǎn)中第三處理器發(fā)送的第二數(shù)據(jù)訪問請(qǐng)求,所述第二數(shù)據(jù)訪問請(qǐng)求包含第二數(shù) 據(jù)訪問地址以及訪問類型;第一nc若確定所述第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求,且所述第一目錄中存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容,所述目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)為共享態(tài),則確定接收到第一偵聽請(qǐng)求。
結(jié)合第一方面的第三種可能的實(shí)現(xiàn)方式,在第一方面的第四種可能的實(shí)現(xiàn)方式中,第一nc向所述本地節(jié)點(diǎn)中的處理器發(fā)送第一偵聽消息,包括:第一nc根據(jù)第一目錄中所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容確定所述本地節(jié)點(diǎn)中緩存所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的處理器;第一nc向所述本地節(jié)點(diǎn)中緩存所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的每個(gè)所述處理器發(fā)送所述第一偵聽消息。
結(jié)合第一方面,在第一方面的第五種可能的實(shí)現(xiàn)方式中,所述方法還包括:
第一nc接收第二處理器發(fā)送的用于回寫第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的第三數(shù)據(jù)訪問請(qǐng)求;第一nc向第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送該第三數(shù)據(jù)訪問請(qǐng)求,以使得第一遠(yuǎn)端節(jié)點(diǎn)根據(jù)該第三數(shù)據(jù)訪問請(qǐng)求將第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)回寫至所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器,并清除該第二數(shù)據(jù)訪問地址在第二目錄中對(duì)應(yīng)的目錄內(nèi)容。
第二方面,本發(fā)明實(shí)施例提供一種目錄管理的方法,應(yīng)用于一種多處理器系統(tǒng)中,所述多處理器系統(tǒng)包括本地節(jié)點(diǎn)和至少一個(gè)遠(yuǎn)端節(jié)點(diǎn),所述本地節(jié)點(diǎn)和所述遠(yuǎn)端節(jié)點(diǎn)之間通過數(shù)據(jù)通路構(gòu)成處理器緩存共享網(wǎng)絡(luò),所述遠(yuǎn)端節(jié)點(diǎn)包括第二節(jié)點(diǎn)控制器nc以及第二目錄,其中,所述第二目錄用于記錄所述遠(yuǎn)端節(jié)點(diǎn)內(nèi)的內(nèi)存數(shù)據(jù)在本地節(jié)點(diǎn)中的緩存情況,所述方法包括:第二nc接收攜帶有第二數(shù)據(jù)訪問地址和訪問類型的第二數(shù)據(jù)訪問請(qǐng)求;第二nc若確定第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求且在所述第二目錄中存在該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容,第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容指示 所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)為共享態(tài),則第二nc向緩存所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的本地節(jié)點(diǎn)發(fā)送用于指示所述第一nc清除掉所述本地節(jié)點(diǎn)中第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的第一偵聽請(qǐng)求。
結(jié)合第二方面,在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述方法還包括:第二nc接收本地節(jié)點(diǎn)發(fā)送的用于回寫第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的第三數(shù)據(jù)訪問請(qǐng)求;第二nc若確定第二目錄中存在第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容,則清除掉第二數(shù)據(jù)訪問地址在第二目錄中對(duì)應(yīng)的目錄內(nèi)容,并將該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)回寫至第一處理器中,該第一處理器為所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器。
第三方面,本發(fā)明實(shí)施例還提供一種節(jié)點(diǎn)控制器,包括:
第一接收單元,用于接收所述本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求;其中,所述第一數(shù)據(jù)訪問請(qǐng)求用于指示緩存所述遠(yuǎn)端節(jié)點(diǎn)中第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);所述第一處理器為所述本地節(jié)點(diǎn)中任意一個(gè)處理器;第一判斷單元,用于在確定所述第一目錄中不存在所述第一訪問地址對(duì)應(yīng)的目錄項(xiàng)時(shí),判斷所述第一目錄中是否存在空閑目錄項(xiàng);清空單元,用于在所述第一判斷單元確定在所述第一目錄中不存在空閑目錄項(xiàng),則從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容;寫入單元,用于將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中;第二判斷單元,用于判斷是否接收到第一偵聽請(qǐng)求;發(fā)送單元,用于在所述第二判斷單元確定接收到所述第一偵聽請(qǐng)求時(shí),向所述本地節(jié)點(diǎn)中的處理器發(fā)送第一偵聽消息,所述第一偵聽消息用于清除所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);所述第一偵聽請(qǐng)求用于指示所述第一nc清除掉所述本地節(jié)點(diǎn)中第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);其中,所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)緩存在本地節(jié)點(diǎn)的處理器中。
結(jié)合第三方面,在第三方面的第一種可能的實(shí)現(xiàn)方式中,該第 一偵聽請(qǐng)求為第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送的,所述第一遠(yuǎn)端節(jié)點(diǎn)為所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的遠(yuǎn)端節(jié)點(diǎn)且所述第二數(shù)據(jù)訪問地址在所述第一遠(yuǎn)端節(jié)點(diǎn)的目錄中存在對(duì)應(yīng)的目錄內(nèi)容,所述目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在所述本地節(jié)點(diǎn)中緩存;該發(fā)送單元,包括:第一判斷模塊,用于判斷所述第一偵聽請(qǐng)求是否為所述第一nc向所述第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送第二數(shù)據(jù)訪問請(qǐng)求之后接收的;第一發(fā)送模塊,用于在所述第一判斷模塊確定所述第一偵聽請(qǐng)求為所述第一nc向所述第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送第二數(shù)據(jù)訪問請(qǐng)求之后接收的,則向所述本地節(jié)點(diǎn)中除第二處理器之外的每個(gè)處理器發(fā)送所述第一偵聽消息,所述第二處理器為所述本地節(jié)點(diǎn)中向所述第一nc發(fā)送所述第二數(shù)據(jù)訪問請(qǐng)求的處理器;第二發(fā)送模塊,用于在所述第一判斷模塊確定所述第一偵聽請(qǐng)求不是所述第一nc向所述第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送第二數(shù)據(jù)訪問請(qǐng)求之后接收的,則所述第一nc向所述本地節(jié)點(diǎn)中每個(gè)處理器發(fā)送所述第一偵聽消息。
結(jié)合第三方面的第一種可能的實(shí)現(xiàn)方式,在第三方面的第二種可能的實(shí)現(xiàn)方式中,所述節(jié)點(diǎn)控制器還包括:第二接收單元,用于所述第二處理器發(fā)送的第二數(shù)據(jù)訪問請(qǐng)求,所述第二數(shù)據(jù)訪問請(qǐng)求攜帶第二數(shù)據(jù)訪問地址和訪問類型;第三判斷單元,用于判斷所述第二數(shù)據(jù)訪問請(qǐng)求是否為獨(dú)占請(qǐng)求且所述第一目錄中不存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng);執(zhí)行單元,用于在所述第三判斷單元確定所述第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求且所述第一目錄中不存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng)時(shí),則在所述第一目錄中選擇一個(gè)空閑目錄項(xiàng)用于記錄所述第二數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容,并向所述第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送所述獨(dú)占請(qǐng)求;所述獨(dú)占請(qǐng)求用于指示若所述第一遠(yuǎn)端節(jié)點(diǎn)的nc在確定第二目錄中存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng)且所述目錄項(xiàng)上的目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在所述本地節(jié)點(diǎn)中緩存時(shí),向所 述本地節(jié)點(diǎn)發(fā)送第一偵聽請(qǐng)求;其中,所述第二目錄為所述第一遠(yuǎn)端節(jié)點(diǎn)的nc管理的目錄,所述第二目錄用于記錄遠(yuǎn)端節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)在本地節(jié)點(diǎn)中的緩存情況。
結(jié)合第三方面,在第三方面的第三種可能的實(shí)現(xiàn)方式中,第二判斷單元,包括:接收模塊,用于接收所述本地節(jié)點(diǎn)中第三處理器發(fā)送的第二數(shù)據(jù)訪問請(qǐng)求,所述第二數(shù)據(jù)訪問請(qǐng)求包含第二數(shù)據(jù)訪問地址以及訪問類型;第二判斷模塊,用于判斷所述第二數(shù)據(jù)訪問請(qǐng)求是否為獨(dú)占請(qǐng)求且所述第一目錄中是否存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容;確定模塊,用于在所述第二判斷模塊確定所述第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求,且所述第一目錄中存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容,所述目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)為共享態(tài)時(shí),則確定接收到第一偵聽請(qǐng)求。
結(jié)合第三方面的第三種可能的實(shí)現(xiàn)方式,在第三方面的第四種可能的實(shí)現(xiàn)方式中,所述發(fā)送單元,包括:確定模塊,用于根據(jù)所述第一目錄中所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容確定所述本地節(jié)點(diǎn)中緩存所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的處理器;第三發(fā)送模塊,用于向所述本地節(jié)點(diǎn)中緩存所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的每個(gè)所述處理器發(fā)送所述第一偵聽消息。
結(jié)合第三方面,在第三方面的第五種可能的實(shí)現(xiàn)方式中,所述節(jié)點(diǎn)控制器還包括:第三接收單元,用于接收第二處理器發(fā)送的用于回寫第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的第三數(shù)據(jù)訪問請(qǐng)求;發(fā)送單元還用于,向第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送所述第三數(shù)據(jù)訪問請(qǐng)求,以使得所述第一遠(yuǎn)端節(jié)點(diǎn)根據(jù)所述第三數(shù)據(jù)訪問請(qǐng)求將所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)回寫至所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器,并清除所述第二數(shù)據(jù)訪問地址在第二目錄中對(duì)應(yīng)的目錄內(nèi)容。
第四方面,本發(fā)明實(shí)施例還提供一種節(jié)點(diǎn)控制器,所述節(jié)點(diǎn)控 制器包括:第一接收單元,用于接收第二數(shù)據(jù)訪問請(qǐng)求,所述第一數(shù)據(jù)訪問請(qǐng)求攜帶有第一訪問地址和訪問類型;判斷單元,用于判斷所述第二數(shù)據(jù)訪問請(qǐng)求是否為獨(dú)占請(qǐng)求且在所述第一目錄中是否存在所述第一訪問地址對(duì)應(yīng)的目錄內(nèi)容以及所述第一訪問地址對(duì)應(yīng)的目錄內(nèi)容指示所述第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)是否為共享態(tài);發(fā)送單元,用于若所述判斷單元確定所述第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求且在所述第一目錄中存在所述第一訪問地址對(duì)應(yīng)的目錄內(nèi)容,所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)為共享態(tài),則向緩存所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的本地節(jié)點(diǎn)發(fā)送第一偵聽請(qǐng)求,所述第一偵聽請(qǐng)求用于指示第一nc清除掉本地節(jié)點(diǎn)中第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)。
結(jié)合第四方面,在第四方面的第一種可能的實(shí)現(xiàn)方式中,該節(jié)點(diǎn)控制器還包括:第二接收單元,用于接收所述本地節(jié)點(diǎn)發(fā)送的用于回寫第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的第三數(shù)據(jù)訪問請(qǐng)求;該判斷單元還用于,判斷第二目錄中是否存在第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容;清除單元,用于在判斷單元確定第二目錄中存在該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容時(shí),清除掉第二數(shù)據(jù)訪問地址在第二目錄中對(duì)應(yīng)的目錄內(nèi)容,并將該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)回寫至第一處理器中,該第一處理器為所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器。
第五方面,本發(fā)明實(shí)施例還提供一種多處理器系統(tǒng),該多處理器系統(tǒng)包括本地節(jié)點(diǎn)和至少一個(gè)遠(yuǎn)端節(jié)點(diǎn),所述本地節(jié)點(diǎn)中的節(jié)點(diǎn)控制器采用本發(fā)明實(shí)施例提供的第三方面到第三方面的第五種可能的實(shí)現(xiàn)方式中任意一種實(shí)現(xiàn)方式中提供的節(jié)點(diǎn)控制器,該遠(yuǎn)端節(jié)點(diǎn)中的節(jié)點(diǎn)控制器采用第四方面或第四方面的第一種可能的實(shí)現(xiàn)方式中提供節(jié)點(diǎn)控制器。
本發(fā)明實(shí)施例提供的一種目錄管理方法,通過接收本地節(jié)點(diǎn)內(nèi) 第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求,在確定第一目錄中不存在第一訪問地址對(duì)應(yīng)的目錄項(xiàng),且所述第一目錄中不存在空閑目錄項(xiàng),第一nc從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容,并將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中,本發(fā)明實(shí)施例提供的方法在第一目錄容量不變的情況下,不僅有效增加第一目錄的利用率;同時(shí),由于被選定的目錄項(xiàng)的目錄內(nèi)容被清空之后,該本地節(jié)點(diǎn)的第一nc并不對(duì)所述被選定的目錄項(xiàng)上的目錄內(nèi)容指示的訪問地址指向的內(nèi)存數(shù)據(jù)進(jìn)行直接刪除,而是在第一nc接收到第一偵聽請(qǐng)求之后才對(duì)被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)進(jìn)行刪除,故當(dāng)被選定的目錄項(xiàng)的目錄內(nèi)容被刪除時(shí),第一nc并不立刻刪掉該被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù),因此,緩存被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)的處理器當(dāng)該內(nèi)存數(shù)據(jù)的目錄內(nèi)容在第一nc中被清空時(shí),仍然可以繼續(xù)使用該內(nèi)存數(shù)據(jù),直至第一nc接收到第一偵聽請(qǐng)求,從而避免了當(dāng)該處理器使用內(nèi)存數(shù)據(jù)時(shí),由于內(nèi)存數(shù)據(jù)被強(qiáng)制刪除而引起的程序被迫中斷,減少第一目錄溢出時(shí)對(duì)處理器性能的影響。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有技術(shù)提供的一種目錄管理的方法的系統(tǒng)結(jié)構(gòu)示意圖;
圖2為現(xiàn)有技術(shù)提供的一種目錄管理的方法的流程示意圖;
圖3為本發(fā)明實(shí)施例提供的一種目錄管理的方法的流程示意圖一;
圖4為本發(fā)明實(shí)施例提供的一種目錄管理的方法的流程示意圖二;
圖5為本發(fā)明實(shí)施例提供的一種目錄管理的方法的流程示意圖三;
圖6為本發(fā)明實(shí)施例提供的一種目錄管理的方法的流程示意圖四;
圖7為本發(fā)明實(shí)施例提供的一種目錄管理的方法的流程示意圖五;
圖8為本發(fā)明實(shí)施例提供的一種節(jié)點(diǎn)控制器的結(jié)構(gòu)示意圖一;
圖9為本發(fā)明實(shí)施例提供的一種節(jié)點(diǎn)控制器的結(jié)構(gòu)示意圖二;
圖10為本發(fā)明實(shí)施例提供的另一種節(jié)點(diǎn)控制器的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。
本發(fā)明實(shí)施例的原理:
如圖2所示,在現(xiàn)有技術(shù)中,inclusive策略是指本地節(jié)點(diǎn)內(nèi)cpu訪問遠(yuǎn)端節(jié)點(diǎn)內(nèi)cpu的內(nèi)存數(shù)據(jù)時(shí),對(duì)應(yīng)內(nèi)存數(shù)據(jù)的目錄內(nèi)容會(huì)記錄在本地節(jié)點(diǎn)的rd目錄上,并且,只要本地節(jié)點(diǎn)內(nèi)任何cpu上緩存了遠(yuǎn)端節(jié)點(diǎn)內(nèi)存數(shù)據(jù)副本,則本地節(jié)點(diǎn)的rd目錄上一定有對(duì)應(yīng)的目錄項(xiàng),該目錄項(xiàng)上的目錄內(nèi)容用于指示本地節(jié)點(diǎn)中的哪個(gè)或哪些處理器緩存了遠(yuǎn)端節(jié)點(diǎn)上的內(nèi)存數(shù)據(jù)。而遠(yuǎn)端節(jié)點(diǎn)的ld目錄上一定會(huì)有一個(gè)對(duì)應(yīng)的目錄項(xiàng),該目錄項(xiàng)上的目錄內(nèi)容指示該內(nèi)存數(shù)據(jù)在本地節(jié)點(diǎn)中緩存。例如,本地節(jié)點(diǎn)中處理器ca1訪問地址a對(duì)應(yīng)的內(nèi)存數(shù)據(jù),則在本地節(jié)點(diǎn)的rd目錄中的一個(gè)目錄項(xiàng)中記載的目錄內(nèi)容為處理器ca1訪問了地址a對(duì)應(yīng)的內(nèi)存數(shù)據(jù),則該地址a的內(nèi)存數(shù)據(jù)所在的節(jié)點(diǎn),也即遠(yuǎn)端節(jié)點(diǎn),該遠(yuǎn)端節(jié)點(diǎn)的節(jié) 點(diǎn)控制器在其管理的ld目錄中的一個(gè)目錄項(xiàng)上記載目錄內(nèi)容為該地址a對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在本地節(jié)點(diǎn)(例如,節(jié)點(diǎn)0)中緩存。
當(dāng)然,地址a對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在rd目錄中的狀態(tài)為共享態(tài)時(shí),該地址a對(duì)應(yīng)的內(nèi)存數(shù)據(jù)可以被本地節(jié)點(diǎn)中至少一個(gè)處理器緩存,當(dāng)然,此時(shí)該rd目錄中明確記載該內(nèi)存數(shù)據(jù)被哪些或者哪幾個(gè)處理器緩存。
現(xiàn)有技術(shù)中rd目錄一般采用組相聯(lián)的目錄cache,例如,8路組相聯(lián)的目錄cache,如圖2所示,8路組相聯(lián)的目錄cache中的8路分別為way0、way1、way2、way3、way4、way5、way6、way7;當(dāng)節(jié)點(diǎn)node0內(nèi)的節(jié)點(diǎn)控制器接收到node0內(nèi)的處理器ca0發(fā)送的數(shù)據(jù)訪問請(qǐng)求,該數(shù)據(jù)訪問請(qǐng)求攜帶地址a,且該訪問請(qǐng)求的訪問類型為共享請(qǐng)求,由于節(jié)點(diǎn)0內(nèi)的rd中不存在所述數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄項(xiàng),且rd目錄cache的8個(gè)way全部有效,則根據(jù)預(yù)設(shè)目錄替換策略,例如,可以采用偽lru(最近最少使用,leastrecentused)算法,用7位lru位標(biāo)識(shí),即r0、r1、r2、r3、r4、r5、r6,確定需要替換哪一路的目錄項(xiàng),具體的替換算法為:
若r0=0,r1=0,r3=0,則替換way0;
若r0=0,r1=0,r3=1,則替換way1;
若r0=0,r1=1,r4=0,則替換way2;
若r0=0,r1=1,r3=1,則替換way3;
若r0=1,r2=0,r5=0,則替換way4;
若r0=1,r2=0,r5=1,則替換way5;
若r0=1,r2=1,r6=0,則替換way6;
若r0=1,r2=1,r6=1,則替換way7。
假如替換時(shí),本地節(jié)點(diǎn)的節(jié)點(diǎn)控制器根據(jù)預(yù)先設(shè)置的替換策略選擇way6被替換掉,其中,way6指向存儲(chǔ)有地址b的目錄內(nèi)容的目錄項(xiàng)。節(jié)點(diǎn)控制器需要從rd目錄中獲取一個(gè)目錄項(xiàng),將該目 錄項(xiàng)上的目錄內(nèi)容刪掉,用于存儲(chǔ)地址a對(duì)應(yīng)的目錄內(nèi)容,示例性的,當(dāng)目錄替換策略選擇將用于存儲(chǔ)地址b的目錄內(nèi)容的目錄項(xiàng)替換掉,則此時(shí),node0內(nèi)的節(jié)點(diǎn)控制器需要根據(jù)地址b記錄的目錄內(nèi)容向ca1發(fā)起的無效偵聽,將ca1中緩存的地址b的內(nèi)存數(shù)據(jù)清除掉。
但是node0并不能獲知ca1訪問ca1內(nèi)存中內(nèi)存數(shù)據(jù)的頻度以及此內(nèi)存數(shù)據(jù)在ca1中是否仍然需要,所以node0采用預(yù)設(shè)目錄替換策略獲取的需要被替換的目錄項(xiàng)對(duì)node0內(nèi)任意一個(gè)處理器來說是隨機(jī)的,故當(dāng)緩存在ca1內(nèi)的內(nèi)存數(shù)據(jù)被強(qiáng)制替換掉后,當(dāng)ca1需要該內(nèi)存數(shù)據(jù)時(shí),則需要重新reload此內(nèi)存數(shù)據(jù),在ca1重新reload此內(nèi)存數(shù)據(jù)期間,程序運(yùn)行將被迫中斷,將嚴(yán)重響應(yīng)系統(tǒng)性能。故本發(fā)明實(shí)施例提供的目錄管理方法應(yīng)用于一種多處理器系統(tǒng)中,所述多處理器系統(tǒng)包括本地節(jié)點(diǎn)和至少一個(gè)遠(yuǎn)端節(jié)點(diǎn),所述本地節(jié)點(diǎn)和所述遠(yuǎn)端節(jié)點(diǎn)之間通過數(shù)據(jù)通路構(gòu)成處理器緩存共享網(wǎng)絡(luò),所述本地節(jié)點(diǎn)包括第一節(jié)點(diǎn)控制器nc、至少一個(gè)處理器以及第一目錄,其中,所述第一目錄用于記錄所述本地節(jié)點(diǎn)內(nèi)處理器緩存其他遠(yuǎn)端節(jié)點(diǎn)內(nèi)存數(shù)據(jù)的目錄內(nèi)容,該目錄管理方法中通過第一nc接收所述本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求;其中,所述第一數(shù)據(jù)訪問請(qǐng)求用于指示緩存所述遠(yuǎn)端節(jié)點(diǎn)中第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);所述第一處理器為所述本地節(jié)點(diǎn)中任意一個(gè)處理器;第一nc若確定在所述第一目錄中不存在所述第一訪問地址對(duì)應(yīng)的目錄項(xiàng),且所述第一目錄中不存在空閑目錄項(xiàng),則所述第一nc從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容;第一nc將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中;第一nc若確定接收到第一偵聽請(qǐng)求,則向所述本地節(jié)點(diǎn)中的處理器發(fā)送第一偵聽消息,所述第一偵聽消息用于清除所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);所述第一偵聽請(qǐng)求用于指示所述第一nc清除掉所述本地節(jié)點(diǎn)中第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù) 據(jù);其中,所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)緩存在本地節(jié)點(diǎn)的處理器中。本發(fā)明實(shí)施例提供的方法在第一目錄容量不變的情況下,不僅有效增加第一目錄的利用率;同時(shí),由于被清空的目錄項(xiàng)的目錄內(nèi)容被清空之后,并不對(duì)所述第一地址指向的內(nèi)存數(shù)據(jù)進(jìn)行直接刪除,而是在第一nc接收到第一偵聽請(qǐng)求之后才對(duì)被清空的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)進(jìn)行刪除,故緩存被清空的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)的處理器當(dāng)該內(nèi)存數(shù)據(jù)的目錄內(nèi)容在第一nc中被清空時(shí),仍然可以繼續(xù)使用該內(nèi)存數(shù)據(jù),直至第一nc接收到第一偵聽請(qǐng)求,從而避免了程序被迫中斷,減少第一目錄溢出時(shí)對(duì)處理器性能的影響。
參見圖1,為本發(fā)明實(shí)施例提供的目錄管理的方法應(yīng)用的網(wǎng)絡(luò)架構(gòu)圖,在本發(fā)明實(shí)施例中,所述多處理器系統(tǒng)包括n+1個(gè)節(jié)點(diǎn),n≥1,節(jié)點(diǎn)和節(jié)點(diǎn)之間通過數(shù)據(jù)通路構(gòu)成處理器緩存共享網(wǎng)絡(luò),每個(gè)節(jié)點(diǎn)的結(jié)構(gòu)相同,節(jié)點(diǎn)包括n+1(n≥0)個(gè)cpu,每個(gè)cpu設(shè)置有對(duì)應(yīng)的內(nèi)存和緩存,每個(gè)cpu與節(jié)點(diǎn)內(nèi)的節(jié)點(diǎn)控制器連接,節(jié)點(diǎn)控制器設(shè)置有一個(gè)目錄存儲(chǔ)器,該目錄存儲(chǔ)器包含多個(gè)目錄項(xiàng),該多個(gè)目錄項(xiàng)存儲(chǔ)在所述目錄存儲(chǔ)器的至少一個(gè)區(qū)域中,每個(gè)目錄項(xiàng)以內(nèi)存地址為索引,用于記錄內(nèi)存地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的存儲(chǔ)狀態(tài)和存儲(chǔ)位置。其中,每個(gè)節(jié)點(diǎn)內(nèi)的內(nèi)存可以是圖1中的每個(gè)cpu設(shè)置為一個(gè)單獨(dú)的內(nèi)存,也可以是一個(gè)共享內(nèi)存,節(jié)點(diǎn)內(nèi)的每個(gè)cpu負(fù)責(zé)管理指定的地址范圍,本發(fā)明實(shí)施例不作限制。
目錄項(xiàng)中的存儲(chǔ)狀態(tài)分為獨(dú)占態(tài)、共享態(tài)和無效態(tài),獨(dú)占態(tài)表示只有一個(gè)節(jié)點(diǎn)的緩存擁有緩存數(shù)據(jù),且緩存數(shù)據(jù)與內(nèi)存中的內(nèi)存數(shù)據(jù)不一致;共享態(tài)表示一個(gè)或多個(gè)節(jié)點(diǎn)的緩存擁有緩存數(shù)據(jù),且緩存數(shù)據(jù)域內(nèi)存中的內(nèi)存數(shù)據(jù)一致;獨(dú)占態(tài)表示沒有任何一個(gè)節(jié)點(diǎn)的緩存擁有緩存數(shù)據(jù)。
為了便于清楚描述本發(fā)明實(shí)施例的技術(shù)方案,在本發(fā)明的實(shí)施例中,采用了“第一”、“第二”、“第三”等字樣對(duì)功能和作用 基本相同的相同項(xiàng)或相似項(xiàng)進(jìn)行區(qū)分,本領(lǐng)域技術(shù)人員可以理解“第一”、“第二”、“第三”等字樣并不對(duì)數(shù)量和執(zhí)行次序進(jìn)行限定。
如圖3所示,本發(fā)明實(shí)施例提供一種目錄管理的方法,應(yīng)用于一種多處理器系統(tǒng)中,所述多處理器系統(tǒng)包括本地節(jié)點(diǎn)和至少一個(gè)遠(yuǎn)端節(jié)點(diǎn),所述本地節(jié)點(diǎn)和所述遠(yuǎn)端節(jié)點(diǎn)之間通過數(shù)據(jù)通路構(gòu)成處理器緩存共享網(wǎng)絡(luò),所述本地節(jié)點(diǎn)包括第一節(jié)點(diǎn)控制器nc、至少一個(gè)處理器以及第一目錄,其中,所述第一目錄用于記錄所述本地節(jié)點(diǎn)內(nèi)處理器緩存其他遠(yuǎn)端節(jié)點(diǎn)內(nèi)存數(shù)據(jù)的目錄內(nèi)容,如圖1所示,所述方法,包括:
s301、所述第一nc接收所述本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求;其中,所述第一數(shù)據(jù)訪問請(qǐng)求用于指示緩存所述遠(yuǎn)端節(jié)點(diǎn)中第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);所述第一處理器為所述本地節(jié)點(diǎn)中任意一個(gè)處理器;
s302、所述第一nc判斷所述第一目錄中是否存在所述第一訪問地址對(duì)應(yīng)的目錄項(xiàng);
s303、所述第一nc若確定所述第一目錄中不存在所述第一訪問地址對(duì)應(yīng)的目錄項(xiàng),則判斷所述第一目錄中是否存在空閑目錄項(xiàng);
s304、所述第一nc在確定所述第一目錄中不存在空閑目錄項(xiàng)時(shí),則所述第一nc從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容;
s305、所述第一nc將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中;
s306、所述第一nc判斷是否接收到第一偵聽請(qǐng)求,所述第一偵聽請(qǐng)求用于指示所述第一nc清除掉所述本地節(jié)點(diǎn)中第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s307、所述第一nc若確定接收到第一偵聽請(qǐng)求,則向所述本地節(jié)點(diǎn)中的處理器發(fā)送第一偵聽消息,所述第一偵聽消息用于清除 所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù),所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)緩存在本地節(jié)點(diǎn)的處理器中。
本發(fā)明實(shí)施例提供的一種目錄管理方法,通過接收本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求,在確定第一目錄中不存在第一訪問地址對(duì)應(yīng)的目錄項(xiàng),且所述第一目錄中不存在空閑目錄項(xiàng),第一nc從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容,并將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中,本發(fā)明實(shí)施例提供的方法在第一目錄容量不變的情況下,不僅有效增加第一目錄的利用率;同時(shí),由于被選定的目錄項(xiàng)的目錄內(nèi)容被清空之后,該本地節(jié)點(diǎn)的第一nc并不對(duì)所述被選定的目錄項(xiàng)上的目錄內(nèi)容指示的訪問地址指向的內(nèi)存數(shù)據(jù)進(jìn)行直接刪除,而是在第一nc接收到第一偵聽請(qǐng)求之后才對(duì)被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)進(jìn)行刪除,故當(dāng)被選定的目錄項(xiàng)的目錄內(nèi)容被刪除時(shí),第一nc并不立刻刪掉該被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù),因此,緩存被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)的處理器當(dāng)該內(nèi)存數(shù)據(jù)的目錄內(nèi)容在第一nc中被清空時(shí),仍然可以繼續(xù)使用該內(nèi)存數(shù)據(jù),直至第一nc接收到第一偵聽請(qǐng)求,從而避免了當(dāng)該處理器使用內(nèi)存數(shù)據(jù)時(shí),由于內(nèi)存數(shù)據(jù)被強(qiáng)制刪除而引起的程序被迫中斷,減少第一目錄溢出時(shí)對(duì)處理器性能的影響。
具體的,第一節(jié)點(diǎn)控制器所在的節(jié)點(diǎn)為本地節(jié)點(diǎn),本發(fā)明實(shí)施例對(duì)本地節(jié)點(diǎn)中處理器的數(shù)量不進(jìn)行限制,本發(fā)明實(shí)施例本地節(jié)點(diǎn)中處理器的數(shù)量為至少一個(gè)。
其中,第一數(shù)據(jù)訪問請(qǐng)求為本地節(jié)點(diǎn)中的任意一個(gè)處理器發(fā)出的。由于對(duì)于每個(gè)處理器發(fā)出數(shù)據(jù)訪問請(qǐng)求的處理方式和原理均相同,故本發(fā)明實(shí)施例僅以第一處理器為例進(jìn)行說明,并不具有任何指示性含義。
其中,所述第一目錄可以設(shè)置在所述第一節(jié)點(diǎn)控制器內(nèi),也可以設(shè)置在所述第一節(jié)點(diǎn)控制器之外,優(yōu)選的,可以將所述第一目錄 設(shè)置在所述第一節(jié)點(diǎn)控制器內(nèi)部,這樣可以提升系統(tǒng)運(yùn)行速率。
本發(fā)明實(shí)施例中第一nc選擇被清空的目錄項(xiàng)時(shí)可以采用預(yù)設(shè)目錄替換策略選擇需要被清空的目錄項(xiàng),本發(fā)明實(shí)施例對(duì)此不進(jìn)行限定,可以根據(jù)需要進(jìn)行選擇設(shè)置,當(dāng)然,也可用采用其他方式從第一目錄中選擇一個(gè)需要被清空的目錄項(xiàng),只要能保證當(dāng)?shù)谝荒夸浿胁淮嬖诳臻e目錄項(xiàng)時(shí)可以采用該方法清空一個(gè)第一目錄中目錄項(xiàng)上的內(nèi)容用于記錄第一數(shù)據(jù)訪問請(qǐng)求的目錄內(nèi)容即可,其中,本發(fā)明實(shí)施例對(duì)所述預(yù)設(shè)目錄替換策略不進(jìn)行限定,可以根據(jù)需要從現(xiàn)有技術(shù)中選擇相應(yīng)的預(yù)設(shè)目錄替換策略。例如,可以采用上述描述的目錄替換策略。
其中,本發(fā)明實(shí)施例中的空閑目錄項(xiàng)是指該目錄項(xiàng)沒有記載目錄內(nèi)容,或者說該目錄項(xiàng)未被占用。
其中,本發(fā)明實(shí)施例對(duì)所述步驟s103中判斷所述第一目錄中是否存在空閑目錄項(xiàng)的方式不進(jìn)行限定,示例性的,可以通過以下方式實(shí)現(xiàn):
s1031、獲取所述第一目錄的總目錄項(xiàng)數(shù)目以及已經(jīng)使用的目錄項(xiàng)數(shù)目;
s1032、若已經(jīng)使用的目錄項(xiàng)數(shù)目與第一目錄的總目錄項(xiàng)數(shù)目相等,則確定所述第一目錄中不存在空閑目錄項(xiàng)。
其中,在所述第一目錄項(xiàng)上創(chuàng)建所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容的方式與現(xiàn)有技術(shù)中的方式相同,本發(fā)明實(shí)施例在此不再贅述。
其中,第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容包括所述第一數(shù)據(jù)訪問請(qǐng)求的訪問類型以及所述目標(biāo)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)被所述第一處理器緩存。
其中,第一數(shù)據(jù)訪問請(qǐng)求中攜帶第一訪問地址和訪問類型,本發(fā)明實(shí)施例對(duì)所述訪問類型不進(jìn)行限定,例如,可以是共享請(qǐng)求,也可以是獨(dú)占請(qǐng)求。
其中,本發(fā)明實(shí)施例對(duì)所述步驟s104中第一nc從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容的方式不進(jìn)行限定,具體該第一nc可以采用現(xiàn)有技術(shù)中的替換策略從所述第一目錄中選取一個(gè)被清空的目錄項(xiàng)。
需要說明的是,若確定所述第一目錄中存在空閑目錄項(xiàng),在所述空閑目錄項(xiàng)上創(chuàng)建所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容的方式可以參考現(xiàn)有技術(shù),本發(fā)明實(shí)施例在此不再贅述。
由于在所述多處理器系統(tǒng)中存在多種向第一nc發(fā)送第一偵聽請(qǐng)求的請(qǐng)求者,第一nc接收的第一偵聽請(qǐng)求的請(qǐng)求者不同,對(duì)應(yīng)不同的第一nc向本地節(jié)點(diǎn)中處理器發(fā)送第一偵聽消息的對(duì)象,本發(fā)明實(shí)施例對(duì)此不進(jìn)行限定。示例性的,本發(fā)明實(shí)施例中的向第一nc發(fā)送第一偵聽請(qǐng)求的請(qǐng)求者可以是本地節(jié)點(diǎn)中的任意一個(gè)處理器,也可以是任意一個(gè)遠(yuǎn)端節(jié)點(diǎn),下面分別進(jìn)行說明:
一種可能的實(shí)現(xiàn)方式,當(dāng)向第一nc發(fā)送所述第一偵聽請(qǐng)求的請(qǐng)求者為第一遠(yuǎn)端節(jié)點(diǎn)時(shí),由于對(duì)于每個(gè)遠(yuǎn)端節(jié)點(diǎn)向第一nc發(fā)送第一偵聽請(qǐng)求的方式和原理均與該第一遠(yuǎn)端節(jié)點(diǎn)相同,故本發(fā)明實(shí)施例僅以第一遠(yuǎn)端節(jié)點(diǎn)為例進(jìn)行說明,并不具有任何指示性含義:
如圖4所示,圖4為本發(fā)明實(shí)施例提供的一種目錄管理的方法:
s401、所述第一nc接收本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求;其中,所述第一數(shù)據(jù)訪問請(qǐng)求用于指示緩存所述遠(yuǎn)端節(jié)點(diǎn)中第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);所述第一處理器為所述本地節(jié)點(diǎn)中任意一個(gè)處理器;
其中,所述第一數(shù)據(jù)訪問請(qǐng)求攜帶第一訪問地址和訪問類型。示例性的,該第一訪問地址為地址a,訪問類型為共享請(qǐng)求。當(dāng)一個(gè)數(shù)據(jù)訪問請(qǐng)求的訪問類型為共享請(qǐng)求時(shí),當(dāng)在該處理器中緩存地址a對(duì)應(yīng)的內(nèi)存數(shù)據(jù)時(shí),該處理器所在節(jié)點(diǎn)的nc在rd目錄中記載該內(nèi)存數(shù)據(jù)的狀態(tài)為共享態(tài),由此可知,當(dāng)數(shù)據(jù)訪問請(qǐng)求的類型為獨(dú)占請(qǐng)求,該內(nèi)存數(shù)據(jù)在目錄項(xiàng)上的目錄內(nèi)容應(yīng)該為獨(dú)占態(tài)。
s402、所述第一nc判斷所述第一目錄中是否存在所述第一訪問地址對(duì)應(yīng)的目錄項(xiàng);
具體的,第一nc可以以訪問地址為索引搜索節(jié)點(diǎn)控制器的第一目錄中是否存在第一訪問地址對(duì)應(yīng)的目錄項(xiàng),節(jié)點(diǎn)控制器的目錄可以位于節(jié)點(diǎn)控制器內(nèi)部,也可以位于節(jié)點(diǎn)控制器外部,本發(fā)明不作限制。
本發(fā)明實(shí)施例對(duì)該第一目錄中目錄項(xiàng)的存儲(chǔ)方式不進(jìn)行限定,可以是表格形式存儲(chǔ),如表1所示,也可以是其他形式存儲(chǔ),只要可以使得第一nc根據(jù)第一訪問地址在第一目錄中進(jìn)行索引即可。示例性的,如表1所示,表1給出了以表格形式存儲(chǔ)目錄項(xiàng)的方式。
表1第一目錄中目錄項(xiàng)
s403、所述第一nc若確定所述第一目錄中不存在所述第一訪問地址對(duì)應(yīng)的目錄項(xiàng),則判斷所述第一目錄中是否存在空閑目錄項(xiàng);
其中,判斷是否存在空閑目錄項(xiàng)的方式如前所述,本發(fā)明實(shí)施例在此不再贅述。
s404、所述第一nc在確定所述第一目錄中不存在空閑目錄項(xiàng)時(shí),則所述第一nc從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容;
s405、所述第一nc將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中,其中,該第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容用于指示本地節(jié)點(diǎn)中第一處理器緩存該第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);并執(zhí)行步驟s406;
s406、所述第一nc向所述第二nc發(fā)送所述第一數(shù)據(jù)訪問請(qǐng)求;
s407、所述第二nc根據(jù)所述第一數(shù)據(jù)訪問請(qǐng)求,在確定所述第二目錄中不存在該第一訪問地址對(duì)應(yīng)的目錄內(nèi)容且該第二目錄中存在空閑目錄時(shí),在第二目錄中創(chuàng)建所述第一訪問地址對(duì)應(yīng)的目錄內(nèi)容,該第一訪問地址對(duì)應(yīng)的目錄內(nèi)容用于指示該第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在本地節(jié)點(diǎn)中緩存;
s408、第二nc根據(jù)所述第一訪問地址向該第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器發(fā)送第一請(qǐng)求消息,該第一請(qǐng)求消息用于指示該第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器返回該第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s409、第二nc接收所述第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器返回該第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s410、第二nc向所述第一nc返回該第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s411、該第一nc接收第二nc發(fā)送的第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s412、該第一nc向第一處理器發(fā)送第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s413、第二nc接收到第二遠(yuǎn)端節(jié)點(diǎn)發(fā)送的第二數(shù)據(jù)訪問請(qǐng)求,該第二數(shù)據(jù)訪問請(qǐng)求中攜帶第二數(shù)據(jù)訪問地址以及訪問類型;
s414、第二nc判斷所述第二數(shù)據(jù)訪問請(qǐng)求的訪問類型是否為獨(dú)占請(qǐng)求,且所述第二數(shù)據(jù)訪問地址在所述第二目錄中是否存在目錄項(xiàng);
s415、第二nc若確定所述第二數(shù)據(jù)訪問請(qǐng)求的訪問類型為獨(dú)占請(qǐng)求,且所述第二數(shù)據(jù)訪問地址在所述第二目錄中存在目錄項(xiàng),該目錄項(xiàng)中指示該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)為共享態(tài),則向第二nc向所述第一nc發(fā)送第一偵聽請(qǐng)求,所述第一偵聽請(qǐng)求 用于指示第一nc清除所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);同時(shí),第二nc向第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器發(fā)送第一請(qǐng)求消息,用于指示該處理器返回該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s416、所述第一nc接收第一偵聽請(qǐng)求;
s417、所述第一nc向本地節(jié)點(diǎn)中每個(gè)處理器發(fā)送第一偵聽消息,所述第一偵聽消息用于指示清除所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s418、所述第一nc接收所述本地節(jié)點(diǎn)中每個(gè)處理器發(fā)送的第一偵聽響應(yīng);
s419、所述第一nc判斷是否接收到所述本地節(jié)點(diǎn)中每個(gè)處理器發(fā)送的第一偵聽響應(yīng);
s420、所述第一nc若確定接收到所述本地節(jié)點(diǎn)中每個(gè)處理器發(fā)送的第一偵聽響應(yīng),則向所述第二nc發(fā)送第一偵聽響應(yīng);
s421、所述第二nc接收到第一偵聽響應(yīng)之后,將該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)返回給第二遠(yuǎn)端節(jié)點(diǎn),并在第二目錄中創(chuàng)建第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容,該目錄內(nèi)容指示該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在第二遠(yuǎn)端節(jié)點(diǎn)中緩存。
采用上述目錄管理方法之后,可以有效地在目錄存儲(chǔ)器容量不變時(shí),有效地增加目錄利用率,且避免了內(nèi)存數(shù)據(jù)強(qiáng)制被替換掉所引起的對(duì)處理器性能的影響。
本發(fā)明實(shí)施例提供的一種目錄管理方法,通過接收本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求,在確定第一目錄中不存在第一訪問地址對(duì)應(yīng)的目錄項(xiàng),且所述第一目錄中不存在空閑目錄項(xiàng),第一nc從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容,并將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中,本發(fā)明實(shí)施例提供的方法在第一目錄容量不變的情況下,不僅有效增加第一目錄的利用率;同時(shí),由于被選定的目錄項(xiàng)的目錄內(nèi)容被清 空之后,該本地節(jié)點(diǎn)的第一nc并不對(duì)所述被選定的目錄項(xiàng)上的目錄內(nèi)容指示的訪問地址指向的內(nèi)存數(shù)據(jù)進(jìn)行直接刪除,而是根據(jù)第二nc在接收到第二數(shù)據(jù)訪問請(qǐng)求時(shí),判斷是否需要向第一nc發(fā)送第一幀聽請(qǐng)求,在第二nc確認(rèn)要向第一nc發(fā)送第一幀聽請(qǐng)求之后,第一nc接收到第一偵聽請(qǐng)求之后才對(duì)被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)進(jìn)行刪除,故當(dāng)被選定的目錄項(xiàng)的目錄內(nèi)容被刪除時(shí),第一nc并不立刻刪掉該被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù),因此,緩存被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)的處理器當(dāng)該內(nèi)存數(shù)據(jù)的目錄內(nèi)容在第一nc中被清空時(shí),仍然可以繼續(xù)使用該內(nèi)存數(shù)據(jù),直至第一nc接收到第一偵聽請(qǐng)求,從而避免了當(dāng)該處理器使用內(nèi)存數(shù)據(jù)時(shí),由于內(nèi)存數(shù)據(jù)被強(qiáng)制刪除而引起的程序被迫中斷,減少第一目錄溢出時(shí)對(duì)處理器性能的影響。
另一可能的實(shí)現(xiàn)方式,如圖5所示,圖5為本發(fā)明實(shí)施例提供的另一種目錄管理方法的另一個(gè)應(yīng)用場(chǎng)景,與圖4所示的方法的區(qū)別在于,本發(fā)明實(shí)施例中第一nc是根據(jù)所述本地節(jié)點(diǎn)內(nèi)第二處理器發(fā)送的第二數(shù)據(jù)訪問請(qǐng)求決定是否向所述第二nc發(fā)送第一偵聽消息,圖5所示的實(shí)施例中在圖4所示的實(shí)施例的步驟s412之后還包括步驟:s513-s523,示例性的:
s513、所述第一nc接收所述本地節(jié)點(diǎn)內(nèi)第二處理器發(fā)送的第二數(shù)據(jù)訪問請(qǐng)求,所述第二數(shù)據(jù)訪問請(qǐng)求攜帶有第二數(shù)據(jù)訪問地址和訪問類型;
s514、所述第一nc若確定所述第二數(shù)據(jù)訪問請(qǐng)求的訪問類型為獨(dú)占請(qǐng)求且所述第一目錄中不存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng),則所述第一nc在所述第一目錄中選擇一個(gè)空閑目錄項(xiàng)用于記錄所述第二數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容,并向所述第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送所述獨(dú)占請(qǐng)求,同時(shí)執(zhí)行步驟s515;
其中,該第一遠(yuǎn)端節(jié)點(diǎn)為第一nc根據(jù)第二數(shù)據(jù)訪問地址對(duì)應(yīng) 的內(nèi)存數(shù)據(jù)確定,即該內(nèi)存數(shù)據(jù)具體位于哪個(gè)遠(yuǎn)端節(jié)點(diǎn)中。其中,獨(dú)占請(qǐng)求用于指示該內(nèi)存數(shù)據(jù)只能被一個(gè)處理器緩存。
s515、向所述第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送所述獨(dú)占請(qǐng)求;所述獨(dú)占請(qǐng)求用于指示若所述第一遠(yuǎn)端節(jié)點(diǎn)的第二nc在確定第二目錄中存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng)且所述目錄項(xiàng)上的目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在所述本地節(jié)點(diǎn)中緩存時(shí),向所述本地節(jié)點(diǎn)發(fā)送第一偵聽請(qǐng)求;
其中,所述第一遠(yuǎn)端節(jié)點(diǎn)為所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的遠(yuǎn)端節(jié)點(diǎn)。
其中,所述第二目錄為所述第一遠(yuǎn)端節(jié)點(diǎn)的第二nc管理的目錄,所述第二目錄用于記錄遠(yuǎn)端節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)在本地節(jié)點(diǎn)中的緩存情況。
s516、第二nc在接收到所述獨(dú)占請(qǐng)求之后,判斷所述第二目錄中是否存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng);
s517、第二nc在確定該第二目錄中存在第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng),且該目錄項(xiàng)上的目錄內(nèi)容指示該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的狀態(tài)為共享態(tài),則向第一nc發(fā)送第一偵聽請(qǐng)求;所述第一偵聽請(qǐng)求用于指示第一nc清除所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);同時(shí),第二nc向第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器發(fā)送第一請(qǐng)求消息,用于指示該處理器返回該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s518、所述第一nc接收第一偵聽請(qǐng)求;
s519、所述第一nc向本地節(jié)點(diǎn)中除所述第二處理器之外的每個(gè)處理器發(fā)送第一偵聽消息,所述第一偵聽消息用于指示清除所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
由于,此種方案下,對(duì)第一nc發(fā)送第一幀聽請(qǐng)求的請(qǐng)求者為第二處理器,故第一nc向本地節(jié)點(diǎn)內(nèi)的處理器發(fā)送第一幀聽消息時(shí),則只給除第二處理器之外的其余處理器發(fā)送。
需要說明的是,本發(fā)明實(shí)施例中的第一處理器和第二處理器可以為同一個(gè)處理器,也可以為不同的處理器,本發(fā)明實(shí)施例對(duì)此不進(jìn)行限定。
s520、所述第一nc接收本地節(jié)點(diǎn)中除所述第二處理器之外的每個(gè)處理器發(fā)送的第一偵聽響應(yīng);所述第一偵聽響應(yīng)用于指示已清除該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s521、所述第一nc判斷是否接收到所述本地節(jié)點(diǎn)中除所述第二處理器之外每個(gè)處理器發(fā)送的第一偵聽響應(yīng);
s522、所述第一nc若確定接收到所述本地節(jié)點(diǎn)中除所述第二處理器之外每個(gè)處理器發(fā)送的第一偵聽響應(yīng),則向所述第二nc發(fā)送第一偵聽響應(yīng);
s523、所述第二nc接收到第一偵聽響應(yīng)之后,將該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)返回給第一遠(yuǎn)端節(jié)點(diǎn),并在第二目錄中更新所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容,該目錄內(nèi)容指示該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在第一遠(yuǎn)端節(jié)點(diǎn)中緩存,且狀態(tài)為獨(dú)占態(tài)。
采用上述實(shí)施例提供的方式之后,在步驟s514之后,第一目錄中該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容指示該第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在第二處理器中緩存。且第二目錄中與第一目錄對(duì)應(yīng)的第二數(shù)據(jù)訪問地址的目錄內(nèi)容也隨之更新。
本發(fā)明實(shí)施例提供的一種目錄管理方法,通過接收本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求,在確定第一目錄中不存在第一訪問地址對(duì)應(yīng)的目錄項(xiàng),且所述第一目錄中不存在空閑目錄項(xiàng),第一nc從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容,并將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中,本發(fā)明實(shí)施例提供的方法在第一目錄容量不變的情況下,不僅有效增加第一目錄的利用率;同時(shí),由于被選定的目錄項(xiàng)的目錄內(nèi)容被清空之后,該本地節(jié)點(diǎn)的第一nc并不對(duì)所述被選定的目錄項(xiàng)上的目 錄內(nèi)容指示的訪問地址指向的內(nèi)存數(shù)據(jù)進(jìn)行直接刪除,而是根據(jù)第一nc接收到第二處理器發(fā)送的第二數(shù)據(jù)訪問請(qǐng)求的訪問類型以及第二數(shù)據(jù)訪問地址,然后第一nc將該第二數(shù)據(jù)訪問請(qǐng)求發(fā)送給第二nc,第二nc根據(jù)該第二數(shù)據(jù)訪問請(qǐng)求的訪問類型判斷是否需要向第一nc發(fā)送第一幀聽請(qǐng)求,在第二nc確認(rèn)要向第一nc發(fā)送第一幀聽請(qǐng)求之后,第一nc接收到第一偵聽請(qǐng)求之后才對(duì)被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)進(jìn)行刪除,故當(dāng)被選定的目錄項(xiàng)的目錄內(nèi)容被刪除時(shí),第一nc并不立刻刪掉該被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù),因此,緩存被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)的處理器當(dāng)該內(nèi)存數(shù)據(jù)的目錄內(nèi)容在第一nc中被清空時(shí),仍然可以繼續(xù)使用該內(nèi)存數(shù)據(jù),直至第一nc接收到第一偵聽請(qǐng)求,從而避免了當(dāng)該處理器使用內(nèi)存數(shù)據(jù)時(shí),由于內(nèi)存數(shù)據(jù)被強(qiáng)制刪除而引起的程序被迫中斷,減少第一目錄溢出時(shí)對(duì)處理器性能的影響。
第三種可能的實(shí)現(xiàn)方式,如圖6所示,圖6與圖4的區(qū)別在于,該第一偵聽請(qǐng)求的請(qǐng)求者為本地節(jié)點(diǎn)中的任意一個(gè)處理器,由于對(duì)于本地節(jié)點(diǎn)中每個(gè)處理器觸發(fā)第一nc發(fā)送第一偵聽消息的方式和原理均相同,故本發(fā)明實(shí)施例僅以第三處理器為例進(jìn)行說明,并不具有任何指示性含義,與圖4所示的方法的區(qū)別在于,在圖4所示的步驟s412之后還包括步驟s613-s617:
s613、所述第一nc接收所述本地節(jié)點(diǎn)中第三處理器發(fā)送的第二數(shù)據(jù)訪問請(qǐng)求,所述第二數(shù)據(jù)訪問請(qǐng)求包含第二數(shù)據(jù)訪問地址以及訪問類型;
s614、所述第一nc判斷所述第二數(shù)據(jù)訪問請(qǐng)求是否為獨(dú)占請(qǐng)求,且所述第一目錄中是否存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容,且該目錄內(nèi)容中該第二數(shù)據(jù)訪問地址的內(nèi)存數(shù)據(jù)是否為共享態(tài);
其中,判斷第一目錄中是否存在第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄 內(nèi)容可以通過第二數(shù)據(jù)訪問地址在第一目錄中進(jìn)行索引。若無法索引到則確定不存在,若可以索引到則確定存在。
s615、若確定所述第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求,且所述第一目錄中存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容,所述目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)為共享態(tài),則所述第一nc向所述本地節(jié)點(diǎn)中除所述第三處理器之外的每個(gè)處理器發(fā)送所述第一偵聽消息;
s616、所述第一nc接收所述本地節(jié)點(diǎn)中除所述第三處理器之外的每個(gè)處理器發(fā)送第一偵聽響應(yīng);
s617、所述第一nc在第一目錄的空閑目錄項(xiàng)上創(chuàng)建所述第二數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容,該目錄內(nèi)容指示該第二數(shù)據(jù)訪問地址在第三處理器中緩存,且為獨(dú)占態(tài)。
當(dāng)然,在步驟s617之后,還可能包括步驟s618第一nc向第二nc發(fā)送第一請(qǐng)求消息,該第一請(qǐng)求消息用于指示第二nc將第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容中第二數(shù)據(jù)訪問地址的狀態(tài)更新為獨(dú)占態(tài)。
第四種可能的實(shí)現(xiàn)方式,如圖7所示,圖7與圖4的區(qū)別在于,在步驟s412之后,本發(fā)明實(shí)施例中的方法還包括:
s713、所述第一nc接收第二處理器發(fā)送的第三數(shù)據(jù)訪問請(qǐng)求,所述第三數(shù)據(jù)訪問請(qǐng)求用于回寫第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
s714、所述第一nc判斷所述第一目錄中是否存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng);
s715、所述第一nc若確定所述第一目錄中不存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng),則根據(jù)所述第二數(shù)據(jù)訪問地址確定第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的遠(yuǎn)端節(jié)點(diǎn),即第一遠(yuǎn)端節(jié)點(diǎn);
s716、所述第一nc向第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送所述第三數(shù)據(jù)訪問請(qǐng)求,以使得所述第一遠(yuǎn)端節(jié)點(diǎn)的第二nc根據(jù)所述第三數(shù)據(jù)訪問請(qǐng) 求將所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)回寫至所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器,并清除所述第二數(shù)據(jù)訪問地址在第二目錄中對(duì)應(yīng)的目錄內(nèi)容;
s717、所述第二nc接收到所述第三數(shù)據(jù)訪問請(qǐng)求,將所述內(nèi)存數(shù)據(jù)回寫至所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器,并清除所述第二數(shù)據(jù)訪問地址在第二目錄中對(duì)應(yīng)的目錄內(nèi)容;
s718、所述第二nc向所述第一nc發(fā)送第一響應(yīng)消息,該第一響應(yīng)消息用于指示第二nc管理的第二目錄中不存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)。
采用上述可能的實(shí)現(xiàn)方式之后,在第一目錄和第二目錄中均不存在第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容。
本發(fā)明實(shí)施例還提供一種節(jié)點(diǎn)控制器,如圖8所示,該節(jié)點(diǎn)控制器包括:
第一接收單元801,用于接收所述本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求;其中,所述第一數(shù)據(jù)訪問請(qǐng)求用于指示緩存所述遠(yuǎn)端節(jié)點(diǎn)中第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);所述第一處理器為所述本地節(jié)點(diǎn)中任意一個(gè)處理器;
第一判斷單元802,用于在確定所述第一目錄中不存在所述第一訪問地址對(duì)應(yīng)的目錄項(xiàng)時(shí),判斷所述第一目錄中是否存在空閑目錄項(xiàng);
清空單元803,用于在所述第一判斷單元確定在所述第一目錄中不存在空閑目錄項(xiàng),則從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容;
寫入單元804,用于將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中;
第二判斷單元805,用于判斷是否接收到第一偵聽請(qǐng)求;
發(fā)送單元806,用于在所述第二判斷單元確定接收到所述第一偵聽請(qǐng)求時(shí),向所述本地節(jié)點(diǎn)中的處理器發(fā)送第一偵聽消息,所述 第一偵聽消息用于清除所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);所述第一偵聽請(qǐng)求用于指示所述第一nc清除掉所述本地節(jié)點(diǎn)中第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);其中,所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)緩存在本地節(jié)點(diǎn)的處理器中。
本發(fā)明實(shí)施例提供的一種節(jié)點(diǎn)控制器,通過接收本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求,在確定第一目錄中不存在第一訪問地址對(duì)應(yīng)的目錄項(xiàng),且所述第一目錄中不存在空閑目錄項(xiàng),第一nc從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容,并將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中,本發(fā)明實(shí)施例提供的方法在第一目錄容量不變的情況下,不僅有效增加第一目錄的利用率;同時(shí),由于被選定的目錄項(xiàng)的目錄內(nèi)容被清空之后,該本地節(jié)點(diǎn)的第一nc并不對(duì)所述被選定的目錄項(xiàng)上的目錄內(nèi)容指示的訪問地址指向的內(nèi)存數(shù)據(jù)進(jìn)行直接刪除,而是在第一nc接收到第一偵聽請(qǐng)求之后才對(duì)被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)進(jìn)行刪除,故當(dāng)被選定的目錄項(xiàng)的目錄內(nèi)容被刪除時(shí),第一nc并不立刻刪掉該被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù),因此,緩存被選定的目錄項(xiàng)的目錄內(nèi)容中指示的內(nèi)存數(shù)據(jù)的處理器當(dāng)該內(nèi)存數(shù)據(jù)的目錄內(nèi)容在第一nc中被清空時(shí),仍然可以繼續(xù)使用該內(nèi)存數(shù)據(jù),直至第一nc接收到第一偵聽請(qǐng)求,從而避免了當(dāng)該處理器使用內(nèi)存數(shù)據(jù)時(shí),由于內(nèi)存數(shù)據(jù)被強(qiáng)制刪除而引起的程序被迫中斷,減少第一目錄溢出時(shí)對(duì)處理器性能的影響。
進(jìn)一步可選的,所述第一偵聽請(qǐng)求為第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送的,所述第一遠(yuǎn)端節(jié)點(diǎn)為所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的遠(yuǎn)端節(jié)點(diǎn)且所述第二數(shù)據(jù)訪問地址在所述第一遠(yuǎn)端節(jié)點(diǎn)的目錄中存在對(duì)應(yīng)的目錄內(nèi)容,所述目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在所述本地節(jié)點(diǎn)中緩存;
如圖9所示,所述發(fā)送單元806,包括:
第一判斷模塊8061,用于判斷所述第一偵聽請(qǐng)求是否為所述第 一nc向所述第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送第二數(shù)據(jù)訪問請(qǐng)求之后接收的;
第一發(fā)送模塊8062,用于在所述第一判斷模塊確定所述第一偵聽請(qǐng)求為所述第一nc向所述第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送第二數(shù)據(jù)訪問請(qǐng)求之后接收的,則向所述本地節(jié)點(diǎn)中除第二處理器之外的每個(gè)處理器發(fā)送所述第一偵聽消息,所述第二處理器為所述本地節(jié)點(diǎn)中向所述第一nc發(fā)送所述第二數(shù)據(jù)訪問請(qǐng)求的處理器;
第二發(fā)送模塊8063,用于在所述第一判斷模塊確定所述第一偵聽請(qǐng)求不是所述第一nc向所述第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送第二數(shù)據(jù)訪問請(qǐng)求之后接收的,則所述第一nc向所述本地節(jié)點(diǎn)中每個(gè)處理器發(fā)送所述第一偵聽消息。
進(jìn)一步可選的,所述節(jié)點(diǎn)控制器還包括:
第二接收單元,用于所述第二處理器發(fā)送的第二數(shù)據(jù)訪問請(qǐng)求,所述第二數(shù)據(jù)訪問請(qǐng)求攜帶第二數(shù)據(jù)訪問地址和訪問類型;
第三判斷單元,用于判斷所述第二數(shù)據(jù)訪問請(qǐng)求是否為獨(dú)占請(qǐng)求且所述第一目錄中不存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng);
執(zhí)行單元,用于在所述第三判斷單元確定所述第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求且所述第一目錄中不存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng)時(shí),則在所述第一目錄中選擇一個(gè)空閑目錄項(xiàng)用于記錄所述第二數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容,并向所述第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送所述獨(dú)占請(qǐng)求;所述獨(dú)占請(qǐng)求用于指示若所述第一遠(yuǎn)端節(jié)點(diǎn)的nc在確定第二目錄中存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄項(xiàng)且所述目錄項(xiàng)上的目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)在所述本地節(jié)點(diǎn)中緩存時(shí),向所述本地節(jié)點(diǎn)發(fā)送第一偵聽請(qǐng)求;其中,所述第二目錄為所述第一遠(yuǎn)端節(jié)點(diǎn)的nc管理的目錄,所述第二目錄用于記錄遠(yuǎn)端節(jié)點(diǎn)的內(nèi)存數(shù)據(jù)在本地節(jié)點(diǎn)中的緩存情況。
進(jìn)一步可選的,所述第二判斷單元805,包括:
接收模塊,用于接收所述本地節(jié)點(diǎn)中第三處理器發(fā)送的第二數(shù) 據(jù)訪問請(qǐng)求,所述第二數(shù)據(jù)訪問請(qǐng)求包含第二數(shù)據(jù)訪問地址以及訪問類型;
第二判斷模塊,用于判斷所述第二數(shù)據(jù)訪問請(qǐng)求是否為獨(dú)占請(qǐng)求且所述第一目錄中是否存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容;
確定模塊,用于在所述第二判斷模塊確定所述第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求,且所述第一目錄中存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容,所述目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)為共享態(tài)時(shí),則確定接收到第一偵聽請(qǐng)求。
進(jìn)一步可選的,如圖9所示,所述發(fā)送單元806,包括:
確定模塊8064,用于根據(jù)所述第一目錄中所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容確定所述本地節(jié)點(diǎn)中緩存所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的處理器;
第三發(fā)送模塊8065,用于向所述本地節(jié)點(diǎn)中緩存所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的每個(gè)所述處理器發(fā)送所述第一偵聽消息。
進(jìn)一步可選的,所述節(jié)點(diǎn)控制器還包括:
第三接收單元,用于接收第二處理器發(fā)送的第三數(shù)據(jù)訪問請(qǐng)求,所述第三數(shù)據(jù)訪問請(qǐng)求用于回寫第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
所述發(fā)送單元還用于,向第一遠(yuǎn)端節(jié)點(diǎn)發(fā)送所述第三數(shù)據(jù)訪問請(qǐng)求,以使得所述第一遠(yuǎn)端節(jié)點(diǎn)根據(jù)所述第三數(shù)據(jù)訪問請(qǐng)求將所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)回寫至所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器,并清除所述第二數(shù)據(jù)訪問地址在第二目錄中對(duì)應(yīng)的目錄內(nèi)容。
本發(fā)明實(shí)施例還提供一種節(jié)點(diǎn)控制器,如圖10所示,所述節(jié)點(diǎn)控制器包括:
第一接收單元1011,用于接收第二數(shù)據(jù)訪問請(qǐng)求,所述第一數(shù) 據(jù)訪問請(qǐng)求攜帶有第一訪問地址和訪問類型;
判斷單元1012,用于判斷所述第二數(shù)據(jù)訪問請(qǐng)求是否為獨(dú)占請(qǐng)求且在所述第一目錄中是否存在所述第一訪問地址對(duì)應(yīng)的目錄內(nèi)容以及所述第一訪問地址對(duì)應(yīng)的目錄內(nèi)容指示所述第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)是否為共享態(tài);
發(fā)送單元1013,用于若所述判斷單元確定所述第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求且在所述第一目錄中存在所述第一訪問地址對(duì)應(yīng)的目錄內(nèi)容,所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)為共享態(tài),則向緩存所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的本地節(jié)點(diǎn)發(fā)送第一偵聽請(qǐng)求,所述第一偵聽請(qǐng)求用于指示第一nc清除掉本地節(jié)點(diǎn)中第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)。
進(jìn)一步可選的,所述節(jié)點(diǎn)控制器還包括:
第二接收單元,用于接收所述本地節(jié)點(diǎn)發(fā)送的第三數(shù)據(jù)訪問請(qǐng)求,所述第三數(shù)據(jù)訪問請(qǐng)求用于回寫第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);
所述判斷單元還用于,判斷所述第二目錄中是否存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容;
清除單元,用于在所述判斷單元確定所述第二目錄中存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容時(shí),清除掉第二數(shù)據(jù)訪問地址在第二目錄中對(duì)應(yīng)的目錄內(nèi)容,并將所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)回寫至第一處理器中,所述第一處理器為所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)所在的處理器。
本發(fā)明實(shí)施例還提供一種多處理器系統(tǒng),所述多處理器系統(tǒng)包括本地節(jié)點(diǎn)和至少一個(gè)遠(yuǎn)端節(jié)點(diǎn),所述本地節(jié)點(diǎn)中的節(jié)點(diǎn)控制器采用本發(fā)明實(shí)施例如圖8和圖9所示的節(jié)點(diǎn)控制器,所述遠(yuǎn)端節(jié)點(diǎn)中的節(jié)點(diǎn)控制器采用如圖10所示的節(jié)點(diǎn)控制器。
其中,本地節(jié)點(diǎn)中的節(jié)點(diǎn)控制器用于:
接收所述本地節(jié)點(diǎn)內(nèi)第一處理器發(fā)送的第一數(shù)據(jù)訪問請(qǐng)求;其中,所述第一數(shù)據(jù)訪問請(qǐng)求用于指示緩存所述遠(yuǎn)端節(jié)點(diǎn)中第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);所述第一處理器為所述本地節(jié)點(diǎn)中任意一個(gè)處理器;
若確定在所述第一目錄中不存在所述第一訪問地址對(duì)應(yīng)的目錄項(xiàng),且所述第一目錄中不存在空閑目錄項(xiàng),則從所述第一目錄中清空一個(gè)目錄項(xiàng)的目錄內(nèi)容;
將所述第一數(shù)據(jù)訪問請(qǐng)求對(duì)應(yīng)的目錄內(nèi)容寫入所述被清空的目錄項(xiàng)中;
若確定接收到第一偵聽請(qǐng)求,則向所述本地節(jié)點(diǎn)中的處理器發(fā)送第一偵聽消息,所述第一偵聽消息用于清除所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);所述第一偵聽請(qǐng)求用于指示、清除掉所述本地節(jié)點(diǎn)中第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù);其中,所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)緩存在本地節(jié)點(diǎn)的處理器中。
所述遠(yuǎn)端節(jié)點(diǎn)中的節(jié)點(diǎn)控制器用于:
接收第二數(shù)據(jù)訪問請(qǐng)求,所述第二數(shù)據(jù)訪問請(qǐng)求攜帶有第二數(shù)據(jù)訪問地址和訪問類型;
若確定所述第二數(shù)據(jù)訪問請(qǐng)求為獨(dú)占請(qǐng)求且在所述第二目錄中存在所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容,所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的目錄內(nèi)容指示所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)為共享態(tài),則向緩存所述第二數(shù)據(jù)訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)的本地節(jié)點(diǎn)發(fā)送第一偵聽請(qǐng)求,所述第一偵聽請(qǐng)求用于指示本地節(jié)點(diǎn)的節(jié)點(diǎn)控制器清除掉所述本地節(jié)點(diǎn)中第一訪問地址對(duì)應(yīng)的內(nèi)存數(shù)據(jù)。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。所述存儲(chǔ)介質(zhì)是非短暫性(英文:non-transitory)介質(zhì),包括:快閃存儲(chǔ)器、移動(dòng)硬盤、只讀存儲(chǔ)器、隨機(jī)存取存儲(chǔ)器、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,僅為本發(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)。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦 合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。所述存儲(chǔ)介質(zhì)是非短暫性(英文:non-transitory)介質(zhì),包括:快閃存儲(chǔ)器、移動(dòng)硬盤、只讀存儲(chǔ)器、隨機(jī)存取存儲(chǔ)器、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述,僅為本發(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)。