detached b4521f0

Merge pull request 'docs(readme): pin benchmark table to v0.1.2' (#5) from docs/bench-v0.1.2 into main

Reviewed-on: https://git.bnema.dev/bnema/kvconf/pulls/5
commit
b4521f092efc56e726f11707d0c298e373e26242
author
bnema · · 2026-10-10 07:34 UTC
merge of
1e7884d + abb6a3f · diff against the first parent
signature
SSH UnverifiedSHA256:VOCA5lYARHcbKDZ7GhTV45VmcjWnJ6ZQIBazj17LivA The key is unknown
refs
main
1 file · +9 -9
M README.md +9 -9
@@ -21,7 +21,7 @@ output.DP-1.scale = 1.5
2121 - **Safe for real configs**: atomic saves, symlinked dotfiles, editors that
2222 save by rename, missing directories, broken files that keep the last good
2323 config, and warnings that never print values (they may be secrets).
24-- **Fast**: about 750 MB/s to parse, 2 allocations per reported change
24+- **Fast**: about 1 GB/s to parse, 2 allocations per reported change
2525 (see [Performance](#performance)).
2626
2727 ```sh
@@ -110,23 +110,23 @@ skips saves that change no value.
110110
111111 ## Performance
112112
113-Measured at `v0.1.1` (`ebc8127`, 2026-10-10) with Go 1.27.1 on linux/amd64
114-with an AMD Ryzen 9 7900X3D. Values are medians of 6 runs. The input is a
113+Measured at `v0.1.2` (`1e7884d`, 2026-10-10) with Go 1.27.1 on linux/amd64
114+with an AMD Ryzen 9 7900X3D. Values are medians of 10 runs. The input is a
115115 realistic ~2.9 KB config of 100 lines with comments, 60 binds and 8 outputs.
116116
117117 | Benchmark | Time/op | Throughput | Bytes/op | Allocs/op |
118118 |---|---:|---:|---:|---:|
119-| `Parse` (file to entries) | 3.9 µs | 744 MB/s | 10.4 KiB | 5 |
120-| `Unmarshal` (file to struct, maps included) | 12.2 µs | 238 MB/s | 21.7 KiB | 47 |
121-| `Decode` (5 scalar entries) | 171 ns | | 112 B | 1 |
122-| `Marshal` (struct to file) | 11.6 µs | | 15.5 KiB | 19 |
123-| `Set` (edit one key in place) | 2.5 µs | | 10.5 KiB | 5 |
119+| `Parse` (file to entries) | 2.9 µs | 992 MB/s | 7.0 KiB | 2 |
120+| `Unmarshal` (file to struct, maps included) | 8.3 µs | 351 MB/s | 13.4 KiB | 16 |
121+| `Decode` (5 scalar entries) | 173 ns | | 112 B | 1 |
122+| `Marshal` (struct to file) | 8.6 µs | | 6.8 KiB | 10 |
123+| `Set` (edit one key in place) | 2.6 µs | | 10.5 KiB | 5 |
124124 | `Watch` (one write to one report, inotify) | 5.3 µs | | 256 B | 2 |
125125
126126 Reproduce with:
127127
128128 ```sh
129-go test -run '^$' -bench . -benchmem -count 6 .
129+go test -run '^$' -bench . -benchmem -count 10 .
130130 ```
131131
132132 ## License
@@ -21,7 +21,7 @@ output.DP-1.scale = 1.5
21 - **Safe for real configs**: atomic saves, symlinked dotfiles, editors that21 - **Safe for real configs**: atomic saves, symlinked dotfiles, editors that
22 save by rename, missing directories, broken files that keep the last good22 save by rename, missing directories, broken files that keep the last good
23 config, and warnings that never print values (they may be secrets).23 config, and warnings that never print values (they may be secrets).
24-- **Fast**: about 750 MB/s to parse, 2 allocations per reported change24+- **Fast**: about 1 GB/s to parse, 2 allocations per reported change
25 (see [Performance](#performance)).25 (see [Performance](#performance)).
26 26
27 ```sh27 ```sh
@@ -110,23 +110,23 @@ skips saves that change no value.
110 110
111 ## Performance111 ## Performance
112 112
113-Measured at `v0.1.1` (`ebc8127`, 2026-10-10) with Go 1.27.1 on linux/amd64113+Measured at `v0.1.2` (`1e7884d`, 2026-10-10) with Go 1.27.1 on linux/amd64
114-with an AMD Ryzen 9 7900X3D. Values are medians of 6 runs. The input is a114+with an AMD Ryzen 9 7900X3D. Values are medians of 10 runs. The input is a
115 realistic ~2.9 KB config of 100 lines with comments, 60 binds and 8 outputs.115 realistic ~2.9 KB config of 100 lines with comments, 60 binds and 8 outputs.
116 116
117 | Benchmark | Time/op | Throughput | Bytes/op | Allocs/op |117 | Benchmark | Time/op | Throughput | Bytes/op | Allocs/op |
118 |---|---:|---:|---:|---:|118 |---|---:|---:|---:|---:|
119-| `Parse` (file to entries) | 3.9 µs | 744 MB/s | 10.4 KiB | 5 |119+| `Parse` (file to entries) | 2.9 µs | 992 MB/s | 7.0 KiB | 2 |
120-| `Unmarshal` (file to struct, maps included) | 12.2 µs | 238 MB/s | 21.7 KiB | 47 |120+| `Unmarshal` (file to struct, maps included) | 8.3 µs | 351 MB/s | 13.4 KiB | 16 |
121-| `Decode` (5 scalar entries) | 171 ns | | 112 B | 1 |121+| `Decode` (5 scalar entries) | 173 ns | | 112 B | 1 |
122-| `Marshal` (struct to file) | 11.6 µs | | 15.5 KiB | 19 |122+| `Marshal` (struct to file) | 8.6 µs | | 6.8 KiB | 10 |
123-| `Set` (edit one key in place) | 2.5 µs | | 10.5 KiB | 5 |123+| `Set` (edit one key in place) | 2.6 µs | | 10.5 KiB | 5 |
124 | `Watch` (one write to one report, inotify) | 5.3 µs | | 256 B | 2 |124 | `Watch` (one write to one report, inotify) | 5.3 µs | | 256 B | 2 |
125 125
126 Reproduce with:126 Reproduce with:
127 127
128 ```sh128 ```sh
129-go test -run '^$' -bench . -benchmem -count 6 .129+go test -run '^$' -bench . -benchmem -count 10 .
130 ```130 ```
131 131
132 ## License132 ## License

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 3

↑↓ moveenter openesc close