From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751409Ab2LUXwM (ORCPT ); Fri, 21 Dec 2012 18:52:12 -0500 Received: from mx1.redhat.com ([209.132.183.28]:3154 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751555Ab2LUXwH (ORCPT ); Fri, 21 Dec 2012 18:52:07 -0500 Date: Fri, 21 Dec 2012 18:49:40 -0500 From: Rik van Riel To: linux-kernel@vger.kernel.org Cc: aquini@redhat.com, walken@google.com, lwoodman@redhat.com, jeremy@goop.org, Jan Beulich , Thomas Gleixner Subject: [RFC PATCH 0/3] x86,smp: make ticket spinlock proportional backoff w/ auto tuning Message-ID: <20121221184940.103c31ad@annuminas.surriel.com> Organization: Red Hat, Inc. Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="MP_/vJCTSUN90u1ZieiJocy/s4r" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --MP_/vJCTSUN90u1ZieiJocy/s4r Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Disposition: inline Many spinlocks are embedded in data structures; having many CPUs pounce on the cache line the lock is in will slow down the lock holder, and can cause system performance to fall off a cliff. The paper "Non-scalable locks are dangerous" is a good reference: http://pdos.csail.mit.edu/papers/linux:lock.pdf In the Linux kernel, spinlocks are optimized for the case of there not being contention. After all, if there is contention, the data structure can be improved to reduce or eliminate lock contention. Likewise, the spinlock API should remain simple, and the common case of the lock not being contended should remain as fast as ever. However, since spinlock contention should be fairly uncommon, we can add functionality into the spinlock slow path that keeps system performance from falling off a cliff when there is lock contention. Proportional delay in ticket locks is delaying the time between checking the ticket based on a delay factor, and the number of CPUs ahead of us in the queue for this lock. Checking the lock less often allows the lock holder to continue running, resulting in better throughput and preventing performance from dropping off a cliff. The test case has a number of threads locking and unlocking a semaphore. With just one thread, everything sits in the CPU cache and throughput is around 2.6 million operations per second, with a 5-10% variation. Once a second thread gets involved, data structures bounce from CPU to CPU, and performance deteriorates to about 1.25 million operations per second, with a 5-10% variation. However, as more and more threads get added to the mix, performance with the vanilla kernel continues to deteriorate. Once I hit 24 threads, on a 24 CPU, 4 node test system, performance is down to about 290k operations/second. With a proportional backoff delay added to the spinlock code, performance with 24 threads goes up to about 400k operations/second with a 50x delay, and about 900k operations/second with a 250x delay. However, with a 250x delay, performance with 2-5 threads is worse than with a 50x delay. Making the code auto-tune the delay factor results in a system that performs well with both light and heavy lock contention, and should also protect against the (likely) case of the fixed delay factor being wrong for other hardware. The attached graph shows the performance of the multi threaded semaphore lock/unlock test case, with 1-24 threads, on the vanilla kernel, with 10x, 50x, and 250x proportional delay, and with autotuning proportional delay tuning for either 2 or 2.7 spins before the lock is obtained. Please let me know if you manage to break this code in any way, so I can fix it... --MP_/vJCTSUN90u1ZieiJocy/s4r Content-Type: image/png Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=spinlock-backoff.png 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 R4zBnjTjpAAAAABJRU5ErkJggg== --MP_/vJCTSUN90u1ZieiJocy/s4r--