diff options
author | Santosh Shilimkar <santosh.shilimkar@oracle.com> | 2014-02-11 19:34:25 -0800 |
---|---|---|
committer | Santosh Shilimkar <ssantosh@kernel.org> | 2015-09-30 12:43:25 -0400 |
commit | 9b9acde7e887e057568cd077d9c3377d2cb9aa5b (patch) | |
tree | 004e320c1619df5ff09cd3746cca00f12e78585d /net/rds/af_rds.c | |
parent | 28126959882d3ec4745f2ec800f3a1d74368b2fe (diff) | |
download | op-kernel-dev-9b9acde7e887e057568cd077d9c3377d2cb9aa5b.zip op-kernel-dev-9b9acde7e887e057568cd077d9c3377d2cb9aa5b.tar.gz |
RDS: Use per-bucket rw lock for bind hash-table
One global lock protecting hash-tables with 1024 buckets isn't
efficient and it shows up in a massive systems with truck
loads of RDS sockets serving multiple databases. The
perf data clearly highlights the contention on the rw
lock in these massive workloads.
When the contention gets worse, the code gets into a state where
it decides to back off on the lock. So while it has disabled interrupts,
it sits and backs off on this lock get. This causes the system to
become sluggish and eventually all sorts of bad things happen.
The simple fix is to move the lock into the hash bucket and
use per-bucket lock to improve the scalability.
Signed-off-by: Santosh Shilimkar <ssantosh@kernel.org>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Diffstat (limited to 'net/rds/af_rds.c')
-rw-r--r-- | net/rds/af_rds.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/rds/af_rds.c b/net/rds/af_rds.c index dc08766..384ea1e 100644 --- a/net/rds/af_rds.c +++ b/net/rds/af_rds.c @@ -582,6 +582,8 @@ static int rds_init(void) { int ret; + rds_bind_lock_init(); + ret = rds_conn_init(); if (ret) goto out; |