[ESS-bugs] ess-mode 15.09-1 [elpa: 20151013.1025]; iESS Performance Degrades Quickly with Buffer Size

Jason Morgan jason.w.morgan at gmail.com
Wed Oct 14 15:46:58 CEST 2015


On Wed, Oct 14, 2015 at 6:16 AM, Martin Maechler
<maechler at stat.math.ethz.ch> wrote:
>
>> I have just updated to ESS 15.09-1 and I am noticing a dramatic change
>> in performance. For example, if I print a large-ish data.frame or
>> matrix, the iESS process becomes very sluggish, almost unusable. I
>> have replicated the problem when starting emacs with -q (and then
>> manually loading ESS). I thought it may have something to do with
>> Ubuntu or GTK, so I also replicated the problem from the command line
>> (outside of the windowing system). The problem is easily replicated on
>> my system: all I have to do is run something like matrix(rnorm(1e4)).
>> Then, every time I do anything in the iESS instance, the emacs usage
>> spikes to 25-35% CPU. Even simply hitting Enter causes a lag and CPU
>> spike. I am on Emacs 24.4.1, but have replicated on Emacs 24.3.
>
> Interesting.
>
> Did you try  ESS 15.09  before that ?
>
> Honestly, I also had doubts yesterday when working with the
> latest ESS version (i.e., 15.09-1)
> and saw extreme slowness myself.

Thank you for the quick response.

I didn't install 15.09 until 15.09-1 was out. I was still on 14.11, I
believe. I am willing to try to find the problem, but I'll need
guidance on how to profile, etc.

>> -------------------------------------------------------
>> This bug report will be sent to the ESS bugs email list
>> Press C-c C-c when you are ready to send your message.
>> -------------------------------------------------------
>
>> [ess-site.el]: ess-customize-alist=nil
>> [ess-site.el _2_]: ess-customize-alist=nil
>> (S): ess-s-versions-create making M-x defuns for
>
>> (R): ess-r-versions-create making M-x defuns for
>
>> (ess-setq-vars-LOCAL): language=S, dialect=R, buf=nil,
>> comint..echoes=t, comint..sender=comint-simple-send
>> (ess-mode-1): ess-language=S, ess-dialect=R buf=scratch.R
>> (ess-mode-1.5): alist=((ess-local-customize-alist quote
>> R-customize-alist) (ess-eldoc-function quote ess-R-eldoc-function)
>> (ess-dialect . R) (ess-suffix . R) (ess-ac-sources quote
>> (ac-source-R)) (ess-company-backends quote ((company-R-args
>> company-R-objects))) (ess-build-tags-command . rtags('%s', recursive =
>> TRUE, pattern = '\\.[RrSs](rw)?$',ofile = '%s'))
>> (ess-traceback-command . local({cat(geterrmessage(),
>> "----------------------------------
>> ", fill=TRUE);try(traceback(), silent=TRUE)})
>> ) (ess-call-stack-command . traceback(1)
>> ) (ess-eval-command . .ess.eval("%s", FALSE, FALSE, file="%f")
>> ) (ess-eval-visibly-command . .ess.eval("%s", TRUE, TRUE, 300, file="%f")
>> ) (ess-eval-visibly-noecho-command . .ess.eval("%s", FALSE, TRUE, 300,
>> file="%f")
>> ) (ess-load-command . .ess.source("%s", FALSE, FALSE)
>> ) (ess-load-visibly-command . .ess.source("%s", TRUE, TRUE, 300)
>> ) (ess-load-visibly-noecho-command . .ess.source("%s", FALSE, TRUE, 300)
>> ) (ess-dump-filename-template ess-replace-regexp-in-string S$
>> ess-suffix ess-dump-filename-template-proto)
>> (ess-help-web-search-command quote ess-R-sos) (ess-mode-syntax-table .
>> R-syntax-table) (ess-mode-editing-alist . R-editing-alist)
>> (ess-change-sp-regexp . ess-R-change-sp-regexp) (ess-help-sec-regex .
>> ess-help-R-sec-regex) (ess-help-sec-keys-alist .
>> ess-help-R-sec-keys-alist) (ess-loop-timeout . ess-S-loop-timeout)
>> (ess-cmd-delay . ess-R-cmd-delay) (ess-function-pattern .
>> ess-R-function-pattern) (ess-object-name-db-file . ess-r-namedb.el)
>> (ess-smart-operators . ess-R-smart-operators) (inferior-ess-program .
>> inferior-R-program-name) (inferior-ess-objects-command .
>> inferior-R-objects-command) (inferior-ess-font-lock-keywords quote
>> inferior-R-font-lock-keywords) (inferior-ess-search-list-command .
>> search()
>> ) (inferior-ess-help-command . inferior-ess-r-help-command)
>> (inferior-ess-help-filetype) (inferior-ess-exit-command . q())
>> (inferior-ess-exit-prompt . Save workspace image? [y/n/c]: )
>> (inferior-ess-start-file) (inferior-ess-start-args . )
>> (ess-error-regexp-alist . ess-R-error-regexp-alist)
>> (ess-describe-object-at-point-commands quote
>> ess-R-describe-object-at-point-commands) (ess-STERM . iESS)
>> (ess-editor . R-editor) (ess-pager . R-pager) (prettify-symbols-alist
>> quote ((<- . 8592) (<<- . 8606) (-> . 8594) (->> . 8608)))
>> (ess-language . S) (inferior-ess-exit-command . q()
>> ) (inferior-ess-language-start eval inferior-S-language-start)
>> (comint-use-prompt-regexp . t) (comint-process-echoes . t)
>> (inferior-ess-primary-prompt . > ) (inferior-ess-secondary-prompt . +
>> ) (comment-start . #) (ess-imenu-generic-expression .
>> ess-imenu-S-generic-expression) (comment-add . 1) (comment-start-skip
>> . #+ *) (comment-use-syntax . t) (comment-column . 40)
>> (ess-no-skip-regexp concat ^ *@\| (default-value (quote
>> ess-no-skip-regexp))) (inferior-ess-prompt . inferior-S-prompt)
>> (ess-get-help-topics-function quote ess-get-S-help-topics-function)
>> (ess-getwd-command . getwd()
>> ) (ess-setwd-command . setwd('%s')
>> ) (ess-funargs-command . .ess_funargs("%s")
>> ) (fill-nobreak-predicate quote ess-inside-string-p)
>> (normal-auto-fill-function quote ess-do-auto-fill))
>> (ess-mode-1.6): editing-alist=((paragraph-start concat \s-*$\|
>> page-delimiter) (paragraph-separate concat \s-*$\| page-delimiter)
>> (paragraph-ignore-fill-prefix . t) (require-final-newline .
>> mode-require-final-newline) (indent-line-function quote
>> ess-indent-line) (parse-sexp-ignore-comments . t) (ess-style .
>> ess-default-style) (ess-mode-syntax-table . S-syntax-table)
>> (add-log-current-defun-header-regexp . ^\(.+\)\s-+<-[
>> ]*function) (ess-font-lock-keywords quote ess-R-font-lock-keywords)
>> (ess-font-lock-defaults ess--extract-default-fl-keywords
>> ess-R-font-lock-keywords) (font-lock-defaults quote
>> (ess-font-lock-defaults nil nil ((46 . w) (95 . w)))))
>> (ess-setq-vars-LOCAL): language=S, dialect=R, buf=nil,
>> comint..echoes=t, comint..sender=comint-simple-send
>
>> Finished setting up ESS-mode.
>> (ess-setq-vars-LOCAL): language=S, dialect=R, buf=nil,
>> comint..echoes=t, comint..sender=comint-simple-send
>> (ess-mode-1): ess-language=S, ess-dialect=R buf=scratch.R
>> (ess-mode-1.5): alist=((ess-local-customize-alist quote
>> R-customize-alist) (ess-eldoc-function quote ess-R-eldoc-function)
>> (ess-dialect . R) (ess-suffix . R) (ess-ac-sources quote
>> (ac-source-R)) (ess-company-backends quote ((company-R-args
>> company-R-objects))) (ess-build-tags-command . rtags('%s', recursive =
>> TRUE, pattern = '\\.[RrSs](rw)?$',ofile = '%s'))
>> (ess-traceback-command . local({cat(geterrmessage(),
>> "----------------------------------
>> ", fill=TRUE);try(traceback(), silent=TRUE)})
>> ) (ess-call-stack-command . traceback(1)
>> ) (ess-eval-command . .ess.eval("%s", FALSE, FALSE, file="%f")
>> ) (ess-eval-visibly-command . .ess.eval("%s", TRUE, TRUE, 300, file="%f")
>> ) (ess-eval-visibly-noecho-command . .ess.eval("%s", FALSE, TRUE, 300,
>> file="%f")
>> ) (ess-load-command . .ess.source("%s", FALSE, FALSE)
>> ) (ess-load-visibly-command . .ess.source("%s", TRUE, TRUE, 300)
>> ) (ess-load-visibly-noecho-command . .ess.source("%s", FALSE, TRUE, 300)
>> ) (ess-dump-filename-template ess-replace-regexp-in-string S$
>> ess-suffix ess-dump-filename-template-proto)
>> (ess-help-web-search-command quote ess-R-sos) (ess-mode-syntax-table .
>> R-syntax-table) (ess-mode-editing-alist . R-editing-alist)
>> (ess-change-sp-regexp . ess-R-change-sp-regexp) (ess-help-sec-regex .
>> ess-help-R-sec-regex) (ess-help-sec-keys-alist .
>> ess-help-R-sec-keys-alist) (ess-loop-timeout . ess-S-loop-timeout)
>> (ess-cmd-delay . ess-R-cmd-delay) (ess-function-pattern .
>> ess-R-function-pattern) (ess-object-name-db-file . ess-r-namedb.el)
>> (ess-smart-operators . ess-R-smart-operators) (inferior-ess-program .
>> inferior-R-program-name) (inferior-ess-objects-command .
>> inferior-R-objects-command) (inferior-ess-font-lock-keywords quote
>> inferior-R-font-lock-keywords) (inferior-ess-search-list-command .
>> search()
>> ) (inferior-ess-help-command . inferior-ess-r-help-command)
>> (inferior-ess-help-filetype) (inferior-ess-exit-command . q())
>> (inferior-ess-exit-prompt . Save workspace image? [y/n/c]: )
>> (inferior-ess-start-file) (inferior-ess-start-args . )
>> (ess-error-regexp-alist . ess-R-error-regexp-alist)
>> (ess-describe-object-at-point-commands quote
>> ess-R-describe-object-at-point-commands) (ess-STERM . iESS)
>> (ess-editor . R-editor) (ess-pager . R-pager) (prettify-symbols-alist
>> quote ((<- . 8592) (<<- . 8606) (-> . 8594) (->> . 8608)))
>> (ess-language . S) (inferior-ess-exit-command . q()
>> ) (inferior-ess-language-start eval inferior-S-language-start)
>> (comint-use-prompt-regexp . t) (comint-process-echoes . t)
>> (inferior-ess-primary-prompt . > ) (inferior-ess-secondary-prompt . +
>> ) (comment-start . #) (ess-imenu-generic-expression .
>> ess-imenu-S-generic-expression) (comment-add . 1) (comment-start-skip
>> . #+ *) (comment-use-syntax . t) (comment-column . 40)
>> (ess-no-skip-regexp concat ^ *@\| (default-value (quote
>> ess-no-skip-regexp))) (inferior-ess-prompt . inferior-S-prompt)
>> (ess-get-help-topics-function quote ess-get-S-help-topics-function)
>> (ess-getwd-command . getwd()
>> ) (ess-setwd-command . setwd('%s')
>> ) (ess-funargs-command . .ess_funargs("%s")
>> ) (fill-nobreak-predicate quote ess-inside-string-p)
>> (normal-auto-fill-function quote ess-do-auto-fill))
>> (ess-mode-1.6): editing-alist=((paragraph-start concat \s-*$\|
>> page-delimiter) (paragraph-separate concat \s-*$\| page-delimiter)
>> (paragraph-ignore-fill-prefix . t) (require-final-newline .
>> mode-require-final-newline) (indent-line-function quote
>> ess-indent-line) (parse-sexp-ignore-comments . t) (ess-style .
>> ess-default-style) (ess-mode-syntax-table . S-syntax-table)
>> (add-log-current-defun-header-regexp . ^\(.+\)\s-+<-[
>> ]*function) (ess-font-lock-keywords quote ess-R-font-lock-keywords)
>> (ess-font-lock-defaults ess--extract-default-fl-keywords
>> ess-R-font-lock-keywords) (font-lock-defaults quote
>> (ess-font-lock-defaults nil nil ((46 . w) (95 . w)))))
>> (ess-setq-vars-LOCAL): language=S, dialect=R, buf=nil,
>> comint..echoes=t, comint..sender=comint-simple-send
>
>> Finished setting up ESS-mode.
>> ess-request-a-process: {beginning}
>>  ... request-a-process:
>>   major mode ess-mode; current buff: scratch.R; ess-language: S, ess-dialect: R
>>  ..start-process-specific: lang:dialect= S:R, current-buf=scratch.R
>
>> (R): ess-dialect=R, buf=scratch.R, start-arg=nil
>>  current-prefix-arg=nil
>> (inf-ess 1): lang=S, dialect=R, tmp-dialect=R, buf=scratch.R
>> (inf-ess 1.1): procname=R temp-dialect=R, buf-name=*R*
>> (inf-ess 2.0) Method #3 start=/home/jwm/tmp/ buf=*R*
>> (ess-setq-vars-LOCAL): language=S, dialect=R, buf=nil,
>> comint..echoes=t, comint..sender=comint-simple-send
>> (inf-ess 2.1): ess-language=S, ess-dialect=R buf=*R*
>> (ess-setq-vars-LOCAL): language=S, dialect=R, buf=nil,
>> comint..echoes=t, comint..sender=inferior-ess-input-sender
>> (i-ess 1): buf=*R*, lang=S, comint..echo=t,
>> comint..sender=inferior-ess-input-sender,
>> (i-ess end): buf=*R*, lang=S, comint..echo=t,
>> comint..sender=inferior-ess-input-sender,
>> (inf-ess 3.0): prog=R, start-args=--no-readline  , echoes=t
>> Making Process...Buf *R*, :Proc R, :Prog R
>>  :Args= --no-readline
>> Start File=nil
>> (inferior-ess: waiting for process to start (before hook)
>> (inferior-ess 3): waiting for process after hookload-ESSR cmd:
>> local({
>
>> source('/home/jwm/Dropbox/.emacs.d/elpa/ess-20151013.1025/etc/ESSR/R/.load.R',
>> local=TRUE) #define load.ESSR
>
>> load.ESSR('/home/jwm/Dropbox/.emacs.d/elpa/ess-20151013.1025/etc/ESSR/R')})
>
>> (R): inferior-ess-language-start=options(STERM='iESS',
>> str.dendrogram.last="'", editor='emacsclient',
>> show.error.locations=TRUE)
>>   ... request-a-process: buf=scratch.R
>
>
>> Emacs  : GNU Emacs 24.4.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.10.8)
>>  of 2015-10-10 on aeryn
>> Package: ess-mode 15.09-1 [elpa: 20151013.1025]
>
>> current state:
>> ==============
>> (setq
>>  ess-language "S"
>>  ess-dialect "R"
>>  ess-ask-for-ess-directory t
>>  ess-ask-about-transfile nil
>>  ess-directory nil
>>  ess-keep-dump-files "always"
>>  ess-source-directory "/tmp"
>>  ess-use-ido t
>>  ess-use-eldoc t
>>  ess-use-tracebug t
>>  ess-use-auto-complete t
>>  ess-use-company t
>>  ess-eval-visibly-p t
>>  ess-can-eval-in-background nil
>>  ess-local-process-name "R"
>>  )
>
>
>> --
>> ~ Jason Morgan
>
>> "Those who have had no share in the good fortunes of the mighty
>>  Often have a share in their misfortunes."
>>                 -- Bertolt Brecht, "Der Kaukasische Kreidekreis"
>>                                     (The Caucasian Chalk Circle)
>
>> _______________________________________________
>> ESS-bugs ESS-bugs at r-project.org
>> https://stat.ethz.ch/mailman/listinfo/ess-bugs
>
>> _______________________________________________
>> ESS-core list: https://stat.ethz.ch/mailman/listinfo/ess-core



-- 
~ Jason Morgan

"Those who have had no share in the good fortunes of the mighty
 Often have a share in their misfortunes."
                -- Bertolt Brecht, "Der Kaukasische Kreidekreis"
                                    (The Caucasian Chalk Circle)



More information about the ESS-bugs mailing list