Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit e48ce7e

Browse files
committed
Prevent lwlock dtrace probes from unnecessary work
If dtrace is compiled in but disabled, the lwlock dtrace probes still evaluate their arguments. Since PostgreSQL 13, T_NAME(lock) does nontrivial work, so it should be avoided if not needed. To fix, make these calls conditional on the *_ENABLED() macro corresponding to each probe. Reviewed-by: Craig Ringer <craig.ringer@enterprisedb.com> Discussion: https://www.postgresql.org/message-id/CAGRY4nwxKUS_RvXFW-ugrZBYxPFFM5kjwKT5O+0+Stuga5b4+Q@mail.gmail.com
1 parent 3eeadc4 commit e48ce7e

File tree

1 file changed

+26
-13
lines changed

1 file changed

+26
-13
lines changed

src/backend/storage/lmgr/lwlock.c

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1323,7 +1323,8 @@ LWLockAcquire(LWLock *lock, LWLockMode mode)
13231323
#endif
13241324

13251325
LWLockReportWaitStart(lock);
1326-
TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), mode);
1326+
if (TRACE_POSTGRESQL_LWLOCK_WAIT_START_ENABLED())
1327+
TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), mode);
13271328

13281329
for (;;)
13291330
{
@@ -1345,7 +1346,8 @@ LWLockAcquire(LWLock *lock, LWLockMode mode)
13451346
}
13461347
#endif
13471348

1348-
TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), mode);
1349+
if (TRACE_POSTGRESQL_LWLOCK_WAIT_DONE_ENABLED())
1350+
TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), mode);
13491351
LWLockReportWaitEnd();
13501352

13511353
LOG_LWDEBUG("LWLockAcquire", lock, "awakened");
@@ -1354,7 +1356,8 @@ LWLockAcquire(LWLock *lock, LWLockMode mode)
13541356
result = false;
13551357
}
13561358

1357-
TRACE_POSTGRESQL_LWLOCK_ACQUIRE(T_NAME(lock), mode);
1359+
if (TRACE_POSTGRESQL_LWLOCK_ACQUIRE_ENABLED())
1360+
TRACE_POSTGRESQL_LWLOCK_ACQUIRE(T_NAME(lock), mode);
13581361

13591362
/* Add lock to list of locks held by this backend */
13601363
held_lwlocks[num_held_lwlocks].lock = lock;
@@ -1405,14 +1408,16 @@ LWLockConditionalAcquire(LWLock *lock, LWLockMode mode)
14051408
RESUME_INTERRUPTS();
14061409

14071410
LOG_LWDEBUG("LWLockConditionalAcquire", lock, "failed");
1408-
TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL(T_NAME(lock), mode);
1411+
if (TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL_ENABLED())
1412+
TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE_FAIL(T_NAME(lock), mode);
14091413
}
14101414
else
14111415
{
14121416
/* Add lock to list of locks held by this backend */
14131417
held_lwlocks[num_held_lwlocks].lock = lock;
14141418
held_lwlocks[num_held_lwlocks++].mode = mode;
1415-
TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE(T_NAME(lock), mode);
1419+
if (TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE_ENABLED())
1420+
TRACE_POSTGRESQL_LWLOCK_CONDACQUIRE(T_NAME(lock), mode);
14161421
}
14171422
return !mustwait;
14181423
}
@@ -1484,7 +1489,8 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode)
14841489
#endif
14851490

14861491
LWLockReportWaitStart(lock);
1487-
TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), mode);
1492+
if (TRACE_POSTGRESQL_LWLOCK_WAIT_START_ENABLED())
1493+
TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), mode);
14881494

14891495
for (;;)
14901496
{
@@ -1502,7 +1508,8 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode)
15021508
Assert(nwaiters < MAX_BACKENDS);
15031509
}
15041510
#endif
1505-
TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), mode);
1511+
if (TRACE_POSTGRESQL_LWLOCK_WAIT_DONE_ENABLED())
1512+
TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), mode);
15061513
LWLockReportWaitEnd();
15071514

15081515
LOG_LWDEBUG("LWLockAcquireOrWait", lock, "awakened");
@@ -1532,15 +1539,17 @@ LWLockAcquireOrWait(LWLock *lock, LWLockMode mode)
15321539
/* Failed to get lock, so release interrupt holdoff */
15331540
RESUME_INTERRUPTS();
15341541
LOG_LWDEBUG("LWLockAcquireOrWait", lock, "failed");
1535-
TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT_FAIL(T_NAME(lock), mode);
1542+
if (TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT_FAIL_ENABLED())
1543+
TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT_FAIL(T_NAME(lock), mode);
15361544
}
15371545
else
15381546
{
15391547
LOG_LWDEBUG("LWLockAcquireOrWait", lock, "succeeded");
15401548
/* Add lock to list of locks held by this backend */
15411549
held_lwlocks[num_held_lwlocks].lock = lock;
15421550
held_lwlocks[num_held_lwlocks++].mode = mode;
1543-
TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT(T_NAME(lock), mode);
1551+
if (TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT_ENABLED())
1552+
TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT(T_NAME(lock), mode);
15441553
}
15451554

15461555
return !mustwait;
@@ -1700,7 +1709,8 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval)
17001709
#endif
17011710

17021711
LWLockReportWaitStart(lock);
1703-
TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), LW_EXCLUSIVE);
1712+
if (TRACE_POSTGRESQL_LWLOCK_WAIT_START_ENABLED())
1713+
TRACE_POSTGRESQL_LWLOCK_WAIT_START(T_NAME(lock), LW_EXCLUSIVE);
17041714

17051715
for (;;)
17061716
{
@@ -1719,15 +1729,17 @@ LWLockWaitForVar(LWLock *lock, uint64 *valptr, uint64 oldval, uint64 *newval)
17191729
}
17201730
#endif
17211731

1722-
TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), LW_EXCLUSIVE);
1732+
if (TRACE_POSTGRESQL_LWLOCK_WAIT_DONE_ENABLED())
1733+
TRACE_POSTGRESQL_LWLOCK_WAIT_DONE(T_NAME(lock), LW_EXCLUSIVE);
17231734
LWLockReportWaitEnd();
17241735

17251736
LOG_LWDEBUG("LWLockWaitForVar", lock, "awakened");
17261737

17271738
/* Now loop back and check the status of the lock again. */
17281739
}
17291740

1730-
TRACE_POSTGRESQL_LWLOCK_ACQUIRE(T_NAME(lock), LW_EXCLUSIVE);
1741+
if (TRACE_POSTGRESQL_LWLOCK_ACQUIRE_ENABLED())
1742+
TRACE_POSTGRESQL_LWLOCK_ACQUIRE(T_NAME(lock), LW_EXCLUSIVE);
17311743

17321744
/*
17331745
* Fix the process wait semaphore's count for any absorbed wakeups.
@@ -1870,7 +1882,8 @@ LWLockRelease(LWLock *lock)
18701882
LWLockWakeup(lock);
18711883
}
18721884

1873-
TRACE_POSTGRESQL_LWLOCK_RELEASE(T_NAME(lock));
1885+
if (TRACE_POSTGRESQL_LWLOCK_RELEASE_ENABLED())
1886+
TRACE_POSTGRESQL_LWLOCK_RELEASE(T_NAME(lock));
18741887

18751888
/*
18761889
* Now okay to allow cancel/die interrupts.

0 commit comments

Comments
 (0)