Re: define pg_structiszero(addr, s, r)
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Cc: Ranier Vilela <ranier.vf@gmail.com>, David Rowley <dgrowleyml@gmail.com>, Peter Smith <smithpb2250@gmail.com>, Peter Eisentraut <peter@eisentraut.org>, Heikki Linnakangas <hlinnaka@iki.fi>, pgsql-hackers@lists.postgresql.org
Date: 2024-11-15T00:30:25Z
Lists: pgsql-hackers
Attachments
- v13-0001-Optimize-pg_memory_is_all_zeros.patch (text/x-diff) patch v13-0001
- v13-0002-Make-use-of-pg_memory_is_all_zeros-in-PageIsVeri.patch (text/x-diff) patch v13-0002
- v13-0003-Tweak-some-comments-in-0001.patch (text/x-diff) patch v13-0003
On Thu, Nov 14, 2024 at 12:33:20PM +0000, Bertrand Drouvot wrote: > Case 2 should be read as "in the 4-31" bytes range on 32-bit system as all > comparisons are done in size_t. I'd suggest to use a -m32 in your gcc switches, when it comes to tests, but you already know that.. Anyway, as you say, the portability of v12 is OK even for sizeof(size_t) == 4 because we don't rely on any hardcoded values, and this patch does what it should in this case (double-checked myself manually for the three cases with -m32). > What would be unsafe on 32-bit would be to read up to 32 bytes while len < 32 > and that can not happen. > > As mentioned up-thread the comments are wrong on 32-bit, indeed they must be read > as: > > Case 1: len < 4 bytes > Case 2: len in the 4-31 bytes range > Case 3: len >= 32 bytes This part could be indeed better than what's proposed in v12, so I would recommend to use sizeof(size_t) a bit more consistently rather than have the reader guess that. Note that some parts of v12-0001 use sizeof(size_t) in the comments, which makes things inconsistent. Some comments feel duplicated, as well, like the "no risk" mentions, which are clear enough based on the description and the limitations of the previous cases. I'd like to suggest a few tweaks, making the comments more flexible. See 0003 that applies on top of your latest patch set, reattaching v12 again. -- Michael
Commits
-
Use pg_memory_is_all_zeros() in PageIsVerifiedExtended()
- 03a42c9652f8 18.0 landed
-
Optimize pg_memory_is_all_zeros() in memutils.h
- 5be1dabd2ae0 18.0 landed
-
Remove use of pg_memory_is_all_zeros() in bufpage.c
- e819bbb7c82a 18.0 landed
-
Add pg_memory_is_all_zeros() in memutils.h
- 07e9e28b56db 18.0 landed