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.
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 |