mirror of
https://github.com/qdrant/qdrant.git
synced 2026-08-06 10:00:58 -05:00
* Unify parking_lot/arc_lock feature
* Move lib/common/{io,memory}/* -> lib/common/common/*
- Mmap-related items are grouped into `common::mmap` sub-module:
- `memory/src/chunked_utils.rs` -> `common/src/mmap/chunked.rs`
- `memory/src/madvise.rs` -> `common/src/mmap/advice.rs`
- `memory/src/mmap_ops.rs` -> `common/src/mmap/ops.rs`
- `memory/src/mmap_type_readonly.rs` -> `common/src/mmap/mmap_readonly.rs`
- `memory/src/mmap_type.rs` -> `common/src/mmap/mmap_rw.rs`
- Filesystem-related items are grouped into `common::fs` sub-module:
- `common/src/fs.rs` -> `common/src/fs/sync.rs`
- `io/src/file_operations.rs` -> `common/src/fs/ops.rs`
- `io/src/move_files.rs` -> `common/src/fs/move.rs`
- `io/src/safe_delete.rs` -> `common/src/fs/safe_delete.rs`
- `memory/src/checkfs.rs` -> `common/src/fs/check.rs`
- `memory/src/fadvise.rs` -> `common/src/fs/fadvise.rs`
- Rest is moved straight into `common`:
- `io/src/storage_version.rs` -> `common/src/storage_version.rs`
The old `io` and `memory` are now hollow crates that re-export items
from `common`. These hollow crates will be removed in next commits.
* Replace uses of `io` and `memory` with new paths in `common`
Since `io` and `memory` are just re-exports of `common`, these
replacements are no-op.
* Remove `io` and `memory` crates
74 lines
2.3 KiB
Rust
74 lines
2.3 KiB
Rust
use std::hint::black_box;
|
|
use std::iter;
|
|
|
|
use common::mmap::MmapBitSlice;
|
|
use criterion::{Criterion, criterion_group, criterion_main};
|
|
use fs_err::File;
|
|
use memmap2::MmapMut;
|
|
use rand::prelude::*;
|
|
use rand::rngs::StdRng;
|
|
use segment::common::mmap_bitslice_buffered_update_wrapper::MmapBitSliceBufferedUpdateWrapper;
|
|
use tempfile::tempdir;
|
|
|
|
const SIZE: usize = 4 * 1024 * 1024;
|
|
const FLAG_COUNT: usize = 1_000_000;
|
|
const LOOKUP_COUNT: usize = 1_000_000;
|
|
|
|
fn mmap_bitslice_buffered_update_wrapper(c: &mut Criterion) {
|
|
let mut rng = StdRng::seed_from_u64(42);
|
|
let dir = tempdir().unwrap();
|
|
let path = dir.path().join("bitslice.mmap");
|
|
|
|
let file = File::create_new(path).unwrap();
|
|
file.set_len(SIZE as u64).unwrap();
|
|
file.sync_all().unwrap();
|
|
|
|
let mmap_mut = unsafe { MmapMut::map_mut(&file).unwrap() };
|
|
let mmap_bitslice = MmapBitSlice::from(mmap_mut, 0);
|
|
let mmap_bitslice_buffered_update_wrapper =
|
|
MmapBitSliceBufferedUpdateWrapper::new(mmap_bitslice);
|
|
|
|
// Set random flags and persist
|
|
for _ in 0..FLAG_COUNT {
|
|
mmap_bitslice_buffered_update_wrapper
|
|
.set(rng.random::<u64>() as usize % SIZE, rng.random());
|
|
}
|
|
mmap_bitslice_buffered_update_wrapper.flusher()().unwrap();
|
|
|
|
let mut group = c.benchmark_group("mmap-bitslice-buffered-update-wrapper");
|
|
|
|
let lookups: Vec<_> = iter::repeat_with(|| rng.random::<u64>() as usize % SIZE)
|
|
.take(LOOKUP_COUNT)
|
|
.collect();
|
|
|
|
group.bench_function("lookup-without-pending-changes", |b| {
|
|
b.iter(|| {
|
|
for lookup in &lookups {
|
|
black_box(mmap_bitslice_buffered_update_wrapper.get(*lookup).unwrap());
|
|
}
|
|
});
|
|
});
|
|
|
|
// Set random flags and keep them in pending changes list
|
|
for _ in 0..FLAG_COUNT {
|
|
mmap_bitslice_buffered_update_wrapper
|
|
.set(rng.random::<u64>() as usize % SIZE, rng.random());
|
|
}
|
|
|
|
group.bench_function("lookup-with-pending-changes", |b| {
|
|
b.iter(|| {
|
|
for lookup in &lookups {
|
|
black_box(mmap_bitslice_buffered_update_wrapper.get(*lookup).unwrap());
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
criterion_group! {
|
|
name = benches;
|
|
config = Criterion::default();
|
|
targets = mmap_bitslice_buffered_update_wrapper
|
|
}
|
|
|
|
criterion_main!(benches);
|