Re: Bogus load average and cpu times on x86_64 SMP kernels

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Brian Gerst wrote:
I've been seeing bogus values from /proc/loadavg on an x86-64 SMP kernel (but not UP).

$ cat /proc/loadavg
-1012098.26 922203.26 -982431.60 1/112 2688

This is in the current git tree. I'm also seeing strange values in /proc/stat:

cpu  2489 40 920 60530 9398 171 288 1844674407350
cpu0 2509 60 940 60550 9418 191 308 0

The first line is the sum of all cpus (I only have one), so it's picking up up bad data from the non-present cpus. The last value, stolen time, is completely bogus since that value is only ever used on s390.

It looks to me like there is some problem with how the per-cpu structures are being initialized, or are getting corrupted. I have not been able to test i386 SMP yet to see if the problem is x86_64 specific.

I found the culprit: CPU hotplug. The problem is that prefill_possible_map() is called after setup_per_cpu_areas(). This leaves the per-cpu data sections for the future cpus uninitialized (still pointing to the original per-cpu data, which is initmem). Since the cpus exists in cpu_possible_map, for_each_cpu will iterate over them even though the per-cpu data is invalid.

--
				Brian Gerst
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux