【问题标题】:How do I read a specific core's (performance counter) register?如何读取特定内核的(性能计数器)寄存器?
【发布时间】:2014-02-19 23:35:09
【问题描述】:

我可以读/写 MSR 寄存器,但我不知道如何指定应该运行哪个内核的 MSR。

比如我想分别记录每个核心的L2私有缓存未命中,所以我需要为每个核心指定核心id。

我知道 smp_call_function() 可以在所有内核上调用代码。如果我添加一个记录此代码正在运行的核心 ID 的 insn 并使用 smp_call_function(),它应该可以工作。但是如果我只想知道core 1的L2 private cache miss,我就得让所有的core都记录这个数字,这对我来说并不整洁。

有没有更好的解决办法?

我的读/写操作 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)

【问题讨论】:

    标签: assembly linux-kernel kernel


    【解决方案1】:

    使用smp_call_function_single 在特定 CPU 上运行您的代码。

    【讨论】:

      猜你喜欢
      • 2019-08-01
      • 2019-07-13
      • 2015-07-03
      • 2014-10-29
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 2021-08-27
      • 1970-01-01
      相关资源
      最近更新 更多