Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uwbFz-0058b3-4V for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Sep 2025 06:58:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uwbFw-006F0b-SS for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Sep 2025 06:58:09 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uwagZ-005jYT-Ks for pgsql-hackers@lists.postgresql.org; Thu, 11 Sep 2025 06:21:36 +0000 Received: from mail-qk1-x732.google.com ([2607:f8b0:4864:20::732]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uwagY-001nGb-14 for pgsql-hackers@lists.postgresql.org; Thu, 11 Sep 2025 06:21:35 +0000 Received: by mail-qk1-x732.google.com with SMTP id af79cd13be357-81176f3322aso5279285a.3 for ; Wed, 10 Sep 2025 23:21:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757571693; x=1758176493; darn=lists.postgresql.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8RPJ0nR3Xkq1exS7Rynv5K9SrIZwPt7ZAE/ivYnodh8=; b=CoUMKjFB71sED+XuvaVCFTxxZg9mFmSIawpkXeI+jCjIScum6udfLw17HYTAmx9kQU IKaW4V4bFvbDZACLb70eVIimiBt0QQjIMVJPbtiNlChLcnKLIAyBP1ZIZzqDKD/4P2yJ Y/hifloJg6YElWcSB7cn6yp/YZogXxgeN11weQYwPVnLNrPsWNVozDJWOD7Vl3E1h/vu nxJbI1yEMwV4QVGZm4JyqnpUGegbgkMWWduy84IgUwcDuJMv12W4sD1nDivDUyeByzJs DtZ3MVJKthQyebtpXBMhKdNrjthrAMUxg9RY7YmNtCtWLowCQELsdFiNDsu/8C8K4mPE sHrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757571693; x=1758176493; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8RPJ0nR3Xkq1exS7Rynv5K9SrIZwPt7ZAE/ivYnodh8=; b=XY9xhxpaBZ48UC2xzzoorXenHPpz54xRJJ1/ypUfDvJPqWkDX0c8T/aeN0vfBv/cFe GNwXL1+RXwWqNfQVQ3qJ/7yJRBMJo3btQtFZaI4Rr2Z0dhl2el6HL/68ON90c798VjXx LlmEzfzwbRglz1rhFYpQW/jc/aBa5+y6t7afHDEtulDFJGopE7wkLm/Zp5583HSKFGig vzZbXoY6UG7Ily/cHAOkYdS2etskfQdJytOnRptjJGu8zTQQhp0TZsomDGtDuQl8W3+p VJNfROfnLe8e+AXSu3cqNn162a6p/nSGm0Tc1QaQixKoerTRCE6/uPrb/dCh7xfRWBSO vfKw== X-Gm-Message-State: AOJu0YzZ/OtOQmk1sHEHPFrxFIuvBQNGM0Ceb52iZTXOmhiXAfcWmok6 NhN/GiLENWRV70gzDhK+GwUqAED1WyRP4vw4ov7re0Ia0h+LedQYRbsvtygKHVBENLQ= X-Gm-Gg: ASbGncvPrrrBaaW3ObuHyn62jGOyqwcoDMZnys5cvfJ6HULOyv5AC6QpSUCb0GizX97 l1clLWDYaoh0h7rhpAO+7AEQ++yaMcWGyJHwIh86Ql7k0Qea97pyHjes+Ckj7lidkgXNmeLrLc+ nnvcZPsXw8fW+Uyxs7JcRk+r946P1cGtx8aWjLJSBELQOtKySUoniY2PbkXTv8/AxSAoawWXOKD I8/Inc39t+pAZrRqbbN1qCWojHqh5of2xCuej2itXP64i3brb7yKbZ8xS3qFnWy6SGQ824ZY2Ln jg97L1Rao8MeIIf9ZcZo30dNiOWqjCkiqWuai6oG0p57vx3J3WQGDVKGomITZlK0P2nC4VRhNxl bdY0u2KkuHIuJ4VjmZRSYAeH9TBEiuFTkfVpuM0GRsJjkKCbOiN+oQ5s3NWtiWdadT1xlupCz8J bpkw== X-Google-Smtp-Source: AGHT+IFzzaZr+RhlDjxNG4GrnIgdqHryIvrp5KRx4Q290HhuHVDHNv99fTZ6TxYBpRifX9H8V6fGVw== X-Received: by 2002:ac8:5a12:0:b0:4b5:f1e0:29f with SMTP id d75a77b69052e-4b5f8443feamr125768001cf.11.1757571693325; Wed, 10 Sep 2025 23:21:33 -0700 (PDT) Received: from localhost (ec2-54-224-155-122.compute-1.amazonaws.com. [54.224.155.122]) by smtp.gmail.com with ESMTPSA id d75a77b69052e-4b639cb2e16sm5102321cf.12.2025.09.10.23.21.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Sep 2025 23:21:33 -0700 (PDT) From: tenistarkim@gmail.com X-Google-Original-From: andrew.kim@intel.com To: Matthew Sterrett Cc: pgsql-hackers@lists.postgresql.org, byavuz81@gmail.com, slpmcf@gmail.com, raghuveer.devulapalli@intel.com, akash.shankaran@intel.com, Andrew kim Subject: [PATCH 2/2] Benchmark code for postgres checksums Date: Thu, 11 Sep 2025 06:21:28 +0000 Message-ID: <20250911062128.4000-3-andrew.kim@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250911062128.4000-1-andrew.kim@intel.com> References: <20250911062128.4000-1-andrew.kim@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk From: Andrew kim --- contrib/meson.build | 1 + contrib/pg_checksum_bench/meson.build | 23 +++++++++++++ .../pg_checksum_bench--1.0.sql | 8 +++++ contrib/pg_checksum_bench/pg_checksum_bench.c | 34 +++++++++++++++++++ .../pg_checksum_bench.control | 4 +++ .../sql/pg_checksum_bench.sql | 17 ++++++++++ 6 files changed, 87 insertions(+) create mode 100644 contrib/pg_checksum_bench/meson.build create mode 100644 contrib/pg_checksum_bench/pg_checksum_bench--1.0.sql create mode 100644 contrib/pg_checksum_bench/pg_checksum_bench.c create mode 100644 contrib/pg_checksum_bench/pg_checksum_bench.control create mode 100644 contrib/pg_checksum_bench/sql/pg_checksum_bench.sql diff --git a/contrib/meson.build b/contrib/meson.build index ed30ee7d639..fe5149aadff 100644 --- a/contrib/meson.build +++ b/contrib/meson.build @@ -12,6 +12,7 @@ contrib_doc_args = { 'install_dir': contrib_doc_dir, } +subdir('pg_checksum_bench') subdir('amcheck') subdir('auth_delay') subdir('auto_explain') diff --git a/contrib/pg_checksum_bench/meson.build b/contrib/pg_checksum_bench/meson.build new file mode 100644 index 00000000000..32ccd9efa0f --- /dev/null +++ b/contrib/pg_checksum_bench/meson.build @@ -0,0 +1,23 @@ +# Copyright (c) 2022-2025, PostgreSQL Global Development Group + +pg_checksum_bench_sources = files( + 'pg_checksum_bench.c', +) + +if host_system == 'windows' + pg_checksum_bench_sources += rc_lib_gen.process(win32ver_rc, extra_args: [ + '--NAME', 'pg_checksum_bench', + '--FILEDESC', 'pg_checksum_bench',]) +endif + +pg_checksum_bench = shared_module('pg_checksum_bench', + pg_checksum_bench_sources, + kwargs: contrib_mod_args, +) +contrib_targets += pg_checksum_bench + +install_data( + 'pg_checksum_bench--1.0.sql', + 'pg_checksum_bench.control', + kwargs: contrib_data_args, +) diff --git a/contrib/pg_checksum_bench/pg_checksum_bench--1.0.sql b/contrib/pg_checksum_bench/pg_checksum_bench--1.0.sql new file mode 100644 index 00000000000..5f13cbe3c5e --- /dev/null +++ b/contrib/pg_checksum_bench/pg_checksum_bench--1.0.sql @@ -0,0 +1,8 @@ +/* contrib/pg_checksum_bench/pg_checksum_bench--1.0.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +-- \echo Use "CREATE EXTENSION pg_checksum_bench" to load this file. \quit + +CREATE FUNCTION drive_pg_checksum(page_count int) + RETURNS pg_catalog.void + AS 'MODULE_PATHNAME' LANGUAGE C; diff --git a/contrib/pg_checksum_bench/pg_checksum_bench.c b/contrib/pg_checksum_bench/pg_checksum_bench.c new file mode 100644 index 00000000000..f40f335ff59 --- /dev/null +++ b/contrib/pg_checksum_bench/pg_checksum_bench.c @@ -0,0 +1,34 @@ +#include "postgres.h" +#include "fmgr.h" +#include "storage/checksum_impl.h" + +#include +#include + +PG_MODULE_MAGIC; + +#define REPEATS 1000000 + +PG_FUNCTION_INFO_V1(drive_pg_checksum); +Datum +drive_pg_checksum(PG_FUNCTION_ARGS) +{ + int page_count = PG_GETARG_INT32(0); + + PGChecksummablePage * pages = palloc(page_count * sizeof(PGChecksummablePage)); + srand(0); + for (size_t i = 0; i < page_count * sizeof(PGChecksummablePage); i++){ + char * byte_ptr = (char *) pages; + byte_ptr[i] = rand() % 256; + } + + for (int i = 0; i < REPEATS; i++){ + const PGChecksummablePage * test_page = pages + (i % page_count); + volatile uint32 result = pg_checksum_block(test_page); + (void) result; + } + + pfree((void *) pages); + + PG_RETURN_VOID(); +} diff --git a/contrib/pg_checksum_bench/pg_checksum_bench.control b/contrib/pg_checksum_bench/pg_checksum_bench.control new file mode 100644 index 00000000000..4a4e2c9363c --- /dev/null +++ b/contrib/pg_checksum_bench/pg_checksum_bench.control @@ -0,0 +1,4 @@ +comment = 'pg_checksum benchmark' +default_version = '1.0' +module_pathname = '$libdir/pg_checksum_bench' +relocatable = true diff --git a/contrib/pg_checksum_bench/sql/pg_checksum_bench.sql b/contrib/pg_checksum_bench/sql/pg_checksum_bench.sql new file mode 100644 index 00000000000..4b347699953 --- /dev/null +++ b/contrib/pg_checksum_bench/sql/pg_checksum_bench.sql @@ -0,0 +1,17 @@ +CREATE EXTENSION pg_checksum_bench; + +SELECT drive_pg_checksum(-1); + +\timing on + +SELECT drive_pg_checksum(1); +SELECT drive_pg_checksum(2); +SELECT drive_pg_checksum(4); +SELECT drive_pg_checksum(8); +SELECT drive_pg_checksum(16); +SELECT drive_pg_checksum(32); +SELECT drive_pg_checksum(64); +SELECT drive_pg_checksum(128); +SELECT drive_pg_checksum(256); +SELECT drive_pg_checksum(512); +SELECT drive_pg_checksum(1024); -- 2.43.0