2013-07-31 21 views
0

我在32-nm Intel Westmere處理器上運行Linux。我對性能計數器DTLB思念數據看似矛盾的數據表示擔憂。我跑的兩個實驗與隨機存取存儲器的測試程序(單線程)如下:DTLB錯過計數的差距

實驗(1):我計數的DTLB未命中使用以下性能計數器

DTLB_MISSES.WALK_COMPLETED((比賽49H,UMASK 02H)

Experimt(2)I計數的DTLB錯過通過總結如下兩個計數器值

MEM_LOAD_RETIRED.DTLB_MISS(比賽CBH,UMASK 80H)

MEM_STORE_RETIRED.DTLB_MISS(事件0CH,UMASK 01H)

我預計這些實驗的輸出是相似的。但是,我發現實驗(1)中報告的數字幾乎是實驗(2)中的兩倍。我爲此感到茫然,爲何如此。

有人可以幫助揭示這種明顯的差異嗎?

由於

阿爾卡

回答

4

即由於第一活動預計計數未命中所引起的所有可能的原因(加載,存儲,預取)所有TLB級別數,包括存儲器訪問推測性執行,而另外兩個事件只計算退休(即非投機)加載和存儲操作,並且只有那些沒有造成任何故障的事件。

請參閱英特爾®64和IA-32架構軟件開發人員手冊第3卷第19.6章。

感謝,

斯塔斯您的意見

+0

謝謝,但我不敢苟同。第一個事件只計算在所有TLB中未命中後的頁面散步(如果L1-TLB未命中在L2 TLB中,則不會觸發頁面散步)。另一方面,第二個事件似乎可能包括L1和L2 TLB未命中。 我也確保沒有使用s/w預取,並且所有內存都是預先插入的。只有可能存在的內容是由於錯誤推測導致DTLB未命中。但是,我認爲,因爲我只計算了「完成」頁面散步,並沒有任何頁面散步,這也是值得關注的。 我錯過了什麼嗎? – Arka

+0

那麼,這裏的「完成」有效地意味着「任何錯過所有TLB級別的任何錯誤」,並且您的情況的差異可能由錯誤猜測,HW預取以及可能在第一個事件中的某些不準確性(儘管我無法證明它)解釋這不是一個精確的事件,而另外兩個是精確的)。 – user2638717