Effect of removing pool PMR allocators - laurynas-biveinis/unodb GitHub Wiki

Take 1: replace with new_delete_resource

baseline commit, patch

unodb::db:

  • micro_benchmark_key_prefix: 22% speedup (unpredictable_prepend_key_prefix) to 11% slowdown (unpredictable_cut_key_prefix)
  • micro_benchmark_n4: 16% speedup (minimal_n4_sequential_insert<unodb::db>/255) to 65% slowdown (shrink_node16_to_n4_randomly<unodb::db>/16383)
  • micro_benchmark_n16: 6% speedup (shrink_n48_to_n16_sequentially<unodb::db>/4) to 79% slowdown (shrink_n48_to_n16_sequentially<unodb::db>/16383)
  • micro_benchmark_n48: 18% speedup (n48_sequential_add<unodb::db>/4096) to 163% slowdown (grow_n16_to_n48_sequentially<unodb::db>/4096)
  • micro_benchmark_n256: 5% speedup (grow_n48_to_n256_sequentially<unodb::db>/8) to 205% slowdown (grow_n48_to_n256_sequentially<unodb::db>/64)

unodb::olc_db:

  • micro_benchmark_key_prefix: 7% speedup (unpredictable_cut_key_prefix) to 2% slowdown (unpredictable_get_shared_length)
  • micro_benchmark_n4: 12% speedup (shrink_node16_to_n4_sequentially<unodb::olc_db>/64) to 30% slowdown (shrink_node16_to_n4_randomly<unodb::olc_db>/16383)
  • micro_benchmark_n16: 15% speedup (grow_n4_to_n16_sequentially<unodb::olc_db>/64) to 33% slowdown (shrink_n48_to_n16_randomly<unodb::olc_db>/16383)
  • micro_benchmark_n48: 11% speedup (grow_n16_to_n48_sequentially<unodb::olc_db>/8) to 64% slowdown (grow_n16_to_n48_sequentially<unodb::olc_db>/8192)
  • micro_benchmark_n256: 6% speedup (grow_n48_to_n256_sequentially<unodb::olc_db>/2) to 125% slowdown (grow_n48_to_n256_sequentially<unodb::olc_db>/2048)

Take 2: remove PMR completely

baseline commit, patch, jemalloc LD_PRELOAD'ed

unodb::db:

  • micro_benchmark_key_prefix: 23% speedup (unpredictable_prepend_key_prefix) to 2% slowdown (unpredictable_cut_key_prefix)
  • micro_benchmark_n4: 9% speedup (full_n4_sequential_insert<unodb::db>/100) to 8% slowdown (full_n4_sequential_delete<unodb::db>/4096)
  • micro_benchmark_n16: 12% speedup (grow_n4_to_n16_randomly<unodb::db>/20) to 21% slowdown (grow_n4_to_n16_sequentially<unodb::db>/4096)
  • micro_benchmark_n48: 11% speedup (shrink_n256_to_n48_sequentially<unodb::db>/8) to 31% slowdown (grow_n16_to_n48_randomly<unodb::db>/4096)
  • micro_benchmark_n256: 11% speedup (full_n256_tree_sequential_delete<unodb::db>/192) to 41% slowdown (grow_n48_to_n256_sequentially<unodb::db>/512)

Single-threaded unodb::olc_db:

  • micro_benchmark_key_prefix: 12% speedup (unpredictable_leaf_key_prefix_split) to 0% slowdown (unpredictable_get_shared_length)
  • micro_benchmark_n4: 21% speedup (shrink_node16_to_n4_sequentially<unodb::olc_db>/64) to 1% slowdown (n4_random_gets<unodb::olc_db>/100)
  • micro_benchmark_n16: 16% speedup (grow_n4_to_n16_randomly<unodb::olc_db>/64) to 9% slowdown (grow_n4_to_n16_randomly<unodb::olc_db>/4096)
  • micro_benchmark_n48: 21% speedup (grow_n16_to_n48_randomly<unodb::olc_db>/8) to 4% slowdown (grow_n16_to_n48_randomly<unodb::olc_db>/8192)
  • micro_benchmark_n256: 14% speedup (grow_n48_to_n256_sequentially<unodb::olc_db>/8) to 18% slowdown (grow_n48_to_n256_sequentially<unodb::olc_db>/2048)

Multi-threaded unodb::olc_db:

  • parallel_get: 17% speedup (parallel_get/4/2000000) to 3% slowdown (parallel_get/2/70000)
  • parallel_insert_disjoint_ranges: 58% speedup (parallel_insert_disjoint_ranges/32/70000) to 0% (parallel_insert_disjoint_ranges/1/2000000)
  • parallel_delete_disjoint_ranges: 75% speedup (parallel_delete_disjoint_ranges/32/70000) to 10% slowdown (parallel_delete_disjoint_ranges/1/2000000)
⚠️ **GitHub.com Fallback** ⚠️