Re: Reducing power consumption on idle servers - Mailing list pgsql-hackers

From Kyotaro Horiguchi
Subject Re: Reducing power consumption on idle servers
Date
Msg-id 20220324.161643.1806962492940958215.horikyota.ntt@gmail.com
Whole thread Raw
In response to Re: Reducing power consumption on idle servers  (Andres Freund <andres@anarazel.de>)
Responses Re: Reducing power consumption on idle servers  (Simon Riggs <simon.riggs@enterprisedb.com>)
List pgsql-hackers
At Thu, 10 Mar 2022 11:45:10 -0800, Andres Freund <andres@anarazel.de> wrote in 
> Hi,
> 
> On 2022-03-10 17:50:47 +0000, Simon Riggs wrote:
> > On Wed, 9 Mar 2022 at 01:16, Zheng Li <zhengli10@gmail.com> wrote:
> > 
> > > > 1. Standardize the hibernation time at 60s, using a #define
> > > > HIBERNATE_DELAY_SEC 60
> > >
> > > I notice in patch 3 HIBERNATE_DELAY_SEC has been increased to 300
> > > seconds, what’s the reasoning behind it? Is longer hibernation delay
> > > better? If so can we set it to INT_MAX (the max timeout allowed by
> > > WaitLatch()) in which case a worker in hibernation only relies on
> > > wakeup? I think it would be nice to run experiments to verify that the
> > > patch reduces power consumption while varying the value of
> > > HIBERNATE_DELAY_SEC.
> > 
> > Setting it to INT_MAX would be the same as not allowing a timeout,
> > which changes a lot of current behavior and makes it less robust.
> 
> Most of these timeouts are a bad idea and should not exist. We repeatedly have
> had bugs where we were missing wakeups etc but those bugs were harder to

I basically agree to this.

> notice because of timeouts.  I'm against entrenching this stuff further.

For example, pgarch.c theoretically doesn't need hibernate, since it
has an apparent trigger event and a terminal condition. What we need
to do about archiver is to set timeout only when it didn't reach the
lastest finished segment at an iteration. (this might need additional
shared memory use, though..)

I'm not sure about bgwriter, walwriter and logical replication stuff...

About walreciver, 

-        if ((now - startTime) > WALRCV_STARTUP_TIMEOUT)
+        if ((now - startTime) > wal_receiver_timeout)

This is simply a misuse of the timeout. WALRCV_STARTP_TIMEOUT is not
used for a sleep and irrelevant to receiving data from the peer
walsender.  wal_receiver_timeout's default is 60s but we don't assume
that walreceiver takes that long time to start up. (I think Thomas is
wroking on the walreceiver timeout stuff.)

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center

pgsql-hackers by date:

Previous
From: "Andrey V. Lepikhov"
Date:
Subject: Re: Fast COPY FROM based on batch insert
Next
From: Jian Guo
Date:
Subject: Re: Summary Sort workers Stats in EXPLAIN ANALYZE