Martin Vogel
3eeefa2d2a
perf(sha256): compress blocks on ARMv8 SHA2 / x86 SHA-NI ( #2441 )
...
Every process start fingerprints its own executable for the daemon build
identity, and the hook path pays for that before it can answer. With the
portable transform that was ~1.2 s of CPU for the ~300 MB binary, so on a
slower machine hook-augment hit its 2000 ms deadline and printed nothing
(#2441 ).
Two changes in src/foundation/sha256.c:
- cbm_sha256_update compresses whole blocks straight from the input instead
of copying every byte through the context buffer.
- Block compression runs on the CPU's SHA-256 instructions when it has them:
ARMv8 SHA2 (sysctl on macOS, HWCAP on Linux, IsProcessorFeaturePresent on
Windows) or x86 SHA-NI (CPUID). The backend is probed once; the portable
transform stays the fallback.
Measured on an Apple arm64 Mac (macOS 26.6), release builds of main 72a2c0bc
and of this change, hook-augment SessionStart in fresh isolated dirs, 9
interleaved runs, medians:
- hook-augment: wall 1.448 s -> 0.376 s, user CPU 1.162 s -> 0.097 s
- SHA-256 of the 303 MB binary: 1.18 s -> 0.095 s CPU per pass (the
block-direct update alone, portable rounds: 0.74 s)
- with CBM_HOOK_DEADLINE_MS=1000 (a slower machine): before, exit 0 with
empty stdout after 1.01 s; after, the full 188-byte answer in 0.37 s
Digests are unchanged: the build id the new binary logs equals the file's
SHA-256, and the hook output is byte-identical. A new test compares the
hardware and portable backends at every length 0..299 and at block-boundary
sizes up to 1 MiB under eight update chunkings, plus the NIST million-'a'
vector; it fails if the ARM schedule is broken or if Apple arm64 falls back
to portable. The x86 path was checked under qemu-x86_64 -cpu max (2,436
comparisons equal, million-'a' correct) and falls back to portable on a CPU
without SHA-NI. On a Windows arm64 VM the probe picks the hardware path:
0.094 s against 0.82 s portable for the 303 MB binary, digest equal to
sha256sum's.
Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com >
2026-10-09 20:00:44 +02:00
..
2026-10-03 23:55:18 +02:00
2026-09-18 23:27:23 +02:00
2026-10-07 18:19:35 +02:00
2026-09-05 06:05:27 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-06-05 21:53:25 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-09-05 06:05:08 +02:00
2026-07-13 01:50:03 +02:00
2026-03-15 22:37:34 +01:00
2026-09-12 16:50:42 +02:00
2026-08-11 13:37:32 +02:00
2026-09-28 00:30:10 +02:00
2026-09-04 21:45:24 +07:00
2026-09-18 03:31:22 +02:00
2026-10-01 19:59:02 +02:00
2026-06-29 09:45:28 -06:00
2026-07-22 17:48:20 +02:00
2026-10-03 18:25:03 +02:00
2026-07-18 15:52:50 +02:00
2026-10-01 00:10:39 +02:00
2026-10-09 20:00:44 +02:00
2026-10-01 19:19:26 +02:00
2026-10-06 02:44:56 +02:00
2026-09-11 23:26:33 +02:00
2026-09-08 02:04:51 +02:00
2026-10-04 16:22:57 +02:00
2026-09-25 22:56:39 +02:00
2026-08-06 08:24:23 -04:00
2026-08-04 16:37:06 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-06 03:19:38 +02:00
2026-10-06 03:19:38 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-06-06 22:16:04 +02:00
2026-10-02 05:03:35 +02:00
2026-08-14 06:46:05 -04:00
2026-07-18 15:52:50 +02:00
2026-10-04 21:01:04 +02:00
2026-10-04 20:34:28 +02:00
2026-10-05 18:52:26 +02:00
2026-09-25 23:03:56 +02:00
2026-09-30 23:33:54 +02:00
2026-08-09 13:06:42 +02:00
2026-07-18 11:48:59 +02:00
2026-10-02 00:52:13 +02:00
2026-08-11 13:37:32 +02:00
2026-09-28 00:01:56 +02:00
2026-09-06 16:23:45 +02:00
2026-08-13 14:04:51 +02:00
2026-09-05 06:05:08 +02:00
2026-09-30 22:18:38 +02:00
2026-09-22 08:48:33 +02:00
2026-06-23 06:38:45 +09:00
2026-08-27 10:15:09 +02:00
2026-03-25 09:28:11 +01:00
2026-10-07 18:20:39 +02:00
2026-09-22 08:06:50 +02:00
2026-10-09 01:54:53 +02:00
2026-06-07 12:35:53 +02:00
2026-08-18 15:56:41 +08:00
2026-10-07 22:16:36 +02:00
2026-08-28 12:22:23 +03:00
2026-10-01 22:56:52 +02:00
2026-09-30 22:19:32 +02:00
2026-09-30 23:50:03 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-09-01 15:51:50 +08:00
2026-08-26 22:51:29 +02:00
2026-09-03 16:24:29 -04:00
2026-06-07 19:13:01 +02:00
2026-06-07 19:13:01 +02:00
2026-06-07 19:13:01 +02:00
2026-06-27 16:23:26 +02:00
2026-06-07 20:05:24 +02:00
2026-06-07 20:05:24 +02:00
2026-08-20 00:12:28 +02:00
2026-08-28 21:30:06 +02:00
2026-10-02 06:37:36 +02:00
2026-10-05 18:52:31 +02:00
2026-10-06 03:19:38 +02:00
2026-09-18 23:27:23 +02:00
2026-09-30 23:50:03 +02:00
2026-08-17 22:07:11 +03:00
2026-10-04 18:11:07 +02:00
2026-08-28 20:56:33 +02:00
2026-09-26 07:14:58 +02:00
2026-08-25 11:57:49 +03:00
2026-09-09 16:06:59 +08:00
2026-10-02 20:51:31 +02:00
2026-09-26 07:14:58 +02:00
2026-10-04 21:01:09 +02:00
2026-07-18 13:48:06 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-06 18:07:16 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-06 18:07:16 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-06-02 18:52:37 +02:00
2026-07-18 15:52:50 +02:00
2026-07-18 15:52:50 +02:00
2026-10-05 18:52:31 +02:00
2026-10-05 18:52:31 +02:00
2026-10-06 02:44:56 +02:00
2026-08-28 21:30:06 +02:00
2026-10-05 02:15:08 +02:00
2026-09-04 15:42:15 +02:00
2026-09-05 07:59:14 +02:00
2026-08-29 17:30:00 +02:00
2026-03-15 22:37:34 +01:00
2026-10-06 05:58:38 +02:00
2026-07-18 01:26:08 +02:00
2026-06-08 22:55:23 +02:00
2026-07-18 15:52:50 +02:00
2026-10-09 01:54:47 +02:00
2026-09-04 22:02:47 +02:00
2026-08-11 17:01:24 +02:00
2026-09-18 23:27:23 +02:00
2026-09-18 23:26:28 +02:00
2026-09-13 13:52:08 +03:00
2026-06-12 02:17:39 +02:00
2026-08-20 21:20:44 +02:00
2026-09-28 19:45:45 +02:00
2026-10-04 18:15:33 +02:00
2026-09-06 13:12:20 +08:00
2026-10-07 18:43:45 +02:00
2026-10-02 05:34:41 +02:00
2026-07-18 15:52:50 +02:00
2026-07-18 15:52:50 +02:00
2026-10-05 02:15:08 +02:00
2026-10-05 23:55:25 +02:00
2026-10-09 01:54:58 +02:00
2026-10-02 01:55:34 +02:00
2026-07-18 01:26:08 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-07-18 01:26:08 +02:00
2026-08-10 16:40:31 +02:00
2026-08-11 05:30:17 +02:00
2026-05-09 14:16:15 +02:00
2026-10-03 01:37:27 +02:00
2026-10-07 18:20:39 +02:00
2026-08-11 17:01:24 +02:00
2026-09-04 22:02:47 +02:00
2026-08-18 22:30:28 +02:00
2026-06-23 13:52:08 -03:00
2026-10-03 18:37:19 +02:00
2026-07-18 15:52:50 +02:00
2026-09-28 00:13:39 +02:00
2026-08-03 15:42:32 +02:00
2026-10-03 18:37:19 +02:00
2026-09-13 01:27:43 +02:00
2026-08-12 20:57:43 +02:00
2026-08-08 17:35:05 +02:00
2026-09-30 23:46:46 +02:00
2026-09-18 03:31:22 +02:00
2026-10-02 06:50:04 +02:00
2026-09-18 03:31:42 +02:00
2026-09-18 23:27:23 +02:00
2026-06-28 21:57:35 -06:00
2026-09-30 23:21:43 +02:00
2026-09-21 11:29:04 +03:00
2026-07-25 00:37:05 +02:00
2026-09-13 13:52:00 +03:00
2026-08-07 14:58:22 +02:00
2026-10-06 02:44:56 +02:00
2026-09-25 18:37:16 +02:00
2026-08-10 12:57:34 +01:00
2026-08-29 17:44:43 +02:00
2026-03-20 20:32:38 +01:00
2026-10-07 19:20:08 +02:00
2026-07-03 20:16:39 +02:00
2026-10-05 23:55:25 +02:00
2026-10-03 23:55:18 +02:00
2026-10-01 00:10:39 +02:00
2026-09-30 23:52:06 +02:00
2026-10-03 23:55:18 +02:00
2026-10-02 06:37:36 +02:00
2026-03-24 23:48:23 +01:00
2026-09-21 20:29:27 +02:00
2026-10-06 21:42:18 +02:00
2026-10-05 02:15:08 +02:00
2026-10-05 18:52:26 +02:00
2026-10-03 23:55:18 +02:00
2026-10-05 02:15:08 +02:00
2026-10-06 03:53:49 +02:00
2026-10-09 01:59:34 +02:00
2026-10-03 23:55:18 +02:00
2026-10-05 02:15:08 +02:00
2026-10-05 02:15:08 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-09-30 23:29:52 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-03 23:55:18 +02:00
2026-10-06 18:07:16 +02:00
2026-10-05 18:52:31 +02:00
2026-10-06 18:07:16 +02:00
2026-10-06 05:58:39 +02:00
2026-10-06 03:53:49 +02:00
2026-09-18 23:26:05 +02:00
2026-09-02 21:55:30 -04:00
2026-10-03 20:16:31 +02:00
2026-06-10 12:11:02 +02:00
2026-07-21 15:32:15 +02:00
2026-08-09 13:06:42 +02:00
2026-10-03 23:55:18 +02:00
2026-08-08 17:35:05 +02:00
2026-10-07 18:20:52 +02:00
2026-09-04 09:41:30 +02:00
2026-10-03 18:37:19 +02:00
2026-10-03 23:55:18 +02:00
2026-10-06 03:36:33 +02:00
2026-10-06 03:36:33 +02:00
2026-08-08 17:35:05 +02:00
2026-06-05 21:53:25 +02:00
2026-08-14 00:21:31 +02:00
2026-08-14 04:40:07 +02:00
2026-08-14 12:48:40 +02:00
2026-10-03 18:37:19 +02:00
2026-10-04 18:51:12 +02:00
2026-09-12 16:21:30 +02:00
2026-10-03 23:55:18 +02:00
2026-09-09 16:06:59 +08:00
2026-06-06 19:48:48 +02:00
2026-09-20 21:40:37 +02:00
2026-09-09 16:06:59 +08:00
2026-10-04 19:08:28 +02:00
2026-03-24 23:48:23 +01:00
2026-04-15 23:56:03 +02:00