【问题标题】:Initializing Performance Counter Monitor control registers on a CPU初始化 CPU 上的性能计数器监视器控制寄存器
【发布时间】:2016-12-04 16:26:05
【问题描述】:

有谁知道负责在 x86 CPU 上初始化性能计数器监视器 (PCM) 控制寄存器的模块是什么?它是由复位时的硬件完成的,还是由引导加载程序或其他内核模块完成的?

【问题讨论】:

    标签: x86 operating-system cpu-architecture performancecounter


    【解决方案1】:

    性能监视器计数器 (PMC) 不需要初始化,当软件要使用该功能时,需要对其进行编程(或设置)。

    复位后 CPU 不会对 PMC 做任何事情,至少在架构上不可见(即对程序员可见)。

    引导加载程序不处理此类事情。

    这是一个处理 PMC 的内核模块,因为它们是模型特定寄存器 (MSR),只能通过特权指令(例如 rdmsrwrmsr)访问(即它们需要代码才能在其中运行)内核空间)。 然后,内核模块可以通过操作系统接口或允许指令rdpmc 由非特权代码执行(尽管它只允许读取已经预设的计数器)将功能公开给用户空间程序。


    要了解有关 PMC 的更多信息,请参阅 Intel Manual 3B, Chapter 18

    【讨论】:

    • IIRC,内核可以启用对性能计数器的直接用户空间访问。 (即进行设置,以便 RDPMC instruction 在用户空间中工作)
    • @PeterCordes 如果我没记错的话,用户空间程序只能使用rdpmc 进行阅读。不过值得一提,谢谢!
    • 我没有手动使用 RDPMC,但是我认为它只是用于读取实际计数器。要选择您希望他们计算的内容,我认为您需要 WRMSR。尽管如此,这对于非常低的开销测量来说已经足够了,甚至低于 RDTSC。 (而且您可以计算核心时钟周期,而不是挂钟参考周期。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多