diff --git a/src/proc_fuse.c b/src/proc_fuse.c index 3ceba73..5162a3b 100644 --- a/src/proc_fuse.c +++ b/src/proc_fuse.c @@ -910,6 +910,8 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, size_t linelen = 0, total_len = 0; int curcpu = -1; /* cpu numbering starts at 0 */ int physcpu = 0; + int max_cpus = 0; + bool use_view; uint64_t user = 0, nice = 0, system = 0, idle = 0, iowait = 0, irq = 0, softirq = 0, steal = 0, guest = 0, guest_nice = 0; uint64_t user_sum = 0, nice_sum = 0, system_sum = 0, idle_sum = 0, @@ -958,6 +960,13 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, if (!cpuset) return 0; + if (cgroup_ops->can_use_cpuview(cgroup_ops) && opts && opts->use_cfs) + use_view = true; + else + use_view = false; + if (use_view) + max_cpus = max_cpu_count(cg); + f = fopen_cached("/proc/stat", "re", &fopen_cache); if (!f) return 0; @@ -1006,6 +1015,9 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, continue; } + if (use_view && max_cpus > 0 && (curcpu + 1) == max_cpus) + continue; + if (sscanf(cpu_char, "%d", &physcpu) != 1) continue;