diff options
| author | eunhhu <[email protected]> | 2026-09-25 09:33:43 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-09-25 09:33:43 +0100 |
| commit | 6a28879bd56354483fe940c0c80d511eccb89983 (patch) | |
| tree | ed919d234ea2dbe8099e53fae51e495d8bee984e /research/experiments/008-tree-store-edit-cost/2026-09-25-ext4-linux-aarch64.json | |
| parent | 8a65fd032e6f74938caf84d6f6fcda6314e76a01 (diff) | |
| download | pure-6a28879bd56354483fe940c0c80d511eccb89983.tar.gz pure-6a28879bd56354483fe940c0c80d511eccb89983.zip | |
Add selected single-file persistent tree store
store-tree.c keeps every document in one append-only file as a persistent
B-tree of byte extents, with the key catalog in the same structure. A splice
writes only the changed leaf and path; unchanged extents are shared between
versions, readers take no lock, and two alternating head slots publish a
commit after its nodes are durable. Compaction rewrites reachable nodes.
On the recorded ext4 host a durable 1-byte middle insert into a 1 MiB
document took 8.58 ms against 78.51 ms for the default store, and the real
TUI's Ctrl+S after typing took 16.60 ms against 84.59 ms. check-tree runs the
store's crash/oracle tests and the unchanged runtime, splice, async and
real-PTY editor checks on it. It stays opt-in: linked code is 12.7 KB larger
and contiguous multi-leaf reads copy.
Diffstat (limited to 'research/experiments/008-tree-store-edit-cost/2026-09-25-ext4-linux-aarch64.json')
| -rw-r--r-- | research/experiments/008-tree-store-edit-cost/2026-09-25-ext4-linux-aarch64.json | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/research/experiments/008-tree-store-edit-cost/2026-09-25-ext4-linux-aarch64.json b/research/experiments/008-tree-store-edit-cost/2026-09-25-ext4-linux-aarch64.json new file mode 100644 index 0000000..708346f --- /dev/null +++ b/research/experiments/008-tree-store-edit-cost/2026-09-25-ext4-linux-aarch64.json @@ -0,0 +1,346 @@ +{ + "device": "/dev/mmcblk0p2", + "filesystem": "ext4", + "machine": "aarch64", + "kernel": "6.18.39+rpt-rpi-2712", + "compiler": "cc (Debian 14.2.0-19) 14.2.0", + "edits_per_scenario": 32, + "results": [ + { + "store": "flat", + "op": "insert-middle", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 9.305, + "edit_p90_ms": 20.037, + "edit_max_ms": 154.578, + "write_call_bytes_per_edit": 296, + "device_write_bytes_per_edit": 16384, + "store_file_bytes_after": 312, + "whole_read_median_ms": 0.008, + "read_checksum": 7776 + }, + { + "store": "paged", + "op": "insert-middle", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 8.463, + "edit_p90_ms": 11.859, + "edit_max_ms": 64.024, + "write_call_bytes_per_edit": 296, + "device_write_bytes_per_edit": 16384, + "store_file_bytes_after": 312, + "whole_read_median_ms": 0.01, + "read_checksum": 7776 + }, + { + "store": "tree", + "op": "insert-middle", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 8.343, + "edit_p90_ms": 11.553, + "edit_max_ms": 65.974, + "write_call_bytes_per_edit": 432, + "device_write_bytes_per_edit": 32768, + "store_file_bytes_after": 12272, + "whole_read_median_ms": 0.011, + "read_checksum": 7776 + }, + { + "store": "flat", + "op": "delete-middle", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 8.506, + "edit_p90_ms": 10.021, + "edit_max_ms": 65.646, + "write_call_bytes_per_edit": 263, + "device_write_bytes_per_edit": 16384, + "store_file_bytes_after": 248, + "whole_read_median_ms": 0.008, + "read_checksum": 6720 + }, + { + "store": "paged", + "op": "delete-middle", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 8.344, + "edit_p90_ms": 9.873, + "edit_max_ms": 65.228, + "write_call_bytes_per_edit": 263, + "device_write_bytes_per_edit": 16384, + "store_file_bytes_after": 248, + "whole_read_median_ms": 0.01, + "read_checksum": 6720 + }, + { + "store": "tree", + "op": "delete-middle", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 6.933, + "edit_p90_ms": 10.713, + "edit_max_ms": 11.529, + "write_call_bytes_per_edit": 399, + "device_write_bytes_per_edit": 32768, + "store_file_bytes_after": 11216, + "whole_read_median_ms": 0.011, + "read_checksum": 6720 + }, + { + "store": "flat", + "op": "replace-end", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 8.321, + "edit_p90_ms": 9.878, + "edit_max_ms": 27.943, + "write_call_bytes_per_edit": 280, + "device_write_bytes_per_edit": 16384, + "store_file_bytes_after": 280, + "whole_read_median_ms": 0.008, + "read_checksum": 6944 + }, + { + "store": "paged", + "op": "replace-end", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 8.409, + "edit_p90_ms": 9.723, + "edit_max_ms": 62.134, + "write_call_bytes_per_edit": 280, + "device_write_bytes_per_edit": 16384, + "store_file_bytes_after": 280, + "whole_read_median_ms": 0.01, + "read_checksum": 6944 + }, + { + "store": "tree", + "op": "replace-end", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 9.141, + "edit_p90_ms": 16.762, + "edit_max_ms": 62.869, + "write_call_bytes_per_edit": 416, + "device_write_bytes_per_edit": 32768, + "store_file_bytes_after": 11744, + "whole_read_median_ms": 0.011, + "read_checksum": 6944 + }, + { + "store": "flat", + "op": "append-end", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 9.068, + "edit_p90_ms": 10.062, + "edit_max_ms": 62.784, + "write_call_bytes_per_edit": 296, + "device_write_bytes_per_edit": 16384, + "store_file_bytes_after": 312, + "whole_read_median_ms": 0.012, + "read_checksum": 7984 + }, + { + "store": "paged", + "op": "append-end", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 8.613, + "edit_p90_ms": 10.037, + "edit_max_ms": 59.767, + "write_call_bytes_per_edit": 296, + "device_write_bytes_per_edit": 16384, + "store_file_bytes_after": 312, + "whole_read_median_ms": 0.015, + "read_checksum": 7984 + }, + { + "store": "tree", + "op": "append-end", + "document_bytes": 256, + "edits": 32, + "edit_median_ms": 6.468, + "edit_p90_ms": 11.041, + "edit_max_ms": 61.441, + "write_call_bytes_per_edit": 432, + "device_write_bytes_per_edit": 32768, + "store_file_bytes_after": 12272, + "whole_read_median_ms": 0.017, + "read_checksum": 7984 + }, + { + "store": "flat", + "op": "insert-middle", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 78.508, + "edit_p90_ms": 82.768, + "edit_max_ms": 83.984, + "write_call_bytes_per_edit": 1048616, + "device_write_bytes_per_edit": 1064960, + "store_file_bytes_after": 1048632, + "whole_read_median_ms": 0.102, + "read_checksum": 28574496 + }, + { + "store": "paged", + "op": "insert-middle", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 86.573, + "edit_p90_ms": 103.801, + "edit_max_ms": 108.102, + "write_call_bytes_per_edit": 1065528, + "device_write_bytes_per_edit": 1081344, + "store_file_bytes_after": 1065528, + "whole_read_median_ms": 0.07, + "read_checksum": 28574496 + }, + { + "store": "tree", + "op": "insert-middle", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 8.58, + "edit_p90_ms": 16.685, + "edit_max_ms": 64.33, + "write_call_bytes_per_edit": 2732, + "device_write_bytes_per_edit": 35328, + "store_file_bytes_after": 1138480, + "whole_read_median_ms": 0.262, + "read_checksum": 28574496 + }, + { + "store": "flat", + "op": "delete-middle", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 78.755, + "edit_p90_ms": 81.697, + "edit_max_ms": 86.715, + "write_call_bytes_per_edit": 1048583, + "device_write_bytes_per_edit": 1060352, + "store_file_bytes_after": 1048568, + "whole_read_median_ms": 0.065, + "read_checksum": 28573440 + }, + { + "store": "paged", + "op": "delete-middle", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 85.293, + "edit_p90_ms": 93.573, + "edit_max_ms": 108.718, + "write_call_bytes_per_edit": 1049136, + "device_write_bytes_per_edit": 1064960, + "store_file_bytes_after": 1049136, + "whole_read_median_ms": 0.077, + "read_checksum": 28573440 + }, + { + "store": "tree", + "op": "delete-middle", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 8.512, + "edit_p90_ms": 11.869, + "edit_max_ms": 14.455, + "write_call_bytes_per_edit": 4907, + "device_write_bytes_per_edit": 37376, + "store_file_bytes_after": 1208072, + "whole_read_median_ms": 0.229, + "read_checksum": 28573440 + }, + { + "store": "flat", + "op": "replace-end", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 79.202, + "edit_p90_ms": 86.6, + "edit_max_ms": 90.952, + "write_call_bytes_per_edit": 1048600, + "device_write_bytes_per_edit": 1064960, + "store_file_bytes_after": 1048600, + "whole_read_median_ms": 0.063, + "read_checksum": 28573664 + }, + { + "store": "paged", + "op": "replace-end", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 13.959, + "edit_p90_ms": 23.871, + "edit_max_ms": 69.901, + "write_call_bytes_per_edit": 16944, + "device_write_bytes_per_edit": 32768, + "store_file_bytes_after": 1573424, + "whole_read_median_ms": 0.074, + "read_checksum": 28573664 + }, + { + "store": "tree", + "op": "replace-end", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 6.488, + "edit_p90_ms": 8.209, + "edit_max_ms": 60.301, + "write_call_bytes_per_edit": 4912, + "device_write_bytes_per_edit": 37376, + "store_file_bytes_after": 1208232, + "whole_read_median_ms": 0.37, + "read_checksum": 28573664 + }, + { + "store": "flat", + "op": "append-end", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 77.885, + "edit_p90_ms": 86.005, + "edit_max_ms": 89.824, + "write_call_bytes_per_edit": 1048616, + "device_write_bytes_per_edit": 1064960, + "store_file_bytes_after": 1048632, + "whole_read_median_ms": 0.062, + "read_checksum": 28574704 + }, + { + "store": "paged", + "op": "append-end", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 86.039, + "edit_p90_ms": 102.765, + "edit_max_ms": 121.611, + "write_call_bytes_per_edit": 1065528, + "device_write_bytes_per_edit": 1081344, + "store_file_bytes_after": 1065528, + "whole_read_median_ms": 0.07, + "read_checksum": 28574704 + }, + { + "store": "tree", + "op": "append-end", + "document_bytes": 1048576, + "edits": 32, + "edit_median_ms": 8.473, + "edit_p90_ms": 11.691, + "edit_max_ms": 60.672, + "write_call_bytes_per_edit": 2716, + "device_write_bytes_per_edit": 35328, + "store_file_bytes_after": 1137960, + "whole_read_median_ms": 0.225, + "read_checksum": 28574704 + } + ] +} |
