Обсуждение: Re: [COMMITTERS] pgsql: Remove too-smart-for-its-own-good optimization of not overwriting

Поиск
Список
Период
Сортировка

Re: [COMMITTERS] pgsql: Remove too-smart-for-its-own-good optimization of not overwriting

От
Robert Haas
Дата:
On Mon, Jan 4, 2010 at 9:34 PM, Tom Lane <tgl@postgresql.org> wrote:
> Log Message:
> -----------
> Remove too-smart-for-its-own-good optimization of not overwriting the output
> files when they haven't changed.  This confuses make because the build fails
> to update the file timestamps, and so it keeps on doing the action over again.

This doesn't seem like a good idea.  Not rebuilding the output files
also saves recompiling the things that depend on them.  For the BKI
files thast doesn't matter much, but for schemapg.h it might be
significant.  Certainly, if we move to generating more header files
this way, it WILL be significant.  If running the script is cheap (and
it should be), it's better to take that hit rather than recompiling a
whole mess of .c files unnecessarily.

...Robert


Re: [COMMITTERS] pgsql: Remove too-smart-for-its-own-good optimization of not overwriting

От
Tom Lane
Дата:
Robert Haas <robertmhaas@gmail.com> writes:
> On Mon, Jan 4, 2010 at 9:34 PM, Tom Lane <tgl@postgresql.org> wrote:
>> Log Message:
>> -----------
>> Remove too-smart-for-its-own-good optimization of not overwriting the output
>> files when they haven't changed. �This confuses make because the build fails
>> to update the file timestamps, and so it keeps on doing the action over again.

> This doesn't seem like a good idea.

The original code was a bad idea, written by someone who was a
self-acknowledged non expert on make.  The way that you avoid
unnecessary recompilations is by not changing the input files,
not by breaking the file timestamp relationships that make depends
on to work sanely.
        regards, tom lane


Re: [COMMITTERS] pgsql: Remove too-smart-for-its-own-good optimization of not overwriting

От
Greg Stark
Дата:
On Tue, Jan 5, 2010 at 3:42 AM, Robert Haas <robertmhaas@gmail.com> wrote:
> On Mon, Jan 4, 2010 at 9:34 PM, Tom Lane <tgl@postgresql.org> wrote:
>> Log Message:
>> -----------
>> Remove too-smart-for-its-own-good optimization of not overwriting the output
>> files when they haven't changed.  This confuses make because the build fails
>> to update the file timestamps, and so it keeps on doing the action over again.
>
> This doesn't seem like a good idea.  Not rebuilding the output files
> also saves recompiling the things that depend on them.  For the BKI
> files thast doesn't matter much, but for schemapg.h it might be
> significant.  Certainly, if we move to generating more header files
> this way, it WILL be significant.  If running the script is cheap (and
> it should be), it's better to take that hit rather than recompiling a
> whole mess of .c files unnecessarily.


I think there's a trick to cover this case but I don't recall what it is.

Does generating a stamp file help? If you had a rule saying to trigger
generating the output files because the stamp file is out of date
which might or might not touch the .h file which would trigger more
files to be rebuilt then everything should work.... except I fear this
leads us back to the "make rule which generates two files" problem...

--
greg


Re: [COMMITTERS] pgsql: Remove too-smart-for-its-own-good optimization of not overwriting

От
Robert Haas
Дата:
On Mon, Jan 4, 2010 at 10:51 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Robert Haas <robertmhaas@gmail.com> writes:
>> On Mon, Jan 4, 2010 at 9:34 PM, Tom Lane <tgl@postgresql.org> wrote:
>>> Log Message:
>>> -----------
>>> Remove too-smart-for-its-own-good optimization of not overwriting the output
>>> files when they haven't changed.  This confuses make because the build fails
>>> to update the file timestamps, and so it keeps on doing the action over again.
>
>> This doesn't seem like a good idea.
>
> The original code was a bad idea, written by someone who was a
> self-acknowledged non expert on make.  The way that you avoid
> unnecessary recompilations is by not changing the input files,
> not by breaking the file timestamp relationships that make depends
> on to work sanely.

I think you're dismissing the idea too cavalierly.  If A generates B,
A is inevitably changed frequently, but the changes to A affect B only
rarely, this is a good trick.

...Robert


Re: [COMMITTERS] pgsql: Remove too-smart-for-its-own-good optimization of not overwriting

От
Robert Haas
Дата:
On Mon, Jan 4, 2010 at 10:53 PM, Greg Stark <gsstark@mit.edu> wrote:
> On Tue, Jan 5, 2010 at 3:42 AM, Robert Haas <robertmhaas@gmail.com> wrote:
>> On Mon, Jan 4, 2010 at 9:34 PM, Tom Lane <tgl@postgresql.org> wrote:
>>> Log Message:
>>> -----------
>>> Remove too-smart-for-its-own-good optimization of not overwriting the output
>>> files when they haven't changed.  This confuses make because the build fails
>>> to update the file timestamps, and so it keeps on doing the action over again.
>>
>> This doesn't seem like a good idea.  Not rebuilding the output files
>> also saves recompiling the things that depend on them.  For the BKI
>> files thast doesn't matter much, but for schemapg.h it might be
>> significant.  Certainly, if we move to generating more header files
>> this way, it WILL be significant.  If running the script is cheap (and
>> it should be), it's better to take that hit rather than recompiling a
>> whole mess of .c files unnecessarily.
>
>
> I think there's a trick to cover this case but I don't recall what it is.
>
> Does generating a stamp file help? If you had a rule saying to trigger
> generating the output files because the stamp file is out of date
> which might or might not touch the .h file which would trigger more
> files to be rebuilt then everything should work.... except I fear this
> leads us back to the "make rule which generates two files" problem...

The trick being used here was essentially the same as the stamp-file
trick.  But it may not be worth worrying about for the moment since
not too many things depend on schemapg.h.  I fear it will become an
obstacle to further improvements, however.

...Robert


Re: Re: [COMMITTERS] pgsql: Remove too-smart-for-its-own-good optimization of not overwriting

От
Alvaro Herrera
Дата:
Greg Stark escribió:

> I think there's a trick to cover this case but I don't recall what it is.
> 
> Does generating a stamp file help? If you had a rule saying to trigger
> generating the output files because the stamp file is out of date
> which might or might not touch the .h file which would trigger more
> files to be rebuilt then everything should work.... except I fear this
> leads us back to the "make rule which generates two files" problem...

That doesn't work because the files being generated are headers, and
thus they are detected as dependent files automatically by gcc's -MMD
feature (--enable-depend)

Maybe there's a way to make it work but this is not it.

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


Re: [COMMITTERS] pgsql: Remove too-smart-for-its-own-good optimization of not overwriting

От
Tom Lane
Дата:
Robert Haas <robertmhaas@gmail.com> writes:
> I think you're dismissing the idea too cavalierly.  If A generates B,
> A is inevitably changed frequently, but the changes to A affect B only
> rarely, this is a good trick.

The only output file that is unlikely to change is schemapg.h, which is
depended on by exactly one .c file.  It's a waste of time to try to
optimize this at all ...
        regards, tom lane


Re: [COMMITTERS] pgsql: Remove too-smart-for-its-own-good optimization of not overwriting

От
Robert Haas
Дата:
On Mon, Jan 4, 2010 at 11:03 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Robert Haas <robertmhaas@gmail.com> writes:
>> I think you're dismissing the idea too cavalierly.  If A generates B,
>> A is inevitably changed frequently, but the changes to A affect B only
>> rarely, this is a good trick.
>
> The only output file that is unlikely to change is schemapg.h, which is
> depended on by exactly one .c file.  It's a waste of time to try to
> optimize this at all ...

OK, fair enough.

...Robert


Re: Re: [COMMITTERS] pgsql: Remove too-smart-for-its-own-good optimization of not overwriting

От
Peter Eisentraut
Дата:
On mån, 2010-01-04 at 22:54 -0500, Robert Haas wrote:
> I think you're dismissing the idea too cavalierly.  If A generates B,
> A is inevitably changed frequently, but the changes to A affect B only
> rarely, this is a good trick. 

If that is the case, you might want to consider splitting up A or
refactoring B so you don't have so many useless dependencies.