2010-08-18 51 views

回答

7

OS X没有任何暴露CPU的c状态的API。但是,您似乎可以使用Intel CPU上的MWAIT/MONITOR指令来执行此操作。英特尔提到,您可以在参考手册中的部分14.4使用这种技术跟踪C状态居留:

软件应该使用CPUID发现,如果目标处理器支持MWAIT扩展的枚举。如果CPUID.05H.ECX [位0] = 1,目标处理器支持MWAIT扩展及其枚举(请参阅英特尔®64和IA-32架构软件开发人员手册第2A卷第3章“指令集参考AM” )。

如果CPUID.05H.ECX [位1] = 1,则目标处理器支持使用中断作为破裂事件MWAIT,即使当中断被禁止。 使用此功能测量C状态驻留如下

  • 当发出MWAIT以进入处理器特定的C状态或子C状态时,软件可以写入MWAIT扩展寄存器(ECX)中的位0 。
  • 当处理器脱离非活动C状态或子C状态时,软件可以在可能执行中断服务例程(ISR)之前读取时间戳。
  • 在同一本手册中可以找到关于MWAIT指令的更多信息。祝你好运!

    Intel's Reference Manual

    0

    为了得到C0百分比,你应该做到以下几点:

    阅读下列在周期的起点和终点的MSR你衡量:

    0x3FC中(核心C3),0x3FD(核心C6),0x3FE(核心C7),为0x10(TSC)

    然后执行下列的计算:

    Cx_ticks = (c3_after - c3_before) + (c6_after - c6_before) + (c7_after - c7_before) 
    total_ticks = (tsc_after - tsc_before) 
    Cx_percentage = Cx_ticks/total_ticks 
    C0_percentage = 100% - Cx_percentage 
    

    你可以在这里找到更多的信息document(去卷。 3C 35-95)

    相关问题