我正在尝试使用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的其他跟踪工具或调度工具来确定这个?
非常感谢任何指导。 请告诉我是否还需要提供其他内容。
提前致谢。
我想确切地知道,对于其他进程,cpu何时为每个任务完成一次迭代。
答案 0 :(得分:5)
我想了解如何在核心中安排进程。即,Process1在0.30发布,然后Process2从0.70(系统计时器值)等开始。
这称为跟踪,通常在用户请求后在内核中完成。 Linux中有几个内核事件跟踪器。试试
perf sched
(man,lwn commit;还有http://www.brendangregg.com/perf.html#SchedulerAnalysis)使用perf sched record sleep 2
然后使用perf sched script
获取日志perf record -e 'sched:sched_process_*' -a sleep 2
+ perf script
(来自http://www.brendangregg.com/perf.html)trace-cmd
(man;基于ftrace
- https://lwn.net/Articles/608497/ https://events.linuxfoundation.org/slides/2010/linuxcon_japan/linuxcon_jp2010_rostedt.pdf):trace-cmd record -e sched ./program
/ trace-cmd record -e sched_switch ...
,{{1 (或安装并使用trace-cmd report
GUI - https://lwn.net/Articles/425583/ http://static.lwn.net/images/2011/ks-success.png)kernelshark
也可能跟踪调度程序...... Gregg有一些关于Linux追踪的信息(使用&#34; pony-corn吉祥物&#34;魔术):http://www.brendangregg.com/blog/2015-07-08/choosing-a-linux-tracer.html(应该有关于https://www.slideshare.net/brendangregg中的追踪的一些介绍)... < / p>
通过监控内核文件夹(如&#39; / proc&#39;
)可以实现这样的功能
sysdig
没有inotify
(内部没有真实的目录或真实文件:https://stackoverflow.com/a/24898733),因此您无法监控更改,只能重读一些/ proc(或某些/ sys)定期。