gpt4 book ai didi

x86 - 如何读取Intel处理器的PMC(性能监控计数器)?

转载 作者:行者123 更新时间:2023-12-02 01:08:22 26 4
gpt4 key购买 nike

我正在尝试使用 RDMSR 和 WRMSR 指令读取 PMC(性能监控计数器)。

在我的具有 Intel i7 6700 CPU (Skylake) 的 Linux 桌面上,我编写了一个简单的驱动程序代码:

static int my_init(void)
{
unsigned int msr;
u64 low, high;

msr = 0x187;
low = 0x412e;
high = 0x0;

asm volatile("1: wrmsr\n"
"2:\n"
: : "c" (msr), "a"(low), "d" (high) : "memory");

msr = 0xC2;
asm volatile("1: rdmsr\n"
"2:\n"
: "=a" (low), "=d" (high) : "c" (msr));

printk("val: %lu\n", (low) | ((high) << 32));

return 0;
}

引用英特尔手册(18.2 英特尔® 64 和 IA-32 架构软件开发人员手册第 3B 卷:系统编程指南中的架构性能监控),在上面的代码中,我写了“0x412e”(L3 缓存未命中数)到“0x187”(IA32_PERFEVTSEL1 MSR)并读取“0xC2”(IA32_PMC1 MSR)。

但是,根据手册,缓存未命中数必须在EAX:EDX中返回(EAX包含低位),实际上,返回0作为低位(EAX)和高位(ECX)的值值。

我想知道如何使用 MSR 对(IA32_PERFEVTSELx 和 IA32_PMCx)监控 Intel CPU 的性能事件。更具体地说,缓存未命中的数量是我的目标。

如果您对此有任何想法,我将不胜感激您的建议。谢谢。

最佳答案

您的 PERFEVTSEL1 编程不完整。 PERFEVTSEL1

至少,您应该启用第 22 位计数:

  • EN(启用计数器)标志(位 22)— 设置时,在相应的性能监控计数器中启用性能计数;清零时,相应的计数器被禁用。

关于x86 - 如何读取Intel处理器的PMC(性能监控计数器)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49179295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com