Hello, /proc/stat mounted at /var/lib/lxcfs/ is currently missing (a) the cpu average-line from the hosts /proc/stat and (b) the numbering of the cores starts with 1 and not with the 0. (This will e.g. cause confusion for top/htop in the container.) I wrote a minimally invasive patch for that:
Signed-off-by: Christian Brauner <christianvanbrau...@gmail.com> Date: Sun Feb 15 10:34:41 2015 +0100 Bring the cpu-average line to /proc/stat mounted by lxcfs and let the core numbering start at 0. diff --git a/lxcfs.c b/lxcfs.c index d6fb101..ab296e7 100644 --- a/lxcfs.c +++ b/lxcfs.c @@ -1642,7 +1642,7 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, nih_local char *cpuset = NULL; char *line = NULL; size_t linelen = 0, total_len = 0; - int curcpu = 0; + int curcpu = -1; /* cpu numbering starts at 0 */ FILE *f; if (offset) @@ -1662,16 +1662,22 @@ static int proc_stat_read(char *buf, size_t size, off_t offset, while (getline(&line, &linelen, f) != -1) { size_t l; int cpu; + char cpu_char[10]; /* That's a lot of cores */ char *c; - if (sscanf(line, "cpu%d", &cpu) != 1) { - /* not a ^cpu line, just print it */ + if (sscanf(line, "cpu%9[^ ]", cpu_char) != 1) { + /* not a ^cpuN line containing a number N, just print it */ l = snprintf(buf, size, "%s", line); buf += l; size -= l; total_len += l; continue; } + else if (sscanf(cpu_char, "%d", &cpu) != 1) { + } + else { + } + if (!cpu_in_cpuset(cpu, cpuset)) continue; curcpu ++; Best, Christian > ----- Forwarded message from Serge Hallyn <serge.hal...@ubuntu.com> ----- > > Date: Fri, 13 Feb 2015 04:14:11 +0000 > From: Serge Hallyn <serge.hal...@ubuntu.com> > To: Christian Brauner <christianvanbrau...@gmail.com> > Subject: Re: cpusets in non-unified hierarchy broken? > User-Agent: Mutt/1.5.21 (2010-09-15) > > Quoting Christian Brauner (christianvanbrau...@gmail.com): > > On Thu, Feb 12, 2015 at 11:44:32PM +0000, Serge Hallyn wrote: > > > Quoting Christian Brauner (christianvanbrau...@gmail.com): > > > > Hi Serge, > > > > > > > > There is random misreporting at times from top/htop inside of the > > > > container. Whereas e.g. cat /proc/self/status show Cpus_allowed 0-3, > > > > top/htop will show only 1 core. > > > > > > It may be getting it from /proc/stat, which you *may* be getting through > > > lxcfs. It would then be filtering it through the container's cgroup > > > info. > > > > > > When you start the container, does uptime say 1 minute, or does it match > > > the host's uptime? > > > > > It says uptime 0 minutes aka it does not match the host's uptime. > > /proc/stat is looking different in the container than on the host > > (probably because of the cgroup filtering you mentioned). > > > > I mentioned "random misreporting" mainly because the number of cores as > > displayed by top/htop in the container does not match the number of cores on > > the host. It is always less than on the host. I think this is caused by the > > implementation of /proc/stat by lxcfs. > > > > E.g. on the host > > > > [chb@conventiont ~]$ cat /proc/stat | grep cpu > > > > will show > > > > cpu 2061 0 1623 259471 4879 0 38 0 0 0 > > cpu0 568 0 458 63949 1905 0 12 0 0 0 > > cpu1 584 0 371 65044 1018 0 8 0 0 0 > > cpu2 410 0 390 65450 786 0 12 0 0 0 > > cpu3 498 0 403 65026 1169 0 5 0 0 0 > > > > whereas in the container > > > > root@vivid:~# cat /proc/stat | grep cpu > > > > will show > > > > cpu1 580 0 473 68799 1906 0 12 0 0 0 > > cpu2 600 0 384 69836 1080 0 8 0 0 0 > > cpu3 434 0 413 70268 786 0 12 0 0 0 > > cpu4 545 0 428 69839 1169 0 5 0 0 0 > > > > So > > (a) the cpu average-line from the hosts /proc/stat is missing. > > and > > (b) the numbering of the cores seems to be different in the container > > > > I guess this causes top/htop in the container to e.g. only show three cores > > on > > a four core system. Maybe, it doesn't show cpu0 at all because it thinks > > cpu0 > > is actually cpu (average)? Lxcfs bug maybe? > > Seems very likely. If you have time to write a patch for that that'd be > awesome :) > > (Else I'll keep it on my list) > > thanks, > -serge > > ----- End forwarded message -----
pgp0mVEW5q19s.pgp
Description: PGP signature
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel