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 1t2g9P-006CHy-8m for pgsql-hackers@arkaria.postgresql.org; Mon, 21 Oct 2024 00:19:59 +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 1t2g9N-002uMZ-Ge for pgsql-hackers@arkaria.postgresql.org; Mon, 21 Oct 2024 00:19:57 +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 1t2g9N-002uLz-6j for pgsql-hackers@lists.postgresql.org; Mon, 21 Oct 2024 00:19:57 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t2g9K-001uxM-0E for pgsql-hackers@postgresql.org; Mon, 21 Oct 2024 00:19:56 +0000 Received: from [192.168.11.3] (p3667168-ipxg13201funabasi.chiba.ocn.ne.jp [114.158.240.168]) by oss.nttdata.com (Postfix) with ESMTPSA id C601D61824 for ; Mon, 21 Oct 2024 09:19:49 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at oss.nttdata.com Content-Type: multipart/mixed; boundary="------------3pG3fnq1x0slACAMYWWmSUU5" Message-ID: Date: Mon, 21 Oct 2024 09:19:49 +0900 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: pgsql-hackers@postgresql.org From: Fujii Masao Subject: Refactor GetLockStatusData() by skipping unused backends and groups List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------3pG3fnq1x0slACAMYWWmSUU5 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, While reading the fast-path lock code, I noticed that GetLockStatusData() checks all slots for every backend to gather fast-path lock data. However, backends with PID=0 don't hold fast-path locks, right? If so, we can improve efficiency by having GetLockStatusData() skip those backends early. Additionally, when GetLockStatusData() checks a backend, it currently goes through all the slots accross its groups. Each group has 16 slots, so if a backend has 4 groups (this can change depending on max_locks_per_transaction), that means checking 64 slots. Instead, we could refactor the function to skip groups without registered fast-path locks, improving performance. Since each set of 16 slots is packed into a uint32 variable (PGPROC->fpLockBits[i]), it’s easy to check if a group has any fast-path locks. I've attached a patch that implements these changes. This refactoring is especially useful when max_connections and max_locks_per_transaction are set high, as it reduces unnecessary checks across numerous slots. Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION --------------3pG3fnq1x0slACAMYWWmSUU5 Content-Type: text/plain; charset=UTF-8; name="v1-0001-Refactor-GetLockStatusData-to-skip-backends-group.patch" Content-Disposition: attachment; filename*0="v1-0001-Refactor-GetLockStatusData-to-skip-backends-group.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyZjRjMWY1MWNjZDMyOTgxYTFiZmVmZTA0NDY4ZTYzMGNiMGJkNjNjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBGdWppaSBNYXNhbyA8ZnVqaWlAcG9zdGdyZXNxbC5v cmc+CkRhdGU6IFN1biwgMjAgT2N0IDIwMjQgMTQ6NTE6MDcgKzA5MDAKU3ViamVjdDogW1BB VENIIHYxXSBSZWZhY3RvciBHZXRMb2NrU3RhdHVzRGF0YSgpIHRvIHNraXAgYmFja2VuZHMv Z3JvdXBzCiB3aXRob3V0IGZhc3QtcGF0aCBsb2Nrcy4KClByZXZpb3VzbHksIEdldExvY2tT dGF0dXNEYXRhKCkgY2hlY2tlZCBhbGwgc2xvdHMgZm9yIGV2ZXJ5IGJhY2tlbmQKdG8gZ2F0 aGVyIGZhc3QtcGF0aCBsb2NrIGRhdGEsIHdoaWNoIGNvdWxkIGJlIGluZWZmaWNpZW50LiBU aGlzIGNvbW1pdApyZWZhY3RvcnMgaXQgYnkgc2tpcHBpbmcgYmFja2VuZHMgd2l0aCBQSUQ9 MCAoc2luY2UgdGhleSBkb24ndCBob2xkCmZhc3QtcGF0aCBsb2NrcykgYW5kIHNraXBwaW5n IGdyb3VwcyB3aXRoIG5vIHJlZ2lzdGVyZWQgZmFzdC1wYXRoIGxvY2tzLAppbXByb3Zpbmcg ZWZmaWNpZW5jeS4KClRoaXMgcmVmYWN0b3JpbmcgaXMgcGFydGljdWxhcmx5IGJlbmVmaWNp YWwsIGZvciBleGFtcGxlIHdoZW4KbWF4X2Nvbm5lY3Rpb25zIGFuZCBtYXhfbG9ja3NfcGVy X3RyYW5zYWN0aW9uIGFyZSBzZXQgaGlnaCwKYXMgaXQgcmVkdWNlcyB1bm5lY2Vzc2FyeSBj aGVja3MgYWNyb3NzIG51bWVyb3VzIHNsb3RzLgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9sb2NrLmMgfCA2NyArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCAzOSBpbnNlcnRpb25zKCspLCAyOCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL2xvY2suYwppbmRleCAwOWE4YWMxNTc4Li40ZWE0N2YyZDk5IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9sb2NrLmMKQEAgLTM3MzEsNDQgKzM3MzEsNTUgQEAgR2V0TG9j a1N0YXR1c0RhdGEodm9pZCkKIAlmb3IgKGkgPSAwOyBpIDwgUHJvY0dsb2JhbC0+YWxsUHJv Y0NvdW50OyArK2kpCiAJewogCQlQR1BST0MJICAgKnByb2MgPSAmUHJvY0dsb2JhbC0+YWxs UHJvY3NbaV07Ci0JCXVpbnQzMgkJZjsKKworCQkvKiBTa2lwIGJhY2tlbmRzIHdpdGggcGlk PTAsIGFzIHRoZXkgZG9uJ3QgaG9sZCBmYXN0LXBhdGggbG9ja3MgKi8KKwkJaWYgKHByb2Mt PnBpZCA9PSAwKQorCQkJY29udGludWU7CiAKIAkJTFdMb2NrQWNxdWlyZSgmcHJvYy0+ZnBJ bmZvTG9jaywgTFdfU0hBUkVEKTsKIAotCQlmb3IgKGYgPSAwOyBmIDwgRlBfTE9DS19TTE9U U19QRVJfQkFDS0VORDsgKytmKQorCQlmb3IgKHVpbnQzMiBnID0gMDsgZyA8IEZhc3RQYXRo TG9ja0dyb3Vwc1BlckJhY2tlbmQ7IGcrKykKIAkJewotCQkJTG9ja0luc3RhbmNlRGF0YSAq aW5zdGFuY2U7Ci0JCQl1aW50MzIJCWxvY2tiaXRzID0gRkFTVF9QQVRIX0dFVF9CSVRTKHBy b2MsIGYpOwotCi0JCQkvKiBTa2lwIHVuYWxsb2NhdGVkIHNsb3RzLiAqLwotCQkJaWYgKCFs b2NrYml0cykKKwkJCS8qIFNraXAgdW5hbGxvY2F0ZWQgZ3JvdXBzICovCisJCQlpZiAocHJv Yy0+ZnBMb2NrQml0c1tnXSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoZWwgPj0g ZWxzKQorCQkJZm9yIChpbnQgaiA9IDA7IGogPCBGUF9MT0NLX1NMT1RTX1BFUl9HUk9VUDsg aisrKQogCQkJewotCQkJCWVscyArPSBNYXhCYWNrZW5kczsKLQkJCQlkYXRhLT5sb2NrcyA9 IChMb2NrSW5zdGFuY2VEYXRhICopCi0JCQkJCXJlcGFsbG9jKGRhdGEtPmxvY2tzLCBzaXpl b2YoTG9ja0luc3RhbmNlRGF0YSkgKiBlbHMpOwotCQkJfQorCQkJCUxvY2tJbnN0YW5jZURh dGEgKmluc3RhbmNlOworCQkJCXVpbnQzMgkJZiA9IEZBU1RfUEFUSF9TTE9UKGcsIGopOwor CQkJCXVpbnQzMgkJbG9ja2JpdHMgPSBGQVNUX1BBVEhfR0VUX0JJVFMocHJvYywgZik7CiAK LQkJCWluc3RhbmNlID0gJmRhdGEtPmxvY2tzW2VsXTsKLQkJCVNFVF9MT0NLVEFHX1JFTEFU SU9OKGluc3RhbmNlLT5sb2NrdGFnLCBwcm9jLT5kYXRhYmFzZUlkLAotCQkJCQkJCQkgcHJv Yy0+ZnBSZWxJZFtmXSk7Ci0JCQlpbnN0YW5jZS0+aG9sZE1hc2sgPSBsb2NrYml0cyA8PCBG QVNUX1BBVEhfTE9DS05VTUJFUl9PRkZTRVQ7Ci0JCQlpbnN0YW5jZS0+d2FpdExvY2tNb2Rl ID0gTm9Mb2NrOwotCQkJaW5zdGFuY2UtPnZ4aWQucHJvY051bWJlciA9IHByb2MtPnZ4aWQu cHJvY051bWJlcjsKLQkJCWluc3RhbmNlLT52eGlkLmxvY2FsVHJhbnNhY3Rpb25JZCA9IHBy b2MtPnZ4aWQubHhpZDsKLQkJCWluc3RhbmNlLT5waWQgPSBwcm9jLT5waWQ7Ci0JCQlpbnN0 YW5jZS0+bGVhZGVyUGlkID0gcHJvYy0+cGlkOwotCQkJaW5zdGFuY2UtPmZhc3RwYXRoID0g dHJ1ZTsKKwkJCQkvKiBTa2lwIHVuYWxsb2NhdGVkIHNsb3RzLiAqLworCQkJCWlmICghbG9j a2JpdHMpCisJCQkJCWNvbnRpbnVlOwogCi0JCQkvKgotCQkJICogU3VjY2Vzc2Z1bGx5IHRh a2luZyBmYXN0IHBhdGggbG9jayBtZWFucyB0aGVyZSB3ZXJlIG5vCi0JCQkgKiBjb25mbGlj dGluZyBsb2Nrcy4KLQkJCSAqLwotCQkJaW5zdGFuY2UtPndhaXRTdGFydCA9IDA7CisJCQkJ aWYgKGVsID49IGVscykKKwkJCQl7CisJCQkJCWVscyArPSBNYXhCYWNrZW5kczsKKwkJCQkJ ZGF0YS0+bG9ja3MgPSAoTG9ja0luc3RhbmNlRGF0YSAqKQorCQkJCQkJcmVwYWxsb2MoZGF0 YS0+bG9ja3MsIHNpemVvZihMb2NrSW5zdGFuY2VEYXRhKSAqIGVscyk7CisJCQkJfQogCi0J CQllbCsrOworCQkJCWluc3RhbmNlID0gJmRhdGEtPmxvY2tzW2VsXTsKKwkJCQlTRVRfTE9D S1RBR19SRUxBVElPTihpbnN0YW5jZS0+bG9ja3RhZywgcHJvYy0+ZGF0YWJhc2VJZCwKKwkJ CQkJCQkJCSBwcm9jLT5mcFJlbElkW2ZdKTsKKwkJCQlpbnN0YW5jZS0+aG9sZE1hc2sgPSBs b2NrYml0cyA8PCBGQVNUX1BBVEhfTE9DS05VTUJFUl9PRkZTRVQ7CisJCQkJaW5zdGFuY2Ut PndhaXRMb2NrTW9kZSA9IE5vTG9jazsKKwkJCQlpbnN0YW5jZS0+dnhpZC5wcm9jTnVtYmVy ID0gcHJvYy0+dnhpZC5wcm9jTnVtYmVyOworCQkJCWluc3RhbmNlLT52eGlkLmxvY2FsVHJh bnNhY3Rpb25JZCA9IHByb2MtPnZ4aWQubHhpZDsKKwkJCQlpbnN0YW5jZS0+cGlkID0gcHJv Yy0+cGlkOworCQkJCWluc3RhbmNlLT5sZWFkZXJQaWQgPSBwcm9jLT5waWQ7CisJCQkJaW5z dGFuY2UtPmZhc3RwYXRoID0gdHJ1ZTsKKworCQkJCS8qCisJCQkJICogU3VjY2Vzc2Z1bGx5 IHRha2luZyBmYXN0IHBhdGggbG9jayBtZWFucyB0aGVyZSB3ZXJlIG5vCisJCQkJICogY29u ZmxpY3RpbmcgbG9ja3MuCisJCQkJICovCisJCQkJaW5zdGFuY2UtPndhaXRTdGFydCA9IDA7 CisKKwkJCQllbCsrOworCQkJfQogCQl9CiAKIAkJaWYgKHByb2MtPmZwVlhJRExvY2spCi0t IAoyLjQ2LjIKCg== --------------3pG3fnq1x0slACAMYWWmSUU5--