From 587df3b86debf418c5bbd8a5a389a94bc5b2fccb Mon Sep 17 00:00:00 2001 From: dmchen Date: Thu, 4 Jul 2024 10:00:50 +0000 Subject: [PATCH 1/2] fix/TD-30877 --- source/os/src/osSysinfo.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c index 50eb8413c0..911c89d4b3 100644 --- a/source/os/src/osSysinfo.c +++ b/source/os/src/osSysinfo.c @@ -29,6 +29,10 @@ typedef struct { uint64_t nice; uint64_t system; uint64_t idle; + uint64_t wa; + uint64_t hi; + uint64_t si; + uint64_t st; } SysCpuInfo; typedef struct { @@ -173,8 +177,9 @@ static int32_t taosGetSysCpuInfo(SysCpuInfo *cpuInfo) { } char cpu[10] = {0}; - sscanf(line, "%s %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64, cpu, &cpuInfo->user, &cpuInfo->nice, &cpuInfo->system, - &cpuInfo->idle); + sscanf(line, "%s %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64, cpu, + &cpuInfo->user, &cpuInfo->nice, &cpuInfo->system, &cpuInfo->idle, &cpuInfo->wa, &cpuInfo->hi, &cpuInfo->si, + &cpuInfo->st); taosCloseFile(&pFile); #endif @@ -576,7 +581,7 @@ void taosGetCpuUsage(double *cpu_system, double *cpu_engine) { SysCpuInfo sysCpu = {0}; ProcCpuInfo procCpu = {0}; if (taosGetSysCpuInfo(&sysCpu) == 0 && taosGetProcCpuInfo(&procCpu) == 0) { - curSysUsed = sysCpu.user + sysCpu.nice + sysCpu.system; + curSysUsed = sysCpu.user + sysCpu.nice + sysCpu.system + sysCpu.wa + sysCpu.hi + sysCpu.si + sysCpu.st; curSysTotal = curSysUsed + sysCpu.idle; curProcTotal = procCpu.utime + procCpu.stime + procCpu.cutime + procCpu.cstime; From 89acd1693c6604e2324ed7c0487d29e5f9a501fa Mon Sep 17 00:00:00 2001 From: dmchen Date: Fri, 5 Jul 2024 00:34:34 +0000 Subject: [PATCH 2/2] fix/TD-30877 --- source/os/src/osSysinfo.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/source/os/src/osSysinfo.c b/source/os/src/osSysinfo.c index 911c89d4b3..9bd60be2b6 100644 --- a/source/os/src/osSysinfo.c +++ b/source/os/src/osSysinfo.c @@ -33,6 +33,8 @@ typedef struct { uint64_t hi; uint64_t si; uint64_t st; + uint64_t guest; + uint64_t guest_nice; } SysCpuInfo; typedef struct { @@ -177,9 +179,11 @@ static int32_t taosGetSysCpuInfo(SysCpuInfo *cpuInfo) { } char cpu[10] = {0}; - sscanf(line, "%s %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64, cpu, - &cpuInfo->user, &cpuInfo->nice, &cpuInfo->system, &cpuInfo->idle, &cpuInfo->wa, &cpuInfo->hi, &cpuInfo->si, - &cpuInfo->st); + sscanf(line, + "%s %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 " %" PRIu64 + " %" PRIu64, + cpu, &cpuInfo->user, &cpuInfo->nice, &cpuInfo->system, &cpuInfo->idle, &cpuInfo->wa, &cpuInfo->hi, + &cpuInfo->si, &cpuInfo->st, &cpuInfo->guest, &cpuInfo->guest_nice); taosCloseFile(&pFile); #endif @@ -581,7 +585,8 @@ void taosGetCpuUsage(double *cpu_system, double *cpu_engine) { SysCpuInfo sysCpu = {0}; ProcCpuInfo procCpu = {0}; if (taosGetSysCpuInfo(&sysCpu) == 0 && taosGetProcCpuInfo(&procCpu) == 0) { - curSysUsed = sysCpu.user + sysCpu.nice + sysCpu.system + sysCpu.wa + sysCpu.hi + sysCpu.si + sysCpu.st; + curSysUsed = sysCpu.user + sysCpu.nice + sysCpu.system + sysCpu.wa + sysCpu.hi + sysCpu.si + sysCpu.st + + sysCpu.guest + sysCpu.guest_nice; curSysTotal = curSysUsed + sysCpu.idle; curProcTotal = procCpu.utime + procCpu.stime + procCpu.cutime + procCpu.cstime;