是否可以使用Linux实时监控进程的调度方式?

是否可以使用Linux实时监控进程的调度方式?,linux,process,linux-kernel,scheduled-tasks,scheduling,Linux,Process,Linux Kernel,Scheduled Tasks,Scheduling,我正在尝试用RaspberryPi开发一个多进程系统,在这个系统中,我希望监视所有主要进程,以及它们是如何使用Linux进行调度的。也就是说,获取调度程序状态、开始时间、发布时间等。我一直在使用“/proc”文件夹来查找此类信息,但到目前为止,我还没有找到任何真正有用的信息 例如,如果进入/proc/pid/task/pid,您可以看到: se.exec_start se.vruntime se.sum_exec_runtime se.statistics.wait_start se.stati

我正在尝试用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
等等。现在,这看起来像是我在做什么,但还不够清楚。 我只想看看进程是如何在核心中调度的。i、 e,进程1在0.30时释放,然后进程2在0.70(系统计时器值)时启动,以此类推

通过监视诸如“/proc”之类的内核文件夹,可以实现类似的功能吗? 如果没有,是否有办法使用其他跟踪工具或Linux调度程序工具来确定这一点

非常感谢您的指导。 请告诉我还有什么我需要提供的

提前谢谢

编辑:使用内核共享,

我想知道,对于其他进程,cpu在什么时候完成每个任务的一次迭代

我只想看看进程是如何在核心中调度的。i、 e,进程1在0.30时释放,然后进程2在0.70(系统计时器值)时启动,以此类推

这称为跟踪,通常在用户请求后在内核中完成。Linux中有几个内核事件跟踪程序。试一试

  • perf sched
    (,;也)使用
    perf sched record sleep 2
    然后
    perf sched script
    获取日志
  • 其他一些用于跟踪的perf命令,如
    perf record-e'sched:sched_process \*'-a sleep 2
    +
    perf script
    (from)
  • trace cmd
    (;基于
    ftrace
    -):
    trace cmd record-e sched./program
    /
    trace cmd record-e sched\u开关…
    trace cmd report
    (或安装并使用
    kernelshark
    GUI-)
  • 还有一些特殊的示踪剂,如LTT/LTTng(,)。它有Eclipse的GUI插件(Trace Compass):随时间变化的进程图和CPU图
  • 我想,
    sysdig
    可能也会跟踪调度程序
Gregg有一些关于Linux跟踪的信息(有“小马玉米吉祥物”魔法):(应该有一些关于跟踪的介绍

通过监视诸如“/proc”之类的内核文件夹,可以实现类似的功能吗


/proc
没有
inotify
(它在:)中没有真实的目录或真实的文件),因此您无法监视更改,只能定期重新读取一些/proc(或一些/sys)。

hmm很抱歉延迟回复。今天我将尝试这些方法,并让您知道。@mozcelikors,您想从应用程序中自动监视调度,还是需要一些工具来调查手动模式下的调度多次?调查对我很有用。你对perf sched的建议似乎正是我想要的。让我问一下我的担忧:查看perf sched map确实有助于可视化细节,但是我可以获得这些过程的发布、开始和结束时间(用并行计算术语)吗?另外,我是否需要调查几次?我想假设一次ivestigation可以让我了解流程。尝试
perf sched script
以获得跟踪事件的完整转储。你可以解析它。另外,
trace cmd record-e sched
+
kernelshark
lttng
+lttng Eclipse插件(TraceCompass)将为您提供GUI和事件列表(kernelshark是简单的GUI;TraceCompass是非常高级的GUI,事件之间带有箭头)。这非常有用。谢谢你的建议。老实说,有些人说不可能得到这些信息。但我知道必须有无数的内核跟踪程序才能实现这一点。我将搜索方法,从我得到的东西中得出我需要的东西。