unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
* Performance tracking
@ 2009-09-17 18:12 Neil Jerram
  2009-09-17 21:53 ` Ludovic Courtès
  0 siblings, 1 reply; 13+ messages in thread
From: Neil Jerram @ 2009-09-17 18:12 UTC (permalink / raw)
  To: Guile Development

Here's an idea for performance tracking.  Please let me know what you
think.

- I think the main people interested in performance tracking are the
  core Guile developers, so this proposal is primarily for them (aka
  us).

- Because we all have different machines, we need separate tracking.

- So, each developer who wants to track performance over time creates a
  performance-data/<unique-name> file in their tree, and commits it to
  the repository.

- <unique-name> needs to be associated with the particular machine that
  a particular developer uses, over time, to run performance tests.  For
  example, I might create `performance-data/neil-arudy'.

- The file content is created and updated by running `benchmark-guile >
  performance-data/<unique-name>'.

- You don't have to do this every time you commit any change, but we
  need the convention that whenever a performance-data file _is_
  updated, the data in it is generated by the tree of that commit.

- We can write tools to show changes in performance data over time (or
  over commits).  This should be easy, as the output of benchmark-guile
  is Scheme-readable.

Thanks,
        Neil




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2009-09-17 18:12 Neil Jerram
@ 2009-09-17 21:53 ` Ludovic Courtès
  2009-09-18  4:47   ` Ken Raeburn
  2009-09-18 20:46   ` Neil Jerram
  0 siblings, 2 replies; 13+ messages in thread
From: Ludovic Courtès @ 2009-09-17 21:53 UTC (permalink / raw)
  To: guile-devel

Hi,

This sounds like one possibility, but I think it might be inconvenient
to use that data to view how performance evolved over time.

I was thinking we could have a dedicated machine running benchmarks,
say, everyday, and publishing plots somewhere.

The machine could be one from the GCC Compile Farm; we’d need to arrange
so that nothing runs at the same time as the benchmarks.  We’d also need
to find a box that can host the plots.

Thanks,
Ludo’.





^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2009-09-17 21:53 ` Ludovic Courtès
@ 2009-09-18  4:47   ` Ken Raeburn
  2009-09-18 20:46   ` Neil Jerram
  1 sibling, 0 replies; 13+ messages in thread
From: Ken Raeburn @ 2009-09-18  4:47 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-devel

On Sep 17, 2009, at 17:53, Ludovic Courtès wrote:
> I was thinking we could have a dedicated machine running benchmarks,
> say, everyday, and publishing plots somewhere.

I'd suggest multiple machines, if possible.  Different operating  
systems (for example, I've seen that mutex performance differs quite a  
bit between Linux and Mac OS X), maybe different processor families.   
If some of the benchmarks test multithreaded performance, perhaps  
multiprocessor vs uniprocessor systems too.

Testing on a single machine is better than not testing at all, but I  
don't think we want to fine-tune it for one system at the expense of  
performance on lots of others.

Ken



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2009-09-17 21:53 ` Ludovic Courtès
  2009-09-18  4:47   ` Ken Raeburn
@ 2009-09-18 20:46   ` Neil Jerram
  1 sibling, 0 replies; 13+ messages in thread
From: Neil Jerram @ 2009-09-18 20:46 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-devel

ludo@gnu.org (Ludovic Courtès) writes:

> Hi,
>
> This sounds like one possibility, but I think it might be inconvenient
> to use that data to view how performance evolved over time.

Well let's try it and see.  If it really is difficult or not useful, we
can just delete the data file(s) again.

> I was thinking we could have a dedicated machine running benchmarks,
> say, everyday, and publishing plots somewhere.

Yes, that would indeed be good too.

>  We’d also need
> to find a box that can host the plots.

www.gnu.org/software/guile/...?  Or savannah?  Perhaps whatever we do
for Guile could be generalized for projects in general?

     Neil




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Performance tracking
@ 2012-05-04 23:30 Ludovic Courtès
  2012-05-05 16:33 ` Noah Lavine
  0 siblings, 1 reply; 13+ messages in thread
From: Ludovic Courtès @ 2012-05-04 23:30 UTC (permalink / raw)
  To: guile-devel

Hello!

I was looking at the “history chart” at
<http://hydra.nixos.org/build/2517280#tabs-history>, which shows graphs
of the build time and installed Guile size vs. commits.  Timings must be
taken with a grain of salt, because of variability on the build machines.

Still, a couple of worthwhile observations:

  • commit 1af6d2a (“Minimize size of embedded syntax objects in
    psyntax-pp.scm”) reduced the installed size from ~14.6 MiB to
    ~13.3 MiB;

  • CSE led to a build time increase from 28m at
    <http://hydra.nixos.org/build/2413477> to 43m
    <http://hydra.nixos.org/build/2478518>.

Thanks,
Ludo’.




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2012-05-04 23:30 Performance tracking Ludovic Courtès
@ 2012-05-05 16:33 ` Noah Lavine
  2012-05-05 16:42   ` David Kastrup
                     ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Noah Lavine @ 2012-05-05 16:33 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-devel

It appears to me (anecdotally) that most of the build time is spent
compiling Scheme code, rather than C code.

One idea I had been toying with is whether Guile could compile faster
if it had another copy of Guile already around, so it could skip the
portion of compile-time where the interpreter is running the compiler.
This is how most compilers do it - you want another C compiler around
to compile GCC, etc. I was afraid that this would result in a
too-complicated build system, but maybe not. Does anyone have
experience with implementing something like this?

Noah

On Fri, May 4, 2012 at 7:30 PM, Ludovic Courtès <ludo@gnu.org> wrote:
> Hello!
>
> I was looking at the “history chart” at
> <http://hydra.nixos.org/build/2517280#tabs-history>, which shows graphs
> of the build time and installed Guile size vs. commits.  Timings must be
> taken with a grain of salt, because of variability on the build machines.
>
> Still, a couple of worthwhile observations:
>
>  • commit 1af6d2a (“Minimize size of embedded syntax objects in
>    psyntax-pp.scm”) reduced the installed size from ~14.6 MiB to
>    ~13.3 MiB;
>
>  • CSE led to a build time increase from 28m at
>    <http://hydra.nixos.org/build/2413477> to 43m
>    <http://hydra.nixos.org/build/2478518>.
>
> Thanks,
> Ludo’.
>
>



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2012-05-05 16:33 ` Noah Lavine
@ 2012-05-05 16:42   ` David Kastrup
  2012-05-05 16:51     ` Noah Lavine
  2012-05-05 21:07   ` Ludovic Courtès
  2012-05-06  1:42   ` dsmich
  2 siblings, 1 reply; 13+ messages in thread
From: David Kastrup @ 2012-05-05 16:42 UTC (permalink / raw)
  To: guile-devel

Noah Lavine <noah.b.lavine@gmail.com> writes:

> It appears to me (anecdotally) that most of the build time is spent
> compiling Scheme code, rather than C code.
>
> One idea I had been toying with is whether Guile could compile faster
> if it had another copy of Guile already around, so it could skip the
> portion of compile-time where the interpreter is running the compiler.

Bootstrap hell.  If the "copy of Guile already around" happens to
produce different code, you have lots of fun ahead.

-- 
David Kastrup




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2012-05-05 16:42   ` David Kastrup
@ 2012-05-05 16:51     ` Noah Lavine
  2012-05-05 16:55       ` David Kastrup
  0 siblings, 1 reply; 13+ messages in thread
From: Noah Lavine @ 2012-05-05 16:51 UTC (permalink / raw)
  To: David Kastrup; +Cc: guile-devel

Oh, I was unclear. I meant that the existing copy of Guile would run
the compiler from the new copy of Guile.

In the worst case you'd have to bootstrap, but that's what we do now,
every time.

Noah

On Sat, May 5, 2012 at 12:42 PM, David Kastrup <dak@gnu.org> wrote:
> Noah Lavine <noah.b.lavine@gmail.com> writes:
>
>> It appears to me (anecdotally) that most of the build time is spent
>> compiling Scheme code, rather than C code.
>>
>> One idea I had been toying with is whether Guile could compile faster
>> if it had another copy of Guile already around, so it could skip the
>> portion of compile-time where the interpreter is running the compiler.
>
> Bootstrap hell.  If the "copy of Guile already around" happens to
> produce different code, you have lots of fun ahead.
>
> --
> David Kastrup
>
>



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2012-05-05 16:51     ` Noah Lavine
@ 2012-05-05 16:55       ` David Kastrup
  0 siblings, 0 replies; 13+ messages in thread
From: David Kastrup @ 2012-05-05 16:55 UTC (permalink / raw)
  To: guile-devel

Noah Lavine <noah.b.lavine@gmail.com> writes:

>> On Sat, May 5, 2012 at 12:42 PM, David Kastrup <dak@gnu.org> wrote:
>>> Noah Lavine <noah.b.lavine@gmail.com> writes:
>>>
>>>> It appears to me (anecdotally) that most of the build time is spent
>>>> compiling Scheme code, rather than C code.
>>>>
>>>> One idea I had been toying with is whether Guile could compile faster
>>>> if it had another copy of Guile already around, so it could skip the
>>>> portion of compile-time where the interpreter is running the compiler.
>>>
>>> Bootstrap hell.  If the "copy of Guile already around" happens to
>>> produce different code, you have lots of fun ahead.
>
>
> Oh, I was unclear. I meant that the existing copy of Guile would run
> the compiler from the new copy of Guile.

That assumes that it runs it producing a correct result.

> In the worst case you'd have to bootstrap, but that's what we do now,
> every time.

If the "copy of Guile already around" is malicious, bootstrapping from
the produced compilation can't get rid of the malice.  See Ken
Thompson's malicious compiler experiment.

-- 
David Kastrup




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2012-05-05 16:33 ` Noah Lavine
  2012-05-05 16:42   ` David Kastrup
@ 2012-05-05 21:07   ` Ludovic Courtès
  2012-05-06  1:42   ` dsmich
  2 siblings, 0 replies; 13+ messages in thread
From: Ludovic Courtès @ 2012-05-05 21:07 UTC (permalink / raw)
  To: Noah Lavine; +Cc: guile-devel

Hi Noah,

Noah Lavine <noah.b.lavine@gmail.com> skribis:

> One idea I had been toying with is whether Guile could compile faster
> if it had another copy of Guile already around, so it could skip the
> portion of compile-time where the interpreter is running the compiler.
> This is how most compilers do it - you want another C compiler around
> to compile GCC, etc. I was afraid that this would result in a
> too-complicated build system, but maybe not. Does anyone have
> experience with implementing something like this?

$GUILE_FOR_BUILD is used when cross-compiling Guile itself–i.e., a
native Guile is needed to cross-build Guile.

And according to <http://hydra.nixos.org/build/2517410>, Guile is
cross-built in ~4m, whereas the native Guile itself is cross-built in ~40m.

Now, using $GUILE_FOR_BUILD to build the native Guile itself would be
tricky, because there’s no distinction between the run-time load path
and the compiler’s search path (see ‘GUILE_CHECK_GUILE_FOR_BUILD’ in
acinclude.m4.)

Thanks,
Ludo’.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2012-05-05 16:33 ` Noah Lavine
  2012-05-05 16:42   ` David Kastrup
  2012-05-05 21:07   ` Ludovic Courtès
@ 2012-05-06  1:42   ` dsmich
  2012-05-06 10:01     ` Ludovic Courtès
  2 siblings, 1 reply; 13+ messages in thread
From: dsmich @ 2012-05-06  1:42 UTC (permalink / raw)
  To: Noah Lavine, Ludovic Courtès; +Cc: guile-devel


---- Noah Lavine <noah.b.lavine@gmail.com> wrote: 
> It appears to me (anecdotally) that most of the build time is spent
> compiling Scheme code, rather than C code.
> 
> One idea I had been toying with is whether Guile could compile faster
> if it had another copy of Guile already around, so it could skip the
> portion of compile-time where the interpreter is running the compiler.

This is what the GUILE_FOR_BUILD env var is for.

-Dale




^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2012-05-06  1:42   ` dsmich
@ 2012-05-06 10:01     ` Ludovic Courtès
  2012-05-06 10:38       ` dsmich
  0 siblings, 1 reply; 13+ messages in thread
From: Ludovic Courtès @ 2012-05-06 10:01 UTC (permalink / raw)
  To: dsmich; +Cc: guile-devel

Hi!

<dsmich@roadrunner.com> skribis:

> ---- Noah Lavine <noah.b.lavine@gmail.com> wrote: 
>> It appears to me (anecdotally) that most of the build time is spent
>> compiling Scheme code, rather than C code.
>> 
>> One idea I had been toying with is whether Guile could compile faster
>> if it had another copy of Guile already around, so it could skip the
>> portion of compile-time where the interpreter is running the compiler.
>
> This is what the GUILE_FOR_BUILD env var is for.

It’s actually only used when cross-compiling.

Ludo’.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: Performance tracking
  2012-05-06 10:01     ` Ludovic Courtès
@ 2012-05-06 10:38       ` dsmich
  0 siblings, 0 replies; 13+ messages in thread
From: dsmich @ 2012-05-06 10:38 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guile-devel


---- "Ludovic Courtès" <ludo@gnu.org> wrote: 
> Hi!
> 
> <dsmich@roadrunner.com> skribis:
> 
> > ---- Noah Lavine <noah.b.lavine@gmail.com> wrote: 
> >> It appears to me (anecdotally) that most of the build time is spent
> >> compiling Scheme code, rather than C code.
> >> 
> >> One idea I had been toying with is whether Guile could compile faster
> >> if it had another copy of Guile already around, so it could skip the
> >> portion of compile-time where the interpreter is running the compiler.
> >
> > This is what the GUILE_FOR_BUILD env var is for.
> 
> It’s actually only used when cross-compiling.
> 
> Ludo’.

Ahh.  That explains why I've never seen much speed improvement when using it. ;^)

Thanks.

-Dale





^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2012-05-06 10:38 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-04 23:30 Performance tracking Ludovic Courtès
2012-05-05 16:33 ` Noah Lavine
2012-05-05 16:42   ` David Kastrup
2012-05-05 16:51     ` Noah Lavine
2012-05-05 16:55       ` David Kastrup
2012-05-05 21:07   ` Ludovic Courtès
2012-05-06  1:42   ` dsmich
2012-05-06 10:01     ` Ludovic Courtès
2012-05-06 10:38       ` dsmich
  -- strict thread matches above, loose matches on Subject: below --
2009-09-17 18:12 Neil Jerram
2009-09-17 21:53 ` Ludovic Courtès
2009-09-18  4:47   ` Ken Raeburn
2009-09-18 20:46   ` Neil Jerram

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).