emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Time to merge scratch/correct-warning-pos into master, perhaps?


From: Alan Mackenzie
Subject: Re: Time to merge scratch/correct-warning-pos into master, perhaps?
Date: Sat, 19 Feb 2022 16:42:07 +0000

Hello, Eli.

On Sun, Feb 06, 2022 at 20:39:14 +0200, Eli Zaretskii wrote:
> > Date: Sun, 6 Feb 2022 18:09:30 +0000
> > Cc: gregory@heytings.org, monnier@iro.umontreal.ca, mattiase@acm.org,
> >   larsi@gnus.org, emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>

> > > > > Where are the numbers that show how much slower is the current EQ, for
> > > > > the case of EQ and not-EQ objects?

> > > > We don't have any such numbers.  Is it even possible to measure this?  
> > > > On
> > > > earlier processors, we could have just counted up processor cycles used
> > > > for each instruction, but not any more.

> > > Yes, it's possible: use perf.

> > I've installed the user side part of perf on my machine.  On reading the
> > tutorial (which is very difficult), it seems perf acts like a super
> > accurate benchmarking program, which measures program runs.

> > Maybe I misunderstand what you meant - but I can't see how perf is able
> > to report the cycles, etc., taken by a single execution of an instance of
> > EQ.

> > What exactly do we want to measure, here?

> Perf is capable of showing profiles at a source line granularity.
> Since the relation of parts of EQ to equal and non-equal objects is
> quite clear, the profile produced by perf can be easily interpreted as
> pertaining to either of these two possibilities.  By comparing the
> profiles with the old and the new definitions of EQ you should be able
> to measure the slowdown we are interested in.

After building each version with CFLAGS='-O2 -g3' and
--with-native-compilation, I've run

    $ perf record -e cpu-clock make check

followed by

    $ perf report -i perf.data --tui

on both old and new EQ versions of Emacs.

On the old version, there is no sign of EQ.  I searched with `/' at the
top level of perf report, and found only other functions with "EQ" in the
name in two non-Emacs libraries.

On the new version, EQ appears just twice when I type `/' EQ RET.  The
total CPU usage appears to be around 0.01%.  In fact the screen looks
like this:

Samples: 576K of event 'cpu-clock:u', Event count (approx.): 144023250000
Overhead  Comma  Shared Object        Symbol
   0.01%  emacs  emacs                [.] EQ
   0.00%  hg     libpython3.9.so.1.0  [.] _PyUnicode_EQ
   0.00%  emacs  emacs                [.] EQ

Typing RET on one of the two EQ lines, then RET again, displays
percentages taken by the various instructions in that particular
expansion of EQ.

I think part of the problem is that EQ isn't in any particular place in
Emacs.  In the C source it occurs over 2,700 times.  Is there any way to
get perf to amalgamate the different occurrences of EQ?

I haven't got any useful information out of the exercise, so far.  I
can't help feeling that I'm missing something.  Is there anything I ought
to be doing that I've not yet done?

> Btw, unlike what you said up-thread, I don't recommend comparing the
> version of Emacs before the merge of the branch with today's
> codebase.  Instead, I suggest to compile two versions of the same
> Emacs codebase, one with the old and simple definition of EQ, the
> other with the definition we use now on master.  This should make the
> comparison easier, since the only difference will be how EQ is
> defined.

-- 
Alan Mackenzie (Nuremberg, Germany).



reply via email to

[Prev in Thread] Current Thread [Next in Thread]