unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: M-x grep is too slow
       [not found]       ` <m3brim8m2r.fsf@defun.localdomain>
@ 2004-07-12 23:58         ` Richard Stallman
  2004-07-13  0:36           ` Kenichi Handa
  2004-07-14  0:17           ` Richard Stallman
  0 siblings, 2 replies; 12+ messages in thread
From: Richard Stallman @ 2004-07-12 23:58 UTC (permalink / raw)
  Cc: emacs-devel

    The time is used in `compilation-filter', i.e. by simply inserting the
    strings in the buffer.

That is quite strange.  I suspect this is due to some sort of hook,
because just inserting strings at the end of the buffer will not get
slower.  Is it due to the font-lock mechanism perhaps?

If you run under GDB, you can stop it with C-z from time to time
and make C and Lisp backtraces.  That should give more info about
what is taking the time.

Can you determine precisely which change made this problem appear?

Can someone else join in looking at the problem?
Here's the way to make it fail

       M-x grep -nH -e while emacs/lisp/gnus/*.el

    had not finished in over 20 minutes.

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

* Re: M-x grep is too slow
  2004-07-12 23:58         ` M-x grep is too slow Richard Stallman
@ 2004-07-13  0:36           ` Kenichi Handa
  2004-07-13  5:00             ` Eli Zaretskii
                               ` (2 more replies)
  2004-07-14  0:17           ` Richard Stallman
  1 sibling, 3 replies; 12+ messages in thread
From: Kenichi Handa @ 2004-07-13  0:36 UTC (permalink / raw)
  Cc: harder, emacs-devel

In article <E1BkAgT-0000zL-9a@fencepost.gnu.org>, Richard Stallman <rms@gnu.org> writes:

>     The time is used in `compilation-filter', i.e. by simply inserting the
>     strings in the buffer.

> That is quite strange.  I suspect this is due to some sort of hook,
> because just inserting strings at the end of the buffer will not get
> slower.  Is it due to the font-lock mechanism perhaps?

> If you run under GDB, you can stop it with C-z from time to time
> and make C and Lisp backtraces.  That should give more info about
> what is taking the time.

> Can you determine precisely which change made this problem appear?

> Can someone else join in looking at the problem?
> Here's the way to make it fail

>        M-x grep -nH -e while emacs/lisp/gnus/*.el

>     had not finished in over 20 minutes.

I tried the above but it finished quite soon.   But, when I tried:

        M-x grep -nH -e while emacs/lisp/*/*.el

it took long time.  So, I turned off global-font-lock-mode
and tried again.  But, *grep* buffer is fontified.   Isn't
it a bug?  Anyway, I tried this:

(add-hook 'grep-mode-hook #'(lambda () (font-lock-mode -1)))

Then the above grep also finished quite soon.  So, yes,
font-lock seems to be the culprit.

By the way, when I did C-h v grep-mode-hook RET and clicked
`grep' of "Defined in `grep'." in *Help* buffer, I got this
message:

	Cannot find definition of `grep-mode-hook' in library `grep'

Actually, this variable is defined not in grep.el but by
defined-dirived-mode.

---
Ken'ichi HANDA
handa@m17n.org

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

* Re: M-x grep is too slow
  2004-07-13  0:36           ` Kenichi Handa
@ 2004-07-13  5:00             ` Eli Zaretskii
  2004-07-13 17:46             ` Stefan Monnier
  2004-07-14  0:18             ` Richard Stallman
  2 siblings, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2004-07-13  5:00 UTC (permalink / raw)
  Cc: harder, emacs-devel

> Date: Tue, 13 Jul 2004 09:36:47 +0900 (JST)
> From: Kenichi Handa <handa@m17n.org>
> 
> I tried the above but it finished quite soon.   But, when I tried:
> 
>         M-x grep -nH -e while emacs/lisp/*/*.el
> 
> it took long time.  So, I turned off global-font-lock-mode
> and tried again.  But, *grep* buffer is fontified.   Isn't
> it a bug?  Anyway, I tried this:
> 
> (add-hook 'grep-mode-hook #'(lambda () (font-lock-mode -1)))
> 
> Then the above grep also finished quite soon.  So, yes,
> font-lock seems to be the culprit.

Perhaps instrumenting font-lock with elp and running the same test
will show what part(s) of font-lock cause this.

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

* Re: M-x grep is too slow
  2004-07-13  0:36           ` Kenichi Handa
  2004-07-13  5:00             ` Eli Zaretskii
@ 2004-07-13 17:46             ` Stefan Monnier
  2004-07-16 14:51               ` Kim F. Storm
  2004-07-14  0:18             ` Richard Stallman
  2 siblings, 1 reply; 12+ messages in thread
From: Stefan Monnier @ 2004-07-13 17:46 UTC (permalink / raw)
  Cc: harder, rms, emacs-devel

> I tried the above but it finished quite soon.   But, when I tried:
>         M-x grep -nH -e while emacs/lisp/*/*.el
> it took long time.

I see it also.  Grep's output at first comes in fast and then at some point
it abruptly slows down and then it only comes in a couple chars at a time
(with enough time inbetween to see the steps).  Later on it switched again
to "fast" mode, and then switched again to "slow" mode, etc...

The problem is not the time taken in font-lock, but the fact that the text
gets inserted one char at a time (or maybe 2 or 3 chars, but it should not
happen that way; and as a matter of fact it does not happen that way when
grep's output comes in fast).

It seems related to the problem David had with AUCTeX on uniprocessors
running the Linux kernel with the "interactive" scheduler.  Kim installed
a patch to fix it, but maybe the patch isn't doing its job here for
some reason.


        Stefan "running on a uniprocessor Linux kernel"

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

* Re: M-x grep is too slow
  2004-07-12 23:58         ` M-x grep is too slow Richard Stallman
  2004-07-13  0:36           ` Kenichi Handa
@ 2004-07-14  0:17           ` Richard Stallman
  1 sibling, 0 replies; 12+ messages in thread
From: Richard Stallman @ 2004-07-14  0:17 UTC (permalink / raw)
  Cc: harder, emacs-devel

I am not surprised that font-lock is responsible, but we need to
find out what it's doing that takes so long.

If you follow my suggestion to run under GDB, type C-z, and then type
xbacktrace, you'll find out which functions of font-lock mode
are running most of the time.  If you put a call to (debug) in
one of them, you can step through it and see whether it takes
a long time, and what it is doing.

It would be useful to check whether the font lock keywords
used for compile mode have changed in the past few months.
If so, that change might be at fault.

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

* Re: M-x grep is too slow
  2004-07-13  0:36           ` Kenichi Handa
  2004-07-13  5:00             ` Eli Zaretskii
  2004-07-13 17:46             ` Stefan Monnier
@ 2004-07-14  0:18             ` Richard Stallman
  2 siblings, 0 replies; 12+ messages in thread
From: Richard Stallman @ 2004-07-14  0:18 UTC (permalink / raw)
  Cc: harder, emacs-devel

    By the way, when I did C-h v grep-mode-hook RET and clicked
    `grep' of "Defined in `grep'." in *Help* buffer, I got this
    message:

	    Cannot find definition of `grep-mode-hook' in library `grep'

    Actually, this variable is defined not in grep.el but by
    defined-dirived-mode.

I think the code in help-mode ought to recognize variable names ending
in ...-mode-hook, and if it can't find a defvar in the file, it should
search for the suitable call to defined-derived-mode in the same file.

Would someone like to implement that?

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

* Re: M-x grep is too slow
  2004-07-13 17:46             ` Stefan Monnier
@ 2004-07-16 14:51               ` Kim F. Storm
  2004-07-17 11:54                 ` Richard Stallman
  0 siblings, 1 reply; 12+ messages in thread
From: Kim F. Storm @ 2004-07-16 14:51 UTC (permalink / raw)
  Cc: harder, emacs-devel, rms, Kenichi Handa

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> > I tried the above but it finished quite soon.   But, when I tried:
> >         M-x grep -nH -e while emacs/lisp/*/*.el
> > it took long time.
> 
> I see it also.  Grep's output at first comes in fast and then at some point
> it abruptly slows down and then it only comes in a couple chars at a time
> (with enough time inbetween to see the steps).  Later on it switched again
> to "fast" mode, and then switched again to "slow" mode, etc...

I don't see it  (GNU/Linux (redhat9), 1.4 GHz uni-processor)

But it does run SLOOOOW...  In my case, approx 50-70 lines are added per screen update.


> 
> The problem is not the time taken in font-lock, but the fact that the text
> gets inserted one char at a time (or maybe 2 or 3 chars, but it should not
> happen that way; and as a matter of fact it does not happen that way when
> grep's output comes in fast).

Well, font-lock definitely makes this A LOT slower...


Looking with a debugger, a lot of time is spent in
previous-single-property-change.

Maybe caching the last position of 'directory and 'message properties
would make a difference ?


Try this little patch:

*** compile.el	20 Jun 2004 20:59:24 +0200	1.322
--- compile.el	16 Jul 2004 16:14:19 +0200	
***************
*** 1200,1206 ****
  	      (turn-on-font-lock))
  	  (turn-on-font-lock))
        ;; maybe defer font-lock till after derived mode is set up
!       (run-mode-hooks 'compilation-turn-on-font-lock))))
  
  ;;;###autoload
  (define-minor-mode compilation-shell-minor-mode
--- 1200,1207 ----
  	      (turn-on-font-lock))
  	  (turn-on-font-lock))
        ;; maybe defer font-lock till after derived mode is set up
!       ;(run-mode-hooks 'compilation-turn-on-font-lock)
!       )))
  
  ;;;###autoload
  (define-minor-mode compilation-shell-minor-mode

With that, grep runs FAST.


> 
> It seems related to the problem David had with AUCTeX on uniprocessors
> running the Linux kernel with the "interactive" scheduler.  Kim installed
> a patch to fix it, but maybe the patch isn't doing its job here for
> some reason.

If I set process-adaptive-read-buffering to nil this runs even slower for
me, but it still finishes in a couple of minutes...

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: M-x grep is too slow
  2004-07-16 14:51               ` Kim F. Storm
@ 2004-07-17 11:54                 ` Richard Stallman
  2004-07-19 14:46                   ` Kim F. Storm
  0 siblings, 1 reply; 12+ messages in thread
From: Richard Stallman @ 2004-07-17 11:54 UTC (permalink / raw)
  Cc: harder, emacs-devel, monnier, handa

    Looking with a debugger, a lot of time is spent in
    previous-single-property-change.

    Maybe caching the last position of `directory' and `message' properties
    would make a difference ?

Do you mean caching at the Lisp level inside Font-Lock mode?
That might be easy to do.

Where is previous-single-property-change being called from?
Maybe a change there is what we need.


Aside from that, I have a feeling it is wrong for Compilation
mode to turn on Font-Lock mode by default.  This nonuniformity
in the control of Font-Lock mode seems wrong.

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

* Re: M-x grep is too slow
  2004-07-17 11:54                 ` Richard Stallman
@ 2004-07-19 14:46                   ` Kim F. Storm
  2004-07-20 20:43                     ` Richard Stallman
  0 siblings, 1 reply; 12+ messages in thread
From: Kim F. Storm @ 2004-07-19 14:46 UTC (permalink / raw)
  Cc: harder, emacs-devel, monnier, handa

Richard Stallman <rms@gnu.org> writes:

>     Looking with a debugger, a lot of time is spent in
>     previous-single-property-change.
> 
>     Maybe caching the last position of `directory' and `message' properties
>     would make a difference ?
> 
> Do you mean caching at the Lisp level inside Font-Lock mode?
> That might be easy to do.

I was thinking about doing it explicitly in compile.el...

> 
> Where is previous-single-property-change being called from?
> Maybe a change there is what we need.
> 

There are only a few calls in compile.el, so it cannot be too hard
to see what's needed.  However, there seem to be a call hidden in
a macro so it may not be trivial.  I'll leave it to the experts.

> 
> Aside from that, I have a feeling it is wrong for Compilation
> mode to turn on Font-Lock mode by default.  This nonuniformity
> in the control of Font-Lock mode seems wrong.

I think so too.

-- 
Kim F. Storm <storm@cua.dk> http://www.cua.dk

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

* Re: M-x grep is too slow
  2004-07-19 14:46                   ` Kim F. Storm
@ 2004-07-20 20:43                     ` Richard Stallman
  2004-07-21  8:36                       ` Kim F. Storm
  0 siblings, 1 reply; 12+ messages in thread
From: Richard Stallman @ 2004-07-20 20:43 UTC (permalink / raw)
  Cc: harder, handa, monnier, emacs-devel

    > Do you mean caching at the Lisp level inside Font-Lock mode?
    > That might be easy to do.

    I was thinking about doing it explicitly in compile.el...

Is this slowness in font-lock or is it in compile.el?

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

* Re: M-x grep is too slow
  2004-07-20 20:43                     ` Richard Stallman
@ 2004-07-21  8:36                       ` Kim F. Storm
  2004-07-22 21:36                         ` Richard Stallman
  0 siblings, 1 reply; 12+ messages in thread
From: Kim F. Storm @ 2004-07-21  8:36 UTC (permalink / raw)
  Cc: harder, emacs-devel, monnier, handa, Kim F. Storm

Richard Stallman <rms@gnu.org> writes:

>     > Do you mean caching at the Lisp level inside Font-Lock mode?
>     > That might be easy to do.
> 
>     I was thinking about doing it explicitly in compile.el...
> 
> Is this slowness in font-lock or is it in compile.el?

I don't really know.

The code that calls previous-single-property-change is in compile.el,
but it could be that the code is actually called by font-lock.

In any case, the 'message and 'directory properties are local to
compile.el, so I would suppose that the caching (if possible)
would have to be done in compile.el.

Maybe someone who better understands the new compile.el could comment
on this.

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

* Re: M-x grep is too slow
  2004-07-21  8:36                       ` Kim F. Storm
@ 2004-07-22 21:36                         ` Richard Stallman
  0 siblings, 0 replies; 12+ messages in thread
From: Richard Stallman @ 2004-07-22 21:36 UTC (permalink / raw)
  Cc: harder, handa, monnier, storm, emacs-devel

    The code that calls previous-single-property-change is in compile.el,
    but it could be that the code is actually called by font-lock.

Could you make a backtrace?  Then we could see.

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

end of thread, other threads:[~2004-07-22 21:36 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <m3fz87bj8l.fsf@defun.localdomain>
     [not found] ` <E1BhWlL-0007Mq-Ns@fencepost.gnu.org>
     [not found]   ` <m3n02a2uo4.fsf@defun.localdomain>
     [not found]     ` <E1Bixsv-0001wJ-G8@fencepost.gnu.org>
     [not found]       ` <m3brim8m2r.fsf@defun.localdomain>
2004-07-12 23:58         ` M-x grep is too slow Richard Stallman
2004-07-13  0:36           ` Kenichi Handa
2004-07-13  5:00             ` Eli Zaretskii
2004-07-13 17:46             ` Stefan Monnier
2004-07-16 14:51               ` Kim F. Storm
2004-07-17 11:54                 ` Richard Stallman
2004-07-19 14:46                   ` Kim F. Storm
2004-07-20 20:43                     ` Richard Stallman
2004-07-21  8:36                       ` Kim F. Storm
2004-07-22 21:36                         ` Richard Stallman
2004-07-14  0:18             ` Richard Stallman
2004-07-14  0:17           ` Richard Stallman

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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).