mirror of
https://github.com/meilisearch/MeiliSearch
synced 2025-04-13 18:11:40 +02:00
Take the BBQueue capacity into account in the max memory
This commit is contained in:
parent
b57dd5c58e
commit
3c7ac093d3
@ -27,8 +27,9 @@ use crate::{CboRoaringBitmapCodec, DocumentId, Index};
|
|||||||
/// Creates a tuple of senders/receiver to be used by
|
/// Creates a tuple of senders/receiver to be used by
|
||||||
/// the extractors and the writer loop.
|
/// the extractors and the writer loop.
|
||||||
///
|
///
|
||||||
/// The `bbqueue_capacity` represent the number of bytes allocated
|
/// The `total_bbbuffer_capacity` represent the number of bytes
|
||||||
/// to each BBQueue buffer and is not the sum of all of them.
|
/// allocated to all BBQueue buffer. It will be split by the
|
||||||
|
/// number of thread.
|
||||||
///
|
///
|
||||||
/// The `channel_capacity` parameter defines the number of
|
/// The `channel_capacity` parameter defines the number of
|
||||||
/// too-large-to-fit-in-BBQueue entries that can be sent through
|
/// too-large-to-fit-in-BBQueue entries that can be sent through
|
||||||
@ -46,10 +47,12 @@ use crate::{CboRoaringBitmapCodec, DocumentId, Index};
|
|||||||
/// to the number of available threads in the rayon threadpool.
|
/// to the number of available threads in the rayon threadpool.
|
||||||
pub fn extractor_writer_bbqueue(
|
pub fn extractor_writer_bbqueue(
|
||||||
bbbuffers: &mut Vec<BBBuffer>,
|
bbbuffers: &mut Vec<BBBuffer>,
|
||||||
bbbuffer_capacity: usize,
|
total_bbbuffer_capacity: usize,
|
||||||
channel_capacity: usize,
|
channel_capacity: usize,
|
||||||
) -> (ExtractorBbqueueSender, WriterBbqueueReceiver) {
|
) -> (ExtractorBbqueueSender, WriterBbqueueReceiver) {
|
||||||
bbbuffers.resize_with(rayon::current_num_threads(), || BBBuffer::new(bbbuffer_capacity));
|
let current_num_threads = rayon::current_num_threads();
|
||||||
|
let bbbuffer_capacity = total_bbbuffer_capacity.checked_div(current_num_threads).unwrap();
|
||||||
|
bbbuffers.resize_with(current_num_threads, || BBBuffer::new(bbbuffer_capacity));
|
||||||
|
|
||||||
let capacity = bbbuffers.first().unwrap().capacity();
|
let capacity = bbbuffers.first().unwrap().capacity();
|
||||||
// Read the field description to understand this
|
// Read the field description to understand this
|
||||||
|
@ -79,15 +79,22 @@ where
|
|||||||
{
|
{
|
||||||
let mut bbbuffers = Vec::new();
|
let mut bbbuffers = Vec::new();
|
||||||
let finished_extraction = AtomicBool::new(false);
|
let finished_extraction = AtomicBool::new(false);
|
||||||
|
|
||||||
|
// We compute and remove the allocated BBQueues buffers capacity from the indexing memory.
|
||||||
|
let (grenad_parameters, total_bbbuffer_capacity) = grenad_parameters.max_memory.map_or(
|
||||||
|
(grenad_parameters, 100 * 1024 * 1024 * pool.current_num_threads()), // 100 MiB by thread by default
|
||||||
|
|max_memory| {
|
||||||
|
let total_bbbuffer_capacity = max_memory / 10; // 10% of the indexing memory
|
||||||
|
let new_grenad_parameters = GrenadParameters {
|
||||||
|
max_memory: Some(max_memory - total_bbbuffer_capacity),
|
||||||
|
..grenad_parameters
|
||||||
|
};
|
||||||
|
(new_grenad_parameters, total_bbbuffer_capacity)
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
let (extractor_sender, mut writer_receiver) = pool
|
let (extractor_sender, mut writer_receiver) = pool
|
||||||
.install(|| {
|
.install(|| extractor_writer_bbqueue(&mut bbbuffers, total_bbbuffer_capacity, 1000))
|
||||||
/// TODO restrict memory and remove this memory from the extractors bump allocators
|
|
||||||
extractor_writer_bbqueue(
|
|
||||||
&mut bbbuffers,
|
|
||||||
100 * 1024 * 1024, // 100 MiB
|
|
||||||
1000,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let metadata_builder = MetadataBuilder::from_index(index, wtxn)?;
|
let metadata_builder = MetadataBuilder::from_index(index, wtxn)?;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user