Re: Performance improvements for src/port/snprintf.c
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@anarazel.de>
Cc: pgsql-hackers@lists.postgresql.org,
Thomas Munro <thomas.munro@enterprisedb.com>,
Andrew Gierth <andrew@tao11.riddles.org.uk>,
Alexander Kuzmenkov <a.kuzmenkov@postgrespro.ru>
Date: 2018-10-03T12:20:14Z
Lists: pgsql-hackers
Andres Freund <andres@anarazel.de> writes: > On 2018-10-02 17:54:31 -0400, Tom Lane wrote: >> Here's a version of this patch rebased over commit 625b38ea0. > Cool. Let's get that in... Cool, I'll push it shortly. >> While there might be value in implementing our own float printing code, >> I have a pretty hard time getting excited about the cost/benefit ratio >> of that. I think that what we probably really ought to do here is hack >> float4out/float8out to bypass the extra overhead, as in the 0002 patch >> below. > I'm thinking we should do a bit more than just that hack. I'm thinking > of something (barely tested) like Meh. The trouble with that is that it relies on the platform's snprintf, not sprintf, and that brings us right back into a world of portability hurt. I don't feel that the move to C99 gets us out of worrying about noncompliant snprintfs --- we're only requiring a C99 *compiler*, not libc. See buildfarm member gharial for a counterexample. I'm happy to look into whether using strfromd when available buys us anything over using sprintf. I'm not entirely convinced that it will, because of the need to ASCII-ize and de-ASCII-ize the precision, but it's worth checking. > FWIW, I think there's still a significant argument to be made that we > should work on our floating point IO performance. Both on the input and > output side. It's a significant practical problem. But both a fix like > you describe, and my proposal, should bring us to at least the previous > level of performance for the hot paths. So that'd then just be an > independent consideration. Well, an independent project anyway. I concur that it would have value; but whether it's worth the effort, and the possible behavioral changes, is not very clear to me. regards, tom lane
Commits
-
Improve snprintf.c's handling of NaN, Infinity, and minus zero.
- 6eb3eb577d76 12.0 landed
-
Rationalize snprintf.c's handling of "ll" formats.
- 595a0eab7f42 12.0 landed
-
Provide fast path in snprintf.c for conversion specs that are just "%s".
- 6d842be6c118 12.0 landed
-
Make assorted performance improvements in snprintf.c.
- abd9ca377d66 12.0 landed
-
Set snprintf.c's maximum number of NL arguments to be 31.
- 625b38ea0e98 12.0 cited
-
Always use our own versions of *printf().
- 96bf88d52711 12.0 cited