Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commite48ce7e

Browse files
committed
Prevent lwlock dtrace probes from unnecessary work
If dtrace is compiled in but disabled, the lwlock dtrace probes stillevaluate their arguments. Since PostgreSQL 13, T_NAME(lock) doesnontrivial work, so it should be avoided if not needed. To fix, makethese calls conditional on the *_ENABLED() macro corresponding to eachprobe.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 parent3eeadc4 commite48ce7e

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)

[8]ページ先頭

©2009-2025 Movatter.jp