Skip to content

Effect of removing is_full dispatch on add node path

Laurynas Biveinis edited this page May 14, 2021 · 13 revisions

Previously, the internal node add path dispatched twice: once for is_full call, then for add call. Avoid this by moving the node fullness check into add, and making it return whether the add was successful or the node was full.

Baseline commit, patch

Benchmarks filtered with (grow|add).*unodb::db, except for Node4 filtered with insert.*unodb::db.

  • micro_benchmark_node4: 4% slowdown (minimal_node4_sequential_insert<unodb::db>/16) to 3% speedup (full_node4_sequential_insert<unodb::db>/32768)
  • micro_benchmark_node16: 1% slowdown (grow_node4_to_node16_sequentially<unodb::db>/64) to 3% speedup (grow_node4_to_node16_randomly<unodb::db>/64)
  • micro_benchmark_node48: 1% slowdown (grow_node16_to_node48_randomly<unodb::db>/64) to 4% speedup (node48_random_add<unodb::db>/8)
  • micro_benchmark_node256: 4% slowdown (grow_node48_to_node256_randomly<unodb::db>/64) to 6% speedup (node256_sequential_add<unodb::db>/1)

Clone this wiki locally