在Linux下,能否实时监控进程的调度情况?

4
我正在尝试使用RaspberryPi开发一个多进程系统,我想要监控所有重要进程以及它们在Linux下的调度情况。也就是说,获取调度器状态、启动时间、释放时间等信息。为此,我一直在研究'/proc'文件夹,但是到目前为止,我还没有找到真正有用的信息。
例如,如果你进入/proc/pid/task/pid,你可以看到:
se.exec_start
se.vruntime
se.sum_exec_runtime
se.statistics.wait_start
se.statistics.sleep_start
se.statistics.block_start
se.statistics.sleep_max
se.statistics.block_max
se.statistics.iowait_sum
se.statistics.wakeups

等等,这看起来像是我在做什么事情,但不够清晰。 我只想看看进程如何在核心中调度。例如,Process1在0.30释放,然后Process2在0.70(系统计时器值)开始等。

通过监视'/proc'等内核文件夹是否可能实现此类操作? 如果不行,是否有其他跟踪工具或Linux调度程序工具可以确定这一点?

非常感谢任何指导。 请告诉我是否还需要提供其他信息。

预先致谢。

编辑:使用kernelshark, enter image description here

我想确切地找出其他进程的CPU何时完成每个任务的迭代。

1个回答

5

我想了解进程在核心中的调度情况,例如,进程1在0.30释放,然后进程2在0.70(系统计时器值)开始等。

这被称为跟踪,通常是在用户请求后在内核中完成。Linux中有几个内核事件跟踪器。尝试使用:

Gregg分享了一些Linux追踪技术的信息(使用“独角兽马蒂”的魔法):http://www.brendangregg.com/blog/2015-07-08/choosing-a-linux-tracer.html(在https://www.slideshare.net/brendangregg上应该有关于追踪的演示文稿)...

像这样通过监视内核文件夹(如'/proc')是否可能实现?

/proc没有真正的目录或真正的文件(参见https://stackoverflow.com/a/24898733),因此无法使用inotify监视其变化,只能定期重新读取一些/proc(或一些/sys)。


抱歉回复晚了。我会在今天尝试这些并告诉你结果。 - mozcelikors
@mozcelikors,您是想自动监控应用程序的调度,还是需要一些工具手动多次调查调度情况? - osgx
调查对我很有效。你用perf sched的建议似乎正是我想要的。让我提出我的疑虑:看到perf sched map确实有助于可视化细节,但我能否获得这些进程(在并行计算术语中)的发布、开始和结束时间?还需要进行多次调查吗?我希望只需进行一次调查即可了解进程的情况。 - mozcelikors
这非常有帮助。感谢您的热心建议。老实说,有些人说从这里获取这些信息是不可能的。但我知道一定有无数的内核跟踪器可以使这成为可能。我将寻找方法从我得到的内容中获取所需的信息。 - mozcelikors
你好,你觉得能否获取事件重新启动的具体时间点?因此,我的应用程序进程通常在while(True)块中放置一个例程。我想确定它们何时到达该块的终点,然后重新开始。我从kernelshark中看到,进程只是在其“一次迭代执行”的末尾休眠。但我也看到,并不是每个任务休眠都意味着它已经完成了其“一次迭代执行”。在帖子中添加照片。 - mozcelikors
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接