我正在尝试测量由于任务迁移造成的开销。通过开销,我想测量此类活动所涉及的延迟。我知道每个内核都有单独的运行队列可用,内核会定期检查运行队列以检查是否存在不平衡并唤醒执行迁移的内核线程(可能具有更高的优先级)。
任何人都可以为我提供指向内核源代码的指针,我可以在其中插入时间戳来测量这个值吗?
是否有任何其他性能指标我可能会调查以获得这样的开销?
我正在尝试测量由于任务迁移造成的开销。通过开销,我想测量此类活动所涉及的延迟。我知道每个内核都有单独的运行队列可用,内核会定期检查运行队列以检查是否存在不平衡并唤醒执行迁移的内核线程(可能具有更高的优先级)。
任何人都可以为我提供指向内核源代码的指针,我可以在其中插入时间戳来测量这个值吗?
是否有任何其他性能指标我可能会调查以获得这样的开销?
我记得之前有一个帖子讨论过这个主题,并且有人还发布了一些关于如何获取系统开销的代码。
我看到您想添加一些代码来插入时间戳,您认为这是否可行,因为任务计划如此频繁。我认为您可以关注之前发布的主题。
我曾经从帖子中保存了源代码,感谢作者!
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;
}