Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 每个CPU核心处于C0电源状态的时间_Objective C_C_Cocoa_Macos_Cpu - Fatal编程技术网

Objective c 每个CPU核心处于C0电源状态的时间

Objective c 每个CPU核心处于C0电源状态的时间,objective-c,c,cocoa,macos,cpu,Objective C,C,Cocoa,Macos,Cpu,任何关于如何做到这一点的帮助都将非常有用:在过去的一秒钟内,每个CPU核心在C0电源状态下花费了多少时间。 这是针对mac应用程序的,因此需要Objective-C、cocoa和C。OSX没有任何暴露CPU C状态的API。不过,您似乎可以使用英特尔CPU上的MWAIT/MONITOR指令来完成此操作。英特尔在《参考手册》第14.4节中提到,您可以使用此技术跟踪C-state派驻: 软件应使用CPUID来发现目标处理器是否支持MWAIT扩展的枚举。如果CPUID.05H.ECX[位0]=1,则目

任何关于如何做到这一点的帮助都将非常有用:在过去的一秒钟内,每个CPU核心在C0电源状态下花费了多少时间。


这是针对mac应用程序的,因此需要Objective-C、cocoa和C。

OSX没有任何暴露CPU C状态的API。不过,您似乎可以使用英特尔CPU上的MWAIT/MONITOR指令来完成此操作。英特尔在《参考手册》第14.4节中提到,您可以使用此技术跟踪C-state派驻:

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

如果CPUID.05H.ECX[位1]=1,则目标处理器支持将中断用作MWAIT的中断事件,即使中断被禁用使用此功能测量C州居民人数,如下所示
  • 当发出MWAIT以进入处理器特定的C状态或子C状态时,软件可以写入MWAIT扩展寄存器(ECX)中的位0。
  • 当处理器脱离非活动C状态或子C状态时,软件可以在可能执行中断服务例程(ISR)之前读取时间戳。
  • 您可以在同一手册中找到有关MWAIT指令的更多信息。祝你好运


    要获得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
    
    你可以在这里找到更多信息(参见第3C 35-95卷)