GNU Emacs 19.28, 21.2 and 22.3 on OpenVMS VAX 7.3: speed measurements
=====================================================================

The raw data behind the post "How fast is Emacs on a VAX?" at
https://symbolics.lisp.engineer/vax-emacs-speed/ -- every timed run of
the three Emacs versions in the binary kit of 11-OCT-2026
(emacs-19.28-21.2-22.3-openvms-vax-binary-kit-20261011.zip) on five
VAXstations and a simulator, measured 10 to 13 October 2026.

Douglas P. Fields, Jr. <symbolics@lisp.engineer>, with Claude Code
(Anthropic's Claude models), which wrote and ran the benchmark and
collected these files. Licensed under the Apache License, Version 2.0,
like the rest of the project's tooling.


1. Files
--------

  README.TXT              this file
  matrix-20261013.csv     the summary: one line per action, machine and
                          version, with the median, minimum, maximum and
                          number of runs, and the raw file it came from
  raw/*.csv               every run, one file per machine and session


2. The machines
---------------

  name in    role in          machine                              memory
  the post   the raw files
  ---------  ---------------  -----------------------------------  ------
  4000/96    HW_BUILD         VAXstation 4000/96, KA49-A, 100 MHz  128 MB
  4000/90    HW_VAX90         VAXstation 4000/90, KA49-A, 71 MHz   128 MB
  4000/60    HW_INSTALL       VAXstation 4000/60                    80 MB
  4000 VLC   HW_VLC           VAXstation 4000 VLC, KA48-A          24 MB
  3100 M38   HW_M38           VAXstation 3100 M38, KA42-B          32 MB
  simulator  SIM              Open SIMH (simulated VAX)            128 MB

All run OpenVMS VAX 7.3. The 4000/96's and 4000/60's memory was read on
13-OCT-2026 (SHOW MEMORY/PHYSICAL_PAGES) after matrix-20261013.csv was
made, so that file's "memory MB" column says "not recorded" for them.

  raw file                      machine    measured     runs per version
  ----------------------------  ---------  -----------  ----------------
  SIM-20261010-r19-m128.csv     simulator  10-OCT-2026  5
  HW_BUILD-20261010-r19.csv     4000/96    10-OCT-2026  5
  HW_VAX90-20261011-r19.csv     4000/90    11-OCT-2026  5
  HW_INSTALL-20261010-r19.csv   4000/60    10-OCT-2026  3
  HW_M38-20261012-r21.csv       3100 M38   12-OCT-2026  3 (19.28, 22.3)
  HW_M38-20261013-r23.csv       3100 M38   13-OCT-2026  3 (21.2)
  HW_VLC-20261013-r23.csv       4000 VLC   13-OCT-2026  3


3. How it was measured
----------------------

A Python program on a Linux machine logs in over telnet as an ordinary
user, starts Emacs on a VT-style terminal, sends the keys, and waits for
the screen to show the expected result.

* host_s: seconds from sending the key(s) to the first screen poll (every
  0.1 s) that shows the finished result. It includes the telnet round
  trip. For the batch steps (batch_start, byte_compile, gc_*), it is the
  VAX's own clock (F$TIME, 10 ms) around the command instead.
* cpu_s, pagefaults, dirio, bufio: the Emacs process's own counters
  (F$GETJPI CPUTIM, PAGEFLTS, DIRIO, BUFIO), the difference between before
  and after the step, read by a second login.
* virtpeak, wspeak: the Emacs process's peak virtual size and peak working
  set, in 512-byte pages (mem_* lines).

One block is one version and one run, with its own login; blocks
alternate the versions (19, 21, 22, 19, ...). 22.3's font lock is off, as
the kit ships it, except where an action says "font lock on".


4. Columns
----------

matrix-20261013.csv:

  action, machine, cpu, memory MB, version, median s, min, max, n,
  source CSV

raw/*.csv:

  role, op, version (19, 21 or 22), run, host_s, cpu_s, pagefaults,
  dirio, bufio, virtpeak, wspeak, notes

Lines with an empty run (state_start, state_end, disk_image, disk_dump)
describe the machine or the installed files, not a timing.


5. Actions in the summary, and their op in the raw files
--------------------------------------------------------

  emacs -batch, start and exit                    batch_start
  emacs -q, interactive start                     start_q
  start with site-start and .EMACS                start_init
  kept editor: first spawn                        kept_spawn
  kept editor: re-attach after C-z                kept_attach
  open the 320 KB file                            open_big
  20 pages of C-v                                 scroll20
  search (C-s, target near the end)               search
  save the big file                               save_big
  save a small file                               save_small
  first file-name completion (SYS$LOGIN:)         completion_first
  second completion                               completion_second
  dired of SYS$LOGIN: (font lock on)              dired_login
  dired of SYS$LOGIN:, as shipped                 dired_login_shipped
  dired of SYS$SYSTEM:, font lock on              dired_system
  dired of SYS$SYSTEM:, as shipped                dired_system_shipped
  M-x shell until the prompt                      shell_start
  DIRECTORY SYS$SYSTEM: in the shell              shell_directory
  M-! SHOW TIME alone                             shell_command
  M-! + M-x shell (sum, same run)                 shell_command + shell_start
  M-x compile, CC TWO.C                           compile
  byte-compile 250 defuns (batch)                 byte_compile
  one garbage collection                          gc_one
  open a C file in the flow (21.2, 22.3)          open_c

gc_one is (gc_n20 - gc_n0) / 20: 20 forced collections less none, in the
same batch Emacs. The other ops in the raw files (quit_*, kept_suspend,
kept_quit, end_big, scroll20_c*, start_q_completion, start_q_dired,
font_lock_default, mem_*) are timed or recorded steps that the summary
does not use.


6. Read with care
-----------------

* The SYS$LOGIN: completion and dired rows depend on how many files are
  in the user's login directory, which differed between machines (5 on
  the 3100 M38, 38 on the 4000 VLC, about 380 on the 4000/60, 596 on the
  4000/90, not recorded on the 4000/96 and the simulator). Do not compare
  them across machines.
* In 22.3, one garbage collection lands in whichever command crosses the
  threshold, and where that is depends on what the earlier steps
  allocated. M-! alone is therefore not comparable across machines; the
  M-! + M-x shell sum is.
* The simulator was measured before an update to Open SIMH on 12-OCT-2026.
  Compare it with the hardware only as an order of magnitude.
* The 3100 M38 has no MMS, but M-x compile of TWO.C is a real compile
  there too.
