gpt4 book ai didi

linux - 为什么我的测量显示进程消耗的 CPU 时间比可用时间多?

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:17 25 4
gpt4 key购买 nike

我有一个程序,可以测量特定内核(这里是第二个 CPU 内核)上进程消耗的 CPU 时间。有时我得到的值高于 100%。

这个值的原因是什么?访问进程的CPU时间总CPU时间变化这么快吗?我怎样才能消除这种不准确?

int main(int argc, char **argv)
{
int pid = 1111;

while (true)
{
long unsigned int diffCPUTotal, diffUserCPU, diffSysCPU, diffCuCPU, diffCsCPU, procCPUUsage;

setCPUTotal();
setProcCPU(pid);

diffCPUTotal = cpuTotal - prev_cpuTotal;
diffUserCPU = procUserCPU - prev_procUserCPU;
diffSysCPU = procSysCPU - prev_procSysCPU;

diffCuCPU = procCuCPU - prev_procCuCPU;
diffCsCPU = procCsCPU - prev_procCsCPU;

// Process CPU usage including child processes
procCPUUsage = ((diffUserCPU + diffSysCPU + diffCuCPU + diffCsCPU) / (float) diffCPUTotal) * 100;

printf("Process CPU usage: %lu%%\n", procCPUUsage);
fflush(stdout);

prev_cpuTotal = cpuTotal;
prev_procUserCPU = procUserCPU;
prev_procSysCPU = procSysCPU;

prev_procCuCPU = procCuCPU;
prev_procCsCPU = procCsCPU;

usleep(500000);
}
}

void setCPUTotal()
{
std::ifstream fstat;
fstat.open("/proc/stat", std::ios_base::in);

std::string line;

// Go to desired line
for (int i = 0; i < 3; ++i)
std::getline(fstat, line);

long unsigned int user, nice, system, idle, iowait, irq, softirq, steal, guest, guest_nice;

// Get statistics of second cpu core
sscanf(line.c_str(), "cpu1 %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu",
&user, &nice, &system, &idle, &iowait, &irq, &softirq, &steal, &guest, &guest_nice);


fstat.close();

// guest and guest_nice are already included user and nice,
// see http://unix.stackexchange.com/q/178045/20626
cpuTotal = user + nice + system + idle + iowait + irq + softirq + steal;
}

void setProcCPU(int pid)
{
std::stringstream ss;
ss << "/proc/" << pid << "/stat";
std::string procStatPath = ss.str();

FILE* fpstat = fopen(procStatPath.c_str(), "r");
fscanf(fpstat, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %lu"
"%lu %ld %ld %*d %*d %*d %*d %lu %*u %*d",
&procUserCPU, &procSysCPU, &procCuCPU, &procCsCPU, &procStartTime);

fclose(fpstat);
}

最佳答案

以单核的形式报道。

100% 表示“所有一个核心”。如果您的机器有 8 个核心,那么最大可能是 800%。

如果启用超线程,每个超线程都算作一个核心。

关于linux - 为什么我的测量显示进程消耗的 CPU 时间比可用时间多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55344264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com