Hello, Robert
> Basically, the burden for you to impose a new coding rule on everybody
> who uses shared hash tables in the future is very high.
I fixed an issue you described. Number of spinlocks doesn't depend of
NUM_LOCK_PARTITIONS anymore and could be specified for each hash table
on a calling side.
I did a benchmark described in a first message of this thread again.
Currently I don't have access to the same 60-core server so I used more
common 12-core server (24 with HT). According to this benchmark TPS
increment depends on NUM_LOCK_PARTITIONS and default number of
spinlocks this way:
pgbench -f pgbench.sql -T 150 -P 1 -c 40 -j 12
DMN | NLP = 16 | NLP = 32 | NLP = 64 | NLP = 128
-----|----------|----------|----------|----------
8 | +15.1% | +28.2% | +34.1% | +33.7%
16 | +16.6% | +30.9% | +37.0% | +40.8%
32 | +15.1% | +33.9% | +39.5% | +41.9%
64 | +15.0% | +31.9% | +40.1% | +42.9%
128 | +7.7% | +24.7% | +29.6% | +31.6%
* NLP = NUM_LOCK_PARTITIONS
* DMN = DEFAULT_MUTEXES_NUM
I realize this benchmark doesn't represent any possible workload so for
attached patch I choose NUM_LOCK_PARTITIONS = DEFAULT_MUTEXES_NUM = 32.
It seems to be a reasonable compromise of a speedup according to
"synthetic and meaningless in practice" benchmark and number of used
locks which could mean quite a lot in practice. Still this values could
be easily changed in any moment.
Here are before/after benchmark results for this concrete patch.
BEFORE
pgbench (default):
tps = 1295.798531 (including connections establishing)
tps = 1295.858295 (excluding connections establishing)
pgbench -f pgbench.sql:
tps = 1020.072172 (including connections establishing)
tps = 1020.116888 (excluding connections establishing)
AFTER
pgbench (default):
tps = 1299.369807 (including connections establishing)
tps = 1299.429764 (excluding connections establishing)
pgbench -f pgbench.sql:
tps = 1365.749333 (including connections establishing)
tps = 1365.814384 (excluding connections establishing)
So as I understand this patch solves a lock contention problem and
doesn't make anything else worse.