Re: [RFC 0/3] Recursive reclaim (on __PF_MEMALLOC)

From: Peter Zijlstra
Date: Mon Sep 10 2007 - 15:56:12 EST


On Mon, 2007-09-10 at 12:25 -0700, Christoph Lameter wrote:

> Of course boundless allocations from interrupt / reclaim context will
> ultimately crash the system. To fix that you need to stop the networking
> layer from performing these.

Trouble is, I don't only need a network layer to not endlessly consume
memory, I need it to 'fully' function so that we can receive the
writeout completion.

Let us define a strict meaning for a few phrases:

use memory - an alloc / free cycle where the free is unconditional
consume memory - an alloc / free cycle where the free is conditional
and or might be delayed for some unspecified time.

Currently networking has two states:

1) it receives packets and consumes memory
2) it doesn't receive any packets and doesn't use any memory.

In order to use swap over network you need to operate the network stack
in a bounded memory model (PF_MEMALLOC). So we need a state that:

- receives packets
- does NOT consume memory
- but does use memory - albeit limited.

There are two ways to do this:

- reserve a specified amount of memory per socket
(allegedly IRIX has this)

or

- have a global reserve and selectively serves sockets
(what I've been doing)

These two models can be seen as the same. There is no fundamental
difference between having various small reserves and one larger that is
carved up using strict accounting.

So, if you will, you can view my approach as a reserve per socket, where
most sockets get a reserve of 0 and a few (those serving the VM) !0.

What part are you disagreeing with or unclear on?

Attachment: signature.asc
Description: This is a digitally signed message part