Linux进程执行历史

时间:2015-02-12 00:17:46

标签: linux

我在Linux 3.4.0中有一个带有RT7(实时)补丁的多线程(三线程)应用程序。应用程序需要实时执行,容差约为20ms。应用程序运行一段时间(1分钟到50分钟)实时然后我发现当其中一个线程正在进行某些处理时,会发生上下文切换并返回到线程80到500ms之后。我需要找出什么过程带走了时间片。我的所有线程一起消耗大约5%的CPU时间。有没有工具可以查看带有时间戳的流程执行历史记录?

谢谢, 哈基姆

1 个答案:

答案 0 :(得分:0)

考虑使用SystemTap。它是受DTrace启发的动态仪表引擎。它动态修补内核(因此需要调试信息)。

例如,您的任务可以通过以下脚本实现:

probe scheduler.cpu_on, scheduler.cpu_off {
    if(pid() == target()) {
        printf("%ld %s\n", gettimeofday_us(), pn());
    }
}

使用-c选项将此脚本附加到命令或-x附加到正在运行的PID:

root@lkdevel:~# stap  -c 'dd if=/dev/zero of=/dev/null count=1' ./schedtrace.stp
...
1423701880670656 scheduler.cpu_on
1423701880673498 scheduler.cpu_off
1423701880674208 scheduler.cpu_on
1423701880689407 scheduler.cpu_off
1423701880689829 scheduler.cpu_on
...