From: Jason Low <jason.low2@hp.com>
To: peterz@infradead.org, torvalds@linux-foundation.org,
paulmck@linux.vnet.ibm.com, mingo@kernel.org, Waiman.Long@hp.com,
davidlohr@hp.com, linux-kernel@vger.kernel.org
Cc: tglx@linutronix.de, riel@redhat.com, rostedt@goodmis.org,
akpm@linux-foundation.org, hpa@zytor.com,
tim.c.chen@linux.intel.com, konrad.wilk@oracle.com, aswin@hp.com,
scott.norton@hp.com, chegu_vinod@hp.com, jason.low2@hp.com
Subject: [PATCH 4/4] rwsem: Reduce the size of struct rw_semaphore
Date: Mon, 7 Jul 2014 11:50:19 -0700 [thread overview]
Message-ID: <1404759019-4268-5-git-send-email-jason.low2@hp.com> (raw)
In-Reply-To: <1404759019-4268-1-git-send-email-jason.low2@hp.com>
Recent optimistic spinning additions to rwsem provide significant performance
benefits on many workloads on large machines. The cost of it was increasing
the size of the rwsem structure by up to 128 bits.
However, now that the previous patches in this series bring the overhead of
struct optimistic_spin_queue to 32 bits, this patch reorders some fields in
struct rw_semaphore such that we can reduce the overhead of the rwsem structure
by 64 bits (on 64 bit systems).
The extra overhead required for rwsem optimistic spinning would now be up
to 8 additional bytes instead of up to 16 bytes. Additionally, the size of
rwsem would now be more in line with mutexes.
Signed-off-by: Jason Low <jason.low2@hp.com>
---
include/linux/rwsem.h | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h
index 9fdcdd0..f6c54c0 100644
--- a/include/linux/rwsem.h
+++ b/include/linux/rwsem.h
@@ -24,15 +24,15 @@ struct rw_semaphore;
/* All arch specific implementations share the same struct */
struct rw_semaphore {
long count;
- raw_spinlock_t wait_lock;
struct list_head wait_list;
+ raw_spinlock_t wait_lock;
#ifdef CONFIG_SMP
+ struct optimistic_spin_queue osq; /* spinner MCS lock */
/*
* Write owner. Used as a speculative check to see
* if the owner is running on the cpu.
*/
struct task_struct *owner;
- struct optimistic_spin_queue osq; /* spinner MCS lock */
#endif
#ifdef CONFIG_DEBUG_LOCK_ALLOC
struct lockdep_map dep_map;
@@ -66,10 +66,10 @@ static inline int rwsem_is_locked(struct rw_semaphore *sem)
#if defined(CONFIG_SMP) && !defined(CONFIG_RWSEM_GENERIC_SPINLOCK)
#define __RWSEM_INITIALIZER(name) \
{ RWSEM_UNLOCKED_VALUE, \
- __RAW_SPIN_LOCK_UNLOCKED(name.wait_lock), \
LIST_HEAD_INIT((name).wait_list), \
+ __RAW_SPIN_LOCK_UNLOCKED(name.wait_lock), \
+ { ATOMIC_INIT(OSQ_UNLOCKED_VAL) }, /* osq */ \
NULL, /* owner */ \
- { ATOMIC_INIT(OSQ_UNLOCKED_VAL) } /* osq */ \
__RWSEM_DEP_MAP_INIT(name) }
#else
#define __RWSEM_INITIALIZER(name) \
--
1.7.1
next prev parent reply other threads:[~2014-07-07 19:00 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-07 18:50 [PATCH 0/4] MCS spinlocks: Cancellable MCS spinlock rework Jason Low
2014-07-07 18:50 ` [PATCH 1/4] MCS spinlocks: Rename optimistic_spin_queue to optimistic_spin_node Jason Low
2014-07-07 18:50 ` [PATCH 2/4] MCS spinlocks: Convert osq lock to atomic_t to reduce overhead Jason Low
2014-07-08 13:38 ` Steven Rostedt
2014-07-08 16:44 ` Jason Low
2014-07-07 18:50 ` [PATCH 3/4] MCS spinlocks: Micro-optimize osq_unlock() Jason Low
2014-07-07 18:50 ` Jason Low [this message]
2014-07-11 9:29 ` [PATCH 4/4] rwsem: Reduce the size of struct rw_semaphore Peter Zijlstra
2014-07-07 19:06 ` [PATCH 0/4] MCS spinlocks: Cancellable MCS spinlock rework Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1404759019-4268-5-git-send-email-jason.low2@hp.com \
--to=jason.low2@hp.com \
--cc=Waiman.Long@hp.com \
--cc=akpm@linux-foundation.org \
--cc=aswin@hp.com \
--cc=chegu_vinod@hp.com \
--cc=davidlohr@hp.com \
--cc=hpa@zytor.com \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=rostedt@goodmis.org \
--cc=scott.norton@hp.com \
--cc=tglx@linutronix.de \
--cc=tim.c.chen@linux.intel.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®