Thread (8 messages) 8 messages, 4 authors, 2012-01-30

Re: how to make memory.memsw.failcnt is nonzero

From: Peng Haitao <hidden>
Date: 2012-01-30 02:34:51
Also in: linux-mm, lkml

Michal Hocko said the following on 2012-1-4 0:04:
On Wed 28-12-11 17:23:04, Peng Haitao wrote:
quoted
memory.memsw.failcnt shows the number of memory+Swap hits limits.
So I think when memory+swap usage is equal to limit, memsw.failcnt should be nonzero.

I test as follows:

# uname -a
Linux K-test 3.2.0-rc7-17-g371de6e #2 SMP Wed Dec 28 12:02:52 CST 2011 x86_64 x86_64 x86_64 GNU/Linux
# mkdir /cgroup/memory/group
# cd /cgroup/memory/group/
# echo 10M > memory.limit_in_bytes
# echo 10M > memory.memsw.limit_in_bytes
# echo $$ > tasks
# dd if=/dev/zero of=/tmp/temp_file count=20 bs=1M
Killed
# cat memory.memsw.failcnt
0
# grep "failcnt" /var/log/messages | tail -2
Dec 28 17:05:52 K-test kernel: memory: usage 10240kB, limit 10240kB, failcnt 21
Dec 28 17:05:52 K-test kernel: memory+swap: usage 10240kB, limit 10240kB, failcnt 0

memory+swap usage is equal to limit, but memsw.failcnt is zero.
Please note that memsw.limit_in_bytes is triggered only if we have
consumed some swap space already (and the feature is primarily intended
to stop extensive swap usage in fact).
It goes like this: If we trigger hard limit (memory.limit_in_bytes) then
we start the direct reclaim (with swap available). If we trigger memsw
limit then we try to reclaim without swap available. We will OOM if we
cannot reclaim enough to satisfy the respective limit.

The other part of the answer is, yes there is something wrong going
on her because we definitely shouldn't OOM. The workload is a single
threaded and we have a plenty of page cache that could be reclaimed
easily. On the other hand we end up with:
# echo $$ > tasks 
/dev/memctl/a# echo 10M > memory.limit_in_bytes 
/dev/memctl/a# echo 10M > memory.memsw.limit_in_bytes 
/dev/memctl/a# dd if=/dev/zero of=/tmp/temp_file count=20 bs=1M
Killed
/dev/memctl/a# cat memory.stat 
cache 9265152
[...]

So there is almost 10M of page cache that we can simply reclaim. If we
use 40M limit then we are OK. So this looks like the small limit somehow
tricks our math in the reclaim path and we think there is nothing to
reclaim.
I will look into this.
Have any conclusion for this?
Thanks.

-- 
Best Regards,
Peng
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help