0001-Implement-benchmark_slru_page_readonly-to-assess-SLR.patch

application/octet-stream

Filename: 0001-Implement-benchmark_slru_page_readonly-to-assess-SLR.patch
Type: application/octet-stream
Part: 0
Message: Re: SLRU optimization - configurable buffer pool and partitioning the SLRU lock

Patch

Format: format-patch
Series: patch 0001
Subject: Implement benchmark_slru_page_readonly() to assess SLRU perfromance
File+
src/test/modules/test_slru/test_slru--1.0.sql 2 0
src/test/modules/test_slru/test_slru.c 18 0
From 4888ae7664224c5a63e2edb598e658afe0e19f87 Mon Sep 17 00:00:00 2001
From: "Andrey M. Borodin" <x4mmm@172.25.72.30-ekb.dhcp.yndx.net>
Date: Mon, 6 Nov 2023 11:55:38 +0500
Subject: [PATCH] Implement benchmark_slru_page_readonly() to assess SLRU
 perfromance

---
 src/test/modules/test_slru/test_slru--1.0.sql |  2 ++
 src/test/modules/test_slru/test_slru.c        | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/src/test/modules/test_slru/test_slru--1.0.sql b/src/test/modules/test_slru/test_slru--1.0.sql
index 8635e7df01..3db6ef1029 100644
--- a/src/test/modules/test_slru/test_slru--1.0.sql
+++ b/src/test/modules/test_slru/test_slru--1.0.sql
@@ -11,6 +11,8 @@ CREATE OR REPLACE FUNCTION test_slru_page_read(int, bool DEFAULT true) RETURNS t
   AS 'MODULE_PATHNAME', 'test_slru_page_read' LANGUAGE C;
 CREATE OR REPLACE FUNCTION test_slru_page_readonly(int) RETURNS text
   AS 'MODULE_PATHNAME', 'test_slru_page_readonly' LANGUAGE C;
+CREATE OR REPLACE FUNCTION benchmark_slru_page_readonly(int) RETURNS void
+  AS 'MODULE_PATHNAME', 'benchmark_slru_page_readonly' LANGUAGE C;
 CREATE OR REPLACE FUNCTION test_slru_page_exists(int) RETURNS bool
   AS 'MODULE_PATHNAME', 'test_slru_page_exists' LANGUAGE C;
 CREATE OR REPLACE FUNCTION test_slru_page_delete(int) RETURNS VOID
diff --git a/src/test/modules/test_slru/test_slru.c b/src/test/modules/test_slru/test_slru.c
index ae21444c47..8a1e67a910 100644
--- a/src/test/modules/test_slru/test_slru.c
+++ b/src/test/modules/test_slru/test_slru.c
@@ -31,6 +31,7 @@ PG_FUNCTION_INFO_V1(test_slru_page_write);
 PG_FUNCTION_INFO_V1(test_slru_page_writeall);
 PG_FUNCTION_INFO_V1(test_slru_page_read);
 PG_FUNCTION_INFO_V1(test_slru_page_readonly);
+PG_FUNCTION_INFO_V1(benchmark_slru_page_readonly);
 PG_FUNCTION_INFO_V1(test_slru_page_exists);
 PG_FUNCTION_INFO_V1(test_slru_page_sync);
 PG_FUNCTION_INFO_V1(test_slru_page_delete);
@@ -128,6 +129,23 @@ test_slru_page_readonly(PG_FUNCTION_ARGS)
 	PG_RETURN_TEXT_P(cstring_to_text(data));
 }
 
+Datum
+benchmark_slru_page_readonly(PG_FUNCTION_ARGS)
+{
+	int			pageno = PG_GETARG_INT32(0);
+
+	for (int i = 0; i < 1000000000; i++)
+	{
+		SimpleLruReadPage_ReadOnly(TestSlruCtl,
+										pageno,
+										InvalidTransactionId);
+		Assert(LWLockHeldByMe(TestSLRULock));
+		LWLockRelease(TestSLRULock);
+	}
+
+	PG_RETURN_VOID();
+}
+
 Datum
 test_slru_page_exists(PG_FUNCTION_ARGS)
 {
-- 
2.37.1 (Apple Git-137.1)