Public bug reported:

lxcfs provides a container-specific view of /proc/meminfo. Occasionally,
with near zero or zero swap usage *and* swap accounting turned on
(kernel parameter swapaccount=1), the container will report 100% swap
utilization.

Example from Ubuntu 18.04 and lxcfs 3.0.3-0ubuntu1~18.04.1, using the output of 
"while true; do free |grep Swap >> swap.log; done" with the "free" command's 
header for clarity:
              total        used        free      shared  buff/cache   available
Mem:        2040052       53028     1839908         176      147116     1987024
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148     2097148           0 <--- The issue
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148
Swap:       2097148           0     2097148

Additionally, "watch -n 0.1 "grep Swap /proc/meminfo"" was running in
another terminal on the container, this seems to stimulate the behavior.

This appears to come from proc_meminfo_read in bindings.c in lxcfs.

>From the kernel documentation
(https://github.com/torvalds/linux/blob/master/Documentation/admin-
guide/cgroup-v1/memory.rst), under 5.5 usage_in_bytes:

"For efficiency, as other kernel components, memory cgroup uses some
optimization to avoid unnecessary cacheline false sharing.
usage_in_bytes is affected by the method and doesn't show 'exact' value
of memory (and swap) usage, it's a fuzz value for efficient access. (Of
course, when necessary, it's synchronized.) If you want to know more
exact memory usage, you should use RSS+CACHE(+SWAP) value in
memory.stat(see 5.2)."

When swap accounting is on and swap usage is 0 or very close to 0, the kernel 
reported mem+swap usage and the mem usage numbers can cross over, causing the 
assignments below to set swapfree to 0, triggering the issue:
swapusage = memswusage - memusage, swapfree = swapusage < swaptotal ? swaptotal 
- swapusage : 0;

** Affects: lxcfs (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: sts

** Tags added: sts

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1860813

Title:
  LXC container reports spike in swap occasionally

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/lxcfs/+bug/1860813/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to