Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1g5JUl-0003Lj-4k for pgsql-hackers@arkaria.postgresql.org; Wed, 26 Sep 2018 23:45:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1g5JUj-00005C-92 for pgsql-hackers@arkaria.postgresql.org; Wed, 26 Sep 2018 23:45:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1g5JUj-000051-1x for pgsql-hackers@lists.postgresql.org; Wed, 26 Sep 2018 23:45:25 +0000 Received: from sss.pgh.pa.us ([66.207.139.130]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1g5JUW-0008L6-74 for pgsql-hackers@lists.postgresql.org; Wed, 26 Sep 2018 23:45:24 +0000 Received: from sss1.sss.pgh.pa.us (localhost [127.0.0.1]) by sss.pgh.pa.us (8.14.4/8.14.4) with ESMTP id w8QNj7pe014303; Wed, 26 Sep 2018 19:45:07 -0400 From: Tom Lane To: Andres Freund cc: Alexander Kuzmenkov , pgsql-hackers@lists.postgresql.org Subject: Re: Performance improvements for src/port/snprintf.c In-reply-to: <20180926221814.el5nwmkez6zfmzbz@alap3.anarazel.de> References: <11787.1534530779@sss.pgh.pa.us> <2238.1534716465@sss.pgh.pa.us> <15785.1536776055@sss.pgh.pa.us> <20180926220419.lorxpb564gakdjkz@alap3.anarazel.de> <20180926221814.el5nwmkez6zfmzbz@alap3.anarazel.de> Comments: In-reply-to Andres Freund message dated "Wed, 26 Sep 2018 15:18:14 -0700" MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <14301.1538005506.1@sss.pgh.pa.us> Date: Wed, 26 Sep 2018 19:45:07 -0400 Message-ID: <14302.1538005507@sss.pgh.pa.us> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk Andres Freund writes: > On 2018-09-26 15:04:20 -0700, Andres Freund wrote: >> I assume this partially is just the additional layers of function calls >> (psprintf, pvsnprintf, pg_vsnprintf, dopr) that are now done, in >> addition to pretty much the same work as before (i.e. sprintf("%.*f")). No, there are no additional layers that weren't there before --- snprintf.c's snprintf() slots in directly where the platform's did before. Well, ok, dopr() wasn't there before, but I trust you're not claiming that glibc's implementation of snprintf() is totally flat either. I think it's just that snprintf.c is a bit slower in this case. If you look at glibc's implementation, they've expended a heck of a lot of code and sweat on it. The only reason we could hope to beat it is that we're prepared to throw out some functionality, like LC_NUMERIC handling. > I'm *NOT* proposing that as the actual solution, but as a datapoint, it > might be interesting that hardcoding the precision and thus allowing use > ofusing strfromd() instead of sprintf yields a *better* runtime than > master. Interesting. strfromd() is a glibc-ism, and a fairly recent one at that (my RHEL6 box doesn't seem to have it). But we could use it where available. And it doesn't seem unreasonable to have a fast path for the specific precision value(s) that float4/8out will actually use. regards, tom lane