Re: Performance improvements for src/port/snprintf.c
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-hackers@lists.postgresql.org
Date: 2018-08-19T22:07:45Z
Lists: pgsql-hackers
Attachments
- snprintf-speedups-2.patch (text/x-diff) patch
I wrote: > [ snprintf-speedups-1.patch ] Here's a slightly improved version of that, with two changes: * Given the current state of the what-about-%m thread, it's no longer academic how well this performs relative to glibc's version. I poked at that and found that a lot of the discrepancy came from glibc using strchrnul() to find the next format specifier --- apparently, that function is a *lot* faster than the equivalent manual loop. So this version uses that if available. * I thought of a couple of easy wins for fmtfloat. We can pass the precision spec down to the platform's sprintf using "*" notation instead of converting it to text and back, and that also simplifies matters enough that we can avoid using an sprintf call to build the simplified format string. This seems to get us down to the vicinity of a 10% speed penalty on microbenchmarks of just float conversion, which is enough to satisfy me given the other advantages of switching to our own snprintf. 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