RDS: Use per-bucket rw lock for bind hash-table
authorSantosh Shilimkar <santosh.shilimkar@oracle.com>
Wed, 12 Feb 2014 03:34:25 +0000 (19:34 -0800)
committerSantosh Shilimkar <ssantosh@kernel.org>
Wed, 30 Sep 2015 16:43:25 +0000 (12:43 -0400)
commit9b9acde7e887e057568cd077d9c3377d2cb9aa5b
tree004e320c1619df5ff09cd3746cca00f12e78585d
parent28126959882d3ec4745f2ec800f3a1d74368b2fe
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>
net/rds/af_rds.c
net/rds/bind.c
net/rds/rds.h