aboutsummaryrefslogtreecommitdiffstats
path: root/net/rds/af_rds.c
diff options
context:
space:
mode:
authorSantosh Shilimkar <santosh.shilimkar@oracle.com>2014-02-11 19:34:25 -0800
committerSantosh Shilimkar <ssantosh@kernel.org>2015-09-30 12:43:25 -0400
commit9b9acde7e887e057568cd077d9c3377d2cb9aa5b (patch)
tree004e320c1619df5ff09cd3746cca00f12e78585d /net/rds/af_rds.c
parentRDS: fix rds_sock reference bug while doing bind (diff)
downloadlinux-dev-9b9acde7e887e057568cd077d9c3377d2cb9aa5b.tar.xz
linux-dev-9b9acde7e887e057568cd077d9c3377d2cb9aa5b.zip
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.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/net/rds/af_rds.c b/net/rds/af_rds.c
index dc087666217a..384ea1e3cd69 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;