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-0058b4-8p 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-006F0Z-SP for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Sep 2025 06:58:09 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uwaSF-005h7r-Hs for pgsql-hackers@lists.postgresql.org; Thu, 11 Sep 2025 06:06:48 +0000 Received: from mail-qt1-x836.google.com ([2607:f8b0:4864:20::836]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uwaSC-0008dv-1B for pgsql-hackers@lists.postgresql.org; Thu, 11 Sep 2025 06:06:47 +0000 Received: by mail-qt1-x836.google.com with SMTP id d75a77b69052e-4b600408e9aso1243981cf.2 for ; Wed, 10 Sep 2025 23:06:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757570804; x=1758175604; 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=DUFpbRH72gMT9Mm3E9g2Z+hO/CnDH+VknWTsufyQRQ+g8R934C25HIoYY7lBEzF+dD g8xBqaL3qLA1EbAR+fSCCiYB81VjkTRDQVEcLRtpuIzbcL8k0Lm056g8FycdrczEKjqs kVDYLduOdREByR/k+qZO4IWB8aADV/CS5KBk3n5oz8B6fVorxKlhj/sWPgEc4t8p4ngL 1JB27rrUBXoCp3vuw0iv5MZH1srzEXZNtKzazcwtP2MOyZgiAs/czXOh0jrOGbJAMaw3 5qNn4dNLQ5o6LE854iS/R4j8RUYP7IDGftRkpsvN+588GPAPwEXcKBTNbud1goZJjH8b /tQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757570804; x=1758175604; 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=Gl6gqNHfGZvpUO7aSSE1cT8KKR8XN+GykngCeNZfHF1xmYV8VbtdXz/Z4pRtOvHoR1 bWIp1wnW8YzyL2lpAdUX8eSp8TbEq6fdnaVAr+VD0yWBqieBbCiDCH4e03mLPdKylRqw YnL8z1NUYuvFVX6S5K4neXMh2y4vxatHiReAJlE/53IplYC9pWOA73Wq0y3UEJ09uD1r 2oixvmy91Ko36gZ3ycxKO/apZfaR/lPG1xKcvetlyOg6nAOFb0dEtyfN9/ePLRqtv2Pi 2IPCkk4RHGWL2Jp1s47Uqw0XIwvxZ0OzJQLsmcZN+eZzwV8XBLrzgUxNaLAvOVoJMiZ9 sGPA== X-Gm-Message-State: AOJu0YwUG0qALJixjWkFZAMsEWy+aLoe3MJIe9xTRXTt7oHa4sbS818X HMuOAP+EyfG7FxF5LWAWy4ePK3VbI2vkbtb9pp4CwnMfx8hfRGIgs08/J7E/MGb0 X-Gm-Gg: ASbGncsUmxkjpXNJxQIy9t4cNTEf2PjL+EJuBAs4Den/dvFNINLlzoe2xqBzm3b+ZB7 7UWmBMeDLZPegrvOAKxU3z0YSNxfJEbIavmkrDZrf6x+kDGS7o8103hNoTN/A8AG15+/8yi9J5H 9JRk0G4yWbOCSP8gfxHjrYmDmYNR+sE/g/sr1zfPobPXu0N0Nysg4ItO+wRd88z/Ur7CPzYc2z3 OYB62EAjdC819x3zYlTrsypHRw0B8xEjO7Hyeoht8CxCsGhPC9rnwUbC79oaiHSm1HRU/uIciJL TgLQt0vvcPWkQy22SG41Mrk6lO3WVKrW5WbhtsVZvi4lOwSYShIicZmHzsOPZvtZ8GhEvLgw+i0 dRjgGU+6wy1hd4ytWbiKkvNqKQcI0nhttcf5spbQaPGKV31/C+smZrClN1vdHHUTR4cBLozLT3g +lwg== X-Google-Smtp-Source: AGHT+IEP8j4J9thNkUG0nZiqGxQZ4vjuyQmQV0qH4cHuma9PQD1NqvxzoAc0M32WovptNUnsw3zSgg== X-Received: by 2002:a05:6214:3014:b0:721:cf8c:cb24 with SMTP id 6a1803df08f44-7394df214c9mr129477226d6.8.1757570804012; Wed, 10 Sep 2025 23:06:44 -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 6a1803df08f44-763b3f4a402sm5737056d6.2.2025.09.10.23.06.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Sep 2025 23:06:43 -0700 (PDT) From: tenistarkim@gmail.com X-Google-Original-From: andrew.kim@intel.com To: pgsql-hackers@lists.postgresql.org Cc: alvherre@postgresql.org, andres@anarazel.de, Andrew kim Subject: [PATCH 2/2] Benchmark code for postgres checksums Date: Thu, 11 Sep 2025 06:06:28 +0000 Message-ID: <20250911060628.3950-3-andrew.kim@intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250911060628.3950-1-andrew.kim@intel.com> References: <20250911060628.3950-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