Use pg_memory_is_all_zeros() in PageIsVerifiedExtended()

Relying on pg_memory_is_all_zeros(), which would apply SIMD instructions
when dealing with an aligned page, is proving to be at least three times
faster than the original size_t-based comparisons when checking if a
BLCKSZ page is full of zeros.  Note that PageIsVerifiedExtended() is
called each time a page is read from disk, and making it faster is a
good thing.

Author: Bertrand Drouvot
Discussion: https://postgr.es/m/CAApHDvq7P-JgFhgtxUPqhavG-qSDVUhyWaEX9M8_MNorFEijZA@mail.gmail.com
This commit is contained in:
Michael Paquier 2024-11-18 11:44:11 +09:00
parent 5be1dabd2a
commit 03a42c9652

View File

@ -89,10 +89,8 @@ PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags)
{ {
PageHeader p = (PageHeader) page; PageHeader p = (PageHeader) page;
size_t *pagebytes; size_t *pagebytes;
int i;
bool checksum_failure = false; bool checksum_failure = false;
bool header_sane = false; bool header_sane = false;
bool all_zeroes = false;
uint16 checksum = 0; uint16 checksum = 0;
/* /*
@ -126,18 +124,9 @@ PageIsVerifiedExtended(Page page, BlockNumber blkno, int flags)
} }
/* Check all-zeroes case */ /* Check all-zeroes case */
all_zeroes = true;
pagebytes = (size_t *) page; pagebytes = (size_t *) page;
for (i = 0; i < (BLCKSZ / sizeof(size_t)); i++)
{
if (pagebytes[i] != 0)
{
all_zeroes = false;
break;
}
}
if (all_zeroes) if (pg_memory_is_all_zeros(pagebytes, BLCKSZ))
return true; return true;
/* /*