【问题标题】:Low overhead performance debugging of Linux process schedulingLinux进程调度的低开销性能调试
【发布时间】: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


    【解决方案1】:

    嗯。尝试在 CONFIG_DYNAMIC_FTRACE 选项打开的情况下使用 Ftrace。 来自“menuconfig”帮助:

    CONFIG_DYNAMIC_FTRACE:
    │ │
    │ │ 此选项将修改所有对函数跟踪的调用
    │ │ 动态(将从二进制图像中修补它们并
    │ │ 在启动时用 No-Op 指令替换它们。期间
    │ │ 编译时,ftrace 的所有位置组成一张表 │ │ 可以函数trace,并且这个表是链接到内核中的
    │ │ 图像。启用后,功能可以单独
    │ │ 启用,未启用的功能不会影响
    │ │ 系统性能。
    │ │
    │ │ 查看/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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 2016-05-18
      • 2013-09-03
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多