4
我可以讀/寫一個MSR寄存器,但我不知道如何指定應該運行哪個內核的MSR。如何讀取特定內核(性能計數器)寄存器?
例如,我想分別記錄每個核心的L2私有緩存未命中,所以我需要指定每個核心的核心ID。
我知道smp_call_function()來調用所有核心上的代碼。如果我添加一個insn來記錄這個代碼正在運行的核心ID並使用smp_call_function(),它應該可以工作。但是如果我只想知道核心1的L2私有緩存未命中,我將不得不讓所有內核記錄這個數字,這對我來說並不是很好。
有沒有更好的解決方案呢?
我的讀/寫操作MSR代碼:
mov $0x0001010E, %eax # Write selector value to EAX
xor %edx, %edx # Zero EDX
mov $0x187, %ecx # Write logical register id to ECX (IA32_PERFEVTSEL1)
wrmsr
mov $0xc2, %ecx # Address of MSR IA32_PMC1
rdmsr # Read value into EAX:EDX (EAX contains low-order bytes)
非常感謝!我認爲它必須工作! :) – Mike