【问题标题】:Linux scheduler historyLinux 调度程序历史
【发布时间】:2012-07-24 18:20:29
【问题描述】:

我有一个在 Linux 上运行的进程,它创建了很多 pThreads(每个线程都有自己的用途)。假设由于某种原因其中一个线程崩溃了。有时,崩溃可能是由其他线程引起的,最好知道在崩溃之前哪些线程正在运行。

所以问题是: 有没有办法询问 Linux 调度程序最后调度了哪些线程?

非常感谢任何帮助。 谢谢。

【问题讨论】:

  • 为什么这对你很重要?我相信您无法在调度周期较短的快速机器上(在内核中配置一些 HZ,这里是抢占式)和 5 个正在运行的线程(10 个可运行线程中)之间做出合理的区别线程)在较慢的机器上。调度器可以随意运行任务,任务调度可以发生在任何机器指令上!内核努力给你一种错觉,即所有可运行的线程都在同时运行缓慢。

标签: linux linux-kernel scheduler


【解决方案1】:

您可能知道 Linux “top”命令,它可以显示您的进程打开的所有线程:

top -H -p "你的进程的pid"

我可以帮助确定有多少正在运行的线程停止或崩溃。

【讨论】:

    【解决方案2】:

    您必须更改内核代码以在每次上下文切换时收集调度数据并继续写入内存中的某个位置,这有点类似于 PNE 内核中可用的飞行记录器功能。

    【讨论】:

    • 恐怕这会显着减慢任务调度程序。
    • 有一点开销。所有 PNE 内核都使用此功能
    • 好吧,但不是每个人都拥有 PNE 内核,因为它更多的是专有内核而不是开源内核。您可以从名为 kdump 的开源中提供的类似内容中引用示例。
    • 这不再是专有内核。 NVRAM 用于此目的,可以进行一些小的更改以适应此目的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 2011-10-11
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    相关资源
    最近更新 更多