bug#30731: Slower startup using March (27.0.50) build in windows

classic Classic list List threaded Threaded
13 messages Options
Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Shuguang Sun
Hi,

I built emacs 27 on 4th March, however, the startup gets slower than the build on 4th Feb (which is camparable with the build in https://alpha.gnu.org/gnu/emacs/pretest/windows/emacs-27/).
I'm sorry I don't know how to repeat it using "-q".

System: Windows 7

The same .emacs file;

Here is the message from 4th Feb build (GNU Emacs 27.0.50 (build 6, x86_64-w64-mingw32) of 2018-02-04):
>>> start load .emacs: 0.140 sec <<<
>>> before custom-set-variables : 0.359 sec <<<
Loading image-file...done
Loading time...done
Loading completion...done
Loading elec-pair...done
Loading icomplete...done
Loading ido...done
Loading avoid...done
Loading savehist...done
Loading paren...done
>>> custom-set-variables time: 2.248 sec <<<
>>> frame-setting time: 2.263 sec <<<
‘epa-file’ already enabled
epa-file loaded
elpa initialized
>>> elpa time: 4.464 sec <<<

Below is the message from 4th March build.
1. It has a warning at the very begining. If start with -q, there will be no such warning.
2. Actually there is nothing before " >>> start load .emacs: 2.575 sec <<< ", however, it still takes 2.574 sec.
3. The load time is longer than the 4th Feb build.

Symbol's value as variable is void: Info-default-directory-list [14 times]
>>> start load .emacs: 2.575 sec <<<
>>> before custom-set-variables : 2.903 sec <<<
Loading image-file...done
Loading time...done
Loading completion...done
Loading elec-pair...done
Loading icomplete...done
Loading ido...done
Loading avoid...done
Loading savehist...done
Loading paren...done
>>> custom-set-variables time: 8.333 sec <<<
>>> frame-setting time: 8.333 sec <<<
‘epa-file’ already enabled
epa-file loaded
elpa initialized
>>> elpa time: 9.394 sec <<<

The value of Info-default-directory-list at the very begining is ("%emacs_dir%/share/info/").
Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Noam Postavsky
Shuguang Sun <[hidden email]> writes:

> I built emacs 27 on 4th March, however, the startup gets slower than
> the build on 4th Feb (which is camparable with the build in https://
> alpha.gnu.org/gnu/emacs/pretest/windows/emacs-27/).
> I'm sorry I don't know how to repeat it using "-q".
>
> System: Windows 7

> Below is the message from 4th March build.
> 1. It has a warning at the very begining. If start with -q, there
> will be no such warning.
> 2. Actually there is nothing before " >>> start load .emacs: 2.575
> sec <<< ", however, it still takes 2.574 sec.
> 3. The load time is longer than the 4th Feb build.
>
> Symbol's value as variable is void: Info-default-directory-list [14
> times]

Could you try out the patch posted to emacs-devel?

https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00040.html



Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Shuguang Sun
I patched the startup.el and package.el in the installed emacs. They seems not work. I'll try to patch the git source prior to the complilation later when I get time.


1. Even I put the (setq package-enable-at-startup nil) in the top of the .emacs, it takes 3.692 sec before loading others of the init file. I have a site-start.el file, which is suposed to run before .emacs is loaded. Woud it impact the the load process? NB. the 3.692 does not count the site-start in. It is from
(message ">>> start load .emacs: %.3f sec <<<"
                     (float-time (time-subtract after-init-time before-init-time)))

2. No mather whether I set package-enable-at-startup, it takes about 8 sec to load the custom-set-variable. However, it takes only 2.5 sec in the Feb version.

Symbol's value as variable is void: Info-default-directory-list [14 times]
>>> start load .emacs: 3.692 sec <<<
Loading Sun Shuguang’s .emacs file
>>> before custom-set-variables : 4.176 sec <<<
Loading image-file...done
Loading time...done
Loading completion...done
Loading elec-pair...done
Loading icomplete...done
Loading ido...done
Loading avoid...done
Loading savehist...done
Loading paren...done
>>> custom-set-variables time: 12.387 sec <<<


On Fri, Mar 9, 2018 at 9:35 AM, Noam Postavsky <[hidden email]> wrote:
Shuguang Sun <[hidden email]> writes:

> I built emacs 27 on 4th March, however, the startup gets slower than
> the build on 4th Feb (which is camparable with the build in https://
> alpha.gnu.org/gnu/emacs/pretest/windows/emacs-27/).
> I'm sorry I don't know how to repeat it using "-q".
>
> System: Windows 7

> Below is the message from 4th March build.
> 1. It has a warning at the very begining. If start with -q, there
> will be no such warning.
> 2. Actually there is nothing before " >>> start load .emacs: 2.575
> sec <<< ", however, it still takes 2.574 sec.
> 3. The load time is longer than the 4th Feb build.
>
> Symbol's value as variable is void: Info-default-directory-list [14
> times]

Could you try out the patch posted to emacs-devel?

https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00040.html

Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Shuguang Sun
Hi Noam,

I read the disussions and patches, and I find out the 3.692 sec at the beigining seems package initialization (according to the patch in Feb 17).
However, I still don't get
1. What is an early init file?
2. Why custom-set-variable  get slower?
3. If i want to disable package initialization prior to any thin in the .emacs, but after custom-set-variable and some environment variables setting (e.g. PATH, exec-path), how to do it?

Could you help provide an example using my situation?
1) I use a Windows 7 box, and have HOME env variables, and .emacs.d folder under it
2) I have a site-start.el for environment variables setting (e.g. PATH, exec-path)  <= I thinks this it not critical because it has no speed effect after I delete the site-start.el
3) I have .emacs under HOME, and compile it to .emacs.elc to speed it up
4) I load dired.el and then custom-set-variable, then some frame settings , then initialize package using
(setq package-enable-at-startup nil)
(package-initialize)
and then packages customizations (hooks etc)
5) I don't have default.el or init.el
 
How could I adapt the change in package.el and startup.el? e.g. to disable package initialization at the very begining but start it at some point of the initialization of emacs.



On Sun, Mar 11, 2018 at 11:25 AM, Shuguang Sun <[hidden email]> wrote:
I patched the startup.el and package.el in the installed emacs. They seems not work. I'll try to patch the git source prior to the complilation later when I get time.


1. Even I put the (setq package-enable-at-startup nil) in the top of the .emacs, it takes 3.692 sec before loading others of the init file. I have a site-start.el file, which is suposed to run before .emacs is loaded. Woud it impact the the load process? NB. the 3.692 does not count the site-start in. It is from
(message ">>> start load .emacs: %.3f sec <<<"
                     (float-time (time-subtract after-init-time before-init-time)))

2. No mather whether I set package-enable-at-startup, it takes about 8 sec to load the custom-set-variable. However, it takes only 2.5 sec in the Feb version.

Symbol's value as variable is void: Info-default-directory-list [14 times]
>>> start load .emacs: 3.692 sec <<<
Loading Sun Shuguang’s .emacs file
>>> before custom-set-variables : 4.176 sec <<<
Loading image-file...done
Loading time...done
Loading completion...done
Loading elec-pair...done
Loading icomplete...done
Loading ido...done
Loading avoid...done
Loading savehist...done
Loading paren...done
>>> custom-set-variables time: 12.387 sec <<<


On Fri, Mar 9, 2018 at 9:35 AM, Noam Postavsky <[hidden email]> wrote:
Shuguang Sun <[hidden email]> writes:

> I built emacs 27 on 4th March, however, the startup gets slower than
> the build on 4th Feb (which is camparable with the build in https://
> alpha.gnu.org/gnu/emacs/pretest/windows/emacs-27/).
> I'm sorry I don't know how to repeat it using "-q".
>
> System: Windows 7

> Below is the message from 4th March build.
> 1. It has a warning at the very begining. If start with -q, there
> will be no such warning.
> 2. Actually there is nothing before " >>> start load .emacs: 2.575
> sec <<< ", however, it still takes 2.574 sec.
> 3. The load time is longer than the 4th Feb build.
>
> Symbol's value as variable is void: Info-default-directory-list [14
> times]

Could you try out the patch posted to emacs-devel?

https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00040.html


Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Noam Postavsky
Shuguang Sun <[hidden email]> writes:

> I read the disussions and patches, and I find out the 3.692 sec at
> the beigining seems package initialization (according to the patch in
> Feb 17).
> However, I still don't get
> 1. What is an early init file?

It should be explained in `(emacs) Early Init File' and `(elisp) Init
File'.

> 2. Why custom-set-variable  get slower?

Not sure, we need to see some more detail to find out.  Can you figure
out if it's all variables getting slower, or is there some specific
variable setting that causes the slowdown?

> 3. If i want to disable package initialization prior to any thin in
> the .emacs, but after custom-set-variable and some environment
> variables setting (e.g. PATH, exec-path), how to do it?
>
> Could you help provide an example using my situation?
> 1) I use a Windows 7 box, and have HOME env variables, and .emacs.d
> folder under it
> 2) I have a site-start.el for environment variables setting (e.g.
> PATH, exec-path)  <= I thinks this it not critical because it has no
> speed effect after I delete the site-start.el
> 3) I have .emacs under HOME, and compile it to .emacs.elc to speed it
> up
> 4) I load dired.el and then custom-set-variable, then some frame
> settings , then initialize package using
> (setq package-enable-at-startup nil)
> (package-initialize)

The package-enable-at-startup setting should be moved to
~/.emacs.d/early-init.el.

Possibly also the settings in site-start.el (since the early-init.el
runs before site-start.el, as described in `(elisp) Startup Summary').




Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Shuguang Sun
Hi Noam,

Thank you for your patient explaination. I put the (setq package-enable-at-startup nil) in the early-init.el and the load time of .emacs is the same to the emacs Feb version.

On Mon, Mar 12, 2018 at 1:39 AM, Noam Postavsky <[hidden email]> wrote:
Shuguang Sun <[hidden email]> writes:

> I read the disussions and patches, and I find out the 3.692 sec at
> the beigining seems package initialization (according to the patch in
> Feb 17).
> However, I still don't get
> 1. What is an early init file?

It should be explained in `(emacs) Early Init File' and `(elisp) Init
File'.

> 2. Why custom-set-variable  get slower?

Not sure, we need to see some more detail to find out.  Can you figure
out if it's all variables getting slower, or is there some specific
variable setting that causes the slowdown?

> 3. If i want to disable package initialization prior to any thin in
> the .emacs, but after custom-set-variable and some environment
> variables setting (e.g. PATH, exec-path), how to do it?
>
> Could you help provide an example using my situation?
> 1) I use a Windows 7 box, and have HOME env variables, and .emacs.d
> folder under it
> 2) I have a site-start.el for environment variables setting (e.g.
> PATH, exec-path)  <= I thinks this it not critical because it has no
> speed effect after I delete the site-start.el
> 3) I have .emacs under HOME, and compile it to .emacs.elc to speed it
> up
> 4) I load dired.el and then custom-set-variable, then some frame
> settings , then initialize package using
> (setq package-enable-at-startup nil)
> (package-initialize)

The package-enable-at-startup setting should be moved to
~/.emacs.d/early-init.el.

Possibly also the settings in site-start.el (since the early-init.el
runs before site-start.el, as described in `(elisp) Startup Summary').


Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Noam Postavsky
Shuguang Sun <[hidden email]> writes:

> Thank you for your patient explaination. I put the (setq
> package-enable-at-startup nil) in the early-init.el and the load time
> of .emacs is the same to the emacs Feb version.

Oh, interesting.  I guess the slowdown of the custom-set-variables must
have been caused by autoloads getting triggered then?



Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Shuguang Sun
FYI. If put (package-initialize) before custom-set-variables,
>>> before custom-set-variables : 3.637 sec <<<
Loading image-file...done
Loading time...done
Loading completion...done
Loading elec-pair...done
Loading icomplete...done
Loading ido...done
Loading avoid...done
Loading savehist...done
Loading paren...done
>>> custom-set-variables time: 10.080 sec <<<

Don't know whether autoloads being triggered. It is hard to test one by one.




On Mon, Mar 12, 2018 at 9:52 AM, Noam Postavsky <[hidden email]> wrote:
Shuguang Sun <[hidden email]> writes:

> Thank you for your patient explaination. I put the (setq
> package-enable-at-startup nil) in the early-init.el and the load time
> of .emacs is the same to the emacs Feb version.

Oh, interesting.  I guess the slowdown of the custom-set-variables must
have been caused by autoloads getting triggered then?

Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Noam Postavsky
On Mon, Mar 12, 2018 at 12:08 PM, Shuguang Sun <[hidden email]> wrote:

> FYI. If put (package-initialize) before custom-set-variables,
>>>> before custom-set-variables : 3.637 sec <<<
> Loading image-file...done
> Loading time...done
> Loading completion...done
> Loading elec-pair...done
> Loading icomplete...done
> Loading ido...done
> Loading avoid...done
> Loading savehist...done
> Loading paren...done
>>>> custom-set-variables time: 10.080 sec <<<
>
> Don't know whether autoloads being triggered. It is hard to test one by one.

Try

...
(require 'trace)
(trace-function 'do-after-load-evaluation)
(custom-set-variables ...)
(untrace-function 'do-after-load-evaluation)

and see if there is a difference in the *trace-output* buffer when you
call package-initialize first.

Maybe also do (mapc #'require '(image-file time completion elec-pair
ido avoid savehist paren)) to get the known loads (which I see listed
in your output above) out of the way.



Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Shuguang Sun
Hi Noam,

Thanks for the tips. One (package-earlyload) is to put package-initialize before custom-set-variables, another one (package-lateload) is to put package-initialize after then custom-set-variables. I attahed the diff of the trace-log.
The trace-log from package-earlyload has less do-after-load-evaluation items which are supposed to be loaded during the package-initialize. However, it still takes longer time for custom-set-variables  during early package initialization.
The two items, mail-prsvr.elc and mm-util.elc are in earlyload but not in lateload.



On Tue, Mar 13, 2018 at 1:09 AM, Noam Postavsky <[hidden email]> wrote:
On Mon, Mar 12, 2018 at 12:08 PM, Shuguang Sun <[hidden email]> wrote:
> FYI. If put (package-initialize) before custom-set-variables,
>>>> before custom-set-variables : 3.637 sec <<<
> Loading image-file...done
> Loading time...done
> Loading completion...done
> Loading elec-pair...done
> Loading icomplete...done
> Loading ido...done
> Loading avoid...done
> Loading savehist...done
> Loading paren...done
>>>> custom-set-variables time: 10.080 sec <<<
>
> Don't know whether autoloads being triggered. It is hard to test one by one.

Try

...
(require 'trace)
(trace-function 'do-after-load-evaluation)
(custom-set-variables ...)
(untrace-function 'do-after-load-evaluation)

and see if there is a difference in the *trace-output* buffer when you
call package-initialize first.

Maybe also do (mapc #'require '(image-file time completion elec-pair
ido avoid savehist paren)) to get the known loads (which I see listed
in your output above) out of the way.


package-e-l.diff (6K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Noam Postavsky
Shuguang Sun <[hidden email]> writes:

> The trace-log from package-earlyload has less
> do-after-load-evaluation items which are supposed to be loaded during
> the package-initialize. However, it still takes longer time for
> custom-set-variables  during early package initialization.
> The two items, mail-prsvr.elc and mm-util.elc are in earlyload but
> not in lateload.

Hmm, somehow that was not so informative as I'd have hoped.  Maybe
measuring each setting individually would give more info, try this:

(require 'pcase)

(defmacro split-custom-set-variables (cset-form)
  (pcase cset-form
    (`(custom-set-variables . ,entries)
     `(progn
        ,@(mapcar
           (pcase-lambda (`(quote (,sym . ,args)))
             `(let ((t0 (current-time))
                    (tf nil))
                (custom-set-variables (quote (,sym . ,args)))
                (setq tf (current-time))
                (message "setting `%s': %.3fs" ',sym
                         (float-time (time-subtract tf t0)))))
           entries)))))

(split-custom-set-variables
 (custom-set-variables
  ...))




Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Shuguang Sun
The diff files compares the loading time given package initialized early or late. And I attached a list of packages I installed.

On Wed, Mar 14, 2018 at 9:38 AM, Noam Postavsky <[hidden email]> wrote:
Shuguang Sun <[hidden email]> writes:

> The trace-log from package-earlyload has less
> do-after-load-evaluation items which are supposed to be loaded during
> the package-initialize. However, it still takes longer time for
> custom-set-variables  during early package initialization.
> The two items, mail-prsvr.elc and mm-util.elc are in earlyload but
> not in lateload.

Hmm, somehow that was not so informative as I'd have hoped.  Maybe
measuring each setting individually would give more info, try this:

(require 'pcase)

(defmacro split-custom-set-variables (cset-form)
  (pcase cset-form
    (`(custom-set-variables . ,entries)
     `(progn
        ,@(mapcar
           (pcase-lambda (`(quote (,sym . ,args)))
             `(let ((t0 (current-time))
                    (tf nil))
                (custom-set-variables (quote (,sym . ,args)))
                (setq tf (current-time))
                (message "setting `%s': %.3fs" ',sym
                         (float-time (time-subtract tf t0)))))
           entries)))))

(split-custom-set-variables
 (custom-set-variables
  ...))



pkg-list.txt (10K) Download Attachment
pkg-e-l.diff (4K) Download Attachment
pkg-late.txt (9K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

bug#30731: Slower startup using March (27.0.50) build in windows

Noam Postavsky
forwarded 30731 https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00040.html
close 30731
quit

Shuguang Sun <[hidden email]> writes:

> The diff files compares the loading time given package initialized
> early or late. And I attached a list of packages I installed.

The variables which take longer seem to have custom setters; those don't
activate when the library is not loaded.  So basically, I think this
difference is to be expected.

Since the patches mention in
https://lists.gnu.org/archive/html/emacs-devel/2018-03/msg00040.html
have now been merged, I think we can consider this bug resolved.

[1: 2db57579b0]: 2018-03-19 10:44:40 +0200
  Various follow-ups for early init file changes
  https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=2db57579b08ac99c464b6d3698648b3167fc5d55