【发布时间】:2014-01-08 07:12:55
【问题描述】:
我正在 Linux 平台上开发一个高性能的多线程应用程序。理想情况下,期望所有相似的线程以相同的速度运行。但是,在某些情况下,一个线程可能会执行,而另一个线程正在等待其他一些系统延迟。系统延迟的一个示例是定期在所有 CPU 内核上运行的定时器中断处理程序 (LOC)。
我正在寻找一种低开销的方法来执行系统性能调试和检测此类情况。更具体地说,我需要知道为什么应用程序线程没有以理想的速度运行以及哪个系统任务负责该等待状态。
我认为/proc/PID/sched 中有一些关于进程调度的性能统计数据,例如nr_wakeups。不过,我更想知道WHY 而不是How Many。
我曾经在我的应用程序运行时运行ftrace 来监控 Linux 内核功能活动并检测任何异常任务或中断的执行。这就是我检测定时器中断处理程序将我的应用程序线程置于等待状态的方式。但是,这种方法具有非常高的性能开销并且难以解释输出。
理想情况下,我可以将我的应用程序线程放到特定的 CPU 内核上。然后我需要一个性能监控工具,它可以告诉我在执行我的应用程序期间在这些 CPU 内核上执行了哪些其他进程。
有什么想法吗?
谢谢
【问题讨论】:
标签: process linux-kernel scheduling performance-testing