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