-
Type: Task
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: None
-
Storage Engines
-
8
-
NachoCheese - 2023-10-03, Joker - StorEng - 2023-10-17, Asparagus-StorEng - 2023-10-31, c(3x10^8)-StorEng - 2023-11-14, 2023-11-28 - Anthill Tiger, 2023-12-12 - Heisenbug, 2024-01-09 - I Grew Tired, StorEng - 2024-01-23, 2024-02-06 tapioooooooooooooca
__txn_logrec_init and __wt_txn_log_op functions write packed integers. They use the packing API in src/include/packing_inline.h to do this. The packing API is a very powerful, general serialization API that allows callers to serialize a set of types as a compact binary formation. For instance, "IIIuu" means serialize three unsigned integers and two WT_ITEMs.
Unfortunately, this general API has a lot of overhead that can mitigated by special casing the code instead. Rather then code calling __wt_struct_size/__wt_struct_pack, WT logging code should call the __wt_vsize_uint/__wt_vpackuint functions directly. In micro benchmarks, this results in a ~20x perf improvement. See PERF-4608.
- A definition of done,
Change dist/log.py to generate code that bypasses __wt_struct_size/__wt_struct_pack and calls __wt_vsize_uint/__wt_vpackuint directly.
- The reproducing steps, and
https://github.com/mongodb/mongo/compare/master...markbenvenuto:mongo:sep_bm_wt_pack?expand=1
- Links to other relevant tickets/resources.
PERF-4608
- causes
-
WT-12382 __pack_encode_WT_ITEM fails on ASAN builds
- Closed
- is related to
-
WT-12385 Add tests for logop packing and unpacking routines.
- Open
-
WT-12386 Review remaining uses of structure packing and replace them with direct calls.
- Backlog
- related to
-
WT-12337 Review and fix WT_ASSERTs in packing_inline.h
- Backlog