计算机 · 2021年9月17日 0

Analyze Process Scheduling with Perf

Perf工具可以记录Linux内核调度相关的一些事件及其发生时间,我们可以借此分析应用程序是否存在频繁地在不同核上切换、进程唤醒延迟过大等问题。

方法的核心是使用perf sched这个命令。首先我们需要在程序运行的时候采集数据:

perf sched record -a sleep 6

使用下面的命令可以帮助我们找到这6秒内scheduling latency值最大的一些事件:

perf sched latency -s max

从输出中我们也可以看到每个进程的切换次数,平均切换用时。

上面的命令给出的只是一个汇总,使用下面的命令我们可以更清楚地看到每时每刻CPU的每个核在运行哪一个任务,运行了多久:

perf sched map
  • 左边的几列代表了CPU的几个核,CPU处于空闲状态下时就用.表示;
  • 像A0,B0,C0这种标识符是进程代号,可以通过找这些代号第一次出现的地方看看他们分别代表的是什么进程;
  • *的出现表示发生了Context Switch
perf sched timehist -MVw

这个命令可以查看这段时间内的每一次scheduling延时

使用下面的命令可以获取Perf收集到的所有sched相关事件:

perf sched script

具体的关于perf sched的用法还可以参考这篇博客这篇博客