本發(fā)明涉及l(fā)inux NUMA架構(gòu)技術(shù)領(lǐng)域,更具體地說,涉及一種基于NUMA架構(gòu)的頁緩存讀取方法及系統(tǒng)。
背景技術(shù):
NUMA,非統(tǒng)一內(nèi)存訪問(Non-uniform Memory Access),介于SMP(對稱多處理)和MPP(大規(guī)模并行處理)之間,各個節(jié)點自有內(nèi)存(甚至IO子系統(tǒng)),訪問其它節(jié)點的內(nèi)存則通過高速網(wǎng)絡(luò)通道。在這個架構(gòu)中,每個處理器有其可以直接訪問其自身的“本地”內(nèi)存池,使CPU和本地內(nèi)存之間擁有更小的延遲和更大的帶寬。而且整個內(nèi)存仍然可做為一個整體,可以接受來自任何CPU的訪問。簡言之就是CPU訪問自己領(lǐng)地內(nèi)的內(nèi)存延遲最小獨占帶寬,訪問其他的內(nèi)存區(qū)域稍慢并且共享帶寬,但是跨CPU節(jié)點的內(nèi)存訪問會導(dǎo)致性能下降。
因此,如何避免跨節(jié)點內(nèi)存訪問,提升頁緩存讀取操作的性能,是本領(lǐng)域技術(shù)人員需要解決的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種基于NUMA架構(gòu)的頁緩存讀取方法及系統(tǒng),以實現(xiàn)避免跨節(jié)點內(nèi)存訪問,提升頁緩存讀取操作的性能。
為實現(xiàn)上述目的,本發(fā)明實施例提供了如下技術(shù)方案:
一種基于NUMA架構(gòu)的頁緩存讀取方法,包括:
當(dāng)前CPU節(jié)點接收目標頁緩存讀取指令時,根據(jù)所述讀取指令從頁高速緩存查找目標頁緩存;
若其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存,且所述目標頁緩存未置臟,則將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存中,以使其他CPU節(jié)點直接從本地內(nèi)存中讀取所述目標頁緩存。
其中,若其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存,包括:
判斷所述目標頁緩存的頁復(fù)制標志是否被置位;
若被置位,則判定其他CPU節(jié)點的本地內(nèi)存中存在所述目標頁緩存,并返回當(dāng)前CPU節(jié)點的頁地址;若未被置位,則判定其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存。
其中,將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存時,通過原生頁快速查找其他CPU節(jié)點上被復(fù)制的頁,并在原生頁的描述符中添加以其他CPU node的頁地址為節(jié)點的基樹。
其中,將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存中之后,還包括:
若檢測到所述目標頁緩存被置臟,則由回收模塊將所有CPU節(jié)點中的目標頁緩存進行回收。
一種基于NUMA架構(gòu)的頁緩存讀取系統(tǒng),包括:
目標頁緩存查找模塊,用于當(dāng)前CPU節(jié)點接收目標頁緩存讀取指令時,根據(jù)所述讀取指令從頁高速緩存查找目標頁緩存;
復(fù)制模塊,用于當(dāng)其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存,且所述目標頁緩存未置臟,則將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存中,以使其他CPU節(jié)點直接從本地內(nèi)存中讀取所述目標頁緩存。
其中,所述復(fù)制模塊包括:
判斷單元,用于判斷所述目標頁緩存的頁復(fù)制標志是否被置位;若被置位,則判定其他CPU節(jié)點的本地內(nèi)存中存在所述目標頁緩存,并返回當(dāng)前CPU節(jié)點的頁地址;若未被置位,則判定其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存。
其中,所述復(fù)制模塊將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存時,通過原生頁快速查找其他CPU節(jié)點上被復(fù)制的頁,并在原生頁的描述符中添加以其他CPU node的頁地址為節(jié)點的基樹。
其中,還包括:
回收模塊,用于當(dāng)檢測到所述目標頁緩存被置臟,則將所有CPU節(jié)點中的目標頁緩存進行回收。
通過以上方案可知,本發(fā)明實施例提供的一種基于NUMA架構(gòu)的頁緩存讀取方法及系統(tǒng),包括:當(dāng)前CPU節(jié)點接收目標頁緩存讀取指令時,根據(jù)所述讀取指令從頁高速緩存查找目標頁緩存;若其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存,且所述目標頁緩存未置臟,則將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存中,以使其他CPU節(jié)點直接從本地內(nèi)存中讀取所述目標頁緩存;可見,在本實施例中,通過將頁緩存在每個CPU的節(jié)點中都有一份拷貝,在linux內(nèi)核內(nèi)存子系統(tǒng)查找文件的頁緩存時,避免了當(dāng)前CPU去訪問其他CPU node節(jié)點的內(nèi)存,由于頁緩存在所有的node節(jié)點的本地內(nèi)存中都維持一份頁緩存的備份,因此能夠通過減少垮節(jié)點訪問的次數(shù)來提升頁緩存讀取操作的性能。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例公開的一種基于NUMA架構(gòu)的頁緩存讀取方法流程示意圖;
圖2為本發(fā)明實施例公開的以cpu node的頁地址為節(jié)點的基樹結(jié)構(gòu)示意圖;
圖3為本發(fā)明實施例公開的一種基于NUMA架構(gòu)的頁緩存讀取系統(tǒng)結(jié)構(gòu)框圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例公開了一種基于NUMA架構(gòu)的頁緩存讀取方法及系統(tǒng),以實現(xiàn)避免跨節(jié)點內(nèi)存訪問,提升頁緩存讀取操作的性能。
參見圖1,本發(fā)明實施例提供的一種基于NUMA架構(gòu)的頁緩存讀取方法,包括:
S101、當(dāng)前CPU節(jié)點接收目標頁緩存讀取指令時,根據(jù)所述讀取指令從頁高速緩存查找目標頁緩存;
具體的,在本方案中,當(dāng)系統(tǒng)進程訪問文件的內(nèi)容時,首先通過查找頁高速緩存,如果進程想要獲取的頁是最新的且未置臟且未被復(fù)制,則在其他所有的node節(jié)點的本地內(nèi)存中都復(fù)制一份,然后返回當(dāng)前CPU所在節(jié)點的本地內(nèi)存頁的地址,若下次再被訪問時,如果已被復(fù)制,則直接返回當(dāng)前CPU所在節(jié)點的本地內(nèi)存頁的地址。
S102、若其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存,且所述目標頁緩存未置臟,則將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存中,以使其他CPU節(jié)點直接從本地內(nèi)存中讀取所述目標頁緩存。
其中,若其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存,包括:
判斷所述目標頁緩存的頁復(fù)制標志是否被置位;
若被置位,則判定其他CPU節(jié)點的本地內(nèi)存中存在所述目標頁緩存,并返回當(dāng)前CPU節(jié)點的頁地址;若未被置位,則判定其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存。
具體的,在本實施例中判斷頁緩存是否復(fù)制,是基于頁描述符的flag標志,添加頁復(fù)制的標志位;當(dāng)該頁在所有的CPU節(jié)點的本地內(nèi)存中都有一份時則置位。當(dāng)系統(tǒng)在頁高速緩存中查找到該頁時,首先判斷頁復(fù)制標志是否被置位,如果被置位則返回當(dāng)前CPU節(jié)點的頁地址。
其中,將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存時,通過原生頁快速查找其他CPU節(jié)點上被復(fù)制的頁,并在原生頁的描述符中添加以其他CPU node的頁地址為節(jié)點的基樹。具體的,參見圖2,為本實施例提供的以cpu node的頁地址為節(jié)點的基樹結(jié)構(gòu)示意圖,圖中虛線以上的部分是內(nèi)核原有的結(jié)構(gòu),虛線以下的部分是本實施例中添加的結(jié)構(gòu),用于記錄被復(fù)制的頁在每個CPU node上是否已被復(fù)制。
具體的,在本實施例中每個CPU node節(jié)點都有自己的本地內(nèi)存,CPU訪問本node節(jié)點的本地內(nèi)存的速度要快于訪問其他節(jié)點的內(nèi)存,當(dāng)頁被復(fù)制時在不影響原有頁高速緩存基樹的情況下,需要通過原生頁快速查找到其他cpu node節(jié)點上被復(fù)制的頁,包括使用當(dāng)前cpu的id查找到其對應(yīng)的頁地址,這里采用在原生頁的描述符中添加以CPU node的頁地址為節(jié)點的基樹結(jié)構(gòu)來實現(xiàn)。
其中,將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存中之后,還包括:若檢測到所述目標頁緩存被置臟,則由回收模塊將所有CPU節(jié)點中的目標頁緩存進行回收。
具體的,當(dāng)復(fù)制的頁出現(xiàn)回寫置臟時,需要將所有CPU node節(jié)點上復(fù)制的頁進行回收,以保持數(shù)據(jù)一致性。
下面對本發(fā)明實施例提供的頁緩存讀取系統(tǒng)進行介紹,下文描述的頁緩存讀取系統(tǒng)與上文描述的頁緩存讀取方法可以相互參照。
參見圖3,提供的一種基于NUMA架構(gòu)的頁緩存讀取系統(tǒng),包括:
目標頁緩存查找模塊100,用于當(dāng)前CPU節(jié)點接收目標頁緩存讀取指令時,根據(jù)所述讀取指令從頁高速緩存查找目標頁緩存;
復(fù)制模塊200,用于當(dāng)其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存,且所述目標頁緩存未置臟,則將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存中,以使其他CPU節(jié)點直接從本地內(nèi)存中讀取所述目標頁緩存。
基于上述技術(shù)方案,所述復(fù)制模塊包括:
判斷單元,用于判斷所述目標頁緩存的頁復(fù)制標志是否被置位;若被置位,則判定其他CPU節(jié)點的本地內(nèi)存中存在所述目標頁緩存,并返回當(dāng)前CPU節(jié)點的頁地址;若未被置位,則判定其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存。
基于上述技術(shù)方案,所述復(fù)制模塊將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存時,通過原生頁快速查找其他CPU節(jié)點上被復(fù)制的頁,并在原生頁的描述符中添加以其他CPU node的頁地址為節(jié)點的基樹。
基于上述技術(shù)方案,還包括:
回收模塊,用于當(dāng)檢測到所述目標頁緩存被置臟,則將所有CPU節(jié)點中的目標頁緩存進行回收。
具體的,在本方案在具體實施使,首先修改linux內(nèi)核源碼,在內(nèi)核內(nèi)存子系統(tǒng)中添加判斷單元、復(fù)制模塊200和回收模塊這三個模塊的代碼。修改完內(nèi)核代碼,然后編程生成新的linux內(nèi)核,將編譯生成的新內(nèi)核替換掉專用系統(tǒng)原有的linux內(nèi)核。
本發(fā)明實施例提供的一種基于NUMA架構(gòu)的頁緩存讀取方法及系統(tǒng),包括:當(dāng)前CPU節(jié)點接收目標頁緩存讀取指令時,根據(jù)所述讀取指令從頁高速緩存查找目標頁緩存;若其他CPU節(jié)點的本地內(nèi)存中不存在所述目標頁緩存,且所述目標頁緩存未置臟,則將所述目標頁緩存復(fù)制至其他CPU節(jié)點的本地內(nèi)存中,以使其他CPU節(jié)點直接從本地內(nèi)存中讀取所述目標頁緩存;可見,在本實施例中,通過將頁緩存在每個CPU的節(jié)點中都有一份拷貝,在linux內(nèi)核內(nèi)存子系統(tǒng)查找文件的頁緩存時,避免了當(dāng)前CPU去訪問其他CPU node節(jié)點的內(nèi)存,由于頁緩存在所有的node節(jié)點的本地內(nèi)存中都維持一份頁緩存的備份,因此能夠通過減少垮節(jié)點訪問的次數(shù)來提升頁緩存讀取操作的性能。
本說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。
對所公開的實施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。