0
有誰知道在x86 CPU上初始化性能計數器監視器(PCM)控制寄存器是由哪個模塊負責的?它是由硬件完成復位還是由bootloader或其他內核模塊完成?初始化CPU上的性能計數器監視器控制寄存器
有誰知道在x86 CPU上初始化性能計數器監視器(PCM)控制寄存器是由哪個模塊負責的?它是由硬件完成復位還是由bootloader或其他內核模塊完成?初始化CPU上的性能計數器監視器控制寄存器
性能監視器計數器(PMC)不需要初始化,當軟件需要使用該功能時,需要對其進行編程(或設置)。
CPU在復位後不會對PMC做任何事情,至少在架構上不可見(即對程序員可見)。
引導加載程序不處理這種事情。
它是一個處理PMC的內核模塊,因爲它們是模型特定寄存器(MSR),只能通過特權(例如rdmsr
,wrmsr
)訪問指令(即它們需要代碼在內核空間中運行) 。 然後,內核模塊可以通過操作系統接口或通過允許指令rdpmc
由非特權代碼執行(儘管它只允許讀取已經設置的計數器)來向用戶空間程序公開功能。
要了解更多關於PMC的信息,請參見Intel Manual 3B, Chapter 18。
IIRC,內核可以啓用對perf性能計數器的直接用戶空間訪問。 (也就是說,設置這樣的[RDPMC指令](http://www.felixcloutier.com/x86/RDPMC.html)在用戶空間中工作) –
@PeterCordes如果我沒有錯,用戶空間程序只能使用'rdpmc'進行閱讀。但值得一提的是,謝謝! –
我還沒有手動使用RDPMC,但是我認爲它只是用於讀取實際的計數器。要選擇你想讓他們算什麼,我認爲你需要WRMSR。儘管如此,這對於非常低的開銷測量就足夠了,甚至比RDTSC還要低。 (你可以對核心時鐘週期進行計數,而不是掛鐘參考週期。) –