当前位置 : 主页 > 网络安全 > 测试自动化 >

汇编 – 如何读取特定内核(性能计数器)寄存器?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我可以读/写一个MSR寄存器,但我不知道如何指定应该运行哪个内核的MSR. 例如,我想分别记录每个核心的L2私有缓存未命中,因此我需要为每个核心指定核心ID. 我知道smp_call_function()来调用所
我可以读/写一个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)
使用smp_call_function_single在特定CPU上运行代码.
网友评论