Thread (128 messages) 128 messages, 16 authors, 2006-08-25

Re: [RFC][PATCH 2/9] deadlock prevention core

From: Andrew Morton <hidden>
Date: 2006-08-14 07:14:45
Also in: linux-mm, lkml

On Mon, 14 Aug 2006 08:45:40 +0200
Peter Zijlstra [off-list ref] wrote:
On Sun, 2006-08-13 at 22:22 -0700, Andrew Morton wrote:
quoted
On Mon, 14 Aug 2006 07:03:55 +0200
Peter Zijlstra [off-list ref] wrote:
quoted
On Sun, 2006-08-13 at 21:58 -0700, Andrew Morton wrote:
quoted
On Mon, 14 Aug 2006 06:40:53 +0200
Peter Zijlstra [off-list ref] wrote:
quoted
Testcase:

Mount an NBD device as sole swap device and mmap > physical RAM, then
loop through touching pages only once.
Fix: don't try to swap over the network.  Yes, there may be some scenarios
where people have no local storage, but it's reasonable to expect anyone
who is using Linux as an "enterprise storage platform" to stick a local
disk on the thing for swap.
I wish you were right, however there seems to be a large demand to go
diskless and swap over iSCSI because disks seem to be the nr. 1 failing
piece of hardware in systems these days.
We could track dirty anonymous memory and throttle.

Also, there must be some value of /proc/sys/vm/min_free_kbytes at which a
machine is no longer deadlockable with any of these tricks.  Do we know
what level that is?
Not sure, the theoretical max amount of memory one can 'lose' in socket
wait queues is well over the amount of physical memory we have in
machines today (even for SGI); this combined with the fact that we limit
the memory in some way to avoid DoS attacks, could make for all memory
to be stuck in wait queues. Of course this becomes rather more unlikely
for ever larger amounts of memory. But unlikely is never a guarantee.
What is a "socket wait queue" and how/why can it consume so much memory?

Can it be prevented from doing that?

If this refers to the socket buffers, they're mostly allocated with
at least __GFP_WAIT, aren't they?
quoted
quoted
quoted
That leaves MAP_SHARED, but mm-tracking-shared-dirty-pages.patch will fix
that, will it not?
Will makes it less likely. One can still have memory pressure, the
remaining bits of memory can still get stuck in socket queues for
blocked processes.
But there's lots of reclaimable pagecache around and kswapd will free it
up?
Yes, however it is possible for kswapd and direct reclaim to block on
get_request_wait() for the nbd/iscsi request queue by sheer misfortune.
Possibly there are some situations where kswapd will get stuck on request
queues.  But as long as the block layer is correctly calling
set_queue_congested(), these are easily avoidable via
bdi_write_congested().
In that case there will be no more reclaim; of course the more active
processes we have the unlikelier this will be. Still with the sheer
amount of cpu time invested in Linux its not a gamble we're likely to
never lose.
I suspect that with mm-tracking-shared-dirty-pages.patch, a bit of tuning
and perhaps some bugfixing we can make this problem go away for all
practical purposes.  Particularly if we're prepared to require local
storage for swap (the paranoid can use RAID, no?).

Seem to me that more investigation of these options is needed before we can
justify adding lots of hard-to-test complexity to networking?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help