Search code examples
cmacospthreadscpu-usage

Get current pthread cpu usage Mac OS X


How can I get a thread's cpu time from the thread itself in Mac OS X ? For linux, what I do is getrusage(RUSAGE_THREAD, &ru) but this solution isn't available for Mac OS X.

I came across this question but I don't know how to adapt it for my purpose (I'm not familiar with Mac OS X's internals. I am not even sure pthread thread == mach thread).


Solution

  • This is what I ended up with:

    #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);
    

    I get very different results that what i get with getrusage(RUSAGE_THREAD, &ru) under Linux. So I'm not sure this is the right way.