【问题标题】:How can I measure scheduling latency in linux kernel?如何测量 linux 内核中的调度延迟?
【发布时间】:2016-11-27 01:59:47
【问题描述】:

我想比较两个 linux 内核版本之间的调度延迟。到目前为止,这是我尝试过的:

  1. 在两个内核上都配置了 Ftrace
  2. 在跟踪中启用了 sched 事件。
  3. 启用唤醒跟踪器。

但是,wakeup 只显示最高优先级进程的结果,而不是我的 c 程序。我尝试使用 nice 并从跟踪中捕获它。它仍然显示其他同样高进程的日志。我是否错过了其他一些步骤来捕获我的流程日志?有没有更好的方法通过修改我的程序的源代码而不是在启动它时使用 nice 来将我的进程的优先级设置为最高?

我尝试的下一步是禁用唤醒跟踪器并仅启用 sched 事件。我得到的日志看起来像这样

0 1dNh3 3us+: sched wakeup : task hald : 1952 [120] success=1

−0 1d..3 7us! : sched switch : task swapper : 0 [140] (R) ==>
hald : 1952 [120]

+! 显示延迟(请参阅 ftrace 内核文档以了解该数字)。这是否意味着 sched wakeup 的延迟为 '+' 和 sched Witch '!'分别是微秒?

还有其他比较linux调度延迟的方法吗?

【问题讨论】:

    标签: c linux linux-kernel scheduling ftrace


    【解决方案1】:
    • 设置优先级:setpriority() 系统调用与nice 命令大致相同;在这两种情况下,只允许 root 增加 prio。
    • 至于测量,我写了以下简单的程序(公共领域,使用风险自负)有两个进程互相发送短管道消息$1*1024次。它不会给出“调度延迟”的确切值",但我认为它有助于比较。 (它打印 1024*$1 和 15*$1 仅用于完整性检查,使用“time”运行以测量持续时间和 CPU 使用率。)

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    int main2() {
        int a; 
        while(1) {
                if (read(0, &a, 4)!=4) exit(1);
                if (a==-1) exit(0);
                write(1,"01"+(!(a&63) && (a&1023)),1);
        }}
    
    int main(int ac, char** av) {
        int i,j,k = (ac>1 ? atoi(av[1]) : 10) << 10;
        int pipe0[2], pipe1[2];
        pipe(pipe0); pipe(pipe1);
        int pid = fork(); switch(pid) {
                case -1: perror("fork"); return 1;
                case 0: 
                         close(0); dup2(pipe1[0], 0); 
                         close(1); dup2(pipe0[1], 1);
                         return main2();
                default: break;
        }
        int sum = 0; char c;
        for (i=0; i<k; i++) {
                write(pipe1[1], &i, 4);
                read(pipe0[0], &c, 1); sum += c&1;
        }
        i=-1; write(pipe1[1], &i, 4);
        printf("%d %d\n", k, sum);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 2014-02-18
      • 2017-12-23
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多