本發(fā)明涉及多處理器系統(tǒng)技術(shù)領(lǐng)域,尤其涉及一種緩存一致性管理方法及節(jié)點控制器。
背景技術(shù):
多處理器系統(tǒng)是指包含兩臺或多臺功能相近的處理器,處理器之間彼此可以交換數(shù)據(jù),所有處理器共享內(nèi)存,i/o設(shè)備,控制器,以及外部設(shè)備,整個硬件系統(tǒng)由統(tǒng)一的操作系統(tǒng)控制,在處理器和程序之間實現(xiàn)作業(yè)、任務(wù)、程序、數(shù)組極其元素各級的全面并行。
大多數(shù)商用高速緩存一致性非均勻存儲訪問(cache-coherentnon-uniformmemoryaccess,cc-numa)多處理機系統(tǒng)使用基于目錄的高速緩存一致性協(xié)議,cc-numa多處理機系統(tǒng)的存儲器在物理上是分布的,所有的局部存儲器構(gòu)成了共享的全局地址空間。cc-numa多處理機系統(tǒng)最顯著的優(yōu)點是程序員無需明確地在節(jié)點上分配數(shù)據(jù),系統(tǒng)的硬件和軟件會自動在各節(jié)點上分配數(shù)據(jù)。在程序運行過程中,高速緩存一致性硬件會自動地將數(shù)據(jù)移至需要它的地方。
請參閱1,圖1為現(xiàn)有技術(shù)中cc-numa多處理器系統(tǒng)的架構(gòu)示意圖,該系統(tǒng)由多個節(jié)點(如:node0、node1、node2…noden)構(gòu)成網(wǎng)絡(luò)互聯(lián),每個節(jié)點均包括:節(jié)點控制器(如:node0中的nc0和node2中的nc2)和至少一個處理器(如:cpu0…cpun),每個處理器均包括:內(nèi)存(dual-inline-memory-modules,dimm)和三級緩存l3。
在cc-numa多處理器系統(tǒng)中,各節(jié)點中的l3總?cè)萘吭趲装賛b左右,而內(nèi)存總?cè)萘客ǔT趲资畉b左右。通常地,處理器緩存的數(shù)據(jù)絕大部分是位于內(nèi)存中的,只有少數(shù)的數(shù)據(jù)是位于l3中,而數(shù)據(jù)緩存在跨節(jié)點的l3中則更少。為了記錄跨節(jié)點緩存的數(shù)據(jù),節(jié)點控制器上會設(shè)置目錄(directory,dir),用于存儲本節(jié)點內(nèi)數(shù)據(jù)被其他節(jié)點處理器緩存的情況。如:node2中 的數(shù)據(jù)被node0中的cpu0的l3緩存,則nc2對應(yīng)的目錄上會記錄此數(shù)據(jù)被node0緩存,并記錄其緩存狀態(tài)為獨占或共享。
請參閱圖2,圖2為現(xiàn)有技術(shù)中cc-numa多處理器系統(tǒng)中的目錄的結(jié)構(gòu)示意圖,該目錄采用緩存cache結(jié)構(gòu),其包括:由j組group(如:group0、group1、group2、group3…groupj-2和groupj-1)m路wag(如:wag0、wag1…wagm-2和wagm-1)標(biāo)簽項tagentry組成的標(biāo)簽矩陣tagarray和由j組(如:group0、group1、group2、group3…groupj-2和groupj-1)m路(如:wag0、wag1…wagm-2和wagm-1)向量項vectorentry組成的向量矩陣vectorarray。其中,m、j均為自然數(shù),tagentry與vectorentry是一一對應(yīng)的,每個tagentry均包括:標(biāo)簽tag字段和占用狀態(tài)state字段,tag字段為系統(tǒng)所要訪問的數(shù)據(jù)對應(yīng)的內(nèi)存地址的高位地址,state字段包括獨占狀態(tài)和共享狀態(tài),每個vectorentry均包括:有效位v字段和共享向量sharevector字段,該sharevector字段用于指示獨占或共享數(shù)據(jù)的節(jié)點。
系統(tǒng)在訪問跨節(jié)點數(shù)據(jù)時,節(jié)點控制器會根據(jù)該數(shù)據(jù)對應(yīng)的內(nèi)存地址在目錄中進行查詢,若查詢到該內(nèi)存地址對應(yīng)的節(jié)點時,則從該節(jié)點中提取該數(shù)據(jù)。內(nèi)存地址包括:tag字段、索引index字段和偏移offset字段,具體地,節(jié)點控制器首先會根據(jù)index字段在tagarray中確定第一分組,并根據(jù)index字段在vectorarray中確定第二分組,然后將第一分組中所有tagentry對應(yīng)的tag字段送往比較器compare與內(nèi)存地址對應(yīng)的tag字段進行比較,若命中,則在第一分組中確定內(nèi)存地址對應(yīng)的tagentry。由于tagentry與vectorentry是一一對應(yīng)的,所以可根據(jù)該tagentry在第二分組中確定內(nèi)存地址對應(yīng)的vectorentry。最后節(jié)點控制器從該vectorentry指示獨占或共享數(shù)據(jù)的節(jié)點中提取內(nèi)存地址對應(yīng)的數(shù)據(jù)。
上述目錄,tagentry與vectorentry是一一對應(yīng)的,在數(shù)據(jù)的查找上,該目錄的精度是最高的,但是目錄的容量也是最大的。目錄的容量越大,面積功耗也就越大,查詢時間也就越長,查詢效率也就越低。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種緩存一致性管理方法及節(jié)點控制器,在不影響目錄查詢精度的情況下,對目錄的容量進行壓縮,從而減少查詢時間,提高查詢效率。
本發(fā)明實施例的第一方面提供一種緩存一致性管理方法,所述方法應(yīng)用于多處理器系統(tǒng),所述多處理器系統(tǒng)包含第一表單、第二表單和至少兩個節(jié)點,每一個所述節(jié)點中包含至少一個處理器,所述方法包括:
根據(jù)數(shù)據(jù)的地址信息,在所述第一表單中確定與所述地址信息對應(yīng)的第一表項,所述第一表項包含第一字段和第二字段,所述第一字段用于記錄所述數(shù)據(jù)的占用狀態(tài),若所述第一字段為獨占狀態(tài),則所述第二字段用于指示獨占所述數(shù)據(jù)的節(jié)點;
若所述第一字段為共享狀態(tài),則根據(jù)所述數(shù)據(jù)的地址信息和所述第二字段,在所述第二表單中確定第二表項,所述第二表項中包含第三字段,所述第三字段用于指示共享所述數(shù)據(jù)的節(jié)點。
通過獨占狀態(tài)和共享狀態(tài)兩種查詢機制,分別從兩條路徑上對目錄進行查詢,從而得到獨占或共享數(shù)據(jù)的節(jié)點,本發(fā)明實施例在不影響目錄查詢精度的情況下,對目錄的容量進行壓縮,從而減少查詢時間,提高查詢效率。
結(jié)合本發(fā)明實施例的第一方面,在本發(fā)明實施例的第一方面的第一種實現(xiàn)方式中,所述地址信息包含標(biāo)簽tag字段和索引index字段;
根據(jù)數(shù)據(jù)的地址信息,在所述第一表單中確定與所述地址信息對應(yīng)的第一表項包括:
根據(jù)所述index字段在所述第一表單中確定與所述地址信息對應(yīng)的第一分組,并根據(jù)所述tag字段在所述第一分組中確定與所述地址信息對應(yīng)的第一表項;
所述根據(jù)所述數(shù)據(jù)的地址信息和所述第二字段,在所述第二表單中確定第二表項包括:
根據(jù)所述index字段在所述第二表單中確定第二分組,并根據(jù)所述第二字段在所述第二分組中確定所述第二表項。
index字段是用于在所述第一表單中確定第一分組,以及用于在所述第二 表單中確定第二分組,tag字段是用于在第一分組中確定第一表項,如果第一表項中的第一字段為獨占狀態(tài),則第一表項中的第二字段為owner字段,該owner字段用于指示獨占該數(shù)據(jù)的節(jié)點;如果第一字段為共享狀態(tài),則第二字段為ptr指針,該ptr指針可在第二分組中確定第二表項,第二表項中的第三字段用于指示共享該數(shù)據(jù)的節(jié)點。
結(jié)合本發(fā)明實施例的第一方面的第一種實現(xiàn)方式,在本發(fā)明實施例的第一方面的第二種實現(xiàn)方式中,所述index字段包含m位信息,其中m為大于1的正整數(shù);
所述根據(jù)所述index字段在所述第二表單中確定第二分組包括:
根據(jù)所述index字段中的n位信息在所述第二表單中確定第二分組,其中n為大于0且小于m的正整數(shù)。
為了實現(xiàn)從縱向上對第二表單進行壓縮,節(jié)點控制器根據(jù)index字段在第一表單中確定第一分組以及在第二表單中確定第二分組時,所采用的index字段略有不同。節(jié)點控制器在第二表單中確定第二分組時所使用的index字段中的二進制地址位數(shù)比在第一表單中確定第一分組時所使用的index字段中的二進制地址位數(shù)要少。這樣可以使第二表單中的行數(shù)做出很大的壓縮。
結(jié)合本發(fā)明實施例的第一方面、本發(fā)明實施例的第一方面的第一種至第二種實現(xiàn)方式中的任意一種,在本發(fā)明實施例的第一方面的第三種實現(xiàn)方式中,根據(jù)數(shù)據(jù)的地址信息,在所述第一表單中確定與所述地址信息對應(yīng)的第一表項之前,所述方法還包括:
在所述至少兩個節(jié)點中的第一節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項,將所述第一字段設(shè)置為獨占狀態(tài),并將所述第二字段設(shè)置為指示所述第一節(jié)點。
當(dāng)本節(jié)點中的數(shù)據(jù)第一次被跨節(jié)點中的第一節(jié)點緩存時,該數(shù)據(jù)被第一節(jié)點獨占。為此,節(jié)點控制器會在目錄的第一表單中創(chuàng)建記錄該數(shù)據(jù)的第一表項,并將第一表項中的第一字段設(shè)置為獨占狀態(tài),還將第一表項中的第二字段設(shè)置為指示該第一節(jié)點的owner指針。由于該數(shù)據(jù)被第一節(jié)點獨占,所以此時無需在目錄的第二表單中創(chuàng)建第二表項。
結(jié)合本發(fā)明實施例的第一方面的第三種實現(xiàn)方式,在本發(fā)明實施例的第一方面的第四種實現(xiàn)方式中,在根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項之后,所述方法還包括:
在所述至少兩個節(jié)點中的第二節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述地址信息在所述第一表單中確定所述第一表項;
若所述第一字段為獨占狀態(tài),則將所述第一字段設(shè)置為共享狀態(tài),并根據(jù)所述地址信息在所述第二表單中確定第二分組,并在所述第二分組中創(chuàng)建所述第二表項,在所述第三字段中設(shè)置所述第一節(jié)點和所述第二節(jié)點的指示信息,并根據(jù)所述第二表項在所述第二表單中的位置信息設(shè)置所述第二字段;
若所述第一字段為共享狀態(tài),則根據(jù)所述地址信息和所述第二字段在所述第二表單中確定所述第二表項,并在所述第三字段中添加所述第二節(jié)點的指示信息。
當(dāng)上述數(shù)據(jù)被第一節(jié)點獨占之后,又有第二節(jié)點緩存該數(shù)據(jù)時,則該數(shù)據(jù)將由獨占狀態(tài)變?yōu)楣蚕頎顟B(tài),那么此時節(jié)點控制器會對該數(shù)據(jù)對應(yīng)的第一表項進行修改,如:將第一表項中的第一字段修改為共享狀態(tài),并將第一表項中的第二字段修改為ptr指針。同時節(jié)點控制器還將根據(jù)該數(shù)據(jù)的地址信息在第二表單中創(chuàng)建第二表項,并在第二表項中的第三字段中設(shè)置第一節(jié)點和第二節(jié)點的指示信息。
若在第二節(jié)點緩存該數(shù)據(jù)之前,第一節(jié)點獨占的該數(shù)據(jù)已經(jīng)修改為共享狀態(tài),那么此時節(jié)點控制器會在該數(shù)據(jù)對應(yīng)的第二表項中修改第三字段,即添加第二節(jié)點的指示信息。當(dāng)然,節(jié)點控制器還可以不修改第二表項的內(nèi)容,而是在第二表單中另外創(chuàng)建第四表項,并在第四表項中的第四字段中設(shè)置第二節(jié)點的指示信息。具體此處不做限定。
結(jié)合本發(fā)明實施例的第一方面的第三種實現(xiàn)方式,在本發(fā)明實施例的第一方面的第五種實現(xiàn)方式中,在根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項之后,所述方法還包括:
在所述至少兩個節(jié)點中的第二節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述地址信息在所述第一表單中確定所述第一表項;
若所述第一字段為獨占狀態(tài),則將所述第一字段設(shè)置為共享狀態(tài),并根據(jù)所述地址信息在所述第二表單中確定第二分組,并在所述第二分組中查找指示信息包含所述第一節(jié)點和所述第二節(jié)點的第三表項,并將所述第三表項確定為所述第二表項,并根據(jù)所述第二表項在所述第二表單中的位置信息設(shè)置所述第二字段。
當(dāng)?shù)谝还?jié)點獨占的數(shù)據(jù)被第二節(jié)點共享時,此時也可以不在第二表單中創(chuàng)建第二表項,而是根據(jù)數(shù)據(jù)的地址信息在第二表單中查找是否有包含第一節(jié)點和第二節(jié)點指示信息的第三表項,如果有,那么為了避免第二表單出現(xiàn)冗余,節(jié)點控制器可以不必在第二表單中創(chuàng)建與第三表項相同的第二表項,而是將該第三表項當(dāng)作第二表項,并根據(jù)該第三表項在第二表單中的位置信息設(shè)置第一表項的第二字段。這樣也可以在一定程度上對第二表單進行壓縮,從而降低整個目錄的容量。
結(jié)合本發(fā)明實施例的第一方面、本發(fā)明實施例的第一方面的第一種至第二種實現(xiàn)方式中的任意一種,在本發(fā)明實施例的第一方面的第六種實現(xiàn)方式中,根據(jù)數(shù)據(jù)的地址信息,在所述第一表單中確定與所述地址信息對應(yīng)的第一表項之前,所述方法還包括:
在所述至少兩個節(jié)點中的第一節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項,將所述第一字段設(shè)置為共享狀態(tài),并根據(jù)所述地址信息在所述第二表單中確定第二分組,并在所述第二分組中查找指示信息包含所述第一節(jié)點的第三表項,并將所述第三表項確定為所述第二表項,并根據(jù)所述第二表項在所述第二表單中的位置信息設(shè)置所述第二字段。
數(shù)據(jù)在第一次緩存時,也有可能是以共享狀態(tài)緩存,那么節(jié)點控制器需要在第一表單中為該數(shù)據(jù)創(chuàng)建第一表項,但是可以不急于在第二表單中創(chuàng)建第二表項,而是先在第二表單中查找是否有包含第一節(jié)點指示信息的第三表項,如果有,那么可以按照上述方法共用該第三表項,從而避免第二表單出現(xiàn)冗余。當(dāng)然,在第二表單中查找不到包含第一節(jié)點指示信息的第三表項的情況下,則需要在第二表單中創(chuàng)建第二表項。
結(jié)合本發(fā)明實施例的第一方面、本發(fā)明實施例的第一方面的第一種至第 二種實現(xiàn)方式中的任意一種,在本發(fā)明實施例的第一方面的第七種實現(xiàn)方式中,在所述第一表單中確定與所述地址信息對應(yīng)的第一表項之前,所述方法還包括:
在所述至少兩個節(jié)點中的第一節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項,將所述第一字段設(shè)置為共享狀態(tài),并根據(jù)所述地址信息在所述第二表單中確定第二分組,并在所述第二分組中創(chuàng)建所述第二表項,在所述第三字段中設(shè)置所述第一節(jié)點的指示信息,并根據(jù)所述第二表項在所述第二表單中的位置信息設(shè)置所述第二字段。
當(dāng)本節(jié)點中的數(shù)據(jù)第一次被跨節(jié)點中的第一節(jié)點緩存時,該數(shù)據(jù)也可以是被第一節(jié)點共享的。為此,節(jié)點控制器會在目錄的第一表單中創(chuàng)建記錄該數(shù)據(jù)的第一表項,并將第一表項中的第一字段設(shè)置為共享狀態(tài),還將在目錄的第二表單中創(chuàng)建第二表項,并在第二表項的第三字段中設(shè)置第一節(jié)點的指示信息,同時還根據(jù)第二表項在第二表單中的位置信息設(shè)置第一表項的第二字段,該第二字段采用ptr指針。
結(jié)合本發(fā)明實施例的第一方面的第六種實現(xiàn)方式或第七種實現(xiàn)方式,在本發(fā)明實施例的第一方面的第八種實現(xiàn)方式中,在根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項之后,所述方法還包括:
在所述至少兩個節(jié)點中的第二節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述地址信息在所述第一表單中確定所述第一表項,根據(jù)所述數(shù)據(jù)的地址信息和所述第二字段,在所述第二表單中確定第二表項,并在所述第三字段中添加所述第二節(jié)點的指示信息。
當(dāng)?shù)谝还?jié)點共享的數(shù)據(jù)再一次被第二節(jié)點共享時,節(jié)點控制器可以對該數(shù)據(jù)對應(yīng)的第二表項中的第三字段進行修改,即添加第二節(jié)點的指示信息。當(dāng)然,節(jié)點控制器還可以不修改第二表項的內(nèi)容,而是在第二表單中另外創(chuàng)建第四表項,并在第四表項中的第四字段中設(shè)置第二節(jié)點的指示信息。具體此處不做限定。
本發(fā)明實施例第二方面提供了一種節(jié)點控制器,應(yīng)用于多處理器系統(tǒng),所述多處理器系統(tǒng)包含第一表單、第二表單和至少兩個節(jié)點,每一個所述節(jié) 點中包含至少一個處理器,所述節(jié)點控制器包括:
第一確定模塊,用于根據(jù)數(shù)據(jù)的地址信息,在所述第一表單中確定與所述地址信息對應(yīng)的第一表項,所述第一表項包含第一字段和第二字段,所述第一字段用于記錄所述數(shù)據(jù)的占用狀態(tài),當(dāng)所述第一字段為獨占狀態(tài)時,則所述第二字段用于指示獨占所述數(shù)據(jù)的節(jié)點;
第二確定模塊,用于當(dāng)所述第一字段為共享狀態(tài)時,根據(jù)所述數(shù)據(jù)的地址信息和所述第二字段,在所述第二表單中確定第二表項,所述第二表項中包含第三字段,所述第三字段用于指示共享所述數(shù)據(jù)的節(jié)點。
結(jié)合本發(fā)明實施例的第二方面,在本發(fā)明實施例的第二方面的第一種實現(xiàn)方式中,所述地址信息包含tag字段和index字段;
所述第一確定模塊用于根據(jù)數(shù)據(jù)的地址信息,在所述第一表單中確定與所述地址信息對應(yīng)的第一表項包括:
第一確定模塊用于根據(jù)所述index字段在所述第一表單中確定與所述地址信息對應(yīng)的第一分組,并根據(jù)所述tag字段在所述第一分組中確定與所述地址信息對應(yīng)的第一表項;
所述第二確定模塊用于當(dāng)所述第一字段為共享狀態(tài)時,根據(jù)所述數(shù)據(jù)的地址信息和所述第二字段,在所述第二表單中確定第二表項包括:
第二確定模塊用于根據(jù)所述index字段在所述第二表單中確定第二分組,并根據(jù)所述第二字段在所述第二分組中確定所述第二表項。
結(jié)合本發(fā)明實施例的第二方面的第一種實現(xiàn)方式,在本發(fā)明實施例的第二方面的第二種實現(xiàn)方式中,所述index字段包含m位信息,其中m為大于1的正整數(shù);
第二確定模塊用于根據(jù)所述index字段在所述第二表單中確定第二分組,并根據(jù)所述第二字段在所述第二分組中確定所述第二表項包括:
第二確定模塊用于根據(jù)所述index字段中的n位信息在所述第二表單中確定第二分組,其中n為大于0且小于m的正整數(shù)。
結(jié)合本發(fā)明實施例的第二方面、本發(fā)明實施例的第二方面的第一種至第二種實現(xiàn)方式中的任意一種,在本發(fā)明實施例的第二方面的第三種實現(xiàn)方式 中,所述節(jié)點控制器還包括:創(chuàng)建模塊和設(shè)置模塊;
所述第一確定模塊根據(jù)數(shù)據(jù)的地址信息,在所述第一表單中確定與所述地址信息對應(yīng)的第一表項之前,所述創(chuàng)建模塊用于在所述至少兩個節(jié)點中的第一節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項,所述設(shè)置模塊用于將所述第一字段設(shè)置為獨占狀態(tài),并將所述第二字段設(shè)置為指示所述第一節(jié)點。
結(jié)合本發(fā)明實施例的第二方面的第三種實現(xiàn)方式,在本發(fā)明實施例的第二方面的第四種實現(xiàn)方式中,所述創(chuàng)建模塊根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項之后,所述第一確定模塊還用于在所述至少兩個節(jié)點中的第二節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述地址信息在所述第一表單中確定所述第一表項;
若所述第一字段為獨占狀態(tài),則所述設(shè)置模塊還用于將所述第一字段設(shè)置為共享狀態(tài),所述第二確定模塊還用于根據(jù)所述地址信息在所述第二表單中確定第二分組,所述創(chuàng)建模塊還用于在所述第二分組中創(chuàng)建所述第二表項,所述設(shè)置模塊還用于在所述第三字段中設(shè)置所述第一節(jié)點和所述第二節(jié)點的指示信息,并根據(jù)所述第二表項在所述第二表單中的位置信息設(shè)置所述第二字段;
若所述第一字段為共享狀態(tài),則所述第二確定模塊還用于根據(jù)所述地址信息和所述第二字段在所述第二表單中確定所述第二表項,所述設(shè)置模塊還用于在所述第三字段中添加所述第二節(jié)點的指示信息。
結(jié)合本發(fā)明實施例的第二方面的第三種實現(xiàn)方式,在本發(fā)明實施例的第二方面的第五種實現(xiàn)方式中,所述節(jié)點控制器還包括:查找模塊;
所述創(chuàng)建模塊根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項之后,第一確定模塊還用于在所述至少兩個節(jié)點中的第二節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述地址信息在所述第一表單中確定所述第一表項;
若所述第一字段為獨占狀態(tài),則所述設(shè)置模塊還用于將所述第一字段設(shè)置為共享狀態(tài),所述第二確定模塊還用于根據(jù)所述地址信息在所述第二表單中確定第二分組,所述查找模塊用于在所述第二分組中查找指示信息包含所 述第一節(jié)點和所述第二節(jié)點的第三表項,所述第二確定模塊還用于將所述第三表項確定為所述第二表項,所述設(shè)置模塊還用于根據(jù)所述第二表項在所述第二表單中的位置信息設(shè)置所述第二字段。
結(jié)合本發(fā)明實施例的第二方面、本發(fā)明實施例的第二方面的第一種至第二種實現(xiàn)方式中的任意一種,在本發(fā)明實施例的第二方面的第六種實現(xiàn)方式中,所述節(jié)點控制器還包括:創(chuàng)建模塊、設(shè)置模塊和查找模塊;
所述第一確定模塊根據(jù)數(shù)據(jù)的地址信息,在所述第一表單中確定與所述地址信息對應(yīng)的第一表項之前,所述創(chuàng)建模塊用于在所述至少兩個節(jié)點中的第一節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項,所述設(shè)置模塊用于將所述第一字段設(shè)置為共享狀態(tài),所述第二確定模塊還用于根據(jù)所述地址信息在所述第二表單中確定第二分組,所述查找模塊用于在所述第二分組中查找指示信息包含所述第一節(jié)點的第三表項,所述第二確定模塊還用于將所述第三表項確定為所述第二表項,所述設(shè)置模塊還用于根據(jù)所述第二表項在所述第二表單中的位置信息設(shè)置所述第二字段。
結(jié)合本發(fā)明實施例的第二方面、本發(fā)明實施例的第二方面的第一種至第二種實現(xiàn)方式中的任意一種,在本發(fā)明實施例的第二方面的第七種實現(xiàn)方式中,所述節(jié)點控制器還包括:創(chuàng)建模塊和設(shè)置模塊;
所述第一確定模塊根據(jù)數(shù)據(jù)的地址信息,在所述第一表單中確定與所述地址信息對應(yīng)的第一表項之前,所述創(chuàng)建模塊用于在所述至少兩個節(jié)點中的第一節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項,所述設(shè)置模塊用于將所述第一字段設(shè)置為共享狀態(tài),所述第二確定模塊還用于根據(jù)所述地址信息在所述第二表單中確定第二分組,所述創(chuàng)建模塊還用于在所述第二分組中創(chuàng)建所述第二表項,所述設(shè)置模塊還用于在所述第三字段中設(shè)置所述第一節(jié)點的指示信息,并根據(jù)所述第二表項在所述第二表單中的位置信息設(shè)置所述第二字段。
結(jié)合本發(fā)明實施例的第二方面的第六種實現(xiàn)方式或第七種實現(xiàn)方式,在本發(fā)明實施例的第二方面的第八種實現(xiàn)方式中,所述創(chuàng)建模塊根據(jù)所述數(shù)據(jù)在所述第一表單中創(chuàng)建所述第一表項之后,所述第一確定模塊還用于在所述 至少兩個節(jié)點中的第二節(jié)點緩存所述數(shù)據(jù)時,根據(jù)所述地址信息在所述第一表單中確定所述第一表項;所述第二確定模塊還用于根據(jù)所述數(shù)據(jù)的地址信息和所述第二字段,在所述第二表單中確定第二表項,所述設(shè)置模塊還用于在所述第三字段中添加所述第二節(jié)點的指示信息。
本發(fā)明實施例第三方面提供了一種節(jié)點控制器,包括:處理器、存儲器和總線;
所述存儲器用于存儲執(zhí)行指令,所述處理器與所述存儲器通過所述總線連接,當(dāng)所述存儲器運行時,所述處理器執(zhí)行所述存儲器存儲的所述執(zhí)行指令,以使所述節(jié)點控制器執(zhí)行如本發(fā)明實施例的第一方面至第一方面的第八種實現(xiàn)方式中的任意一種所述的方法。
本發(fā)明實施例提供的技術(shù)方案中,通過獨占狀態(tài)和共享狀態(tài)兩種機制,分別從兩條路徑上對目錄進行查詢,從而得到獨占或共享數(shù)據(jù)的節(jié)點,因此相對于現(xiàn)有技術(shù),本發(fā)明實施例在不影響目錄查詢精度的情況下,對目錄的容量進行壓縮,從而減少查詢時間,提高查詢效率。
附圖說明
圖1為現(xiàn)有技術(shù)中cc-numa多處理器系統(tǒng)的架構(gòu)示意圖;
圖2為現(xiàn)有技術(shù)中cc-numa多處理器系統(tǒng)中的目錄的結(jié)構(gòu)示意圖;
圖3為本發(fā)明實施例中cc-numa多處理器系統(tǒng)中改進后的目錄的結(jié)構(gòu)示意圖;
圖4為本發(fā)明實施例中緩存一致性管理方法一個實施例的步驟流程圖;
圖5為發(fā)明實施例中節(jié)點控制器一個實施例的模塊框圖;
圖6為本發(fā)明實施例中節(jié)點控制器一個實施例的硬件結(jié)構(gòu)示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域技術(shù)人員在沒有作出創(chuàng) 造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”、“第三”“第四”等(如果存在)是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的實施例能夠以除了在這里圖示或描述的內(nèi)容以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
在多處理器系統(tǒng)中,節(jié)點控制器上設(shè)置的目錄在設(shè)計時,會面臨容量和精度的選擇問題,目錄容量大,則精度高,但是面積功耗大;目錄容量小,則精度低或目錄溢出較多,目錄溢出將導(dǎo)致遠端數(shù)據(jù)無效,會嚴(yán)重影響系統(tǒng)性能。
通過對目錄的數(shù)據(jù)分析發(fā)現(xiàn),雖然整個多處理器系統(tǒng)可以共享數(shù)據(jù),但是在一小段時間內(nèi),有很大比例的數(shù)據(jù)是處于獨占狀態(tài)的,約為90%,也就是說,只有一個節(jié)點緩存此數(shù)據(jù)。另外,由于程序訪問的局部性,應(yīng)用程序總是連續(xù)的訪問某一小段地址,也就是說,連續(xù)的一小段地址的目錄極大可能是相同的,即被同一個節(jié)點緩存。
從上述分析可以看出,目錄表項存在冗余和空間的浪費。為此,本發(fā)明實施例在不影響目錄查詢精度的情況下,從兩方面對目錄進行優(yōu)化,一是通過獨占狀態(tài)和共享狀態(tài)兩種查詢機制,分別從兩條路徑上對目錄進行查詢,從而避免目錄空間的浪費;二是對于內(nèi)容相同的目錄表項可以共用同一個目錄表項,從而減少目錄表項的冗余。
請參閱圖3,圖3為本發(fā)明實施例中cc-numa多處理器系統(tǒng)中改進后的目錄的結(jié)構(gòu)示意圖,該目錄依然采用cache結(jié)構(gòu),與現(xiàn)有目錄不同的是,本發(fā)明實施例針對獨占狀態(tài)和共享狀態(tài)的數(shù)據(jù)分別采用不同的兩條路徑進行查詢,從而在很大程度上對目錄中的vectorarray進行容量的壓縮,使得目錄的整體容量減小。
具體地,該目錄包括:tagarray和vectorarray,其中,tagarray由j組(如:group0、group1、group2、group3…groupj-2和groupj-1)m路(如:wag0、wag1…wagm-2和wagm-1)tagentry組成;vectorarray由k組(如:group0、group1、group2、group3…groupk-2和groupk-1)n路(如:wag0、wag1…wagn-2和wagn-1)vectorentry組成,j大于k,且m大于n。
從上述內(nèi)容可以看出,vectorarray在橫向以及縱向上都進行了壓縮,即vectorarray的路數(shù)減少了,以及vectorarray的組數(shù)也減少了。當(dāng)然,本發(fā)明實施例還可以僅在vectorarray橫向或縱向上進行壓縮,具體此處不做限定。
更具體地,每個tagentry均包括:tag字段、state字段和指針(owner/ptr)字段。每個vectorentry均包括:v字段、sharevector字段和計數(shù)cnt字段。
根據(jù)數(shù)據(jù)不同的緩存狀態(tài),tagentry中所采用的指針字段也有所不同,如:針對獨占狀態(tài)的數(shù)據(jù),tagentry中的指針字段采用owner指針指示,且該owner指針可用于指示獨占該數(shù)據(jù)的節(jié)點;針對共享狀態(tài)的數(shù)據(jù),tagentry中的指針字段采用ptr指針指示,而該ptr指針結(jié)合內(nèi)存地址中的index字段可確定vectorarray中的某一個vectorentry,且該vectorentry中的sharevector字段可用于指示共享該數(shù)據(jù)的節(jié)點。
可選地,在vectorentry中還可以加入cnt字段,用于統(tǒng)計tagentry對應(yīng)于vectorentry的個數(shù)。如:當(dāng)新增加一個tagentry對應(yīng)于該vectorentry時,則將該vectorentry中的cnt的值加1;當(dāng)對應(yīng)于該vectorentry的tagentry溢出、剔除或替換時,則將vectorentry中的cnt的值減1;當(dāng)該vectorentry中的cnt的值減為0時,則說明沒有任何一個tagentry對應(yīng)于該vectorentry,該vectorentry對應(yīng)的數(shù)據(jù)可能由共享狀態(tài)變?yōu)楠氄紶顟B(tài),則不需要vectorentry中的sharevector字段來指示共享該數(shù)據(jù)的節(jié)點,那么此時可以刪除該vectorentry。
以一個系統(tǒng)地址為40位,16個節(jié)點的多處理器系統(tǒng)為例,對現(xiàn)有多處理器系統(tǒng)中的目錄容量與本發(fā)明實施例多處理器系統(tǒng)中改進后的目錄容量進行對比,該多處理器系統(tǒng)中的目錄采用16路組相聯(lián)的cache設(shè)計,具體如下所述:
現(xiàn)有的目錄容量計算如下:
假設(shè)index字段為10bit,tag字段為30bit,state字段為2bit,sharevector字段 為16bit;
則tagarray容量為:(30+2)×16×210=512kbit,其中,每一個tagentry為(30+2)=32bit,乘以16路,乘以210組(即10bit的index字段對應(yīng)210組)。
vectorarray容量為:16×16×210=256kbit。
本發(fā)明實施例的目錄容量計算如下:
假設(shè)index字段為10bit,tag字段為30bit,state字段為2bit,指針(owner/ptr)字段為4bit,sharevector字段為16bit,cnt字段為3bit;
則tagarray容量為:(30+2+4)×16×210=576kbit。
1)若vectorarray深度壓縮1/4,深度大小為28,則vectorarray容量為(16+3)×16×28=76kbit;
目錄壓縮到:(576+76)/(512+256)=84.9%;
2)若vectorarray深度壓縮1/8,深度大小為27,則vectorarray容量為(16+3)×16×27=38kbit;
目錄壓縮到:(576+38)/(512+256)=80%。
從上述對比可以看出,本發(fā)明實施例對vectorarray的容量進行了很大程度上的壓縮,從而使得目錄的整體容量減小,且壓縮后的目錄又采用一套新的查詢規(guī)則,使得改進后的目錄在查詢精度上并未受到影響,同時由于采用獨占狀態(tài)和共享狀態(tài)兩種查詢機制,還減少了目錄的查詢時間,提高了查詢效率。
上面對本發(fā)明實施例中的cc-numa多處理器系統(tǒng)中改進后的目錄結(jié)構(gòu)進行了描述,下面對本發(fā)明實施例中的緩存一致性管理方法進行描述。
請參閱圖4,圖4為本發(fā)明實施例中緩存一致性管理方法一個實施例的步驟流程圖,該方法應(yīng)用于多處理器系統(tǒng),該多處理器系統(tǒng)包含第一表單(即上述tagarray)、第二表單(即上述vectorarray)和至少兩個節(jié)點,每一個節(jié)點中包含至少一個處理器。該方法包括:
401、根據(jù)數(shù)據(jù)的地址信息,在第一表單中確定與地址信息對應(yīng)的第一表項;
系統(tǒng)在訪問跨節(jié)點數(shù)據(jù)時,會向節(jié)點控制器發(fā)送該數(shù)據(jù)所對應(yīng)的地址信 息,如:內(nèi)存地址,該地址信息包括:tag字段、index字段和offset字段。節(jié)點控制器接收到該地址信息后,會根據(jù)該地址信息在節(jié)點控制器上設(shè)置的目錄中進行查詢,以獲取獨占或共享該數(shù)據(jù)的節(jié)點。
具體地,節(jié)點控制器會先根據(jù)index字段在第一表單中確定與地址信息對應(yīng)的第一分組,再根據(jù)tag字段在第一分組中確定與地址信息對應(yīng)的第一表項。該第一表項(即上述tagentry)包含第一字段(即上述state字段)和第二字段(即上述指針字段),該第一字段用于記錄數(shù)據(jù)的占用狀態(tài),如:獨占狀態(tài)和共享狀態(tài)。
402、若第一表項中的第一字段為獨占狀態(tài),則通過第一表項中的第二字段指示獨占數(shù)據(jù)的節(jié)點;
403、若第一表項中的第一字段為共享狀態(tài),則根據(jù)數(shù)據(jù)的地址信息和第二字段,在第二表單中確定第二表項;
404、通過第二表項中的第三字段指示共享數(shù)據(jù)的節(jié)點。
節(jié)點控制器在確定了第一表項之后,會根據(jù)第一表項中的第一字段來確定地址信息所對應(yīng)的數(shù)據(jù)是被其它節(jié)點獨占還是共享。
需要說明的是,第一字段承載的信息不同,相應(yīng)的,第二字段承載的信息也將不同。如:當(dāng)?shù)谝蛔侄螢楠氄紶顟B(tài)時,則第二字段為owner指針,該owner指針用于指示獨占該數(shù)據(jù)的節(jié)點;當(dāng)?shù)谝蛔侄螢楣蚕頎顟B(tài)時,則第二字段為ptr指針,該ptr指針結(jié)合內(nèi)存地址中的index字段可用于指示第二表單中的某一個第二表項,該第二表項中包含第三字段(即上述sharevector字段),該第三字段用于指示共享該數(shù)據(jù)的節(jié)點。
可選地,為了實現(xiàn)從縱向上對第二表單進行壓縮,節(jié)點控制器根據(jù)index字段在第一表單中確定第一分組以及在第二表單中確定第二分組時,所采用的index字段略有不同。
具體地,index字段包含m位信息,其中m為大于1的正整數(shù),如:m位二進制地址。本發(fā)明實施例在第一表單中確定第一分組時,節(jié)點控制器會使用index字段中的m位信息,即index字段的全部位信息;而在第二表單中確定第二分組時,節(jié)點控制器會使用index字段中的n位信息,n為大于0且小于m的 正整數(shù),即index字段的部分位信息。也就是說,節(jié)點控制器在第二表單中確定第二分組時所使用的index字段中的二進制地址位數(shù)比在第一表單中確定第一分組時所使用的index字段中的二進制地址位數(shù)要少。
例如:index字段包含三位二進制地址,節(jié)點控制器在第一表單中確定第一分組時,使用index字段的三位二進制地址,如:000或100,則該三位二進制地址分別對應(yīng)于第一表單的第0組或第4組;節(jié)點控制器在第二表單中確定第二分組時,使用index字段的低兩位二進制地址,如:對應(yīng)于上述000或100的低兩位二進制地址,即為00,則該兩位二進制地址對應(yīng)于第二表單中的第0組。index字段的三位二進制地址對應(yīng)于第一表單中的8組,而index字段的兩位二進制地址則對應(yīng)于第二表單中的4組,第二表單中的行數(shù)比第一表單中的行數(shù)減少了一半。
當(dāng)然,節(jié)點控制器在第二表單中確定第二分組時,除了可以使用index字段的部分低位信息,也可以使用index字段的部分高位信息;除了可以使用index字段的部分連續(xù)位信息,也可以使用index字段的部分不連續(xù)位信息,具體此處不做限定。另外,節(jié)點控制器會使用index字段的多少位信息在第二表單中確定第二分組,具體此處也不做限定。
可選地,根據(jù)數(shù)據(jù)的地址信息,在第一表單中確定與地址信息對應(yīng)的第一表項之前,該方法還可以包括:
在至少兩個節(jié)點中的第一節(jié)點緩存數(shù)據(jù)時,根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項,將第一字段設(shè)置為獨占狀態(tài),并將第二字段設(shè)置為指示第一節(jié)點。
當(dāng)本節(jié)點中的數(shù)據(jù)第一次被跨節(jié)點中的第一節(jié)點緩存時,該數(shù)據(jù)被第一節(jié)點獨占。為此,節(jié)點控制器會在目錄的第一表單中創(chuàng)建記錄該數(shù)據(jù)的第一表項,并將第一表項中的第一字段設(shè)置為獨占狀態(tài),還將第一表項中的第二字段設(shè)置為指示該第一節(jié)點的owner指針。由于該數(shù)據(jù)被第一節(jié)點獨占,所以此時無需在目錄的第二表單中創(chuàng)建第二表項。
可選地,在根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項之后,該方法還包括:
在至少兩個節(jié)點中的第二節(jié)點緩存數(shù)據(jù)時,根據(jù)地址信息在第一表單中確定第一表項;
若第一字段為獨占狀態(tài),則將第一字段設(shè)置為共享狀態(tài),并根據(jù)地址信息在第二表單中確定第二分組,并在第二分組中創(chuàng)建第二表項,在第三字段中設(shè)置第一節(jié)點和第二節(jié)點的指示信息,并根據(jù)第二表項在第二表單中的位置信息設(shè)置第二字段;
若第一字段為共享狀態(tài),則根據(jù)地址信息和第二字段在第二表單中確定第二表項,并在第三字段中添加第二節(jié)點的指示信息。
當(dāng)上述數(shù)據(jù)被第一節(jié)點獨占之后,又有第二節(jié)點緩存該數(shù)據(jù)時,則該數(shù)據(jù)將由獨占狀態(tài)變?yōu)楣蚕頎顟B(tài),那么此時節(jié)點控制器會對該數(shù)據(jù)對應(yīng)的第一表項進行修改,如:將第一表項中的第一字段修改為共享狀態(tài),并將第一表項中的第二字段修改為ptr指針。同時節(jié)點控制器還將根據(jù)該數(shù)據(jù)的地址信息在第二表單中確定第二分組,并在第二分組中創(chuàng)建第二表項,還在第二表項中的第三字段中設(shè)置第一節(jié)點和第二節(jié)點的指示信息。
若在第二節(jié)點緩存該數(shù)據(jù)之前,第一節(jié)點獨占的該數(shù)據(jù)已經(jīng)修改為共享狀態(tài),那么此時節(jié)點控制器會在該數(shù)據(jù)對應(yīng)的第二表項中修改第三字段,即添加第二節(jié)點的指示信息。當(dāng)然,節(jié)點控制器還可以不修改第二表項的內(nèi)容,而是在第二表單中另外創(chuàng)建第四表項,并在第四表項中的第四字段中設(shè)置第二節(jié)點的指示信息。具體此處不做限定。
可選地,在根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項之后,該方法還包括:
在至少兩個節(jié)點中的第二節(jié)點緩存數(shù)據(jù)時,根據(jù)地址信息在第一表單中確定第一表項;
若第一字段為獨占狀態(tài),則將第一字段設(shè)置為共享狀態(tài),并根據(jù)地址信息在第二表單中確定第二分組,并在第二分組中查找指示信息包含第一節(jié)點和第二節(jié)點的第三表項,并將第三表項確定為第二表項,并根據(jù)第二表項在第二表單中的位置信息設(shè)置第二字段。
當(dāng)?shù)谝还?jié)點獨占的數(shù)據(jù)被第二節(jié)點共享時,此時也可以不在第二表單中創(chuàng)建第二表項,而是根據(jù)數(shù)據(jù)的地址信息在第二表單中確定第二分組,并在第二分組中查找是否有包含第一節(jié)點和第二節(jié)點指示信息的第三表項,如果有,那么為了避免第二表單出現(xiàn)冗余,節(jié)點控制器可以不必在第二表單中創(chuàng) 建與第三表項相同的第二表項,而是將該第三表項當(dāng)作第二表項,并根據(jù)該第三表項在第二表單中的位置信息設(shè)置第一表項的第二字段。這樣也可以在一定程度上對第二表單進行壓縮,從而降低整個目錄的容量。
可選地,根據(jù)數(shù)據(jù)的地址信息,在第一表單中確定與地址信息對應(yīng)的第一表項之前,該方法還包括:
在至少兩個節(jié)點中的第一節(jié)點緩存數(shù)據(jù)時,根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項,將第一字段設(shè)置為共享狀態(tài),并根據(jù)地址信息在第二表單中確定第二分組,并在第二分組中查找指示信息包含第一節(jié)點的第三表項,并將第三表項確定為第二表項,并根據(jù)第二表項在第二表單中的位置信息設(shè)置第二字段。
數(shù)據(jù)在第一次緩存時,也有可能是以共享狀態(tài)緩存,那么節(jié)點控制器需要在第一表單中為該數(shù)據(jù)創(chuàng)建第一表項,但是可以不急于在第二表單確定的第二分組中創(chuàng)建第二表項,而是先在第二表單確定的第二分組中查找是否有包含第一節(jié)點指示信息的第三表項,如果有,那么可以按照上述方法共用該第三表項,從而避免第二表單出現(xiàn)冗余。當(dāng)然,在第二表單中查找不到包含第一節(jié)點指示信息的第三表項的情況下,則需要在第二表單中創(chuàng)建第二表項。
可選地,根據(jù)數(shù)據(jù)的地址信息,在第一表單中確定與地址信息對應(yīng)的第一表項之前,該方法還包括:
在至少兩個節(jié)點中的第一節(jié)點緩存數(shù)據(jù)時,根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項,將第一字段設(shè)置為共享狀態(tài),并根據(jù)地址信息在第二表單中確定第二分組,并在第二分組中創(chuàng)建第二表項,在第三字段中設(shè)置第一節(jié)點的指示信息,并根據(jù)第二表項在第二表單中的位置信息設(shè)置第二字段。
當(dāng)本節(jié)點中的數(shù)據(jù)第一次被跨節(jié)點中的第一節(jié)點緩存時,該數(shù)據(jù)也可以是被第一節(jié)點共享的。為此,節(jié)點控制器會在目錄的第一表單中創(chuàng)建記錄該數(shù)據(jù)的第一表項,并將第一表項中的第一字段設(shè)置為共享狀態(tài),還將在目錄的第二表單中確定第二分組,并在第二分組中創(chuàng)建第二表項,并在第二表項的第三字段中設(shè)置第一節(jié)點的指示信息,同時還根據(jù)第二表項在第二表單中的位置信息設(shè)置第一表項的第二字段,該第二字段采用ptr指針。
可選地,在根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項之后,該方法還包括:
在至少兩個節(jié)點中的第二節(jié)點緩存數(shù)據(jù)時,根據(jù)地址信息在第一表單中確定第一表項,根據(jù)數(shù)據(jù)的地址信息和第二字段,在第二表單中確定第二表項,并在第三字段中添加第二節(jié)點的指示信息。
當(dāng)?shù)谝还?jié)點共享的數(shù)據(jù)再一次被第二節(jié)點共享時,節(jié)點控制器可以對該數(shù)據(jù)對應(yīng)的第二表項中的第三字段進行修改,即添加第二節(jié)點的指示信息。當(dāng)然,節(jié)點控制器還可以不修改第二表項的內(nèi)容,而是在第二表單中另外創(chuàng)建第四表項,并在第四表項中的第四字段中設(shè)置第二節(jié)點的指示信息。具體此處不做限定。
上面對本發(fā)明實施例中的緩存一致性管理方法進行了描述,下面對本發(fā)明實施例中的節(jié)點控制器進行描述。
請參閱圖5,圖5為發(fā)明實施例中節(jié)點控制器一個實施例的模塊框圖,該節(jié)點控制器應(yīng)用于多處理器系統(tǒng),該多處理器系統(tǒng)包含第一表單、第二表單和至少兩個節(jié)點,每一個節(jié)點中包含至少一個處理器,該節(jié)點控制器包括:
第一確定模塊501,用于根據(jù)數(shù)據(jù)的地址信息,在第一表單中確定與地址信息對應(yīng)的第一表項,第一表項包含第一字段和第二字段,第一字段用于記錄數(shù)據(jù)的占用狀態(tài),當(dāng)?shù)谝蛔侄螢楠氄紶顟B(tài)時,則第二字段用于指示獨占數(shù)據(jù)的節(jié)點;
第二確定模塊502,用于當(dāng)?shù)谝蛔侄螢楣蚕頎顟B(tài)時,根據(jù)數(shù)據(jù)的地址信息和第二字段,在第二表單中確定第二表項,第二表項中包含第三字段,第三字段用于指示共享數(shù)據(jù)的節(jié)點。
可選地,該地址信息包含tag字段和index字段;
第一確定模塊501用于根據(jù)數(shù)據(jù)的地址信息,在第一表單中確定與地址信息對應(yīng)的第一表項具體可以包括:
第一確定模塊501用于根據(jù)index字段在第一表單中確定與地址信息對應(yīng)的第一分組,并根據(jù)tag字段在第一分組中確定與地址信息對應(yīng)的第一表項;
第二確定模塊502用于當(dāng)?shù)谝蛔侄螢楣蚕頎顟B(tài)時,根據(jù)數(shù)據(jù)的地址信息和第二字段,在第二表單中確定第二表項具體可以包括:
第二確定模塊502用于根據(jù)index字段在第二表單中確定第二分組,并根據(jù)第二字段在第二分組中確定第二表項。
可選地,該index字段包含m位信息,其中,m為大于1的正整數(shù);
第二確定模塊502用于根據(jù)index字段在第二表單中確定第二分組,并根據(jù)第二字段在第二分組中確定第二表項具體可以包括:
第二確定模塊502用于根據(jù)index字段中的n位信息在第二表單中確定第二分組,其中n為大于0且小于m的正整數(shù)。
可選地,該節(jié)點控制器還可以包括:創(chuàng)建模塊503和設(shè)置模塊504;
第一確定模塊501根據(jù)數(shù)據(jù)的地址信息,在第一表單中確定與地址信息對應(yīng)的第一表項之前,創(chuàng)建模塊503用于在至少兩個節(jié)點中的第一節(jié)點緩存數(shù)據(jù)時,根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項,設(shè)置模塊504用于將第一字段設(shè)置為獨占狀態(tài),并將第二字段設(shè)置為指示第一節(jié)點。
可選地,創(chuàng)建模塊503根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項之后,第一確定模塊501還用于在至少兩個節(jié)點中的第二節(jié)點緩存數(shù)據(jù)時,根據(jù)地址信息在第一表單中確定第一表項;
若第一字段為獨占狀態(tài),則設(shè)置模塊504還用于將第一字段設(shè)置為共享狀態(tài),第二確定模塊502還用于根據(jù)地址信息在第二表單中確定第二分組,創(chuàng)建模塊503還用于在第二分組中創(chuàng)建第二表項,設(shè)置模塊504還用于在第三字段中設(shè)置第一節(jié)點和第二節(jié)點的指示信息,并根據(jù)第二表項在第二表單中的位置信息設(shè)置第二字段;
若第一字段為共享狀態(tài),則第二確定模塊502還用于根據(jù)地址信息和第二字段在第二表單中確定第二表項,設(shè)置模塊504還用于在第三字段中添加第二節(jié)點的指示信息。
可選地,該節(jié)點控制器還可以包括:查找模塊505;
創(chuàng)建模塊503根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項之后,第一確定模塊501還用于在至少兩個節(jié)點中的第二節(jié)點緩存數(shù)據(jù)時,根據(jù)地址信息在第一表單中確定第一表項;
若第一字段為獨占狀態(tài),則設(shè)置模塊504還用于將第一字段設(shè)置為共享 狀態(tài),第二確定模塊502還用于根據(jù)地址信息在第二表單中確定第二分組,查找模塊505用于在第二分組中查找指示信息包含第一節(jié)點和第二節(jié)點的第三表項,第二確定模塊502還用于將第三表項確定為第二表項,設(shè)置模塊504還用于根據(jù)第二表項在第二表單中的位置信息設(shè)置第二字段。
可選地,第一確定模塊501根據(jù)數(shù)據(jù)的地址信息,在第一表單中確定與地址信息對應(yīng)的第一表項之前,創(chuàng)建模塊503用于在至少兩個節(jié)點中的第一節(jié)點緩存數(shù)據(jù)時,根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項,設(shè)置模塊504用于將第一字段設(shè)置為共享狀態(tài),第二確定模塊502還用于根據(jù)地址信息在第二表單中確定第二分組,查找模塊505用于在第二分組中查找指示信息包含第一節(jié)點的第三表項,第二確定模塊502還用于將第三表項確定為第二表項,設(shè)置模塊504還用于根據(jù)第二表項在第二表單中的位置信息設(shè)置第二字段。
可選地,第一確定模塊501根據(jù)數(shù)據(jù)的地址信息,在第一表單中確定與地址信息對應(yīng)的第一表項之前,創(chuàng)建模塊503用于在至少兩個節(jié)點中的第一節(jié)點緩存數(shù)據(jù)時,根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項,設(shè)置模塊504用于將第一字段設(shè)置為共享狀態(tài),第二確定模塊502還用于根據(jù)地址信息在第二表單中確定第二分組,創(chuàng)建模塊503還用于在第二分組中創(chuàng)建第二表項,設(shè)置模塊504還用于在第三字段中設(shè)置第一節(jié)點的指示信息,并根據(jù)第二表項在第二表單中的位置信息設(shè)置第二字段。
可選地,創(chuàng)建模塊503根據(jù)數(shù)據(jù)在第一表單中創(chuàng)建第一表項之后,第一確定模塊501還用于在至少兩個節(jié)點中的第二節(jié)點緩存數(shù)據(jù)時,根據(jù)地址信息在第一表單中確定第一表項;第二確定模塊502還用于根據(jù)數(shù)據(jù)的地址信息和第二字段,在第二表單中確定第二表項,設(shè)置模塊504還用于在第三字段中添加第二節(jié)點的指示信息。
圖6是依據(jù)本發(fā)明一實施例的節(jié)點控制器600的硬件結(jié)構(gòu)示意圖。如圖6所示,節(jié)點控制器600包括處理器602、存儲器604、輸入/輸出接口606、通信接口608和總線610。其中,處理器602、存儲器604、輸入/輸出接口606和通信接口608通過總線610實現(xiàn)彼此之間的通信連接。
處理器602可以采用通用的中央處理器(centralprocessingunit,cpu), 微處理器,應(yīng)用專用集成電路(applicationspecificintegratedcircuit,asic),或者一個或多個集成電路,用于執(zhí)行相關(guān)程序,以實現(xiàn)本發(fā)明實施例所提供的技術(shù)方案。
存儲器604可以是只讀存儲器(readonlymemory,rom),靜態(tài)存儲設(shè)備,動態(tài)存儲設(shè)備或者隨機存取存儲器(randomaccessmemory,ram)。存儲器604可以存儲操作系統(tǒng)和其他應(yīng)用程序。在通過軟件或者固件來實現(xiàn)本發(fā)明實施例提供的技術(shù)方案時,用于實現(xiàn)本發(fā)明實施例提供的技術(shù)方案的程序代碼保存在存儲器604中,并由處理器602來執(zhí)行。
輸入/輸出接口606用于接收輸入的數(shù)據(jù)和信息,輸出操作結(jié)果等數(shù)據(jù)。
通信接口608使用例如但不限于收發(fā)器一類的收發(fā)裝置,來實現(xiàn)節(jié)點控制器600與其他設(shè)備或通信網(wǎng)絡(luò)之間的通信。
總線610可包括一通路,在節(jié)點控制器600各個部件(例如處理器602、存儲器604、輸入/輸出接口606和通信接口608)之間傳送信息。
應(yīng)注意,盡管圖6所示的節(jié)點控制器600僅僅示出了處理器602、存儲器604、輸入/輸出接口606、通信接口608以及總線610,但是在具體實現(xiàn)過程中,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)明白,節(jié)點控制器600還包含實現(xiàn)正常運行所必須的其他器件。同時,根據(jù)具體需要,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)明白,節(jié)點控制器600還可包含實現(xiàn)其他附加功能的硬件器件。此外,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)明白,節(jié)點控制器600也可僅僅包含實現(xiàn)本發(fā)明實施例所必須的器件,而不必包含圖6中所示的全部器件。
圖6所示的硬件結(jié)構(gòu)以及上述描述適用于本發(fā)明實施例所提供的各種節(jié)點控制器及緩存一致性管理系統(tǒng),適用于執(zhí)行本發(fā)明實施例所提供的各種緩存一致性管理方法。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示 意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述,以上實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍。