diff options
author | Alex <alex@adnab.me> | 2022-09-12 16:38:43 +0200 |
---|---|---|
committer | Alex <alex@adnab.me> | 2022-09-12 16:38:43 +0200 |
commit | 309d7aef3f05657e2b969ab72442b2f2c350da03 (patch) | |
tree | 448704ae3f07a10f86fcb5d40347ad70cdd81498 /src/model | |
parent | 03c40a0b24dd5bd2a51d3cd3df0ca1a42fb2d328 (diff) | |
parent | f91fab8582728f176f446a4a2e039d22f752167b (diff) | |
download | garage-309d7aef3f05657e2b969ab72442b2f2c350da03.tar.gz garage-309d7aef3f05657e2b969ab72442b2f2c350da03.zip |
Merge pull request 'performance improvements' (#342) from lx-perf-improvements into main
Performance improvements included in this PR:
- [x] Use `Bytes` at a few places where appropriate, instead of `Vec<u8>`, to reduce the number of copies
- [x] StreamChunker now accumulates incoming slices in a `Vec<Bytes>` instead of a `VecDeque<u8>`. Replaces calls to `.extend()` and `.drain()` that were quite costly by a simple `concat()` on a vec of slices which is much more optimized
- [x] Hashing (b2, sha256, md5) is now done on a Tokio thread dedicated to cpu-intensive tasks, using `spawn_blocking`
- [x] Block manager now uses 256 independant locks instead of one big lock for writing, reduces contention when writing several/many objects in parallel
- [x] Better LMDB defaults: we now put flags `NoSync` and `NoMetaSync` to avoid `fsync` at each transaction (extremely slow). Also increased number of LMDB readers to accomodate more intensive workloads
Other changes included in this PR:
- [x] Update to hashing and MAC crates: md5 and sha2 from 0.9 to 0.10, hmac from 0.10 to 0.12
- [x] switch to `tracing_subscriber` for logs, which allows to have timing of each event
Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/garage/pulls/342
Diffstat (limited to 'src/model')
-rw-r--r-- | src/model/garage.rs | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/model/garage.rs b/src/model/garage.rs index 0bca2071..66c359e7 100644 --- a/src/model/garage.rs +++ b/src/model/garage.rs @@ -118,11 +118,16 @@ impl Garage { std::fs::create_dir_all(&db_path).expect("Unable to create LMDB data directory"); let map_size = garage_db::lmdb_adapter::recommended_map_size(); - let db = db::lmdb_adapter::heed::EnvOpenOptions::new() - .max_dbs(100) - .map_size(map_size) - .open(&db_path) - .expect("Unable to open LMDB DB"); + use db::lmdb_adapter::heed; + let mut env_builder = heed::EnvOpenOptions::new(); + env_builder.max_dbs(100); + env_builder.max_readers(500); + env_builder.map_size(map_size); + unsafe { + env_builder.flag(heed::flags::Flags::MdbNoSync); + env_builder.flag(heed::flags::Flags::MdbNoMetaSync); + } + let db = env_builder.open(&db_path).expect("Unable to open LMDB DB"); db::lmdb_adapter::LmdbDb::init(db) } #[cfg(not(feature = "lmdb"))] |