繁体   English   中英

获取当前 pthread cpu 使用率 Mac OS X

[英]Get current pthread cpu usage Mac OS X

在 Mac OS X 中如何从线程本身获取线程的 CPU 时间? 对于 linux,我所做的是getrusage(RUSAGE_THREAD, &ru)但此解决方案不适用于 Mac OS X。

我遇到了这个问题,但我不知道如何根据我的目的调整它(我不熟悉 Mac OS X 的内部结构。我什至不确定 pthread thread == mach thread)。

这就是我最终的结果:

#include <mach/mach_init.h>
#include <mach/thread_act.h>
#include <mach/mach_port.h>

[...]

mach_port_t thread;
kern_return_t kr;
mach_msg_type_number_t count;
thread_basic_info_data_t info;

thread = mach_thread_self();

count = THREAD_BASIC_INFO_COUNT;
kr = thread_info(thread, THREAD_BASIC_INFO, (thread_info_t) &info, &count);

if (kr == KERN_SUCCESS && (info.flags & TH_FLAGS_IDLE) == 0) {
    usage->utime.tv_sec  = info.user_time.seconds;
    usage->utime.tv_usec = info.user_time.microseconds;
    usage->stime.tv_sec  = info.system_time.seconds;
    usage->stime.tv_usec = info.system_time.microseconds;
}
else {
    // should not happen
    printf("Could not retreive thread info.");
    bzero(usage, sizeof(struct usage));
}

mach_port_deallocate(mach_task_self(), thread);

我得到的结果与在 Linux 下使用getrusage(RUSAGE_THREAD, &ru)得到的结果getrusage(RUSAGE_THREAD, &ru) 所以我不确定这是正确的方法。

如果你正在使用 pthread api 无论如何,他也应该做这个工作:

#include <unistd.h>
#include <pthread.h>
#include <libproc.h>
#include <stdio.h>

[...]

uint64_t tid;
pthread_threadid_np(NULL, &tid);
struct proc_threadinfo pth;
if (PROC_PIDTHREADINFO_SIZE ==
      proc_pidinfo(getpid(), PROC_PIDTHREADID64INFO, tid, &pth,
                   PROC_PIDTHREADINFO_SIZE)) {
  printf("user time in ns: %llu\nsystem time in ns: %llu\n",
         pth.pth_user_time, pth.pth_system_time);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM