使用Go中的libproc.h处理OS X的CPU使用情况

时间:2015-05-31 17:09:21

标签: macos go

我知道在这个问题上存在优秀的答案:

问题在于我尝试使用libproc.h来定义proc_threadinfo结构(以及其他),但字段pth_cpu_usage始终是0(请参阅trheadInfoHandler() func here了解我如何使用Go中的结构。

查看Chromium来源here的片段(不使用libproc.h),我想知道是否使用proc_threadinfoproc_taskinfo中的字段可以计算cpu百分比的使用情况。


proc_threadinfo.pth_user_time; /* user run time */
proc_threadinfo.pth_system_time; /* system run time */

proc_taskinfo.pti_total_user; /* total time */
proc_taskinfo.pti_total_system;

修改

一些伪代码说明正确的算法或建议让我走上正确的道路将非常感激。

使用/proc文件系统我认为我能够计算 Linux 中的CPU%使用率:


func cpuUsageOf(pid int, waitHandler func()) float32 {
    stat1 := procFsStatOf(pid)
    utime1 := stat1.utime // /proc/[pid]/stat field index 13
    stime1 := stat1.stime // /proc/[pid]/stat field index 14
    cputime1 := procFsCpuTimeTotal() // /proc/stat -> sum of cpu values

    waitHandler() // here I wait 1 second

    stat2 := procFsStatOf(pid)
    utime2 := stat2.utime // /proc/[pid]/stat field index 13
    stime2 := stat2.stime // /proc/[pid]/stat field index 14
    cputime2 := procFsCpuTimeTotal() // /proc/stat -> sum of cpu values

    return float32(cpuCount() * ((utime2 + stime2) - (utime1 + stime1)) * 100) / float32(cputime2 - cputime1)
}

对于 OS X ,我是否可以使用proc_threadinfoproc_taskinfo中的值?我可以在哪里找到与我在/proc/stat中使用procFsCpuTimeTotal())读取的Linux相同的值?

完整代码here(如在提交9e34d3c72bf853ff49ef3970ad6a6c9688e9ba23中);快速链接到 OS X 代码here

0 个答案:

没有答案