MB-24055: Reduce HashTable::defaultNumBuckets from 1531 to 3 66/77266/5
authorDave Rigby <daver@couchbase.com>
Mon, 24 Apr 2017 15:08:13 +0000 (16:08 +0100)
committerDave Rigby <daver@couchbase.com>
Tue, 25 Apr 2017 13:03:50 +0000 (13:03 +0000)
commitc58d9f4fc1595856bda897f845707e7646980f26
tree69ebf80c37029f37a17ab1a93a82d0b59f57db46
parentcc26527b8cace0f9bf415799d546068114102b42
MB-24055: Reduce HashTable::defaultNumBuckets from 1531 to 3

The variable HashTable::defaultNumBuckets configures the number of
HashTable slots to use by default; assuming ns_server doesn't specify
a value in the bucket config. This was previously 1531. Given we
normally have 1024 vBuckets, this creates 1.51M slots in all the
HashTables (assuming no value from ns_server).

For small buckets this adds a lot of unnecessary overhead -
particulary comparing Ephemeral to memcache buckets, where their empty
size (single node) is:

    Bucket             RSS (KB)
    <none>             40096
    memcache           40260
    Ephemeral          87504

This first needs to be changed in ns_server (see linked patch) so it
no longer specifies the default (previously 3079); however once that
is done we still need to reduce the ep_engine default.

This patch reduces it down to the minimum of 3. Note that's still 3072
slots by default per bucket; and:

a) This doesn't limit how many Docuements can be stored, on Hash
   collision we simply use internal chaining.

b) The HashTableResizer task runs periodically to select the the
   'optimum' size, so we'll quickly adjust to larger sizes.

After this change, the empty size of an Ephemeral bucket is reduced by
30MB:

    Bucket             RSS (KB)
    Ephemeral(size 3)  57800

Change-Id: I94ce68cf3fbc2dfe70690fe8b18fc0dbada0848d
Reviewed-on: http://review.couchbase.org/77266
Reviewed-by: Manu Dhundi <manu@couchbase.com>
Tested-by: Build Bot <build@couchbase.com>
src/hash_table.cc
src/vbucket.cc
tests/ep_testsuite.cc