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