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