On Tue, Oct 10, 2023 at 11:33 AM Robert Haas <robertmh...@gmail.com> wrote: > On Mon, Oct 9, 2023 at 4:47 PM Andres Freund <and...@anarazel.de> wrote: > > I think we might be able to speed some of this up by pre-compute values so > > we > > can implement things like bytesleft / UsableBytesInPage with shifts. IIRC we > > already insist on power-of-two segment sizes, so instead of needing to > > divide > > by a runtime value, we should be able to shift by a runtime value (and the > > modulo should be a mask). > > Huh, is there a general technique for this when dividing by a > non-power-of-two? The segment size is a power of two, as is the page > size, but UsableBytesIn{Page,Segment} are some random value slightly > less than a power of two.
BTW in case someone is interested, Hacker's Delight (a book that has come up on this list a few times before) devotes a couple of chapters of magical incantations to this topic. Compilers know that magic, and one thought I had when I first saw this discussion was that we could specialise the code for the permissible wal segment sizes. But nuking the variable sized page headers sounds better.