Re: something is wonky with pgbench pipelining
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: pgsql-hackers@postgresql.org
Date: 2021-07-21T23:55:08Z
Lists: pgsql-hackers
Attachments
Hi, On 2021-07-20 14:57:15 -0400, Alvaro Herrera wrote: > On 2021-Jul-20, Andres Freund wrote: > > > I think what's happening is that the first recvfrom() actually gets all 7 > > connection results. The server doesn't have any queries to process at that > > point. But we ask the kernel whether there is new network input over and over > > again, despite having results to process! > > Hmm, yeah, that seems a missed opportunity. > > with-isbusy: > > ... > > tps = 3990.424742 (without initial connection time) > > ... > > 1,013.71 msec task-clock # 0.202 CPUs utilized > > 80,203 raw_syscalls:sys_enter # 79.119 K/sec > > 19,947 context-switches # 19.677 K/sec > > 2,943,676,361 cycles:u # 2.904 GHz > > 346,607,769 cycles:k # 0.342 GHz > > 8,464,188,379 instructions:u # 2.88 insn per cycle > > 226,665,530 instructions:k # 0.65 insn per cycle > > This is quite compelling. > > If you don't mind I can get this pushed soon in the next couple of days > -- or do you want to do it yourself? I was thinking of pushing the attached, to both 14 and master, thinking that was what you meant, but then I wasn't quite sure: It's a relatively minor performance improvement, after all? OTOH, it arguably also just is a bit of an API misuse... I'm inclined to push it to 14 and master, but ... Greetings, Andres Freund
Commits
-
pgbench: When using pipelining only do PQconsumeInput() when necessary.
- fa604e0dd07a 14.0 landed
- 87bff68840d5 15.0 landed