緩存一致性測(cè)試方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及多核處理器的緩存一致性驗(yàn)證的技術(shù)領(lǐng)域,具體涉及一種緩存一致性測(cè)試方法。
【背景技術(shù)】
[0002]高速緩存技術(shù)的采用是為了匹配處理器的速度和存儲(chǔ)器的存取速度,在現(xiàn)代的大多數(shù)處理器上,幾乎所有的內(nèi)存訪(fǎng)問(wèn)都需要通過(guò)緩存來(lái)進(jìn)行。隨著多處理器、多核、眾核技術(shù)的發(fā)展,處理器的速度越來(lái)越快,存儲(chǔ)器層次結(jié)構(gòu)也越來(lái)越復(fù)雜,高速緩存一致性(Cachecoherence)的問(wèn)題也就變得越來(lái)越突出。高速緩存一致性是指保留在高速緩存中的共享資源保持?jǐn)?shù)據(jù)一致性的機(jī)制。
[0003]隨著處理器存儲(chǔ)層次的增多,在相鄰層次間和同一層之內(nèi)都可能會(huì)出現(xiàn)數(shù)據(jù)不一致的問(wèn)題,這個(gè)問(wèn)題在多核、眾核系統(tǒng)中特別突出。問(wèn)題的根源是多核、眾核系統(tǒng)往往使用多個(gè)層次、不同大小、不同共享屬性的高速緩存,那么驗(yàn)證這種設(shè)計(jì)下的緩存一致性就顯得極為復(fù)雜。
[0004]現(xiàn)在業(yè)界通常使用模擬仿真方式來(lái)進(jìn)行緩存一致性的協(xié)議級(jí)驗(yàn)證,但這種驗(yàn)證方式效率低,而且隨著狀態(tài)空間的爆炸,很難保證遍歷所有場(chǎng)景。因此高效簡(jiǎn)單的系統(tǒng)級(jí)緩存一致性協(xié)議正確性驗(yàn)證方法,已被業(yè)界逐漸采用,比如專(zhuān)利CN102681937A,其針對(duì)處理器域間緩存一致性芯片的正確性驗(yàn)證,其采用在B1S代碼中嵌入緩存一致性驗(yàn)證程序,在系統(tǒng)初始化初期、內(nèi)存子系統(tǒng)初始化完成后,即開(kāi)始執(zhí)行驗(yàn)證程序。但該方法由于沒(méi)有操作系統(tǒng)核心的打擾,降低了應(yīng)用的復(fù)雜性,不足以涵蓋真實(shí)的應(yīng)用場(chǎng)景。
[0005]由于系統(tǒng)級(jí)驗(yàn)證中人工編寫(xiě)的并行一致性驗(yàn)證程序的訪(fǎng)存模式類(lèi)型有限,不能充分地驗(yàn)證處理器緩存的一致性,因此如何自動(dòng)地生成涵蓋多種訪(fǎng)存模式的驗(yàn)證程序來(lái)充分地驗(yàn)證處理器的緩存一致性就是亟需要解決的問(wèn)題。
【發(fā)明內(nèi)容】
[0006]本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)現(xiàn)有技術(shù)中存在上述缺陷,提供一種緩存一致性測(cè)試方法,能夠針對(duì)多核處理器運(yùn)行并行程序時(shí)緩存一致性場(chǎng)景多、遍歷困難等問(wèn)題,提出通過(guò)實(shí)現(xiàn)并行訪(fǎng)存模式自動(dòng)生成系統(tǒng),來(lái)生成涵蓋多種訪(fǎng)存場(chǎng)景的并行驗(yàn)證程序,在芯片設(shè)計(jì)前期和樣片階段對(duì)處理器的緩存一致性進(jìn)行充分的驗(yàn)證,以保證一次投片成功率,進(jìn)而降低芯片設(shè)計(jì)成本,縮短研發(fā)周期。
[0007]根據(jù)本發(fā)明,提供了一種緩存一致性測(cè)試方法,包括:
[0008]由主進(jìn)程申請(qǐng)一個(gè)共享空間,所述共享空間的大小為緩存大小的整數(shù)倍;
[0009]由主進(jìn)程創(chuàng)建出多個(gè)子進(jìn)程,使所述多個(gè)子進(jìn)程和所述主進(jìn)程都可以同時(shí)訪(fǎng)問(wèn)所申請(qǐng)的共孚空間;
[0010]在該共享空間中劃分出四個(gè)共享空間部分:用于讀操作訪(fǎng)問(wèn)的第一共享空間部分、用于寫(xiě)操作訪(fǎng)問(wèn)的第二共享空間部分、用于保存讀操作訪(fǎng)問(wèn)的邏輯內(nèi)存塊號(hào)的第三共享空間部分、以及用于保存寫(xiě)操作訪(fǎng)問(wèn)的邏輯內(nèi)存塊號(hào)的第四共享空間部分;
[0011 ]由主進(jìn)程對(duì)讀操作和寫(xiě)操作訪(fǎng)問(wèn)的內(nèi)存塊號(hào)進(jìn)行排列,并將排列好的序列針對(duì)讀操作和寫(xiě)操作分別保存到第三共享空間部分和第四共享空間部分中,其中使讀操作和寫(xiě)操作訪(fǎng)問(wèn)的內(nèi)存地址不重疊,而且使所述多個(gè)子進(jìn)程進(jìn)入同步接口 ;
[0012]在所述多個(gè)子進(jìn)程同步成功后,讀取所述排列好的序列,讓所述主進(jìn)程和所述多個(gè)子進(jìn)程同時(shí)進(jìn)行讀寫(xiě)操作;
[0013]在所述主進(jìn)程和所述多個(gè)子進(jìn)程的讀寫(xiě)操作都完成后,每個(gè)進(jìn)程對(duì)自己訪(fǎng)問(wèn)的讀空間和寫(xiě)空間分別用異或操作來(lái)計(jì)算權(quán)值,并且比較讀操作和寫(xiě)操作訪(fǎng)問(wèn)的內(nèi)存的權(quán)值,如果權(quán)值相同則判定緩存一致性不存在問(wèn)題。
[0014]優(yōu)選地,所述主進(jìn)程利用fork函數(shù)創(chuàng)建出多個(gè)子進(jìn)程。
[0015]優(yōu)選地,所述主進(jìn)程是在操作系統(tǒng)引導(dǎo)后用戶(hù)級(jí)測(cè)試程序的主進(jìn)程。
[0016]優(yōu)選地,所述操作系統(tǒng)是Linux。
[0017]優(yōu)選地,所述主進(jìn)程對(duì)讀操作和寫(xiě)操作訪(fǎng)問(wèn)的內(nèi)存塊號(hào)進(jìn)行排列的原則是要使多個(gè)進(jìn)程同時(shí)對(duì)同一緩存段進(jìn)行讀操作和寫(xiě)操作。
[0018]優(yōu)選地,所述第一共享空間部分所對(duì)應(yīng)的物理空間是連續(xù)的,所述第二共享空間部分所對(duì)應(yīng)的物理空間也是連續(xù)的。
【附圖說(shuō)明】
[0019]結(jié)合附圖,并通過(guò)參考下面的詳細(xì)描述,將會(huì)更容易地對(duì)本發(fā)明有更完整的理解并且更容易地理解其伴隨的優(yōu)點(diǎn)和特征,其中:
[0020]圖1示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的緩存一致性測(cè)試方法的流程圖。
[0021]需要說(shuō)明的是,附圖用于說(shuō)明本發(fā)明,而非限制本發(fā)明。注意,表示結(jié)構(gòu)的附圖可能并非按比例繪制。并且,附圖中,相同或者類(lèi)似的元件標(biāo)有相同或者類(lèi)似的標(biāo)號(hào)。
【具體實(shí)施方式】
[0022]為了使本發(fā)明的內(nèi)容更加清楚和易懂,下面結(jié)合具體實(shí)施例和附圖對(duì)本發(fā)明的內(nèi)容進(jìn)行詳細(xì)描述。
[0023]本發(fā)明的基本構(gòu)思是讓多個(gè)進(jìn)程并發(fā)地對(duì)不重復(fù)的內(nèi)存地址進(jìn)行讀寫(xiě)訪(fǎng)問(wèn),然后檢查訪(fǎng)問(wèn)的結(jié)果是否正確,從而判斷緩存一致性是否存在問(wèn)題。但當(dāng)內(nèi)存空間很大時(shí),并發(fā)訪(fǎng)存的內(nèi)存地址組合很多,因此,本發(fā)明選擇最有可能造成緩存一致性問(wèn)題的模式來(lái)進(jìn)行遍歷,即多個(gè)進(jìn)程并發(fā)讀寫(xiě)訪(fǎng)問(wèn)可能映射為同一緩存段的內(nèi)存地址。
[0024]圖1示意性地示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的緩存一致性測(cè)試方法的流程圖。如下面將要詳細(xì)描述的那樣,所述緩存一致性測(cè)試方法采用了并行訪(fǎng)存模式。
[0025]如圖1所示,根據(jù)本發(fā)明優(yōu)選實(shí)施例的緩存一致性測(cè)試方法包括:
[0026]第一步驟S1、由主進(jìn)程(作業(yè)號(hào)可以設(shè)為0)(主進(jìn)程指的是在Linux之類(lèi)的操作系統(tǒng)引導(dǎo)后用戶(hù)級(jí)測(cè)試程序的主進(jìn)程)在內(nèi)存中申請(qǐng)一個(gè)共享空間,該共享空間大小為緩存大小的整數(shù)倍;
[0027]第二步驟S2、由主進(jìn)程利用fork函數(shù)創(chuàng)建出多個(gè)子進(jìn)程,使所述多個(gè)子進(jìn)程和所述主進(jìn)程都可以同時(shí)訪(fǎng)問(wèn)所申請(qǐng)的共享空間;
[0028]第三步驟S3、在該共享空間中劃分出四個(gè)共享空間部分:用于讀操作訪(fǎng)問(wèn)的第一共享空間部分、用于寫(xiě)操作訪(fǎng)問(wèn)的第二共享空間部分、用于保存讀操作訪(fǎng)問(wèn)的邏輯內(nèi)存塊號(hào)的第三共享空間部分、以及用于保存寫(xiě)操作訪(fǎng)問(wèn)的邏輯內(nèi)存塊號(hào)的第四共享空間