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 1uwbFy-0058b4-J4 for pgsql-hackers@arkaria.postgresql.org; Thu, 11 Sep 2025 06:58:10 +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-006F0M-S4 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 1uwa66-005a6r-23 for pgsql-hackers@lists.postgresql.org; Thu, 11 Sep 2025 05:43:54 +0000 Received: from mail-qt1-x82e.google.com ([2607:f8b0:4864:20::82e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uwa64-001n1X-1o for pgsql-hackers@lists.postgresql.org; Thu, 11 Sep 2025 05:43:53 +0000 Received: by mail-qt1-x82e.google.com with SMTP id d75a77b69052e-4b604c17182so883511cf.1 for ; Wed, 10 Sep 2025 22:43:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757569431; x=1758174231; 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=P+1LYpbKtzyR1IuXwktA9aPNJb3AYYqX8d681KskpihGVhq/W2vdf6DgJeoTiFikrQ j97JtaWNB/aKUVegewv+qZYxBoHQFWkTnoSzJNESFc6/yblXsTFHFQRdIXBHD9aKqUAP RRqJPvF06dI9aMaatcwu6+LufsaA1M6fVGVJonDOlLmkNz+xVm4Z1ykrQkgu2PkzBZyb QkaPSRYCmDRAXUG0ql5N7sEmk/h1+khZ/xCG5DVMDe4mUadBa7iKjy9eAwpJJngSJyl9 E0vYvf8N/Oa6yxrz/ierIOHzqrZ2U3RXBlFOri+5cLGC3fxb8UEH5A5ZViu+VH5f4gvm rkng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757569431; x=1758174231; 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=L4Mo/nfO49Jyv7G6UPxGVS1mdmSY9Z+7ocEkzf+D5rIVfbOSS8XcqczO2OeXe2YXSZ Td18vxMKf0N7Ucpcu0KguI64AwkjcJMp2L2AW9ofkzJyZTVSvMLvwLzy6P/q3MdnF31F liYawhQiOAqskSTODCxjK56WdGtXZX2WV9nxyg8hNCAiyqaTo8q5XPX+VJeCql58nXUV r/4BEriz3b1UdvWRgabUccunvRa1+bm2Fy6lJUc402Bdx5WODo4cLg1G+SLBul9cRHcF qxekPzwsMOLlEMgEThOpAVQJKbrO7OrGWqYbBwCDuZyuVXrR0bJDFRTwNk3166T0JY3u JSHA== X-Gm-Message-State: AOJu0Ywhg/uBEMbj03vNoK3j/9Rs230+oJDdHZAbR7e1jvYlqGccsYDo LPDiL56rrsiTileZirWFp8VlwP1o3ttN/hwrlkAuJInv4E8SutVP5CWQGQvjHH0w X-Gm-Gg: ASbGncslzdntiI7QCCmnH45owGckN7H0pKrQg2VX52+oq+xPj9h0PZNvQREAvxYPm+E v8kdKuLt7Qn5KSM8lOjhrXXCZPMqBt7RrLy9NLfoFrYjALfNS+HPjIU/TncsBTDZvo3rzKO7rBV Y69Ea6tdt7DfoyEQs/MxF7Z8Lqy6pYsdn54lmzeEI8OghLCisplPJ4rGPvqlJi6BcR0+VMhocCR Ymbq/VZNHI64JK5tiwH6Al/QCespxHeRRX+3LdPRmsvhm9dn+EEMU755ajTd6E5rXEWvI+uPn41 QIEGyUCPuD26LBkcTCVrzSL8cHKLC56T+G6B+44jnjSqlI7GEAcKJnauPcFTbBO/TRcQwFvND03 Zcn4Pi+PWbaoB5i+njGOdPmFyoE3HQ0n34EPHYOPZZRaOkGj0hdeSeK2w3jPdduo4/HcgYBj9I+ 9iamoNgA6s9w== X-Google-Smtp-Source: AGHT+IG+oJB2O5+uxzMdlq5MKWp/juiRPAjicdx/ZoUtUJqcZTAnLQ3DS5vvEeuUOxRobLX3BUm5xQ== X-Received: by 2002:a05:620a:1a23:b0:812:e1e:ad2e with SMTP id af79cd13be357-813c1c9cd96mr1397837685a.3.1757569431443; Wed, 10 Sep 2025 22:43:51 -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-4b639b98495sm4804971cf.3.2025.09.10.22.43.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Sep 2025 22:43:51 -0700 (PDT) From: root X-Google-Original-From: root 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 05:42:20 +0000 Message-ID: <20250911054220.3784-3-root@ip-172-31-36-228.ec2.internal> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250911054220.3784-1-root@ip-172-31-36-228.ec2.internal> References: <20250911054220.3784-1-root@ip-172-31-36-228.ec2.internal> 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