TL;DR: Please install https://elpa.gnu.org/packages/emacs-gc-stats.html and send the generated statistics via email to [email protected] after several weeks.
UPDATE: New version 1.3. Added more control over what data is collected (can now disable command name logging); Added reminder functionality.
Many of us know that Emacs defaults for garbage collection are rather ancient and often cause significant slowdowns. However, it is hard to know which alternative defaults will be better.
Emacs devs need help from users to obtain real-world data about Emacs garbage collection. See the discussion in https://yhetil.org/emacs-devel/87v8j6t3i9.fsf@localhost/
I wrote a small package https://elpa.gnu.org/packages/emacs-gc-stats.html that will collect garbage collection stats during Emacs sessions. Please, install it and later (after few weeks) submit the results to [email protected]
Usage:
Add
(require 'emacs-gc-stats)
;; Optionally reset Emacs GC settings to default values (recommended)
(setq emacs-gc-stats-gc-defaults 'emacs-defaults)
;; Optionally set reminder to upload the stats after 3 weeks.
(setq emacs-gc-stats-remind t) ; can also be a number of days
;; Optionally disable logging the command names
;; (setq emacs-gc-stats-inhibit-command-name-logging t)
(emacs-gc-stats-mode +1)
to your init file to enable the statistics acquiring.
When you are ready to share the results, run M-x emacs-gc-stats-save-session
and then share the saved emacs-gc-stats-file
(defaults to
~/.emacs.d/emacs-gc-stats.eld
) by sending an email attachment to
mailto:[email protected].
Configure emacs-gc-stats-remind
to make Emacs display a reminder about
sharing the results.
This package does not upload anything automatically. You will need to
upload the data manually, by sending email attachment. If necessary,
you can review emacs-gc-stats-file
(defaults to
~/.emacs.d/emacs-gc-stats.eld
) before uploading–it is just a text
file.
The following data is being collected after every command:
- GC settings
gc-cons-threshold
andgc-cons-percentage
- Emacs version and whether Emacs framework (Doom, Prelude, etc) is used
- Whether
gcmh-mode
is used - Idle time and Emacs uptime
- Available OS memory (see
memory-info
) - Emacs memory allocation/GC stats
- Current command name (potentially sensitive data, can be disabled)
- Timestamp when every GC is finished
Logging the command names can be disabled by setting
emacs-gc-stats-inhibit-command-name-logging
customization.
What exactly is being logger is controlled by
emacs-gc-stats-setting-vars
, emacs-gc-stats-command-vars
, and
emacs-gc-stats-summary-vars
.
You can use M-x emacs-gc-stats-clear
to clear the currently collected
session data.
You can pause the logging any time by disabling emacs-gc-stats-mode
(M-x emacs-gc-stats-mode
).
Just here to say as an unproud American that the vigor and strength and TRUTH with which you are speaking is exactly what is missing here. If it doesn't affect them, they are willing to look past it, and the country is corroded and corrupted because of it. People like you give Earth the chance to be a great place