From 4888ae7664224c5a63e2edb598e658afe0e19f87 Mon Sep 17 00:00:00 2001 From: "Andrey M. Borodin" 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)