Red Hat Bugzilla – Bug 612646
setting a low memory.limit_in_bytes in a cgroup produces cpu soft lockups
Last modified: 2014-06-18 04:47:15 EDT
Created attachment 430425 [details]
Description of problem:
Customer is seeing soft lockups when running the attached reproducer in a cgroup with memory.limit_in_bytes set to a low value (1G is considered low in this case).
Version-Release number of selected component (if applicable):
Steps to Reproduce:
# mkdir /dev/cgroup
# mount -t cgroup -omemory /dev/cgroup
# mkdir /dev/cgroup/test
# cat /proc/self/cgroup
# echo 1G > /dev/cgroup/test/memory.limit_in_bytes
# time sh -c "for i in \$(seq 1 3); do ./malloc 512 4 & done ; wait"
./malloc is the compiled reproducer
I think this issue is fixed in the -44 kernel, I could reproduce the hang with -42. There are a couple of issues with the reproducer and it is not going to do what you think it will do (unless you turn off swap)
1.) Mount command needs to be changed to:
mount -t cgroup -omemory none /dev/cgroup
2.) You need to put the shell you are running your test program in the cgroup
echo $$ > /dev/cgroup/test/tasks
the cat command will then return what you expect.
3.) echo 1G > /dev/cgroup/test/memory.limit_in_bytes
This will limit memory usage of your program, but it can still use all the swap it wants, you won't get an oom kill until you either run out of swap or turn off swap altogether. I was able to get oom-kills with swap turned off and the changes I made to the reproducer outlined above. memory.memsw.limit_in_bytes is probably what you want instead.
closed per comment#2.
*** This bug has been marked as a duplicate of bug 608996 ***