* bug#55636: 27.2; etags performance fix when working with very big TAGS files
@ 2022-05-25 16:04 Jurgen De Backer via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-05-25 17:16 ` Eli Zaretskii
0 siblings, 1 reply; 10+ messages in thread
From: Jurgen De Backer via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-05-25 16:04 UTC (permalink / raw)
To: 55636; +Cc: jurgen.de-backer.ext, stef.van-vlierberghe, philippe.waroquiers
Hi,
We implemented a fix for making etags searching faster in our custom
emacs build.
In our project, sometimes a search could take more than 10 seconds.
The fix is to expand filenames only if they are relative:
(defun expand-if-relative (a-file)
(if (file-name-absolute-p a-file)
a-file
(expand-file-name a-file)
)
)
and then use this function in the mapcar statement inside (defun
tags-table-including ...), replacing expand-file-name:
....
(if (member this-file (mapcar #'expand-if-relative
(tags-table-files)))
;; Found it.
(setq found tables)
)
....
Looking at expand-file-name doc, it does 2 things:
* make file name absolute
* and canonicalize it (removes the xxxx/.. dir components,
the . dir components, the double slashes).
We are wondering if the standard C function in emacs could do
a fast "do nothing" when the file name is absolute and has
nothing to cannonicalize.
It could be useful to add this check in the emacs implementation of
expand-file-name.
Many thanks,
Jurgen De Backer
In GNU Emacs 27.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30)
of 2022-05-23 built on dhdevd14
Windowing system distributor 'Moba/X', version 11.0.12004000
System Description: Red Hat Enterprise Linux Server 7.9 (Maipo)
Recent messages:
Adding to TAGS-list: /cm/ot/TACT/TACT_CONFIG!27.0.0.33/build_G!27.IP.L7/TAGS.extra, to: (/cm/ot/TACT/TACT_CONFIG!27.0.0.33/build_G!27.IP.L7/TAGS /cm/ot/TACT/TACT_CONFIG!27.0.0.33/build_G!27.IP.L7/TAGS.extra)
Adding to TAGS-list: /cm/ot/CMA/MASTER.1/build_G!27.IP.L7/TAGS, to: (/cm/ot/CMA/MASTER.1/build_G!27.IP.L7/TAGS)
Adding to TAGS-list: /cm/ot/CMA/MASTER.1/build_G!27.IP.L7/TAGS.extra, to: (/cm/ot/CMA/MASTER.1/build_G!27.IP.L7/TAGS /cm/ot/CMA/MASTER.1/build_G!27.IP.L7/TAGS.extra)
Loading gpc...done
isearch-forwardisearch-backwardisearch-forward-regexpisearch-backward-regexpquery-replacequery-replace-regexpreplace-regexpreplace-string
Setup ispell to use hunspell
Loading version_emacs_startup...done
Loading ada_mode_6...done
Loading /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/emacs_startup.el (source)...done
For information about GNU Emacs and the GNU system, type C-h C-a.
Configured using:
'configure
--prefix=/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated
--exec-prefix=/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/libexec/emacs-27.2
--mandir=/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/man
--with-x-toolkit=gtk3 --with-modules --with-xft
'CFLAGS=-I/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/include
' 'LDFLAGS=-Wl,-rpath,/cfmu/local/data/libimagemagic
-L/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/lib''
Configured features:
XPM JPEG TIFF GIF PNG SOUND GPM DBUS GSETTINGS GLIB NOTIFY INOTIFY ACL
LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ XFT ZLIB TOOLKIT_SCROLL_BARS
GTK3 X11 XDBE XIM MODULES THREADS PDUMPER
Important settings:
value of $EMACSDATA: /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/etc
value of $EMACSDOC: /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/etc
value of $EMACSLOADPATH: /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp:/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/site-lisp:/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp
value of $EMACSPATH: /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/libexec/emacs-27.2/libexec/emacs/27.2/x86_64-pc-linux-gnu:
value of $LANG: C
locale-coding-system: nil
Major mode: Lisp Interaction
Minor modes in effect:
which-function-mode: t
show-paren-mode: t
tooltip-mode: t
global-eldoc-mode: t
eldoc-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
tool-bar-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
column-number-mode: t
line-number-mode: t
transient-mark-mode: t
Load-path shadows:
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/sh-script hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/progmodes/sh-script
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-groovy hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-groovy
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-lint hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-lint
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-texinfo hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-texinfo
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-beamer hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-beamer
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-sqlite hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-sqlite
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-makefile hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-makefile
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-latex hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-latex
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-tangle hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-tangle
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-entities hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-entities
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-clojure hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-clojure
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-table hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-table
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-capture hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-capture
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-indent hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-indent
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-feed hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-feed
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-plot hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-plot
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-list hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-list
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-keys hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-keys
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-emacs-lisp hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-emacs-lisp
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-latex hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-latex
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-duration hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-duration
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-faces hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-faces
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-table hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-table
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-agenda hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-agenda
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-macro hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-macro
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-protocol hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-protocol
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-plantuml hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-plantuml
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-screen hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-screen
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-compat hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-compat
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-processing hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-processing
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-octave hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-octave
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-crypt hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-crypt
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-timer hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-timer
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-ctags hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-ctags
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-maxima hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-maxima
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-lilypond hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-lilypond
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-element hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-element
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-matlab hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-matlab
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-gnuplot hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-gnuplot
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-forth hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-forth
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-archive hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-archive
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-datetree hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-datetree
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-mobile hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-mobile
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-ledger hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-ledger
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-eshell hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-eshell
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-asymptote hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-asymptote
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-macs hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-macs
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-attach-git hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-attach-git
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-lisp hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-lisp
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-lob hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-lob
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-R hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-R
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-vala hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-vala
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-odt hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-odt
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-footnote hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-footnote
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-icalendar hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-icalendar
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-lua hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-lua
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-habit hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-habit
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-css hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-css
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-core hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-core
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-exp hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-exp
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-comint hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-comint
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-ocaml hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-ocaml
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-id hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-id
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-abc hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-abc
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-org hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-org
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-info hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-info
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-sass hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-sass
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-shell hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-shell
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-scheme hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-scheme
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-haskell hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-haskell
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-bibtex hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-bibtex
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-rmail hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-rmail
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-java hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-java
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-md hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-md
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-sql hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-sql
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-src hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-src
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-mscgen hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-mscgen
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-C hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-C
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-eval hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-eval
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-eshell hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-eshell
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-eww hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-eww
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-gnus hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-gnus
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-awk hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-awk
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-goto hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-goto
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-mhe hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-mhe
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-inlinetask hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-inlinetask
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-ruby hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-ruby
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-org hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-org
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-publish hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-publish
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-bbdb hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-bbdb
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-num hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-num
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-calc hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-calc
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-irc hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-irc
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-shen hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-shen
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-colview hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-colview
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-attach hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-attach
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-ditaa hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-ditaa
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-dot hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-dot
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-hledger hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-hledger
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-J hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-J
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-w3m hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-w3m
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-python hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-python
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-io hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-io
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-ref hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-ref
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-clock hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-clock
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-fortran hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-fortran
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-mouse hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-mouse
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ol-docview hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ol-docview
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-install hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-install
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-loaddefs hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-loaddefs
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-picolisp hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-picolisp
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-ascii hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-ascii
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-version hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-version
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-man hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-man
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-sed hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-sed
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-js hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-js
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-pcomplete hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-pcomplete
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ox-html hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ox-html
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-stan hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-stan
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org-tempo hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org-tempo
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/org hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/org
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-coq hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-coq
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-perl hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-perl
/cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/26.3/site-lisp/org-9.3.1/ob-ebnf hides /cm/ot/TOOL/GNU!27.0.0.12/build_G!27.IP.L7/generated/share/emacs/27.2/lisp/org/ob-ebnf
Features:
(shadow sort mail-extr emacsbug message rmc puny rfc822 mml mml-sec epa
derived epg epg-config gnus-util rmail rmail-loaddefs
text-property-search mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils gpc dired dired-loaddefs mule-util etags
fileloop generator which-func ido paren ada-imenu imenu ada-skel
ada-skeletons skeleton ada-compiler ada-gnat-compile ada-gnat-xref
gnat-core ada-wisi ada-process wisi-process-parse
ada-indent-user-options ada-fix-error ada-mode wisi xref project
wisi-fringe wisi-parse-common semantic/lex semantic/fw mode-local
find-file compile align highlight-beyond-fill-column which-key vlf-setup
vlf vlf-base vlf-tune org ob ob-tangle ob-ref ob-lob ob-table ob-exp
org-macro org-footnote org-src ob-comint org-pcomplete pcomplete
org-list org-faces org-entities time-date noutline outline easy-mmode
org-version ob-emacs-lisp ob-core ob-eval org-table ol org-keys
org-compat advice org-macs org-loaddefs format-spec find-func cal-menu
calendar cal-loaddefs memory-usage ffap thingatpt comint ansi-color ring
jka-compr finder-inf package easymenu browse-url url-handlers url-parse
auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
password-cache json subr-x map url-vars seq byte-opt gv bytecomp
byte-compile cconv cl-loaddefs cl-lib tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode elisp-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer
select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite charscript charprop case-table epa-hook
jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice loaddefs
button faces cus-face macroexp files text-properties overlay sha1 md5
base64 format env code-pages mule custom widget hashtable-print-readable
backquote threads dbusbind inotify dynamic-setting system-font-setting
font-render-setting move-toolbar gtk x-toolkit x multi-tty
make-network-process emacs)
Memory information:
((conses 16 140306 18084)
(symbols 48 16485 1)
(strings 32 51083 2051)
(string-bytes 1 1801019)
(vectors 16 23936)
(vector-slots 8 278494 10296)
(floats 8 109 60)
(intervals 56 906 91)
(buffers 1000 11)
(heap 1024 18287 1390))
____
This message and any files transmitted with it are legally privileged and intended for the sole use of the individual(s) or entity to whom they are addressed. If you are not the intended recipient, please notify the sender by reply and delete the message and any attachments from your system. Any unauthorised use or disclosure of the content of this message is strictly prohibited and may be unlawful.
Nothing in this e-mail message amounts to a contractual or legal commitment on the part of EUROCONTROL, unless it is confirmed by appropriately signed hard copy.
Any views expressed in this message are those of the sender.
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#55636: 27.2; etags performance fix when working with very big TAGS files
2022-05-25 16:04 bug#55636: 27.2; etags performance fix when working with very big TAGS files Jurgen De Backer via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-05-25 17:16 ` Eli Zaretskii
2022-05-25 20:42 ` VAN VLIERBERGHE Stef via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2022-05-25 17:16 UTC (permalink / raw)
To: Jurgen De Backer; +Cc: 55636, stef.van-vlierberghe, philippe.waroquiers
> Cc: jurgen.de-backer.ext@eurocontrol.int, stef.van-vlierberghe@eurocontrol.int,
> philippe.waroquiers@eurocontrol.int
> Date: Wed, 25 May 2022 16:04:04 +0000
> From: Jurgen De Backer via "Bug reports for GNU Emacs,
> the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
>
> We implemented a fix for making etags searching faster in our custom
> emacs build.
> In our project, sometimes a search could take more than 10 seconds.
> The fix is to expand filenames only if they are relative:
>
> (defun expand-if-relative (a-file)
> (if (file-name-absolute-p a-file)
> a-file
> (expand-file-name a-file)
> )
> )
>
> and then use this function in the mapcar statement inside (defun
> tags-table-including ...), replacing expand-file-name:
> ....
> (if (member this-file (mapcar #'expand-if-relative
> (tags-table-files)))
> ;; Found it.
> (setq found tables)
> )
> ....
Thanks. How much speedup does this bring in your use cases? From 10
sec down to how long?
> Looking at expand-file-name doc, it does 2 things:
> * make file name absolute
> * and canonicalize it (removes the xxxx/.. dir components,
> the . dir components, the double slashes).
It actually does more, like resolve the ~/ etc.
> We are wondering if the standard C function in emacs could do
> a fast "do nothing" when the file name is absolute and has
> nothing to cannonicalize.
I think testing for "nothing to canonicalize" is as complex as
canonicalizing the file name.
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#55636: 27.2; etags performance fix when working with very big TAGS files
2022-05-25 17:16 ` Eli Zaretskii
@ 2022-05-25 20:42 ` VAN VLIERBERGHE Stef via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-05-26 5:07 ` Eli Zaretskii
0 siblings, 1 reply; 10+ messages in thread
From: VAN VLIERBERGHE Stef via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-05-25 20:42 UTC (permalink / raw)
To: Eli Zaretskii, DE BACKER Jurgen (EXT)
Cc: 55636@debbugs.gnu.org, WAROQUIERS Philippe
Hi Eli,
For us the 10 sec is reduced to below 1 sec, loading the tags file is no longer noticed after this change.
I assume the reason is a huge amount of files all accessed over NFS, and expand-file-name does a lot of system calls that translate into network packets.
An alternative approach is to add some switch that allows a customization that simply never calls the expand-file-name, we generate tags files that already contain absolute paths so don't need any of this logic and disabling it would also be ok for us.
All the best,
Stef
-----Original Message-----
From: Eli Zaretskii <eliz@gnu.org>
Sent: 25 May 2022 19:16
To: DE BACKER Jurgen (EXT) <jurgen.de-backer.ext@eurocontrol.int>
Cc: 55636@debbugs.gnu.org; VAN VLIERBERGHE Stef <stef.van-vlierberghe@eurocontrol.int>; WAROQUIERS Philippe <philippe.waroquiers@eurocontrol.int>
Subject: Re: bug#55636: 27.2; etags performance fix when working with very big TAGS files
> Cc: jurgen.de-backer.ext@eurocontrol.int,
> stef.van-vlierberghe@eurocontrol.int,
> philippe.waroquiers@eurocontrol.int
> Date: Wed, 25 May 2022 16:04:04 +0000
> From: Jurgen De Backer via "Bug reports for GNU Emacs, the Swiss
> army knife of text editors" <bug-gnu-emacs@gnu.org>
>
> We implemented a fix for making etags searching faster in our custom
> emacs build.
> In our project, sometimes a search could take more than 10 seconds.
> The fix is to expand filenames only if they are relative:
>
> (defun expand-if-relative (a-file)
> (if (file-name-absolute-p a-file)
> a-file
> (expand-file-name a-file)
> )
> )
>
> and then use this function in the mapcar statement inside (defun
> tags-table-including ...), replacing expand-file-name:
> ....
> (if (member this-file (mapcar #'expand-if-relative
> (tags-table-files)))
> ;; Found it.
> (setq found tables)
> )
> ....
Thanks. How much speedup does this bring in your use cases? From 10 sec down to how long?
> Looking at expand-file-name doc, it does 2 things:
> * make file name absolute
> * and canonicalize it (removes the xxxx/.. dir components,
> the . dir components, the double slashes).
It actually does more, like resolve the ~/ etc.
> We are wondering if the standard C function in emacs could do a fast
> "do nothing" when the file name is absolute and has nothing to
> cannonicalize.
I think testing for "nothing to canonicalize" is as complex as canonicalizing the file name.
____
This message and any files transmitted with it are legally privileged and intended for the sole use of the individual(s) or entity to whom they are addressed. If you are not the intended recipient, please notify the sender by reply and delete the message and any attachments from your system. Any unauthorised use or disclosure of the content of this message is strictly prohibited and may be unlawful.
Nothing in this e-mail message amounts to a contractual or legal commitment on the part of EUROCONTROL, unless it is confirmed by appropriately signed hard copy.
Any views expressed in this message are those of the sender.
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#55636: 27.2; etags performance fix when working with very big TAGS files
2022-05-25 20:42 ` VAN VLIERBERGHE Stef via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-05-26 5:07 ` Eli Zaretskii
2022-05-26 13:50 ` VAN VLIERBERGHE Stef via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2022-05-26 5:07 UTC (permalink / raw)
To: VAN VLIERBERGHE Stef; +Cc: 55636, jurgen.de-backer.ext, philippe.waroquiers
> From: VAN VLIERBERGHE Stef <stef.van-vlierberghe@eurocontrol.int>
> CC: "55636@debbugs.gnu.org" <55636@debbugs.gnu.org>, WAROQUIERS Philippe
> <philippe.waroquiers@eurocontrol.int>
> Date: Wed, 25 May 2022 20:42:16 +0000
>
> For us the 10 sec is reduced to below 1 sec, loading the tags file is no longer noticed after this change.
>
> I assume the reason is a huge amount of files all accessed over NFS, and expand-file-name does a lot of system calls that translate into network packets.
Actually, expand-file-name is a purely syntactical function that is
supposed not to hit the filesystem at all, at l;east on Posix systems.
So I wonder why it seems to happen in your case. Any chances that you
could show a trace of system calls for those 10 sec?
Of course, making a simple change that you suggested is a no-brainer,
so we might as well do it without further ado, but I'm just curious
and think maybe we will learn something useful if we dig a bit deeper
into your use case.
> An alternative approach is to add some switch that allows a customization that simply never calls the expand-file-name, we generate tags files that already contain absolute paths so don't need any of this logic and disabling it would also be ok for us.
That'd be less clean, I think: if we can do something automatically,
it's better to do that instead of placing the burden on the user.
Again, I'm not asking these questions because I see some problem in
your proposed change. If we arrive at the conclusion that there's no
reason to investigate more, we can just install that change, as it
cannot possibly hurt.
Thanks.
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#55636: 27.2; etags performance fix when working with very big TAGS files
2022-05-26 5:07 ` Eli Zaretskii
@ 2022-05-26 13:50 ` VAN VLIERBERGHE Stef via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-05-26 14:54 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 10+ messages in thread
From: VAN VLIERBERGHE Stef via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-05-26 13:50 UTC (permalink / raw)
To: Eli Zaretskii
Cc: 55636@debbugs.gnu.org, DE BACKER Jurgen (EXT),
WAROQUIERS Philippe
You are right, I tried an strace and only see the tags files being read.
I also can't get the 10 sec behaviour any more, maybe some other factors were involved that made the emacs tag file processing slow.
What I did at the time to analyze was to enable debugger on Ctrl-G and then I notices emacs was busy here :
Debugger entered--Lisp error: (quit)
expand-file-name(#("/cm/ot/TOOL/GTK!27.0.0.1/build_G!27.IP.L7/sources/..." 0 88 (charset iso-8859-1)))
mapcar(expand-file-name (#("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 81 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 80 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 83 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 83 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) ...))
tags-table-including("/tmp/vvl.Tstatus.out" t)
visit-tags-table-buffer()
find-tag-noselect("-tv_summary.adb" nil nil)
From that I concluded the expand-file-name was the cause.
Hope this helps and all the best,
Stef
-----Original Message-----
From: Eli Zaretskii <eliz@gnu.org>
Sent: 26 May 2022 07:07
To: VAN VLIERBERGHE Stef <stef.van-vlierberghe@eurocontrol.int>
Cc: DE BACKER Jurgen (EXT) <jurgen.de-backer.ext@eurocontrol.int>; 55636@debbugs.gnu.org; WAROQUIERS Philippe <philippe.waroquiers@eurocontrol.int>
Subject: Re: bug#55636: 27.2; etags performance fix when working with very big TAGS files
> From: VAN VLIERBERGHE Stef <stef.van-vlierberghe@eurocontrol.int>
> CC: "55636@debbugs.gnu.org" <55636@debbugs.gnu.org>, WAROQUIERS Philippe
> <philippe.waroquiers@eurocontrol.int>
> Date: Wed, 25 May 2022 20:42:16 +0000
>
> For us the 10 sec is reduced to below 1 sec, loading the tags file is no longer noticed after this change.
>
> I assume the reason is a huge amount of files all accessed over NFS, and expand-file-name does a lot of system calls that translate into network packets.
Actually, expand-file-name is a purely syntactical function that is supposed not to hit the filesystem at all, at l;east on Posix systems.
So I wonder why it seems to happen in your case. Any chances that you could show a trace of system calls for those 10 sec?
Of course, making a simple change that you suggested is a no-brainer, so we might as well do it without further ado, but I'm just curious and think maybe we will learn something useful if we dig a bit deeper into your use case.
> An alternative approach is to add some switch that allows a customization that simply never calls the expand-file-name, we generate tags files that already contain absolute paths so don't need any of this logic and disabling it would also be ok for us.
That'd be less clean, I think: if we can do something automatically, it's better to do that instead of placing the burden on the user.
Again, I'm not asking these questions because I see some problem in your proposed change. If we arrive at the conclusion that there's no reason to investigate more, we can just install that change, as it cannot possibly hurt.
Thanks.
____
This message and any files transmitted with it are legally privileged and intended for the sole use of the individual(s) or entity to whom they are addressed. If you are not the intended recipient, please notify the sender by reply and delete the message and any attachments from your system. Any unauthorised use or disclosure of the content of this message is strictly prohibited and may be unlawful.
Nothing in this e-mail message amounts to a contractual or legal commitment on the part of EUROCONTROL, unless it is confirmed by appropriately signed hard copy.
Any views expressed in this message are those of the sender.
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#55636: 27.2; etags performance fix when working with very big TAGS files
2022-05-26 13:50 ` VAN VLIERBERGHE Stef via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-05-26 14:54 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-05-26 15:09 ` Eli Zaretskii
0 siblings, 1 reply; 10+ messages in thread
From: WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-05-26 14:54 UTC (permalink / raw)
To: Eli Zaretskii
Cc: 55636@debbugs.gnu.org, DE BACKER Jurgen (EXT),
VAN VLIERBERGHE Stef
[-- Attachment #1.1: Type: text/plain, Size: 11618 bytes --]
Stef did his measurement in a context where the expand-file-name was not called
as the expand-if-relative optimisation was still active.
I have redone the measurements with expand-if-relative re-defined
as a simple call to expand-file-name.
With this, I have not observed a significant nr of file system access
when doing find-tag.
So, I think the problem is just the size our 4 TAGS files:
One is about 62 MB, 914_000 lines, of those lines, about 59_000 are file names lines,
another one 46 MB, 629_000 lines, also 59_000 file names lines.
We have 2 other smaller TAGS file (8MB and 9MB).
I have run emacs under valgrind --tool=callgrind.
valgrind points at expand-file-name eating significant cpu (see attachment).
I have also used the lisp profiler when loading the TAGS files.
- call-interactively 10141 84%
- funcall-interactively 10077 84%
- find-tag 10069 83%
- find-tag-noselect 10069 83%
- visit-tags-table-buffer 9584 79%
- tags-table-including 9578 79%
- tags-table-extend-computed-list 4327 36%
- tags-verify-table 3274 27%
- apply 3274 27%
- ad-Advice-tags-verify-table 3274 27%
+ #<compiled 0x809ae9> 3274 27%
+ tags-included-tables 1053 8%
- mapcar 4097 34%
expand-if-relative 4076 34%
+ tags-table-files 1144 9%
+ tags-table-check-computed-list 1 0%
+ tags-table-list-member 1 0%
+ find-tag-in-order 485 4%
+ execute-extended-command 8 0%
+ byte-code 43 0%
+ find-tag-interactive 21 0%
+ ... 1091 9%
+ redisplay_internal (C function) 735 6%
+ timer-event-handler 18 0%
Maybe this allows to points at what could be optimised ?
Note that as far as I can see, the ad-Advice-tags-verify-table is created by our site lisp code containing vlf-1.7.1.
Not clear to me why this advice seems to be cpu costly, I was expecting this advice to only run a few times. i.e;
for each TAGS file opening.
Thanks
Philippe
> -----Original Message-----
> From: VAN VLIERBERGHE Stef <stef.van-vlierberghe@eurocontrol.int>
> Sent: 26 May 2022 15:51
> To: Eli Zaretskii <eliz@gnu.org>
> Cc: DE BACKER Jurgen (EXT) <jurgen.de-backer.ext@eurocontrol.int>; 55636@debbugs.gnu.org; WAROQUIERS Philippe
> <philippe.waroquiers@eurocontrol.int>
> Subject: RE: bug#55636: 27.2; etags performance fix when working with very big TAGS files
>
> You are right, I tried an strace and only see the tags files being read.
>
> I also can't get the 10 sec behaviour any more, maybe some other factors were involved that made the emacs tag file processing slow.
>
> What I did at the time to analyze was to enable debugger on Ctrl-G and then I notices emacs was busy here :
>
> Debugger entered--Lisp error: (quit)
> expand-file-name(#("/cm/ot/TOOL/GTK!27.0.0.1/build_G!27.IP.L7/sources/..." 0 88 (charset iso-8859-1)))
> mapcar(expand-file-name (#("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 81 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 80 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 83 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 83 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1))
> #("/cm/build9/cm/ot/TOOL/G!27.IP.L7/build_G!27.IP.L7/..." 0 82 (charset iso-8859-1)) ...))
> tags-table-including("/tmp/vvl.Tstatus.out" t)
> visit-tags-table-buffer()
> find-tag-noselect("-tv_summary.adb" nil nil)
>
> From that I concluded the expand-file-name was the cause.
>
> Hope this helps and all the best,
> Stef
>
> -----Original Message-----
> From: Eli Zaretskii <eliz@gnu.org>
> Sent: 26 May 2022 07:07
> To: VAN VLIERBERGHE Stef <stef.van-vlierberghe@eurocontrol.int>
> Cc: DE BACKER Jurgen (EXT) <jurgen.de-backer.ext@eurocontrol.int>; 55636@debbugs.gnu.org; WAROQUIERS Philippe
> <philippe.waroquiers@eurocontrol.int>
> Subject: Re: bug#55636: 27.2; etags performance fix when working with very big TAGS files
>
> > From: VAN VLIERBERGHE Stef <stef.van-vlierberghe@eurocontrol.int>
> > CC: "55636@debbugs.gnu.org" <55636@debbugs.gnu.org>, WAROQUIERS Philippe
> > <philippe.waroquiers@eurocontrol.int>
> > Date: Wed, 25 May 2022 20:42:16 +0000
> >
> > For us the 10 sec is reduced to below 1 sec, loading the tags file is no longer noticed after this change.
> >
> > I assume the reason is a huge amount of files all accessed over NFS, and expand-file-name does a lot of system calls that translate
> into network packets.
>
> Actually, expand-file-name is a purely syntactical function that is supposed not to hit the filesystem at all, at l;east on Posix systems.
> So I wonder why it seems to happen in your case. Any chances that you could show a trace of system calls for those 10 sec?
>
> Of course, making a simple change that you suggested is a no-brainer, so we might as well do it without further ado, but I'm just
> curious and think maybe we will learn something useful if we dig a bit deeper into your use case.
>
> > An alternative approach is to add some switch that allows a customization that simply never calls the expand-file-name, we generate
> tags files that already contain absolute paths so don't need any of this logic and disabling it would also be ok for us.
>
> That'd be less clean, I think: if we can do something automatically, it's better to do that instead of placing the burden on the user.
>
> Again, I'm not asking these questions because I see some problem in your proposed change. If we arrive at the conclusion that
> there's no reason to investigate more, we can just install that change, as it cannot possibly hurt.
>
> Thanks.
____
This message and any files transmitted with it are legally privileged and intended for the sole use of the individual(s) or entity to whom they are addressed. If you are not the intended recipient, please notify the sender by reply and delete the message and any attachments from your system. Any unauthorised use or disclosure of the content of this message is strictly prohibited and may be unlawful.
Nothing in this e-mail message amounts to a contractual or legal commitment on the part of EUROCONTROL, unless it is confirmed by appropriately signed hard copy.
Any views expressed in this message are those of the sender.
[-- Attachment #1.2: Type: text/html, Size: 27762 bytes --]
[-- Attachment #2: emacs_callgrind.png --]
[-- Type: image/png, Size: 163223 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#55636: 27.2; etags performance fix when working with very big TAGS files
2022-05-26 14:54 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-05-26 15:09 ` Eli Zaretskii
2022-05-26 17:25 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2022-05-26 15:09 UTC (permalink / raw)
To: WAROQUIERS Philippe; +Cc: 55636, jurgen.de-backer.ext, stef.van-vlierberghe
> From: WAROQUIERS Philippe <philippe.waroquiers@eurocontrol.int>
> CC: "DE BACKER Jurgen (EXT)" <jurgen.de-backer.ext@eurocontrol.int>,
> "55636@debbugs.gnu.org" <55636@debbugs.gnu.org>, VAN VLIERBERGHE Stef
> <stef.van-vlierberghe@eurocontrol.int>
> Date: Thu, 26 May 2022 14:54:04 +0000
>
> So, I think the problem is just the size our 4 TAGS files:
>
> One is about 62 MB, 914_000 lines, of those lines, about 59_000 are file names lines,
> another one 46 MB, 629_000 lines, also 59_000 file names lines.
>
> We have 2 other smaller TAGS file (8MB and 9MB).
>
> I have run emacs under valgrind --tool=callgrind.
>
> valgrind points at expand-file-name eating significant cpu (see attachment).
I'm not sure I understand how to interpret that screenshot.
> I have also used the lisp profiler when loading the TAGS files.
>
>
> - call-interactively 10141 84%
> - funcall-interactively 10077 84%
> - find-tag 10069 83%
> - find-tag-noselect 10069 83%
> - visit-tags-table-buffer 9584 79%
> - tags-table-including 9578 79%
> - tags-table-extend-computed-list 4327 36%
> - tags-verify-table 3274 27%
> - apply 3274 27%
> - ad-Advice-tags-verify-table 3274 27%
This says that most of the time is spent in tags-table-including. If
you manually load etags.el (NOT .elc!), and then profile the same
operation, the profile could show in more detail which parts of
tags-table-including takes most of the time, and we can take it from
there.
Thanks.
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#55636: 27.2; etags performance fix when working with very big TAGS files
2022-05-26 15:09 ` Eli Zaretskii
@ 2022-05-26 17:25 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-05-26 19:10 ` Eli Zaretskii
0 siblings, 1 reply; 10+ messages in thread
From: WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-05-26 17:25 UTC (permalink / raw)
To: Eli Zaretskii
Cc: 55636@debbugs.gnu.org, DE BACKER Jurgen (EXT),
VAN VLIERBERGHE Stef
[-- Attachment #1.1: Type: text/plain, Size: 6781 bytes --]
> > valgrind points at expand-file-name eating significant cpu (see attachment).
>
> I'm not sure I understand how to interpret that screenshot.
Each rectangle represents a function.
The nr inside the rectangle is the instructions used directly and indirectly by the function.
(direct cpu is spent in the function itself, indirect cpu is spend in the
called functions).
An arrow represents a call. The nr on the arrow represents the nr of calls.
So, what we can observe there is that the C function Fexpand_file_name makes 236_905 calls
to Ffind_File_name_handler
This Ffind_file_name_handler function makes 1.2 million calls to fast_string_match.
On this screenshot, we cannot see the CPU directly consumed by the functions,
but looking at the direct cpu shows that expand-file-name cost is mostly due to the fast_string_match closure
(I have attached another screenshot as maybe the fast search can be made faster.
E.g. it looks like builtin_lisp_symbol is called 213_000_000 times, is not inlined
while marked INLINE in the code or there are million of calls to maybe_quit inside re_match_2_internal).
> This says that most of the time is spent in tags-table-including. If
> you manually load etags.el (NOT .elc!), and then profile the same
> operation, the profile could show in more detail which parts of
> tags-table-including takes most of the time, and we can take it from
> there.
Here is a more detailed lisp profile where I have expanded the costly branches.
- command-execute 10505 84%
- call-interactively 10504 84%
- funcall-interactively 10327 83%
- find-tag 10316 82%
- let* 10316 82%
- find-tag-noselect 10316 82%
- let 10316 82%
- if 10316 82%
- if 9832 79%
- visit-tags-table-buffer 9832 79%
- cond 9832 79%
- setq 9831 79%
- or 9831 79%
- and 9831 79%
- save-current-buffer 9831 79%
- or 9831 79%
- tags-table-including 9831 79%
- let 9831 79%
- while 9831 79%
- if 9831 79%
- let 5399 43%
- if 5399 43%
- member 5396 43%
- mapcar 5384 43%
- tags-table-files 1306 10%
- or 1306 10%
- setq 1306 10%
- funcall 1306 10%
- etags-tags-table-files 1306 10%
+ let 1306 10%
- if 4432 35%
- tags-table-extend-computed-list 4432 35%
- let 4432 35%
- save-excursion 4432 35%
- if 4432 35%
- tags-verify-table 3292 26%
- apply 3292 26%
- ad-Advice-tags-verify-table 3292 26%
+ #<lambda 0x1b893daac4d25cc1> 3292 26%
- let 1140 9%
- tags-included-tables 1140 9%
- or 1140 9%
- setq 1140 9%
- funcall 1140 9%
- etags-tags-included-tables 1140 9%
- let 1140 9%
- while 1126 9%
if 47 0%
setq 11 0%
+ tags-table-check-computed-list 1 0%
+ let 484 3%
+ execute-extended-command 11 0%
+ byte-code 155 1%
+ find-tag-interactive 22 0%
+ ... 1178 9%
+ redisplay_internal (C function) 730 5%
+ timer-event-handler 18 0%
jit-lock--antiblink-post-command 1 0%
Thanks
Philippe
____
This message and any files transmitted with it are legally privileged and intended for the sole use of the individual(s) or entity to whom they are addressed. If you are not the intended recipient, please notify the sender by reply and delete the message and any attachments from your system. Any unauthorised use or disclosure of the content of this message is strictly prohibited and may be unlawful.
Nothing in this e-mail message amounts to a contractual or legal commitment on the part of EUROCONTROL, unless it is confirmed by appropriately signed hard copy.
Any views expressed in this message are those of the sender.
[-- Attachment #1.2: Type: text/html, Size: 32747 bytes --]
[-- Attachment #2: fast_string_match.png --]
[-- Type: image/png, Size: 221362 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#55636: 27.2; etags performance fix when working with very big TAGS files
2022-05-26 17:25 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-05-26 19:10 ` Eli Zaretskii
2022-05-26 20:45 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 10+ messages in thread
From: Eli Zaretskii @ 2022-05-26 19:10 UTC (permalink / raw)
To: WAROQUIERS Philippe; +Cc: 55636, jurgen.de-backer.ext, stef.van-vlierberghe
> From: WAROQUIERS Philippe <philippe.waroquiers@eurocontrol.int>
> CC: "DE BACKER Jurgen (EXT)" <jurgen.de-backer.ext@eurocontrol.int>,
> "55636@debbugs.gnu.org" <55636@debbugs.gnu.org>, VAN VLIERBERGHE Stef
> <stef.van-vlierberghe@eurocontrol.int>
> Date: Thu, 26 May 2022 17:25:29 +0000
>
> So, what we can observe there is that the C function Fexpand_file_name makes 236_905 calls
>
> to Ffind_File_name_handler
>
> This Ffind_file_name_handler function makes 1.2 million calls to fast_string_match.
>
>
>
> On this screenshot, we cannot see the CPU directly consumed by the functions,
>
> but looking at the direct cpu shows that expand-file-name cost is mostly due to the fast_string_match closure
The Lisp profile tells quite a different story: according to that,
expand-file-name is not a hotspot.
So I still don't see that expand-file-name is the place to optimize
your use case.
Did you succeed in reproducing the 10-sec delay with the original
code, and then ten-fold speedup if expand-file-name is called only on
non-absolute file names?
^ permalink raw reply [flat|nested] 10+ messages in thread
* bug#55636: 27.2; etags performance fix when working with very big TAGS files
2022-05-26 19:10 ` Eli Zaretskii
@ 2022-05-26 20:45 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 0 replies; 10+ messages in thread
From: WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-05-26 20:45 UTC (permalink / raw)
To: Eli Zaretskii
Cc: 55636@debbugs.gnu.org, DE BACKER Jurgen (EXT),
VAN VLIERBERGHE Stef
> > So, what we can observe there is that the C function Fexpand_file_name makes 236_905 calls
> >
> > to Ffind_File_name_handler
> >
> > This Ffind_file_name_handler function makes 1.2 million calls to fast_string_match.
> >
> >
> >
> > On this screenshot, we cannot see the CPU directly consumed by the functions,
> >
> > but looking at the direct cpu shows that expand-file-name cost is mostly due to the fast_string_match closure
>
> The Lisp profile tells quite a different story: according to that,
> expand-file-name is not a hotspot.
>
> So I still don't see that expand-file-name is the place to optimize
> your use case.
>
> Did you succeed in reproducing the 10-sec delay with the original
> code, and then ten-fold speedup if expand-file-name is called only on
> non-absolute file names?
I have tried to reproduce the 10 seconds delay to no success.
With or without the expand-file-name called only on non absolute file names,
I now see emacs always using about 4 seconds of cpu to load the TAGS files.
So, at this point:
* I do not understand why we observed 3 different speed:
sub-second, 4 seconds and 10 seconds
* we now see that loading the TAGS files takes around 4 seconds, so is still a heavy
operation that maybe could be optimised but not clear anymore what is the
costly part.
Thanks
Philippe
____
This message and any files transmitted with it are legally privileged and intended for the sole use of the individual(s) or entity to whom they are addressed. If you are not the intended recipient, please notify the sender by reply and delete the message and any attachments from your system. Any unauthorised use or disclosure of the content of this message is strictly prohibited and may be unlawful.
Nothing in this e-mail message amounts to a contractual or legal commitment on the part of EUROCONTROL, unless it is confirmed by appropriately signed hard copy.
Any views expressed in this message are those of the sender.
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2022-05-26 20:45 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-25 16:04 bug#55636: 27.2; etags performance fix when working with very big TAGS files Jurgen De Backer via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-05-25 17:16 ` Eli Zaretskii
2022-05-25 20:42 ` VAN VLIERBERGHE Stef via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-05-26 5:07 ` Eli Zaretskii
2022-05-26 13:50 ` VAN VLIERBERGHE Stef via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-05-26 14:54 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-05-26 15:09 ` Eli Zaretskii
2022-05-26 17:25 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-05-26 19:10 ` Eli Zaretskii
2022-05-26 20:45 ` WAROQUIERS Philippe via Bug reports for GNU Emacs, the Swiss army knife of text editors
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).