Re: [PATCH, RFC] RCU : OOM avoidance and lower latency

Eric Dumazet
2006-01-06T14:01:04Z

Alan Cox a écrit :
> On Gwe, 2006-01-06 at 11:17 +0100, Eric Dumazet wrote:
>> I assume that if a CPU queued 10.000 items in its RCU queue, then the oldest
>> entry cannot still be in use by another CPU. This might sounds as a violation
>> of RCU rules, (I'm not an RCU expert) but seems quite reasonable.
>
> Fixing the real problem in the routing code would be the real fix.
>

So far nobody succeeded in 'fixing the routing code', few people can even read
the code from the first line to the last one...

I think this code is not buggy, it only makes general RCU assumptions about
delayed freeing of dst entries. In some cases, the general assumptions are
just wrong. We can fix it at RCU level, and future users of call_rcu_bh() wont
have to think *hard* about 'general assumptions'.

Of course, we can ignore the RCU problem and mark somewhere on a sticker:
***DONT USE OR RISK CRASHES***
***USE IT ONLY FOR FUN***

> The underlying problem of RCU and memory usage could be solved more
> safely by making sure that the sleeping memory allocator path always
> waits until at least one RCU cleanup has occurred after it fails an
> allocation before it starts trying harder. That ought to also naturally
> throttle memory consumers more in the situation which is the right
> behaviour.
>

In the case of call_rcu_bh(), you can be sure that the caller cannot afford
'sleeping memory allocations'. Better drop a frame than block the stack, no ?

Eric