2010-08-18 27 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)

    相關問題