如何使用实时补丁测量linux上的任务迁移/负载平衡所带来的开销?

时间:2013-03-04 11:06:23

标签: linux linux-kernel real-time

我正在尝试衡量由于任务迁移导致的开销。通过开销,我想测量这种活动所涉及的延迟。我知道每个核心都有单独的运行队列,内核会定期检查运行队列以检查是否存在不平衡并唤醒执行迁移的内核线程(可能是更高的优先级)。

任何人都可以向我提供内核源代码的指针,我可以插入时间戳来测量这个值吗?

我可能会调查其他任何性能指标来获得这样的开销吗?

1 个答案:

答案 0 :(得分:0)

我记得在讨论过这个主题之前有一篇帖子,有人还发布了一些关于如何获得系统开销的代码。

我看到你想添加一些代码来插入时间戳,你认为这是可行的,因为任务时间表是如此频繁。我想你可以按照之前发布的主题进行操作。

我从帖子中保存了源代码,感谢作者!

double getCurrentValue() {
    double percent;
    FILE* file;
    unsigned long long totalUser, totalUserLow, totalSys, totalIdle, total;

    file = fopen("/proc/stat", "r");
    fscanf(file, "cpu %Ld %Ld %Ld %Ld", &totalUser, &totalUserLow,
        &totalSys, &totalIdle);
    fclose(file);

    if (totalUser < lastTotalUser || totalUserLow < lastTotalUserLow ||
        totalSys < lastTotalSys || totalIdle < lastTotalIdle) {
        //Overflow detection. Just skip this value.
        percent = -1.0;
    }
    else {
        total = (totalUser - lastTotalUser) + (totalUserLow - lastTotalUserLow) +
            (totalSys - lastTotalSys);
        percent = total;
        total += (totalIdle - lastTotalIdle);
        percent /= total;
        percent *= 100;
    }

    lastTotalUser = totalUser;
    lastTotalUserLow = totalUserLow;
    lastTotalSys = totalSys;
    lastTotalIdle = totalIdle;

    return percent;
}