From b437aa9e52ea312df58d3bb5c0d324afb29c2a71 Mon Sep 17 00:00:00 2001 From: Gokhan Gulbiz Date: Wed, 19 Apr 2023 10:09:23 +0300 Subject: [PATCH] Use spinlock instead of lwlock per tenant --- .../distributed/utils/citus_stat_tenants.c | 18 +++++------------- .../distributed/utils/citus_stat_tenants.h | 3 +-- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/backend/distributed/utils/citus_stat_tenants.c b/src/backend/distributed/utils/citus_stat_tenants.c index 0d2d0754d..fc35ae808 100644 --- a/src/backend/distributed/utils/citus_stat_tenants.c +++ b/src/backend/distributed/utils/citus_stat_tenants.c @@ -50,7 +50,6 @@ static clock_t QueryEndClock = { 0 }; static const char *SharedMemoryNameForMultiTenantMonitor = "Shared memory for multi tenant monitor"; -static char *TenantTrancheName = "Tenant Tranche"; static char *MonitorTrancheName = "Multi Tenant Monitor Tranche"; static shmem_startup_hook_type prev_shmem_startup_hook = NULL; @@ -358,13 +357,13 @@ AttributeMetricsIfApplicable() if (currentTenantIndex != -1) { TenantStats *tenantStats = &monitor->tenants[currentTenantIndex]; - LWLockAcquire(&tenantStats->lock, LW_EXCLUSIVE); + SpinLockAcquire(&tenantStats->lock); UpdatePeriodsIfNecessary(tenantStats, queryTime); ReduceScoreIfNecessary(tenantStats, queryTime); RecordTenantStats(tenantStats, queryTime); - LWLockRelease(&tenantStats->lock); + SpinLockRelease(&tenantStats->lock); } else { @@ -385,13 +384,13 @@ AttributeMetricsIfApplicable() if (currentTenantIndex != -1) { TenantStats *tenantStats = &monitor->tenants[currentTenantIndex]; - LWLockAcquire(&tenantStats->lock, LW_EXCLUSIVE); + SpinLockAcquire(&tenantStats->lock); UpdatePeriodsIfNecessary(tenantStats, queryTime); ReduceScoreIfNecessary(tenantStats, queryTime); RecordTenantStats(tenantStats, queryTime); - LWLockRelease(&tenantStats->lock); + SpinLockRelease(&tenantStats->lock); } } LWLockRelease(&monitor->lock); @@ -659,14 +658,7 @@ CreateTenantStats(MultiTenantMonitor *monitor, TimestampTz queryTime) strcpy_s(monitor->tenants[tenantIndex].tenantAttribute, sizeof(monitor->tenants[tenantIndex].tenantAttribute), AttributeToTenant); monitor->tenants[tenantIndex].colocationGroupId = AttributeToColocationGroupId; - - monitor->tenants[tenantIndex].namedLockTranche.trancheId = LWLockNewTrancheId(); - monitor->tenants[tenantIndex].namedLockTranche.trancheName = TenantTrancheName; - - LWLockRegisterTranche(monitor->tenants[tenantIndex].namedLockTranche.trancheId, - monitor->tenants[tenantIndex].namedLockTranche.trancheName); - LWLockInitialize(&monitor->tenants[tenantIndex].lock, - monitor->tenants[tenantIndex].namedLockTranche.trancheId); + SpinLockInit(&monitor->tenants[tenantIndex].lock); monitor->tenantCount++; diff --git a/src/include/distributed/utils/citus_stat_tenants.h b/src/include/distributed/utils/citus_stat_tenants.h index aa413c29d..06041604b 100644 --- a/src/include/distributed/utils/citus_stat_tenants.h +++ b/src/include/distributed/utils/citus_stat_tenants.h @@ -70,8 +70,7 @@ typedef struct TenantStats /* * Locks needed to update this tenant's statistics. */ - NamedLWLockTranche namedLockTranche; - LWLock lock; + slock_t lock; } TenantStats; /*