On 4 January 2017 at 01:16, Michael Paquier <michael.paqu...@gmail.com> wrote: > On Tue, Jan 3, 2017 at 6:23 AM, Jim Nasby <jim.na...@bluetreble.com> wrote: >> + /* Check if wal_segment_size is in the power of 2 */ >> + for (i = 0;; i++, pow2 = pow(2, i)) >> + if (pow2 >= wal_segment_size) >> + break; >> + >> + if (wal_segment_size != 1 && pow2 > wal_segment_size) >> + { >> + fprintf(stderr, _("%s: WAL segment size must be in >> the power of 2\n"), progname); >> + exit(1); >> + } > > I recall taht pow(x, 2) and x * x result usually in the same assembly > code, but pow() can never be more optimal than a simple > multiplication. So I'd think that it is wiser to avoid it in this code > path. Documentation is missing for the new replication command > SHOW_WAL_SEG. Actually, why not just having an equivalent of the SQL > command and be able to query parameter values?
This would probably be nicer written using a bitwise trick to ensure that no lesser significant bits are set. If it's a power of 2, then subtracting 1 should have all the lesser significant bits as 1, so binary ANDing to that should be 0. i.e no common bits. Something like: /* ensure segment size is a power of 2 */ if ((wal_segment_size & (wal_segment_size - 1)) != 0) { fprintf(stderr, _("%s: WAL segment size must be in the power of 2\n"), progname); exit(1); } There's a similar trick in bitmapset.c for RIGHTMOST_ONE, so looks like we already have assumptions about two's complement arithmetic -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers