Linux进程调度的低开销性能调试

时间:2014-01-08 07:12:56

标签: process linux-kernel scheduling performance-testing

我正在Linux平台上开发一个高性能的多线程应用程序。理想情况下,所有类似的线程都应该以相同的速度运行。但是,有一些情况是一个线程可能执行而另一个线程正在等待其他一些系统延迟。系统延迟的一个示例是定时器中断处理程序(LOC),它定期在所有CPU内核上运行。

我正在寻找一种低开销的方法来执行系统性能调试并检测这种情况。更具体地说,我需要知道为什么应用程序线程不以理想的速度运行以及哪个系统任务负责该等待状态。

我认为在/proc/PID/sched nr_wakeups中有一些关于流程安排的性能统计信息。但是,我更想知道WHY而不是How Many

我运行应用程序时运行ftrace来监视Linux内核函数活动并检测任何异常任务或中断的执行情况。这就是我检测定时器中断处理程序使我的应用程序线程处于等待状态的方式。但是,此方法具有非常高的性能开销,并且难以解释输出。

理想情况下,我可以将应用程序线程放到特定的CPU内核中。然后我需要一个性能监视工具,告诉我在执行应用程序期间在这些CPU内核上执行了哪些其他进程。

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

嗯。尝试在启用CONFIG_DYNAMIC_FTRACE选项的情况下使用Ftrace。 从'menuconfig'帮助:

  

CONFIG_DYNAMIC_FTRACE:
  ││
  ││此选项将修改所有函数跟踪的调用
  ││动态(将它们从二进制图像中修补出来)   ││在启动时用No-Op指令替换它们。在
  ││编译时,表是由ftrace的所有位置组成的   ││可以进行函数跟踪,并将该表链接到内核中   ││图像。启用此功能后,可以单独执行功能   ││启用,未启用的功能不会影响
  ││系统的性能。
  ││
  ││查看/ sys / kernel / debug / tracing中的文件:
  ││available_filter_functions
  ││set_ftrace_filter
  ││set_ftrace_notrace
  ││
  ││这样一个CONFIG_FUNCTION_TRACER内核略大,   但
  ││只要没有跟踪,否则具有原生性能   活性

查看上面的最后一条声明。 (我也曾(曾经)证实ftrace的开销确实非常低。)

接下来,我在这里拼凑了一张枚举各种Linux调试和性能监控类型工具的表: LINUX TOOLS FOR THE SERIOUS SYSTEMS PROGRAMMER

HTH。