Hello,

> 
> Yes.  It is similar.
> 
> I have read the whole mail thread and the final fix got commited.
> But it looks incomplete, pf is still sleeping.
> 
> Hrvoje, can you run the tests again that triggered the panics a
> year ago?
> 
> Sasha, I still think the way to go is mutex for pf locks.  I don't
> see a performance impact.

    you mean performance impact against 7.1? If it is the case,
    then I agree.

> a single CPU anyway.  And with sleeping locks you have to schedule
> in the hot packet path.  Our schedueler was never build for that.

    I don't think it is a problem of scheduler. I rather see it as problem of
    lock primitives, which can't keep consistency across a switch from CPU
    (a.k.a.  sleep).
> 
> At genua we started with mutex, made it fine grained, and converted
> to rcu later.
> 

    I think the only reason why PF_LOCK() is a writer lock is overload tables.
    packet, which is about to update an overload table requires an exclusive
    PF_LOCK(). As soon as there will be a way to update overload table without
    an exclusive lock, then we can turn packets to PF_LOCK() readers.

Also I somewhat disagree with idea 'network stack must never sleep'. The
rw-lock adds places to network subsystem, where scheduler has a chance to
give CPU to someone else. 

on the other hand let's stay real. if we want to keep at least part of the
network stack running in parallel these days, then pf locks need to be turn to
mutexes unless we want to hunt down all those SMR_READ sections and
fix/workaround them to deal with sleep in underlying call-stack.

I think either way (putting mutexes in vs. hunting down sleeping SMR section)
is fine for me. My current plan is to move all those memory allocations
in ioctl(2) path outside of PF_LOCK() scope.

thanks and
regards
sashan

Reply via email to