-
Notifications
You must be signed in to change notification settings - Fork 55
Open
Labels
enhancementNew feature or requestNew feature or request
Description
The problem/use-case that the feature addresses
Use a sharded locking structure instead of a single global lock.
There is a major bottle neck in fulltext (maybe even non vector queries) where the allocations from reader/writer threads are stuck waiting on the single global bottle neck. Depending on the workload, 30%-40% of time is just spent here.
An idea for reducing this bottle neck is to move from a single lock + hashset to a sharded system where have multiple ((e.g. 64 or 128)) such structures that track pointers and have their own individual locks
Example:
Samples: 423K of event 'task-clock:ppp', 4000 Hz, Event count (approx.): 72318823208 lost: 0/0 drop: 0/118909
Overhead Shared Object Symbol
34.91% libsearch.so [.] absl::lts_20240722::Mutex::Lock() ◆
9.17% libsearch.so [.] valkey_search::indexes::text::RadixTree<valkey_search::indexes::text::InvasivePtr<valkey_search::index▒
8.33% libsearch.so [.] vmsdk::ReportFreeMemorySize(unsigned long) ▒
7.27% libsearch.so [.] vmsdk::ReportAllocMemorySize(unsigned long) ▒
6.65% libsearch.so [.] __wrap_free ▒
5.22% libsearch.so [.] absl::lts_20240722::Mutex::Unlock() ▒
3.05% libsearch.so [.] valkey_search::indexes::text::Postings::KeyIterator::ContainsFields(unsigned long) const ▒
2.57% [kernel] [k] 0xffffffff94cec011 ▒
1.90% libsearch.so [.] valkey_search::indexes::PrefilterEvaluator::EvaluateText(valkey_search::query::TextPredicate const&, b▒
1.70% libstdc++.so.6.0.33 [.] std::_Rb_tree_increment(std::_Rb_tree_node_base const*) ▒
1.42% libsearch.so [.] absl::lts_20240722::Mutex::LockSlowLoop(absl::lts_20240722::SynchWaitParams*, int) ▒
1.36% valkey-server [.] VM_Alloc ▒
1.13% valkey-server [.] valkey_free ▒
0.92% libc.so.6 [.] syscall ▒
0.86% libsearch.so [.] absl::lts_20240722::Mutex::UnlockSlow(absl::lts_20240722::SynchWaitParams*) ▒
0.80% libsearch.so [.] valkey_search::query::TermPredicate::Evaluate(valkey_search::indexes::text::TextIndex const&, valkey_s▒
0.75% [kernel] [k] 0xffffffff93bd7ddd ▒
0.75% libsearch.so [.] valkey_search::indexes::text::TermIterator::FindMinimumValidKey() ▒
0.70% valkey-server [.] je_malloc_usable_size ▒
0.68% libsearch.so [.] valkey_search::query::TermPredicate::GetTextIndexSchema() const ▒
0.57% libsearch.so [.] valkey_search::indexes::text::Postings::KeyIterator::SkipForwardKey(valkey_search::InternedStringPtr c▒
0.53% libsearch.so [.] std::deque<valkey_search::indexes::Neighbor, std::allocator<valkey_search::indexes::Neighbor> >::_M_de▒
0.53% [kernel] [k] 0xffffffff93bd7df6 ▒
0.29% [kernel] [k] 0xffffffff94cd60d5 ▒
0.26% libsearch.so [.] absl::lts_20240722::Enqueue(absl::lts_20240722::base_internal::PerThreadSynch*, absl::lts_20240722::Sy▒
0.23% libsearch.so [.] absl::lts_20240722::synchronization_internal::FutexWaiter::Wait(absl::lts_20240722::synchronization_in▒
0.23% [kernel] [k] 0xffffffff93cc1f53 ▒
0.22% libsearch.so [.] absl::lts_20240722::synchronization_internal::FutexWaiter::Post()
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request