Thread: [COMMITTERS] pgsql: Simplify LWLock tranche machinery by removingarray_base/array_s
[COMMITTERS] pgsql: Simplify LWLock tranche machinery by removingarray_base/array_s
From
Robert Haas
Date:
Simplify LWLock tranche machinery by removing array_base/array_stride. array_base and array_stride were added so that we could identify the offset of an LWLock within a tranche, but this facility is only very marginally used apart from the main tranche. So, give every lock in the main tranche its own tranche ID and get rid of array_base, array_stride, and all that's attached. For debugging facilities (Trace_lwlocks and LWLOCK_STATS) print the pointer address of the LWLock using %p instead of the offset. This is arguably more useful, and certainly a lot cheaper. Drop the offset-within-tranche from the information reported to dtrace and from one can't-happen message inside lwlock.c. The main user-visible impact of this change is that pg_stat_activity will now report all waits for LWLocks as "LWLock" rather than reporting some as "LWLockTranche" and others as "LWLockNamed". The main motivation for this change is that the need to specify an array_base and an array_stride is awkward for parallel query. There is only a very limited supply of tranche IDs so we can't just keep allocating new ones, and if we try to use the same tranche IDs every time then we run into trouble when multiple parallel contexts are use simultaneously. So if we didn't get rid of this mechanism we'd have to make it even more complicated. By simplifying it in this way, we instead reduce the size of the generated code for lwlock.c by about 5%. Discussion: http://postgr.es/m/CA+TgmoYsFn6NUW1x0AZtupJGUAs1UDY4dJtCN47_Q6D0sP80PA@mail.gmail.com Branch ------ master Details ------- http://git.postgresql.org/pg/commitdiff/3761fe3c20bb040b15f0e8da58d824631da00caa Modified Files -------------- doc/src/sgml/monitoring.sgml | 52 ++++----- src/backend/access/transam/slru.c | 6 +- src/backend/access/transam/xlog.c | 9 +- src/backend/postmaster/pgstat.c | 10 +- src/backend/replication/logical/origin.c | 8 +- src/backend/replication/slot.c | 8 +- src/backend/storage/buffer/buf_init.c | 16 +-- src/backend/storage/ipc/procarray.c | 9 +- src/backend/storage/lmgr/lwlock.c | 175 ++++++++++--------------------- src/backend/utils/mmgr/dsa.c | 15 +-- src/backend/utils/probes.d | 16 +-- src/include/access/slru.h | 1 - src/include/pgstat.h | 3 +- src/include/storage/lwlock.h | 45 ++------ 14 files changed, 112 insertions(+), 261 deletions(-)
Re: [COMMITTERS] pgsql: Simplify LWLock tranche machinery by removing array_base/array_s
From
Pavel Stehule
Date:
Hi
Is there some help for extensions developers, how to fix extensions after this change?
Orafce hits this change.
Regards
Pavel
2016-12-16 17:41 GMT+01:00 Robert Haas <rhaas@postgresql.org>:
Simplify LWLock tranche machinery by removing array_base/array_stride.
array_base and array_stride were added so that we could identify the
offset of an LWLock within a tranche, but this facility is only very
marginally used apart from the main tranche. So, give every lock in
the main tranche its own tranche ID and get rid of array_base,
array_stride, and all that's attached. For debugging facilities
(Trace_lwlocks and LWLOCK_STATS) print the pointer address of the
LWLock using %p instead of the offset. This is arguably more useful,
and certainly a lot cheaper. Drop the offset-within-tranche from
the information reported to dtrace and from one can't-happen message
inside lwlock.c.
The main user-visible impact of this change is that pg_stat_activity
will now report all waits for LWLocks as "LWLock" rather than
reporting some as "LWLockTranche" and others as "LWLockNamed".
The main motivation for this change is that the need to specify an
array_base and an array_stride is awkward for parallel query. There
is only a very limited supply of tranche IDs so we can't just keep
allocating new ones, and if we try to use the same tranche IDs every
time then we run into trouble when multiple parallel contexts are
use simultaneously. So if we didn't get rid of this mechanism we'd
have to make it even more complicated. By simplifying it in this
way, we instead reduce the size of the generated code for lwlock.c
by about 5%.
Discussion: http://postgr.es/m/CA+TgmoYsFn6NUW1x0AZtupJGUAs1UDY4 dJtCN47_Q6D0sP80PA@mail.gmail. com
Branch
------
master
Details
-------
http://git.postgresql.org/pg/commitdiff/ 3761fe3c20bb040b15f0e8da58d824 631da00caa
Modified Files
--------------
doc/src/sgml/monitoring.sgml | 52 ++++-----
src/backend/access/transam/slru.c | 6 +-
src/backend/access/transam/xlog.c | 9 +-
src/backend/postmaster/pgstat.c | 10 +-
src/backend/replication/logical/origin.c | 8 +-
src/backend/replication/slot.c | 8 +-
src/backend/storage/buffer/buf_init.c | 16 +--
src/backend/storage/ipc/procarray.c | 9 +-
src/backend/storage/lmgr/lwlock.c | 175 ++++++++++-------------------- -
src/backend/utils/mmgr/dsa.c | 15 +--
src/backend/utils/probes.d | 16 +--
src/include/access/slru.h | 1 -
src/include/pgstat.h | 3 +-
src/include/storage/lwlock.h | 45 ++------
14 files changed, 112 insertions(+), 261 deletions(-)
--
Sent via pgsql-committers mailing list (pgsql-committers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-committers