Re: pgbench - exclude pthread_create() from connection start timing

Поиск
Список
Период
Сортировка
От Noah Misch
Тема Re: pgbench - exclude pthread_create() from connection start timing
Дата
Msg-id 20130926042018.GA47518@tornado.leadboat.com
обсуждение исходный текст
Ответ на Re: pgbench progress report improvements - split 3 v2  (Fabien COELHO <coelho@cri.ensmp.fr>)
Ответы Re: pgbench - exclude pthread_create() from connection start timing  (Fabien COELHO <coelho@cri.ensmp.fr>)
Список pgsql-hackers
Concerning one of the eventual would-be split patches...

On Tue, Sep 24, 2013 at 10:41:17PM +0200, Fabien COELHO wrote:
>  - Take thread start time at the beginning of the thread (!)
>
>    Otherwise it includes pretty slow thread/fork system start times in
>    the measurements. May help with bug #8326. This also helps with throttling,
>    as the start time is used to adjust the rate: if it is not the actual
>    start time, there is a bit of a rush at the beginning in order to
>    catch up. Taking the start time when the thread actually starts is
>    the sane thing to do to avoid surprises at possibly strange measures
>    on short runs.

On Sun, Sep 22, 2013 at 10:08:54AM +0200, Fabien COELHO wrote:
> I really spent *hours* debugging stupid measures on the previous round of 
> pgbench changes, when adding the throttling stuff. Having the start time  
> taken when the thread really starts is just sanity, and I needed that 
> just to rule out that it was the source of the "strange" measures.

I don't get it; why is taking the time just after pthread_create() more sane
than taking it just before pthread_create()?  We report separate TPS values
for "including connections establishing" and "excluding connections
establishing" because establishing the database connection is expensive,
typically far more expensive than pthread_create().  The patch for threaded
pgbench made the decision to account for pthread_create() as though it were
part of establishing the connection.  You're proposing to not account for it
all.  Both of those designs are reasonable to me, but I do not comprehend the
benefit you anticipate from switching from one to the other.

> -j 800 vs -j 100 : ITM that if I you create more threads, the time delay  
> incurred is cumulative, so the strangeness of the result should worsen.

Not in general; we do one INSTR_TIME_SET_CURRENT() per thread, just before
calling pthread_create().  However, thread 0 is a special case; we set its
start time first and actually start it last.  Your observation of cumulative
delay fits those facts.  Initializing the thread-0 start time later, just
before calling its threadRun(), should clear this anomaly without changing
other aspects of the measurement.


While pondering this area of the code, it occurs to me -- shouldn't we
initialize the throttle rate trigger later, after establishing connections and
sending startup queries?  As it stands, we build up a schedule deficit during
those tasks.  Was that deliberate?

Thanks,
nm

-- 
Noah Misch
EnterpriseDB                                 http://www.enterprisedb.com



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Noah Misch
Дата:
Сообщение: Re: pgbench progress report improvements - split 3 v2
Следующее
От: "Erik Rijkers"
Дата:
Сообщение: Re: Minmax indexes