Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to avoid spin with irqs disable

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Jeremy Fitzhardinge
Date: Monday, July 7, 2008 - 8:53 am

Nick Piggin wrote:

It isn't.  It makes no sense at all to give a guest more vcpus than 
physical cpus, so that kind of contention won't happen in general.  But 
the bad locking scenario happens when there's any system-wide 
contention, so it could happen if some other virtual machine preempts a 
vcpu holding a lock.  And once a lock ends up being (effectively) held 
for 30ms rather than 30us, the likelihood of going into contention goes 
way up, and you can enter the catastrophic N^2 unlock->relock state.

My measurements show that reverting to the old lock-byte algorithm 
avoids the worst case, and just results in a bit of excessive spinning.  
Replacing it with a smarter spin-then-block-vcpu algorithm doesn't 
really benefit the specific guest VM very much (kernbench elapsed time 
is only slightly improved), but its consumption of physical cpu time can 
go down by ~10%.


I'm aware of that.  In my current implementation the overhead amounts to 
an extra direct call in the lock/unlock path, but that can be eliminated 
with a small amount of restructuring (by making spin_lock/unlock() 
inline functions, and having the call to raw_spin_lock/unlock within 
it).  The pvops patching machinery removes any indirect calls or jumps.

    J
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
Spinlocks waiting with interrupts disabled / preempt disabled., Christoph Lameter, (Tue May 6, 12:26 pm)
Re: Spinlocks waiting with interrupts disabled / preempt d ..., Christoph Lameter, (Wed May 7, 10:04 am)
Re: Spinlocks waiting with interrupts disabled / preempt d ..., Christoph Lameter, (Wed May 7, 10:24 am)
Spinlocks: Factor our GENERIC_LOCKBREAK in order to avoid ..., Christoph Lameter, (Wed May 7, 11:49 am)
Re: Spinlocks waiting with interrupts disabled / preempt d ..., Christoph Lameter, (Fri May 9, 11:00 am)
Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to av ..., Christoph Lameter, (Mon Jun 23, 11:20 am)
Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to av ..., Christoph Lameter, (Mon Jun 23, 1:45 pm)
Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to av ..., Jeremy Fitzhardinge, (Wed Jun 25, 7:51 pm)
Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to av ..., Jeremy Fitzhardinge, (Thu Jun 26, 8:49 am)
Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to av ..., Christoph Lameter, (Thu Jun 26, 10:02 am)
Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to av ..., Jeremy Fitzhardinge, (Mon Jul 7, 8:53 am)
Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to av ..., Jeremy Fitzhardinge, (Mon Jul 7, 8:56 am)
Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to av ..., Jeremy Fitzhardinge, (Mon Jul 7, 1:14 pm)
Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to av ..., Jeremy Fitzhardinge, (Mon Jul 7, 10:57 pm)
Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to av ..., Jeremy Fitzhardinge, (Tue Jul 8, 8:58 am)