專利名稱:基于cpu寄存器的內(nèi)存性能監(jiān)控方法與裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)科學(xué)技術(shù)領(lǐng)域,特別涉及一種基于CPU寄存器的內(nèi)存性能監(jiān)控方法與裝置。
背景技術(shù):
隨著計(jì)算機(jī)技術(shù)的發(fā)展,互聯(lián)網(wǎng)的興起,計(jì)算機(jī)的數(shù)據(jù)量呈爆炸式增長(zhǎng),因此需要更強(qiáng)大的計(jì)算能力作為支持。隨之帶來(lái)的是服務(wù)器產(chǎn)品越來(lái)越復(fù)雜,服務(wù)器產(chǎn)品涉及CPU、內(nèi)存、SSD (Solid State Disk,固態(tài)硬盤(pán))、硬盤(pán)、網(wǎng)卡等多種硬件部件。各硬件部件在性能、容量上發(fā)展不平衡,如果配置不當(dāng),將嚴(yán)重影響整機(jī)性能。因此如何針對(duì)不同類型的軟件應(yīng)用,選擇合適的硬件配置,逐漸成為挑戰(zhàn)。為了針對(duì)不同類型的軟件應(yīng)用,選擇合適的硬件配置,需要對(duì)服務(wù)器內(nèi)存系統(tǒng)需求進(jìn)行評(píng)定。評(píng)定內(nèi)容除了傳統(tǒng)的容量需求,還需對(duì)服務(wù)器內(nèi)存使用情況進(jìn)行監(jiān)控?,F(xiàn)有技術(shù)對(duì)于內(nèi)存使用情況的監(jiān)控一般有兩種方法,下面以目前使用廣泛的X86服務(wù)器為例對(duì)這兩種方法進(jìn)行介紹:(一)、采用操作系統(tǒng)中提供的命令進(jìn)行監(jiān)控,如top、free等命令。(二)、通過(guò)內(nèi)存的標(biāo)稱值直接得到,或通過(guò)公式:內(nèi)存性能=內(nèi)存工作頻率X內(nèi)存總線寬度/8計(jì)算得到內(nèi)存性能。然而,現(xiàn)有方案有如下缺點(diǎn):對(duì)于第一種方案,雖然可以做到實(shí)時(shí)監(jiān)控,但是只限于對(duì)于內(nèi)存的使用量進(jìn)行監(jiān)控,而沒(méi)有對(duì)內(nèi)存性能進(jìn)行實(shí)時(shí)監(jiān)控。對(duì)于第二種方案,得到的結(jié)果只是理論的數(shù)值,而非實(shí)時(shí)監(jiān)控的結(jié)果。無(wú)法對(duì)不同的應(yīng)用程序檢測(cè)內(nèi)存的性能,得到實(shí)際的使用情況,因此導(dǎo)致內(nèi)存性能沒(méi)有完全發(fā)揮或者已經(jīng)發(fā)揮到極限的現(xiàn)象。同時(shí),現(xiàn)有的內(nèi)存帶寬分析技術(shù)僅基于內(nèi)存的頻率,無(wú)法實(shí)時(shí)獲取在實(shí)際應(yīng)用情況下內(nèi)存的讀寫(xiě)帶寬。
發(fā)明內(nèi)容
本發(fā)明旨在至少解決現(xiàn)有技術(shù)中存在的技術(shù)問(wèn)題之一。為此,本發(fā)明的一個(gè)目的在于提出一種基于CPU寄存器的內(nèi)存性能監(jiān)控方法,基于CPU,實(shí)時(shí)監(jiān)控內(nèi)存性能,從而為內(nèi)存選型提供有效的指導(dǎo)建議,降低成本,提高工作效率。 本發(fā)明的第二個(gè)目的在于提出一種基于CPU寄存器的內(nèi)存性能監(jiān)控裝置.
為達(dá)到上述目的,本發(fā)明第一方面的實(shí)施例提出了一種基于CPU寄存器的內(nèi)存性能監(jiān)控方法,包括如下步驟:檢測(cè)CPU的類型;根據(jù)所述CPU的類型獲取單位時(shí)間內(nèi)的CPU的三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度;根據(jù)所述三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度計(jì)算所述CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。
根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控方法檢測(cè)CPU的類型,獲取CPU的三級(jí)緩存的缺失次數(shù)、回寫(xiě)次數(shù)和緩存長(zhǎng)度,計(jì)算出CPU內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。根據(jù)本發(fā)明的實(shí)施例能夠與X86CPU兼容,并能夠?qū)?nèi)存性能的實(shí)際使用情況進(jìn)行實(shí)時(shí)監(jiān)控,豐富了 CPU內(nèi)存監(jiān)控的內(nèi)容。能夠更好的指導(dǎo)內(nèi)存的選型,為不同應(yīng)用程序定制內(nèi)存型號(hào),提高了效率,節(jié)省了成本。在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)檢測(cè)到CPU的類型為WESTMERE_EP或NEHALEM_EP時(shí),利用MSR_UNCORE_PerfCntr η寄存器作為計(jì)數(shù)器,其中,每個(gè)MSR_UNCORE_PerfCntr η寄存器對(duì)應(yīng)一個(gè) MSR_UNCORE_PerfEvtSelx 配置寄存,MSR_UNCORE_PerfEvtSelx 寄存器包括功能掩碼位和功能選擇位,通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作;根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄;通過(guò)讀取MSR_UNCORE_PerfCntr η中的值獲得相應(yīng)的讀寫(xiě)次數(shù)。在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)檢測(cè)到CPU的類型為NEHALEM_EX或NEHALEM_EX時(shí),利用M-Box中的控制計(jì)數(shù)單元MSR_M0_PM0N_CTR0和MSR_M1_PM0N_CTR對(duì)讀操作計(jì)數(shù)和控制;利用B-Box中的控制計(jì)數(shù)單元MSR_B0_PM0N_CTR1和MSR_B1_PM0N_CTR1寫(xiě)操作計(jì)數(shù)和控制;通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作; 根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄;通過(guò)讀取M-Box和B-Box的值獲得相應(yīng)的讀寫(xiě)次數(shù)。在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)檢測(cè)到CPU的類型為Sandy Bridge-ΕΡ時(shí),利用_ap函數(shù)將所述CPU不同的通道根據(jù)其基地址映射至內(nèi)存,對(duì)于被映射的通道,利用對(duì)應(yīng)的PmonCntr_0和PmonCntr_l兩個(gè)地址空間作為讀寫(xiě)計(jì)數(shù)器,其中所述PmonCntr_0地址空間的功能,通過(guò)PmonCntrCfg_0寄存器指定,所述PmonCntr_l地址空間的功能通過(guò)PmonCntrCfg_l寄存器指定,其中,PmonCntrCfg_x包括功能掩碼位和功能選擇位;通過(guò)讀取功能選擇位中的相應(yīng)位對(duì)讀寫(xiě)次數(shù)進(jìn)行記錄,以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù);根據(jù)讀寫(xiě)次數(shù)和和三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù)從通道中獲得讀寫(xiě)三次緩存的次數(shù)。在本發(fā)明的一個(gè)實(shí)施例中,所述根據(jù)所述三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度計(jì)算所述CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度,包括如下步驟:將所述三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)與所述緩存長(zhǎng)度進(jìn)行乘法運(yùn)算得到所述CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。本發(fā)明第二方面的實(shí)施例提出了一種基于CPU寄存器的內(nèi)存性能監(jiān)控裝置,包括檢測(cè)模塊、獲取模塊和計(jì)算模塊。檢測(cè)模塊用于檢測(cè)CPU的類型;獲取模塊用于根據(jù)所述CPU的類型獲取單位時(shí)間內(nèi)的CPU的三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度;計(jì)算模塊用于根據(jù)所述三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度計(jì)算所述CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控裝置,檢測(cè)模塊檢測(cè)CPU的類型,獲取模塊獲取CPU的三級(jí)緩存的缺失次數(shù)、回寫(xiě)次數(shù)和緩存長(zhǎng)度,計(jì)算模塊計(jì)算出CPU內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。根據(jù)本發(fā)明的實(shí)施例能夠與X86CPU兼容,并能夠?qū)?nèi)存性能的實(shí)際使用情況進(jìn)行實(shí)時(shí)監(jiān)控,豐富了 CPU內(nèi)存監(jiān)控的內(nèi)容。能夠更好的指導(dǎo)內(nèi)存的選型,為不同應(yīng)用程序定制內(nèi)存型號(hào),提高了效率,節(jié)省了成本。在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)所述檢測(cè)模塊檢測(cè)到CPU的類型為WESTMERE_EP或NEHALEM_EP時(shí),所述獲取模塊利用MSR_UNCORE_PerfCntr η寄存器作為計(jì)數(shù)器,其中,每個(gè) MSR_UNCORE_PerfCntr η 寄存器對(duì)應(yīng)一個(gè) MSR_UNCORE_PerfEvtSelx 配置寄存,MSR_UNCORE_PerfEVtSelX寄存器包括功能掩碼位和功能選擇位,所述獲取模塊通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作,所述獲取模塊根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄,所述獲取模塊通過(guò)讀取MSR_UNCORE_PerfCntr η中的值獲得相應(yīng)的讀寫(xiě)次數(shù)。在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)所述檢測(cè)模塊檢測(cè)到CPU的類型為NEHALEM_EX或NEHALEM_EX時(shí),所述獲取模塊利用M-Box中的控制計(jì)數(shù)單元MSR_M0_PM0N_CTR0和MSR_M1_PM0N_CTR對(duì)讀操作計(jì)數(shù)和控制,利用B-Box中的控制計(jì)數(shù)單元MSR_B0_PM0N_CTR1和MSR_B1_PM0N_CTR1寫(xiě)操作計(jì)數(shù)和控制,所述獲取模塊通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù) 和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作,所述獲取模塊根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄,通過(guò)讀取M-Box和B-Box的值獲得相應(yīng)的讀寫(xiě)次數(shù)。在本發(fā)明的一個(gè)實(shí)施例中,當(dāng)所述檢測(cè)模塊檢測(cè)到CPU的類型為SandyBridge-EP時(shí),所述獲取模塊利用_ap函數(shù)將所述CPU不同的通道根據(jù)其基地址映射至內(nèi)存,對(duì)于被映射的通道,利用對(duì)應(yīng)的PmonCntr_0和PmonCntr_l兩個(gè)地址空間作為讀寫(xiě)計(jì)數(shù)器,其中所述PmonCntr_0地址空間的功能,通過(guò)PmonCntrCfg_0寄存器指定,所述PmonCntr_l地址空間的功能通過(guò)PmonCntrCfg_l寄存器指定,其中,PmonCntrCfg_x包括功能掩碼位和功能選擇位,所述獲取模塊通過(guò)讀取功能選擇位中的相應(yīng)位對(duì)讀寫(xiě)次數(shù)進(jìn)行記錄,以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù),所述獲取模塊根據(jù)讀寫(xiě)次數(shù)和和三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù)從通道中獲得讀寫(xiě)三次緩存的次數(shù)。在本發(fā)明的一個(gè)實(shí)施例中,所述計(jì)算模塊將所述三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)與所述緩存長(zhǎng)度進(jìn)行乘法運(yùn)算得到所述CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。本發(fā)明的附加方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過(guò)本發(fā)明的實(shí)踐了解到。
本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中:圖1是根據(jù)本發(fā)明第一實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控方法的流程圖;圖2是根據(jù)本發(fā)明實(shí)施例的某CPU的內(nèi)存體系結(jié)構(gòu)示意圖;圖3是根據(jù)本發(fā)明第二實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控方法的流程圖;和圖4是根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。下面參考圖1描述根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控方法,包括以下步驟:步驟SllO:檢測(cè)CPU的類型。步驟S120:根據(jù)CPU的類型獲取單位時(shí)間內(nèi)的CPU的三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度。步驟S130:根據(jù)三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度計(jì)算CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控方法能夠兼容基于X86CPU的產(chǎn)品,下面以本方法在不同類型的X86CPU上的應(yīng)用為實(shí)例對(duì)本方法進(jìn)行詳細(xì)介紹??梢岳斫獾氖?,對(duì)于在X86CPU上的實(shí)施例僅出于實(shí)例目的,根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控方法不限于此。圖2所示為某CPU的內(nèi)存體系結(jié)構(gòu),CPU100包括內(nèi)核110、一級(jí)緩存(Llcache) 120、二級(jí)緩存(L2cache) 130、三級(jí)緩存(L3cache) 140和內(nèi)存控制器150。其中,內(nèi)核可以有多個(gè),從高速緩存中讀取數(shù)據(jù),高速緩存分為一級(jí)緩存、二級(jí)緩存和三級(jí)緩存,CPU訪問(wèn)順序優(yōu)先順序?yàn)橐患?jí)緩存、二級(jí)緩存、三級(jí)緩存。高速緩存與內(nèi)存控制器150相連,內(nèi)存控制器150控制內(nèi)存200與CPU100之間的數(shù)據(jù)交換。本例中使用DRAM (DynamicRandom Access Memory,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器)作為內(nèi)存。DRAM為目前常見(jiàn)的系統(tǒng)內(nèi)存類型??梢岳斫獾氖?,上述體系結(jié)構(gòu)僅出于示例目的,本發(fā)明實(shí)施例不限于此。當(dāng)內(nèi)存和CPU交換數(shù)據(jù)時(shí),內(nèi)存控制器150根據(jù)內(nèi)存的物理地址在三級(jí)緩存140中查詢,如果沒(méi)有命中,內(nèi)存控制器150將內(nèi)存中相應(yīng)地址以緩存長(zhǎng)度為單位寫(xiě)入三級(jí)緩存140。當(dāng)三級(jí)緩存140需要換出時(shí),三級(jí)緩存140中的數(shù)據(jù)同樣以緩存長(zhǎng)度為單位寫(xiě)回內(nèi)存。在本發(fā)明的一個(gè)實(shí)施例中,獲取到三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度計(jì)算CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度,將三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)與緩存長(zhǎng)度進(jìn)行乘法運(yùn)算得到CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。X86CPU中的PMC單元可以實(shí)現(xiàn)對(duì)CPU內(nèi)部事件的計(jì)數(shù),但是由于cache在不同類型的體系結(jié)構(gòu)上的實(shí)現(xiàn)差異較大,因此,等價(jià)于CPU的三級(jí)緩存缺失次數(shù)和三級(jí)緩存回寫(xiě)次數(shù)的事件也有著較大差異,需要對(duì)多個(gè)事件分析組合。因此如步驟SllO所示,首先需要檢測(cè) CPU 的類型。下面分別以 WESTMERE_EP 或 NEHALEM_EP、EHALEM_EX 或 NEHALEM_EX 和Sandy Bridge-EP這三種X86CPU為例進(jìn)行說(shuō)明,可以理解的是,這三種類型僅出于示例目的,本發(fā)明的實(shí)施例不限于此。下面參考圖3對(duì)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控方法進(jìn)行詳細(xì)描述。步驟S310,判斷CPU型號(hào),如果CPU型號(hào)為WESTMERE_EP或NEHALEM_EP,則執(zhí)行步驟S311,如果CPU型號(hào)為NEHALEM_EX或NEHALEM_EX,執(zhí)行步驟S312,如果CPU型號(hào)為Jaketown。然后,分別執(zhí)行步驟S314和步驟S315。其中,步驟S314為對(duì)讀取到的寄存器值進(jìn)行計(jì)算。步驟S315為輸出計(jì)算結(jié)果。下面分別對(duì)三種類型CPU計(jì)算寄存器值的過(guò)程進(jìn)行描述。(一)、當(dāng)檢測(cè)到CPU的類型為WESTMERE_EP或NEHALEM_EP時(shí),執(zhí)行如下步驟:步驟S1211:利用MSR_UNCORE_PerfCntr η寄存器作為計(jì)數(shù)器。其中,每個(gè)MSR_UNCORE_PerfCntrη 寄存器對(duì)應(yīng)一個(gè)MSR_UNCORE_PerfEvtSelx 配置寄存器,MSR_UNCORE_PerfEvtSelx寄存器包括功能掩碼位和功能選擇位,具體的,MSR_UNCORE_PerfEvtSelx寄存器的[15:8]位為功能掩碼位,[7:0]位為功能選擇位。步驟S1212:通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作。具體的,在功能選擇位中,選取2! 為記錄三級(jí)緩存的寫(xiě)操作次數(shù),選取2CH為記錄三級(jí)緩存的讀操作次數(shù)。在功能掩碼位中,選取07H為對(duì)DRAM進(jìn)行的操作。步驟S1213:根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄。通過(guò)聯(lián)合使用功能選擇碼位和功能掩碼位,根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制,實(shí)現(xiàn)對(duì)三級(jí)緩存讀寫(xiě)操作次數(shù)的記錄。步驟S1214:通過(guò)讀取MSR_UNCORE_PerfCntr η中的值獲得相應(yīng)的讀寫(xiě)次數(shù)。(二)、當(dāng)檢測(cè)到 CPU 的類型為 NEHALEM_EX 或 NEHALEM_EX 時(shí),由于 NEHALEM_EX 或NEHALEM_EX類的CPU中使用了 Box,Box為存放同一功能的控制寄存器和計(jì)數(shù)寄存器的容器,因此需要對(duì)相關(guān)的每個(gè)Box的數(shù)值進(jìn)行獲取。步驟 S1221:利用 M-Box 中的控制計(jì)數(shù)單元 MSR_M0_PM0N_CTR0 和 MSR_M1_PM0N_CTR對(duì)讀操作計(jì)數(shù)和控制。使用M-Box進(jìn)行讀操作計(jì)數(shù)和控制。M-Box中包含兩組控制計(jì)數(shù)單元,分別為MSR_M0_PM0N_CTR0和MSR_M1_PM0N_CTR0,其中,讀操作計(jì)數(shù)和控制的功能定義在MSR_M0_PM0N_EVNT_SEL0 和 MSR_M1_PM0N_EVNT_SEL0 兩個(gè)寄存器中。步驟S1222:利用 B-Box 中的控制計(jì)數(shù)單元 MSR_B0_PM0N_CTR1 和 MSR_B1_PM0N_CTRl寫(xiě)操作計(jì)數(shù)和控制。使用B-Box進(jìn)行寫(xiě)操作計(jì)數(shù)和控制。B-Box中包含兩組控制計(jì)數(shù)單元,分別為MSR_B0_PM0N_CTR1 和 MSR_B1_PM0N_CTR1。寫(xiě)操作計(jì)數(shù)和控制的功能定義在 MSR_B0_PM0N_EVNT_SELl 和 MSR_B1_PM0N_EVNT_SEL1 兩個(gè)寄存器中。步驟S1223:通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作。具體的,在功能選擇位中,選取ODH記錄三級(jí)緩存的讀操作次數(shù),選取18H記錄三級(jí)緩存的寫(xiě)操作次數(shù)。在功能掩碼位中,選取07H表示對(duì)于DRAM的操作。步驟S1224:根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄。通過(guò)聯(lián)合使用功能選擇碼和功能掩碼,根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制,可以對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄。步驟S1225:通過(guò)讀取M-Box和B-Box的值獲得相應(yīng)的讀寫(xiě)次數(shù)。(三)、當(dāng)檢測(cè)到CPU的類型為SandyBridge-EP (即Jaketown)時(shí),需要從內(nèi)存系統(tǒng)的通道中獲取三級(jí)緩存的操作次數(shù),具體需執(zhí)行以下步驟:步驟S1231:利用mmap函數(shù)將CPU不同的通道根據(jù)其基地址映射至內(nèi)存,對(duì)于被映射的通道,利用對(duì)應(yīng)的PmonCntr_0和PmonCntr_l兩個(gè)地址空間作為讀寫(xiě)計(jì)數(shù)器,其中PmonCntr_0地址空間的功能,通過(guò)PmonCntrCfg_0寄存器指定,PmonCntr_l地址空間的功能通過(guò)PmonCntrCfg_l寄存器指定,其中,PmonCntrCfg_x包括功能掩碼位和功能選擇位。具體的,在PmonCntrCfg_x中,[15:8]為功能掩碼位,[7:0]為功能選擇位。步驟S1222:通過(guò)讀取功能選擇位中的相應(yīng)位對(duì)讀寫(xiě)次數(shù)進(jìn)行記錄,以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù)。具體的,在功能選擇位中,選取04H為對(duì)讀寫(xiě)次數(shù)進(jìn)行記錄。在功能掩碼位中,選取03H為對(duì)三級(jí)緩存的讀操作次數(shù)進(jìn)行記錄,選取12H為對(duì)三級(jí)緩存的寫(xiě)操作次數(shù)進(jìn)行記錄步驟S1223:根據(jù)讀寫(xiě)次數(shù)和和三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù)從通道中獲得讀寫(xiě)三次緩存的次數(shù)。通過(guò)聯(lián)合使用功能選擇碼位和功能掩碼位,根據(jù)讀寫(xiě)次數(shù)和和三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù),可以從不同的通道中獲得讀寫(xiě)三級(jí)緩存的次數(shù)。根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控方法通過(guò)是CPU體系結(jié)構(gòu)的分析后,提出的一種實(shí)時(shí)計(jì)算內(nèi)存帶寬的方法,首先檢測(cè)CPU的類型,根據(jù)檢測(cè)到不同類型的CPU,對(duì)CPU內(nèi)部事件分析組合獲取CPU的三級(jí)緩存的缺失次數(shù)、回寫(xiě)次數(shù)和緩存長(zhǎng)度,計(jì)算出CPU內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。本方法能夠?qū)?nèi)存性能的實(shí)際使用情況進(jìn)行實(shí)時(shí)監(jiān)控,豐富了 CPU內(nèi)存監(jiān)控的內(nèi)容。能夠更好的指導(dǎo)內(nèi)存的選型,為不同應(yīng)用程序定制內(nèi)存型號(hào),提高了效率,節(jié)省了成本。下面參考圖4描述根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控裝置200,包括包括檢測(cè)模塊410、獲取模塊420和計(jì)算模塊430。其中,檢測(cè)模塊410用于檢測(cè)CPU的類型;獲取模塊420用于根據(jù)CPU的類型獲取單位時(shí)間內(nèi)的CPU的三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度;計(jì)算模塊430用于根據(jù)三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度計(jì)算CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控裝置能夠兼容X86CPU,下面以本裝置在不同類型的X86CPU上的應(yīng)用為實(shí)例對(duì)本裝置進(jìn)行詳細(xì)介紹。可以理解的是,對(duì)于在X86CPU上的實(shí)施例僅出于實(shí)例目的,根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控裝置不限于此。圖2所示為某CPU的內(nèi)存體系結(jié)構(gòu),CPU100包括內(nèi)核110、一級(jí)緩存120、二級(jí)緩存130、三級(jí)緩存140和內(nèi)存控制器150。其中,內(nèi)核110可以有多個(gè),從高速緩存中讀取數(shù)據(jù),高速緩存分為一級(jí)緩存、二級(jí)緩存和三級(jí)緩存,CPU訪問(wèn)順序優(yōu)先順序?yàn)橐患?jí)緩存、二級(jí)緩存、三級(jí)緩存。高速緩存與內(nèi)存控制器150相連,內(nèi)存控制器150控制內(nèi)存200與CPU100之間的數(shù)據(jù)交換。本例中使用DRAM(Dynamic Random Access Memory,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器)作為內(nèi)存。DRAM為目前常見(jiàn)的系統(tǒng)內(nèi)存類型??梢岳斫獾氖?,上述體系結(jié)構(gòu)僅出于示例目的,本發(fā)明實(shí)施例不限于此。當(dāng)內(nèi)存和CPU交換數(shù)據(jù)時(shí),內(nèi)存控制器150根據(jù)內(nèi)存的物理地址在三級(jí)緩存140中查詢,如果沒(méi)有命中,內(nèi)存控制器150將內(nèi)存中相應(yīng)地址以緩存長(zhǎng)度為單位寫(xiě)入三級(jí)緩存140。當(dāng)三級(jí)緩存140需要換出時(shí),三級(jí)緩存140中的數(shù)據(jù)同樣以緩存長(zhǎng)度為單位寫(xiě)回內(nèi)存。在本發(fā)明的一個(gè)實(shí)施例中,計(jì)算模塊430將三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)與緩存長(zhǎng)度進(jìn)行乘法運(yùn)算得到CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。X86CPU中的PMC單元可以實(shí)現(xiàn)對(duì)CPU內(nèi)部事件的計(jì)數(shù),但是由于cache在不同類型的體系結(jié)構(gòu)上的實(shí)現(xiàn)差異較大,因此,等價(jià)于CPU的三級(jí)緩存缺失次數(shù)和三級(jí)緩存回寫(xiě)次數(shù)的事件也有著較大差異,需要對(duì)多個(gè)事件分析組合。因此檢測(cè)模塊410首先檢測(cè)CPU的類型。下面分別以 WESTMERE_EP 或 NEHALEM_EP、NEHALEM_EX 或 NEHALEM_EX 和 SandyBridge-EP這三種X86CPU為例進(jìn)行說(shuō)明,可以理解的是,這三種類型僅出于示例目的,本發(fā)明的實(shí)施例不限于此。(一)、當(dāng)檢測(cè)模塊410檢測(cè)到CPU的類型為WESTMERE_EP或NEHALEM_EP時(shí),獲取模塊420利用MSR_UNCORE_PerfCntr η寄存器作為計(jì)數(shù)器。其中,每個(gè)MSR_UNCORE_PerfCntrη 寄存器對(duì)應(yīng)一個(gè) MSR_UNCORE_PerfEvtSelx 配置寄存,MSR_UNCORE_PerfEvtSelx 寄存器包括功能掩碼位和功能選擇位。具體的,MSR_UNCORE_PerfEvtSelx寄存器的[15:8]位為功能掩碼位,[7:0]位為功能選擇位。獲取模塊420通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作。具體的,在功能選擇位中,選取2! 為記錄三級(jí)緩存的寫(xiě)操作次數(shù),選取2CH為記錄三級(jí)緩存的讀操作次數(shù)。在功能掩碼位中,選取07H為對(duì)DRAM進(jìn)行的操作。獲取模塊420根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄,獲 取模塊420通過(guò)讀取MSR_UNCORE_PerfCntr η中的值獲得相應(yīng)的讀寫(xiě)次數(shù)。獲取模塊420根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制,實(shí)現(xiàn)對(duì)三級(jí)緩存讀寫(xiě)操作次數(shù)的記錄。(二)、當(dāng)檢測(cè)模塊410檢測(cè)到CPU的類型為NEHALEM_EX或NEHALEM_EX時(shí),由于NEHALEM_EX或NEHALEM_EX類的CPU中使用了 Box,Box為存放同一功能的控制寄存器和計(jì)數(shù)寄存器的容器,因此需要對(duì)相關(guān)的每個(gè)Box的數(shù)值進(jìn)行獲取。M-Box中包含兩組控制計(jì)數(shù)單元,獲取模塊420利用M-Box中的控制計(jì)數(shù)單元MSR_M0_PM0N_CTR0和MSR_M1_PM0N_CTR對(duì)讀操作計(jì)數(shù)和控制,利用B-Box中的控制計(jì)數(shù)單元MSR_B0_PM0N_CTR1和MSR_B1_PM0N_CTR1對(duì)寫(xiě)操作計(jì)數(shù)和控制。獲取模塊420通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作。獲取模塊420根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄,通過(guò)讀取M-Box和B-Box的值獲得相應(yīng)的讀寫(xiě)次數(shù)。其中,B-Box中包含兩組控制計(jì)數(shù)單元,分別為MSR_B0_PM0N_CTR1和MSR_B 1_PM0N_CTR1。寫(xiě)操作計(jì)數(shù)和控制的功能定義在MSR_B0_PM0N_EVNT_SEL1和MSR_B1_PM0N_EVNT_SEL1兩個(gè)寄存器中。在功能選擇位中,選取ODH記錄三級(jí)緩存的讀操作次數(shù),選取18H記錄三級(jí)緩存的寫(xiě)操作次數(shù)。在功能掩碼位中,選取07H表示對(duì)于DRAM的操作。獲取模塊420通過(guò)聯(lián)合使用功能選擇碼和功能掩碼,根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制,可以對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄。(三)、當(dāng)檢測(cè)模塊410檢測(cè)到CPU的類型為SandyBridge-EP時(shí),需要從內(nèi)存系統(tǒng)的通道中獲取三級(jí)緩存的操作次數(shù)。獲取模塊420利用mmap函數(shù)將CPU不同的通道根據(jù)其基地址映射至內(nèi)存,對(duì)于被映射的通道,利用對(duì)應(yīng)的PmonCntr_0和PmonCntr_l兩個(gè)地址空間作為讀寫(xiě)計(jì)數(shù)器,其中PmonCntr_0地址空間的功能,通過(guò)PmonCntrCf g_0寄存器指定,PmonCntr_l地址空間的功能通過(guò)PmonCntrCfg_l寄存器指定,其中,PmonCntrCfg_x包括功能掩碼位和功能選擇位。具體的,在PmonCntrCfg_x中,[15:8]為功能掩碼位,[7:0]為功能選擇位。獲取模塊420通過(guò)讀取功能選擇位中的相應(yīng)位對(duì)讀寫(xiě)次數(shù)進(jìn)行記錄,以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù)。具體的,在功能選擇位中,選取04H為對(duì)讀寫(xiě)次數(shù)進(jìn)行記錄。在功能掩碼位中,選取03H為對(duì)三級(jí)緩存的讀操作次數(shù)進(jìn)行記錄,選取12H為對(duì)三級(jí)緩存的寫(xiě)操作次數(shù)進(jìn)行記錄獲取模塊420根據(jù)讀寫(xiě)次數(shù)和和三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù)從通道中獲得讀寫(xiě)三次緩存的次數(shù)。獲取模塊220通過(guò)聯(lián)合使用功能選擇碼位和功能掩碼位,根據(jù)讀寫(xiě)次數(shù)和和三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù),可以從不同的通道中獲得讀寫(xiě)三級(jí)緩存的次數(shù)。 根據(jù)本發(fā)明實(shí)施例的基于CPU寄存器的內(nèi)存性能監(jiān)控裝置通過(guò)對(duì)CPU體系結(jié)構(gòu)的分析后,提出的一種實(shí)時(shí)計(jì)算內(nèi)存帶寬的裝置,檢測(cè)模塊首先檢測(cè)CPU的類型,獲取模塊根據(jù)檢測(cè)到不同類型的CPU,對(duì)CPU內(nèi)部事件分析組合獲取CPU的三級(jí)緩存的缺失次數(shù)、回寫(xiě)次數(shù)和緩存長(zhǎng)度,計(jì)算模塊計(jì)算出CPU內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。本裝置能夠?qū)?nèi)存性能的實(shí)際使用情況進(jìn)行實(shí)時(shí)監(jiān)控,豐富了 CPU內(nèi)存監(jiān)控的內(nèi)容。能夠更好的指導(dǎo)內(nèi)存的選型,為不同應(yīng)用程序定制內(nèi)存型號(hào),提高了效率,節(jié)省了成本。在本說(shuō)明書(shū)的描述中,參考術(shù)語(yǔ)“一個(gè)實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個(gè)實(shí)施例或示例中。在本說(shuō)明書(shū)中,對(duì)上述術(shù)語(yǔ)的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域的普通技術(shù)人員而言,可以理解在不脫離本發(fā)明的原理和精神的情況下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由所附權(quán)利要求及其等同限定。
權(quán)利要求
1.一種基于CPU寄存器的內(nèi)存性能監(jiān)控方法,其特征在于,包括如下步驟: 檢測(cè)CPU的類型; 根據(jù)所述CPU的類型獲取單位時(shí)間內(nèi)的CPU的三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度;以及 根據(jù)所述三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度計(jì)算所述CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。
2.如權(quán)利要求1所述的方法,其特征在于,當(dāng)檢測(cè)到CPU的類型為WESTMERE_EP或NEHALEM_EP時(shí),利用MSR_UNCORE_PerfCntr η寄存器作為計(jì)數(shù)器, 其中,每個(gè)MSR_UNCORE_PerfCntr η 寄存器對(duì)應(yīng)一個(gè)MSR_UNCORE_PerfEvtSelx 配置寄存,MSR_UNCORE_PerfEvtSelx寄存器包括功能掩碼位和功能選擇位, 通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作; 根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀 操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄; 通過(guò)讀取MSR_UNCORE_PerfCntr η中的值獲得相應(yīng)的讀寫(xiě)次數(shù)。
3.如權(quán)利要求1所述的方法,其特征在于,當(dāng)檢測(cè)到CPU的類型為NEHALEM_EX或NEHALEM_EX 時(shí), 利用M-Box中的控制計(jì)數(shù)單元MSR_M0_PM0N_CTR0和MSR_M1_PM0N_CTR對(duì)讀操作計(jì)數(shù)和控制; 利用B-Box中的控制計(jì)數(shù)單元MSR_B0_PM0N_CTR1和MSR_B1_PM0N_CTR1寫(xiě)操作計(jì)數(shù)和控制; 通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作; 根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄; 通過(guò)讀取M-Box和B-Box的值獲得相應(yīng)的讀寫(xiě)次數(shù)。
4.如權(quán)利要求1所述的方法,其特征在于,當(dāng)檢測(cè)到CPU的類型為SandyBridge-EP時(shí), 利用_ap函數(shù)將所述CPU不同的通道根據(jù)其基地址映射至內(nèi)存,對(duì)于被映射的通道,利用對(duì)應(yīng)的PmonCntr_0和PmonCntr_l兩個(gè)地址空間作為讀寫(xiě)計(jì)數(shù)器,其中,所述PmonCntr_0地址空間的功能通過(guò)PmonCntrCfg_0寄存器指定,所述PmonCntr_l地址空間的功能通過(guò)PmonCntrCfg_l寄存器指定,其中,PmonCntrCfg_x包括功能掩碼位和功能選擇位; 通過(guò)讀取功能選擇位中的相應(yīng)位對(duì)讀寫(xiě)次數(shù)進(jìn)行記錄,以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù); 根據(jù)讀寫(xiě)次數(shù)和和三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù)從通道中獲得讀寫(xiě)三次緩存的次數(shù)。
5.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度計(jì)算所述CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度,包括如下步驟: 將所述三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)與所述緩存長(zhǎng)度進(jìn)行乘法運(yùn)算得到所述CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。
6.一種基于CPU寄存器的內(nèi)存性能監(jiān)控裝置,其特征在于,包括: 檢測(cè)模塊,用于檢測(cè)CPU的類型; 獲取模塊,用于根據(jù)所述CPU的類型獲取單位時(shí)間內(nèi)的CPU的三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度;以及 計(jì)算模塊,用于根據(jù)所述三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度計(jì)算所述CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。
7.如權(quán)利要求6所述的裝置,其特征在于,當(dāng)所述檢測(cè)模塊檢測(cè)到CPU的類型為WESTMERE_EP或NEHALEM_EP時(shí),所述獲取模塊利用MSR_UNCORE_PerfCntr η寄存器作為計(jì)數(shù)器,其中,每個(gè)MSR_UNCORE_PerfCntrn寄存器對(duì)應(yīng)一個(gè)MSR_UNCORE_PerfEvtSelx配置寄存,MSR_UNCORE_PerfEvtSelx寄存器包括功能掩碼位和功能選擇位,所述獲取模塊通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作,所述獲取模塊根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄,所述獲取模塊通過(guò)讀取MSR_UNCORE_PerfCntr η中的值獲得相應(yīng)的讀寫(xiě)次數(shù)。
8.如權(quán)利要求6所述的裝置,其特征在于,當(dāng)所述檢測(cè)模塊檢測(cè)到CPU的類型為NEHALEM_EX或NEHALEM_EX時(shí),所述獲取模塊利用M-Box中的控制計(jì)數(shù)單元MSR_M0_PM0N_CTRO和MSR_M1_PM0N_CTR對(duì)讀操作計(jì)數(shù)和控制,利用B-Box中的控制計(jì)數(shù)單元MSR_B0_PM0N_CTR1和MSR_B1_PM0N_CTR1寫(xiě)操作計(jì)數(shù)和控制,所述獲取模塊通過(guò)讀取功能選擇位中的相應(yīng)位分別獲取三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù),以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取對(duì)于DRAM的操作 ,所述獲取模塊根據(jù)三級(jí)緩存的寫(xiě)操作次數(shù)和讀操作次數(shù)和對(duì)于DRAM的操作控制對(duì)三級(jí)緩存的讀寫(xiě)操作次數(shù)進(jìn)行記錄,通過(guò)讀取M-Box和B-Box的值獲得相應(yīng)的讀寫(xiě)次數(shù)。
9.如權(quán)利要求6所述的裝置,其特征在于,當(dāng)所述檢測(cè)模塊檢測(cè)到CPU的類型為SandyBridge-EP時(shí),所述獲取模塊利用mmap函數(shù)將所述CPU不同的通道根據(jù)其基地址映射至內(nèi)存,對(duì)于被映射的通道,利用對(duì)應(yīng)的PmonCntr_0和PmonCntr_l兩個(gè)地址空間作為讀寫(xiě)計(jì)數(shù)器,其中所述PmonCntr_0地址空間的功能,通過(guò)PmonCntrCf g_0寄存器指定,所述PmonCntr_l地址空間的功能通過(guò)PmonCntrCfg_l寄存器指定,其中,PmonCntrCfg_x包括功能掩碼位和功能選擇位,所述獲取模塊通過(guò)讀取功能選擇位中的相應(yīng)位對(duì)讀寫(xiě)次數(shù)進(jìn)行記錄,以及通過(guò)讀取功能掩碼位中的相應(yīng)位獲取三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù),所述獲取模塊根據(jù)讀寫(xiě)次數(shù)和和三級(jí)緩存的讀操作次數(shù)和寫(xiě)操作次數(shù)從通道中獲得讀寫(xiě)三次緩存的次數(shù)。
10.如權(quán)利要求6所述的裝置,其特征在于,所述計(jì)算模塊將所述三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)與所述緩存長(zhǎng)度進(jìn)行乘法運(yùn)算得到所述CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。
全文摘要
本發(fā)明提出一種基于CPU寄存器的內(nèi)存性能監(jiān)控方法,包括如下步驟檢測(cè)CPU的類型;根據(jù)CPU的類型獲取單位時(shí)間內(nèi)的CPU的三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度;根據(jù)三級(jí)緩存缺失次數(shù)、三級(jí)緩存回寫(xiě)次數(shù)和緩存長(zhǎng)度計(jì)算CPU的內(nèi)存實(shí)時(shí)讀寫(xiě)寬度。本發(fā)明能夠?qū)崟r(shí)監(jiān)控內(nèi)存性能,從而為內(nèi)存選型提供有效的指導(dǎo)建議,從而控制成本,提高工作效率。本發(fā)明還公開(kāi)了一種基于CPU寄存器的內(nèi)存性能監(jiān)控裝置。
文檔編號(hào)G06F11/34GK103218285SQ20131009794
公開(kāi)日2013年7月24日 申請(qǐng)日期2013年3月25日 優(yōu)先權(quán)日2013年3月25日
發(fā)明者曹瑞, 王雁鵬, 王曉靜, 魏偉 申請(qǐng)人:北京百度網(wǎng)訊科技有限公司