Re: pgbench progress report improvements

From: Fabien COELHO <coelho(at)cri(dot)ensmp(dot)fr>
To: Noah Misch <noah(at)leadboat(dot)com>
Cc: PostgreSQL Developers <pgsql-hackers(at)postgresql(dot)org>, pavel(dot)stehule(at)gmail(dot)com
Subject: Re: pgbench progress report improvements
Date: 2013-09-22 10:07:09
Message-ID: alpine.DEB.2.02.1309221118460.18614@sto
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


>>> It is also printed without --rate. There is a "if" above because there is
>>> one report with "lag" (under --rate), and one without.
>>
>> The code I quoted is for the final report in printResults(), and that only
>> shows latency mean/stddev when using --rate. The progress reporting in
>> threadRun() does have two variations as you describe.
>
> Indeed, I took it for the progress report. I'll check. It must be consistent
> whether under --rate or not.

I checked.

The current status is that stddev is currently only available under
--progress or --rate, and displayed in the final report if --rate.

I can add stddev in the final report *if* progress was on, but not
otherwise.

This means that under standard benchmarking (no --rate and without
progress if it is not enabled by default) stddev cannot be shown.

This is consistent with your requirement that gettimeofday calls must be
avoided, but results in this necessary inconsistency in reporting results.

The alternative is to always measure, but that would imply to always call
gettimeofday, and I understood that it is a nogo for you. I think that
your performance concerns are needless:

I confirm a 50,000,000 gettimeofday calls/s on my laptop. On a desktop
workstation I have 43 millions calls/s. The slowest I have found on an old
server is 3.3 millions calls/s, that is 0.3 µs per call.

Even so, this is to be compared to the fastest possible transaction
latency I got which is about 140 µs (one local prepared in-memory table
select on my laptop), so the overhead 1/450 of the minimum possible
transaction time, pretty negligeable in my opinion. For transaction times
which involve disk accesses, the latency is in ms and the overhead well
under 1/1000.

There are some measures about gettimeofday overhead reported in:

http://www.atl.external.lmco.com/projects/QoS/POSIX_html/index.html

The worst figure is for a Pentium 166 MHz (!), the overhead is 86.6 µs.
However typical values are around or under 1 µs, even for old Pentium II
350 MHz PCs, and this is less that 1% of our minimum possible transaction
time.

Note also that under option --report-latencies, the number of gettimeofday
calls is pretty large, and nobody complained.

So I'm of the opinion that we should not worry at all about the number of
gettimeofday calls in pgbench.

--
Fabien.

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Vik Fearing 2013-09-22 11:13:35 Re: [PATCH] pg_sleep(interval)
Previous Message Andres Freund 2013-09-22 09:10:57 Re: INSERT...ON DUPLICATE KEY LOCK FOR UPDATE