我在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)中的兩倍。我爲此感到茫然,爲何如此。
有人可以幫助揭示這種明顯的差異嗎?
由於
阿爾卡
謝謝,但我不敢苟同。第一個事件只計算在所有TLB中未命中後的頁面散步(如果L1-TLB未命中在L2 TLB中,則不會觸發頁面散步)。另一方面,第二個事件似乎可能包括L1和L2 TLB未命中。 我也確保沒有使用s/w預取,並且所有內存都是預先插入的。只有可能存在的內容是由於錯誤推測導致DTLB未命中。但是,我認爲,因爲我只計算了「完成」頁面散步,並沒有任何頁面散步,這也是值得關注的。 我錯過了什麼嗎? – Arka
那麼,這裏的「完成」有效地意味着「任何錯過所有TLB級別的任何錯誤」,並且您的情況的差異可能由錯誤猜測,HW預取以及可能在第一個事件中的某些不準確性(儘管我無法證明它)解釋這不是一個精確的事件,而另外兩個是精確的)。 – user2638717