首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C/C++应用程序中,测量总上下文切换的最佳方法是什么?

在C/C++应用程序中,测量总上下文切换的最佳方法是什么?
EN

Stack Overflow用户
提问于 2014-02-18 07:58:37
回答 2查看 1.1K关注 0票数 2

这是我试图获取资源使用情况的简单方法,特别是在程序执行过程中发生的总上下文切换。

代码语言:javascript
复制
#include<stdio.h>
#include <sys/resource.h>

int appgetrusage(struct rusage *);
int appgetdiffrusage(struct rusage *, struct rusage *);

int main() {
    struct rusage begin, end;

    appgetrusage(&begin);

/*
* core of the program goes here 
* where lot of system threads are spawned and joined
*
*/

    appgetrusage(&end);
    appgetdiffrusage(&begin, &end);

    return 0;
}


int appgetrusage(struct rusage *usage){
    int who = RUSAGE_SELF;
    struct timeval start, end;
    getrusage(RUSAGE_SELF, usage);
    return 1;
}


int appgetdiffrusage(struct rusage *oldr, struct rusage *newr){

    printf("\n");    
    printf("user time (ms): %llu\n",1000 * ((newr->ru_utime).tv_sec - (oldr->ru_utime).tv_sec) + 
            ((newr->ru_utime).tv_usec - (oldr->ru_utime).tv_usec) / 1000);

    printf("system time (ms): %ld\n", 1000 * ((newr->ru_stime).tv_sec - (oldr->ru_stime).tv_sec) + 
            ((newr->ru_stime).tv_usec - (oldr->ru_stime).tv_usec) / 1000);         

    printf("voluntary context switches : %ld\n", newr->ru_nvcsw - oldr->ru_nvcsw);
    printf("involuntary context switches : %ld\n", newr->ru_nivcsw - oldr->ru_nivcsw);

    return 1;
}
  1. 这样做对吗?
  2. 有人能提出一个替代方案吗?还是管教?-)
EN

回答 2

Stack Overflow用户

发布于 2014-02-18 08:33:17

Systemtap为配置/调试用户空间以及内核代码提供了很好的工具。

Guide/

查找上下文开关的系统调用脚本( cpu.stp )

在ARM中,由于u探针(https://blueprints.launchpad.net/linux-linaro/+spec/arm-uprobes)的存在,用户空间分析还不可用。但是X86,它工作得很好。

票数 1
EN

Stack Overflow用户

发布于 2014-02-22 14:13:07

你们已经共享了最好的资源,比如perf和systemtap,但是如果有人只是不想看那么深,那么sysstat包就会附带RHEL6或内核2.6.23,然后有一个叫做pidstat的东西。与-w一起使用pidstat,它将为您提供自愿和非自愿上下文切换的总数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21847442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档