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?
signature.asc
Description: This is a digitally signed message part