Em seg., 22 de jun. de 2020 às 23:29, David Rowley <dgrowle...@gmail.com>
escreveu:

> On Tue, 23 Jun 2020 at 07:33, Robert Haas <robertmh...@gmail.com> wrote:
> > On Mon, Jun 22, 2020 at 12:47 PM Ranier Vilela <ranier...@gmail.com>
> wrote:
> > > Questions:
> > > 1. Why acquire and release lock in retry: loop.
> >
> > This is a super-bad idea. Note the coding rule mentioned in spin.h.
> > There are many discussion on this mailing list about the importance of
> > keeping the critical section for a spinlock to a few instructions.
> > Calling another function that *itself acquires an LWLock* is
> > definitely not OK.
>
> Just a short history lesson for Ranier to help clear up any confusion:
>
> Back before 3cda10f41 there was some merit in improving the
> performance of these functions. Before that, we used to dish out pages
> under a lock. With that old method, if given enough workers and a
> simple enough query, we could start to see workers waiting on the lock
> just to obtain the next block number they're to work on.  After the
> atomics were added in that commit, we didn't really see that again.
>
It is a good explanation. I already imagined it could be to help other
processes, but I still wasn't sure.
However, I did a test with this modification (lock before retry), and it
worked.


>
> What we're trying to fix here is the I/O pattern that these functions
> induce and that's all we should be doing here.  Changing this is
> tricky to get right as we need to consider so many operating systems
> and how they deal with I/O readahead.
>
Yes, I understand that focus here is I/O.

Sorry, by the noise.

regards,
Ranier Vilela

Reply via email to