On 8/28/23 13:28, Yosry Ahmed wrote:
On Mon, Aug 28, 2023 at 10:27 AM Waiman Long <longman@xxxxxxxxxx> wrote:
I thought using a mutex with preemption disabled would at least allow
On 8/28/23 13:07, Yosry Ahmed wrote:
Locking with mutex with preemption disabled is an oxymoron. Use spinlockHere I agree with you. Let's go with the approach which is easy toDo you prefer we also switch to using a mutex (with preemption
undo for now. Though I prefer the new explicit interface for flushing,
that step would be very hard to undo. Let's reevaluate if the proposed
approach shows negative impact on production traffic and I think
Cloudflare folks can give us the results soon.
disabled) to avoid the scenario Michal described where flushers give
up the lock and sleep resulting in an unbounded wait time in the worst
case?
if you want to have preemption disabled. The purpose of usiing mutex is
to allow the lock owner to sleep, but you can't sleep with preemption
disabled. You need to enable preemption first. You can disable
preemption for a short time in a non-sleeping section of the lock
critical section, but I would not recommend disabling preemption for the
whole critical section.
waiters to sleep rather than spin, is this not correct (or doesn't
matter) ?
Because of optimistic spinning, a mutex lock waiter will only sleep if the lock holder sleep or when its time slice run out. So the waiters are likely to spin for quite a while before they go to sleep.