2012-08-31 18 views
2

我想通過使用硬件性能計數器來生成D-TLB未命中的地址跟蹤。英特爾處理器具有「精確的基於事件的採樣」(PEBS),可在每次採樣時轉儲硬件寄存器內容。我需要使用此寄存器轉儲來創建導致D-TLB未命中的地址。但是,我不確定如何從寄存器轉儲中生成訪問地址。使用英特爾PEBS的DTLB未命中地址跟蹤

有人在做類似的事情方面有一些經驗,可以給我一些指導嗎?

感謝

阿爾卡

+0

如果您已經在採樣點存在寄存器轉儲,您應該:讀取$ eip,在$ eip中查找並解碼指令,使用解碼指令和寄存器轉儲重新計算內存地址。 – osgx

回答

-1

性能計數器基本上都是專櫃,你要額外的信息,他們不提供。 你需要的是能夠捕捉巴士交易的追蹤器,這可能有點難以實現,並且仍然不會完美,因爲你只會發現錯過了STLB(第二級TLB)的錯失,再加上 - 他們的頁面漫步階段沒有擊中緩存,所以你可以有足夠的可見性來重建虛擬地址。 在我看來,最好的辦法是簡單地通過二進制工具工具(如PIN或szim)運行代碼,編寫一個鉤子來捕獲所有內存訪問 - 並通過模擬DTLB的回調運行它們(你可以使用幾個uarch模擬器或爲自己寫一些簡單的代碼)。您只需要獲取系統的基本DTLB詳細信息(大小,關聯性等)。這應該給你一個關於DTLB錯過的地址在真實系統上的相關概念。當然,如果你使用的是混合尺寸的頁面,或者虛擬化可能有併發症這裏(但願..)

0

是的,你可以與使用perf mem子現代Intel硬件較新版本的perf做到這一點。

查看this answer瞭解更多詳情。