From 855d41ba783a1ae4191b55252e573494b5c213bd Mon Sep 17 00:00:00 2001 From: Sergii Glushchenko Date: Tue, 7 Jan 2025 23:09:19 +0100 Subject: [PATCH] Remove unused benches and fastrand (#156) --- Cargo.lock | 254 +++--------------------------------- Cargo.toml | 5 - benches/collection_bench.rs | 75 ----------- benches/file_bench.rs | 33 ----- benches/io_bench.rs | 152 --------------------- benches/mmap_bench.rs | 98 -------------- src/transaction.rs | 20 +-- 7 files changed, 26 insertions(+), 611 deletions(-) delete mode 100644 benches/collection_bench.rs delete mode 100644 benches/file_bench.rs delete mode 100644 benches/io_bench.rs delete mode 100644 benches/mmap_bench.rs diff --git a/Cargo.lock b/Cargo.lock index 0cd3d4d7..9c8f1bee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -151,7 +151,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -210,7 +210,7 @@ dependencies = [ "js-sys", "num-traits", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -404,34 +404,12 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" -[[package]] -name = "enum_dispatch" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" -dependencies = [ - "once_cell", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "equivalent" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" -[[package]] -name = "errno" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "event-listener" version = "5.3.1" @@ -453,42 +431,12 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "fastrand" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" - -[[package]] -name = "fmmap" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6099ab52d5329340a3014f60ca91bc892181ae32e752360d07be9295924dcb0b" -dependencies = [ - "byteorder", - "bytes", - "enum_dispatch", - "fs4", - "memmapix", - "parse-display", -] - [[package]] name = "foldhash" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" -[[package]] -name = "fs4" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47" -dependencies = [ - "rustix", - "windows-sys 0.48.0", -] - [[package]] name = "fuchsia-cprng" version = "0.1.1" @@ -763,12 +711,6 @@ dependencies = [ "libc", ] -[[package]] -name = "linux-raw-sys" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" - [[package]] name = "lock_api" version = "0.4.12" @@ -800,24 +742,6 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "memmap2" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" -dependencies = [ - "libc", -] - -[[package]] -name = "memmapix" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f517ab414225d5f1755bd284d9545bd08a72a3958b3c6384d72e95de9cc1a1d3" -dependencies = [ - "rustix", -] - [[package]] name = "mimalloc" version = "0.1.43" @@ -847,15 +771,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "nanoid" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" -dependencies = [ - "rand 0.8.5", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -928,33 +843,7 @@ dependencies = [ "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", -] - -[[package]] -name = "parse-display" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6509d08722b53e8dafe97f2027b22ccbe3a5db83cb352931e9716b0aa44bc5c" -dependencies = [ - "once_cell", - "parse-display-derive", - "regex", -] - -[[package]] -name = "parse-display-derive" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68517892c8daf78da08c0db777fcc17e07f2f63ef70041718f8a7630ad84f341" -dependencies = [ - "once_cell", - "proc-macro2", - "quote", - "regex", - "regex-syntax 0.7.5", - "structmeta", - "syn", + "windows-targets", ] [[package]] @@ -1147,7 +1036,7 @@ dependencies = [ "aho-corasick", "memchr", "regex-automata", - "regex-syntax 0.8.5", + "regex-syntax", ] [[package]] @@ -1158,15 +1047,9 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] -[[package]] -name = "regex-syntax" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" - [[package]] name = "regex-syntax" version = "0.8.5" @@ -1208,19 +1091,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustix" -version = "0.38.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" -dependencies = [ - "bitflags", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.52.0", -] - [[package]] name = "ryu" version = "1.0.18" @@ -1333,29 +1203,6 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "structmeta" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ad9e09554f0456d67a69c1584c9798ba733a5b50349a6c0d0948710523922d" -dependencies = [ - "proc-macro2", - "quote", - "structmeta-derive", - "syn", -] - -[[package]] -name = "structmeta-derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a60bcaff7397072dca0017d1db428e30d5002e00b6847703e2e42005c95fbe00" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "surrealkv" version = "0.7.0" @@ -1366,15 +1213,10 @@ dependencies = [ "chrono", "crc32fast", "criterion", - "fastrand", - "fmmap", "futures", "getrandom", - "libc", "lru", - "memmap2", "mimalloc", - "nanoid", "num_cpus", "parking_lot", "quick_cache", @@ -1624,16 +1466,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", + "windows-targets", ] [[package]] @@ -1642,7 +1475,7 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -1651,22 +1484,7 @@ version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-targets", ] [[package]] @@ -1675,46 +1493,28 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -1727,48 +1527,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" - [[package]] name = "windows_x86_64_msvc" version = "0.52.6" diff --git a/Cargo.toml b/Cargo.toml index d67f88ce..c3a280ad 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,11 +44,6 @@ tempdir = "0.3" rand = "0.8.5" criterion = { version = "0.5.1", features = ["async_tokio", "html_reports"] } mimalloc = { version = "0.1.39", default-features = false } -nanoid = "0.4.0" -fastrand = "2.0.1" -libc = "0.2.155" -fmmap = "0.3.3" -memmap2 = "0.9.4" num_cpus = "1.16.0" walkdir = "2.5.0" diff --git a/benches/collection_bench.rs b/benches/collection_bench.rs deleted file mode 100644 index d955e17b..00000000 --- a/benches/collection_bench.rs +++ /dev/null @@ -1,75 +0,0 @@ -use ahash::{HashSet, HashSetExt}; -use criterion::{black_box, criterion_group, criterion_main, BatchSize, Criterion}; -use rand::{thread_rng, Rng}; -use std::collections::VecDeque; - -const CASES: usize = 1_000_000; - -fn bench_dequeue(c: &mut Criterion) { - c.bench_function("Test dequeue Cache", move |b| { - b.iter_batched( - || { - let mut rng = thread_rng(); - let nums: Vec = black_box( - (0..(CASES * 2)) - .map(|i| { - if i % 2 == 0 { - rng.gen::() % 16384 - } else { - rng.gen::() % 32768 - } - }) - .collect(), - ); - let l = VecDeque::with_capacity(8192); - (l, nums) - }, - |(mut l, nums)| { - (0..CASES).for_each(|v| { - let k = nums[v]; - l.insert(k as usize, k); - }); - }, - BatchSize::LargeInput, - ) - }); -} - -fn bench_hashset(c: &mut Criterion) { - c.bench_function("Test hashset", move |b| { - b.iter_batched( - || { - let mut rng = thread_rng(); - let nums: Vec = black_box( - (0..(CASES * 2)) - .map(|i| { - if i % 2 == 0 { - rng.gen::() % 16384 - } else { - rng.gen::() % 32768 - } - }) - .collect(), - ); - let l = HashSet::new(); - (l, nums) - }, - |(mut l, nums)| { - (0..CASES).for_each(|v| { - let k = nums[v]; - let _ = l.insert(k); - }); - - (0..CASES).for_each(|v| { - let k = nums[v]; - let _ = l.get(&k); - }); - }, - BatchSize::LargeInput, - ) - }); -} - -criterion_group!(cache, bench_dequeue, bench_hashset,); - -criterion_main!(cache); diff --git a/benches/file_bench.rs b/benches/file_bench.rs deleted file mode 100644 index c3177ed6..00000000 --- a/benches/file_bench.rs +++ /dev/null @@ -1,33 +0,0 @@ -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use std::fs::{remove_file, File}; -use std::io::Write; - -fn write_all(data: &[u8]) { - let mut file = File::create("write_all.txt").unwrap(); - file.write_all(data).unwrap(); -} - -fn write_all_sync(data: &[u8]) { - let mut file = File::create("write_all_sync.txt").unwrap(); - file.write_all(data).unwrap(); - file.sync_all().unwrap(); -} - -fn cleanup() { - remove_file("write_all.txt").unwrap(); - remove_file("write_all_sync.txt").unwrap(); -} - -fn benchmark(c: &mut Criterion) { - let data = vec![0u8; 1024 * 1024]; // 1 MB of data - - c.bench_function("write_all", |b| b.iter(|| write_all(black_box(&data)))); - c.bench_function("write_all_sync", |b| { - b.iter(|| write_all_sync(black_box(&data))) - }); - - cleanup(); -} - -criterion_group!(benches, benchmark); -criterion_main!(benches); diff --git a/benches/io_bench.rs b/benches/io_bench.rs deleted file mode 100644 index 4deb46cc..00000000 --- a/benches/io_bench.rs +++ /dev/null @@ -1,152 +0,0 @@ -use criterion::{criterion_group, criterion_main, Criterion}; - -use rand::Rng; -use std::fs::{File, OpenOptions}; -use std::io::{self, Read, Seek, SeekFrom, Write}; -use std::os::unix::io::AsRawFd; -use std::path::Path; - -fn create_large_file>(path: P, size: u64) -> io::Result<()> { - let mut file = OpenOptions::new() - .create(true) - .truncate(true) - .write(true) - .open(path)?; - - let buffer = vec![0u8; 1024 * 1024]; // 1 MB buffer - let mut written = 0; - - while written < size { - let to_write = std::cmp::min(size - written, buffer.len() as u64); - file.write_all(&buffer[..to_write as usize])?; - written += to_write; - } - - Ok(()) -} - -const ADVICE_RANDOM: i32 = 1; -const ADVICE_SEQUENTIAL: i32 = 2; - -#[cfg(target_os = "macos")] -fn advise_file(fd: i32, advice: i32) -> io::Result<()> { - use libc::{fcntl, F_NOCACHE, F_RDAHEAD}; - match advice { - ADVICE_RANDOM => { - // Enable read-ahead - unsafe { - let result = fcntl(fd, F_NOCACHE, 1); - if result == 0 { - Ok(()) - } else { - Err(io::Error::from_raw_os_error(result)) - } - } - } - ADVICE_SEQUENTIAL => { - // Disable read-ahead - unsafe { - let result = fcntl(fd, F_RDAHEAD, 1); - if result == 0 { - Ok(()) - } else { - Err(io::Error::from_raw_os_error(result)) - } - } - // Additionally, you might consider enabling F_NOCACHE to avoid caching reads, - // which can be beneficial for random access patterns to prevent cache pollution. - // However, use this with caution as it can have other performance implications. - // unsafe { fcntl(fd, F_NOCACHE, 1); } - } - _ => Ok(()), // Handle all other cases without doing anything - } -} - -#[cfg(target_os = "linux")] -fn advise_file(fd: i32, advice: i32) -> io::Result<()> { - use libc::{posix_fadvise, POSIX_FADV_RANDOM, POSIX_FADV_SEQUENTIAL}; - match advice { - ADVICE_RANDOM => { - // Enable read-ahead - unsafe { - let result = posix_fadvise(fd, 0, 0, POSIX_FADV_RANDOM); - if result == 0 { - Ok(()) - } else { - Err(io::Error::from_raw_os_error(result)) - } - } - } - ADVICE_SEQUENTIAL => { - // Enable read-ahead - unsafe { - let result = posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL); - if result == 0 { - Ok(()) - } else { - Err(io::Error::from_raw_os_error(result)) - } - } - } - _ => Ok(()), // Handle all other cases without doing anything - } -} - -fn sequential_read(file: &mut File, buffer: &mut [u8], use_fadvise: bool) -> io::Result<()> { - if use_fadvise { - advise_file(file.as_raw_fd(), ADVICE_SEQUENTIAL)?; - } - - while file.read(buffer)? > 0 {} - - Ok(()) -} - -fn random_read(file: &mut File, buffer: &mut [u8], use_fadvise: bool) -> io::Result<()> { - let file_size = file.metadata()?.len(); - let mut rng = rand::thread_rng(); - - if use_fadvise { - advise_file(file.as_raw_fd(), ADVICE_RANDOM)?; - } - - for _ in 0..10000 { - // Adjust the number of reads based on your benchmarking needs - let offset = rng.gen_range(0..file_size); - file.seek(SeekFrom::Start(offset))?; - file.read_exact(buffer)?; - } - - Ok(()) -} - -fn benchmark(c: &mut Criterion) { - let mut group = c.benchmark_group("posix_fadvise"); - let file_path = "large_file.dat"; - let file_size = 512 * 1024 * 1024; - // Create a large file - create_large_file(file_path, file_size).unwrap(); - - // Open the file for reading - let mut file = File::open(file_path).unwrap(); - - let mut buffer = vec![0; 4096]; // Adjust buffer size as needed - - group.bench_function("Sequential Read with fadvise", |b| { - b.iter(|| sequential_read(&mut file, &mut buffer, true).unwrap()) - }); - group.bench_function("Sequential Read without fadvise", |b| { - b.iter(|| sequential_read(&mut file, &mut buffer, false).unwrap()) - }); - group.bench_function("Random Read with fadvise", |b| { - b.iter(|| random_read(&mut file, &mut buffer, true).unwrap()) - }); - group.bench_function("Random Read without fadvise", |b| { - b.iter(|| random_read(&mut file, &mut buffer, false).unwrap()) - }); - - group.finish(); -} - -criterion_group!(benches, benchmark); -criterion_main!(benches); diff --git a/benches/mmap_bench.rs b/benches/mmap_bench.rs deleted file mode 100644 index 98549d19..00000000 --- a/benches/mmap_bench.rs +++ /dev/null @@ -1,98 +0,0 @@ -use bytes::Buf; -use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use fmmap::{MmapFile, MmapFileExt}; -use memmap2::MmapOptions; -use rand::Rng; -use std::fs::File; -use std::io::{self, Read, Write}; -use std::path::Path; - -// Create a large file with random data -fn create_large_file>(path: P, size: usize) -> io::Result<()> { - let mut file = File::create(path)?; - let mut rng = rand::thread_rng(); - let mut remaining = size; - - while remaining > 0 { - let mut data = [0u8; 1024]; - rng.fill(&mut data[..]); - let to_write = std::cmp::min(1024, remaining); - file.write_all(&data[..to_write])?; - remaining -= to_write; - } - - Ok(()) -} - -// Benchmark for normal file read -fn benchmark_normal_file_read(path: &Path) { - let mut file = File::open(path).unwrap(); - let mut buffer = [0u8; 4096]; - - while let Ok(n) = file.read(&mut buffer) { - if n == 0 { - break; - } - black_box(&buffer[..n]); - } -} - -// Benchmark for mmap file read -fn benchmark_memmap2_file_read(path: &Path, size: usize) { - let file = File::open(path).unwrap(); - let mut buffer = [0u8; 4096]; - let mut offset = 0usize; // Initialize offset at 0 - let mmap = unsafe { MmapOptions::new().map(&file).unwrap() }; - let mut reader = mmap.reader(); - - loop { - if offset >= size { - break; - } - let n = reader.read(&mut buffer).unwrap(); - if n == 0 { - break; - } - black_box(&buffer[..n]); - offset += n; // Update offset by the number of bytes read - } -} - -// Benchmark for mmap file read -fn benchmark_fmmap_file_read(path: &Path, size: usize) { - let file = MmapFile::open(path).unwrap(); - let mut buffer = [0u8; 4096]; - let mut offset = 0usize; // Initialize offset at 0 - - loop { - if offset >= size { - break; - } - let n = file.read(&mut buffer, offset); - if n == 0 { - break; - } - black_box(&buffer[..n]); - offset += n; // Update offset by the number of bytes read - } -} - -// Criterion benchmark harness -fn criterion_benchmark(c: &mut Criterion) { - let file_path = "large_file.bin"; - let file_size = 128 * 1024 * 1024; // 128 MB - create_large_file(file_path, file_size).unwrap(); - - c.bench_function("normal_file_read", |b| { - b.iter(|| benchmark_normal_file_read(Path::new(file_path))) - }); - c.bench_function("memmap2_file_read", |b| { - b.iter(|| benchmark_memmap2_file_read(Path::new(file_path), file_size)) - }); - c.bench_function("fmmap_file_read", |b| { - b.iter(|| benchmark_fmmap_file_read(Path::new(file_path), file_size)) - }); -} - -criterion_group!(benches, criterion_benchmark); -criterion_main!(benches); diff --git a/src/transaction.rs b/src/transaction.rs index 75555bf5..d042e783 100644 --- a/src/transaction.rs +++ b/src/transaction.rs @@ -925,6 +925,8 @@ impl Drop for Transaction { #[cfg(test)] mod tests { use bytes::Bytes; + use rand::rngs::StdRng; + use rand::{Rng, SeedableRng}; use std::mem::size_of; use tokio::task; @@ -1893,34 +1895,34 @@ mod tests { const VALUE_SIZE: usize = 150; const RNG_SEED: u64 = 3; - fn fill_slice(slice: &mut [u8], rng: &mut fastrand::Rng) { + fn fill_slice(slice: &mut [u8], rng: &mut StdRng) { let mut i = 0; while i + size_of::() < slice.len() { - let tmp = rng.u128(..); + let tmp = rng.gen::(); slice[i..(i + size_of::())].copy_from_slice(&tmp.to_le_bytes()); i += size_of::() } if i + size_of::() < slice.len() { - let tmp = rng.u64(..); + let tmp = rng.gen::(); slice[i..(i + size_of::())].copy_from_slice(&tmp.to_le_bytes()); i += size_of::() } if i + size_of::() < slice.len() { - let tmp = rng.u32(..); + let tmp = rng.gen::(); slice[i..(i + size_of::())].copy_from_slice(&tmp.to_le_bytes()); i += size_of::() } if i + size_of::() < slice.len() { - let tmp = rng.u16(..); + let tmp = rng.gen::(); slice[i..(i + size_of::())].copy_from_slice(&tmp.to_le_bytes()); i += size_of::() } if i + size_of::() < slice.len() { - slice[i] = rng.u8(..); + slice[i] = rng.gen::(); } } - fn gen_pair(rng: &mut fastrand::Rng) -> ([u8; KEY_SIZE], Vec) { + fn gen_pair(rng: &mut StdRng) -> ([u8; KEY_SIZE], Vec) { let mut key = [0u8; KEY_SIZE]; fill_slice(&mut key, rng); let mut value = vec![0u8; VALUE_SIZE]; @@ -1929,8 +1931,8 @@ mod tests { (key, value) } - fn make_rng() -> fastrand::Rng { - fastrand::Rng::with_seed(RNG_SEED) + fn make_rng() -> StdRng { + StdRng::seed_from_u64(RNG_SEED) } #[tokio::test]