2017-12-02 228 views

回答

2

是的,這是可能的,但它不一定像編程通常的PMU計數器一樣簡單。

一種方法是使用通過PCI空間訪問的可編程內存控制器計數器。一個好的開始是通過檢查英特爾自己在pcm-memory的執行pcm-memory.cpp。此應用程序向您顯示每個插槽或每個內存控制器的吞吐量,這適用於某些用途。特別是,所有內核之間共享帶寬,因此在一臺安靜的機器上,您可以假定大部分帶寬都與被測進程相關聯,或者如果您想在套接字級別進行監視,則它正是您想要的。

另一種選擇是使用「offcore repsonse」計數器的仔細編程。據我所知,這些涉及L2(最後的核心 - 私有緩存)和系統其餘部分之間的流量。您可以通過offcore響應的結果進行過濾,因此可以組合各種「L3未命中」事件並乘以高速緩存行大小以獲得讀取和寫入帶寬。這些事件是相當精細的,所以你可以進一步將它分解爲什麼導致訪問的第一個地方:指令提取,數據需求請求,預取等,等等。

offcore響應計數器通常滯後於支持工具如perflikwid,但至少最近的版本似乎有合理的支持,即使像SKL這樣的客戶端部件。

-2

我不確定英特爾PMU,但我認爲你可以使用英特爾VTune放大器(https://software.intel.com/en-us/intel-vtune-amplifier-xe)。這個有很多用於性能監視的工具(內存,cpu緩存,cpu)。也許這會爲你工作。

+2

VTune是一個使用硬件性能計數器(即PMU =性能監視單元)的工具。除非你能解釋*如何讓VTune測量內存帶寬,否則這不是一個有用的答案。 (VTune是一個有用的工具,可以幫助找到cache-miss熱點和類似的東西,顯然遠不止是簡單地記錄perf計數器,但這不是這個問題所要求的。) –

4

是(ish),間接。您可以使用計數器之間的關係(包括時間戳)推斷其他數字。例如,如果您採樣1秒的時間間隔,並且有N個最後一級(3)緩存未命中,則可以非常確信您每秒鐘佔用N * CacheLineSize字節。

它變得有點棘手把它與準確地計劃活動,因爲這些缺失可能反映CPU預取,中斷活動等

還有的「此CPU不計泥沼(MMX, SSE,AVX等),除非該配置位處於此狀態';從而滾動你自己的是繁瑣的....