Skip to content

Commit d610091

Browse files
committed
bench: add sled back to the crypto benchmarks
Signed-off-by: Benjamin Bouvier <public@benj.me>
1 parent 5f228f4 commit d610091

File tree

3 files changed

+96
-0
lines changed

3 files changed

+96
-0
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

benchmarks/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ publish = false
1111
criterion = { version = "0.4.0", features = ["async", "async_tokio", "html_reports"] }
1212
matrix-sdk-crypto = { path = "../crates/matrix-sdk-crypto", version = "0.6.0"}
1313
matrix-sdk-sqlite = { path = "../crates/matrix-sdk-sqlite", version = "0.1.0", default-features = false, features = ["crypto-store"] }
14+
matrix-sdk-sled = { path = "../crates/matrix-sdk-sled", version = "0.2.0", default-features = false, features = ["crypto-store"] }
1415
matrix-sdk-test = { path = "../testing/matrix-sdk-test", version = "0.6.0"}
1516
ruma = { workspace = true }
1617
serde_json = { workspace = true }

benchmarks/benches/crypto_bench.rs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::{ops::Deref, sync::Arc};
22

33
use criterion::*;
44
use matrix_sdk_crypto::{EncryptionSettings, OlmMachine};
5+
use matrix_sdk_sled::SledCryptoStore;
56
use matrix_sdk_sqlite::SqliteCryptoStore;
67
use matrix_sdk_test::response_from_file;
78
use ruma::{
@@ -65,11 +66,15 @@ pub fn keys_query(c: &mut Criterion) {
6566

6667
let name = format!("{count} device and cross signing keys");
6768

69+
// Benchmark memory store.
70+
6871
group.bench_with_input(BenchmarkId::new("memory store", &name), &response, |b, response| {
6972
b.to_async(&runtime)
7073
.iter(|| async { machine.mark_request_as_sent(&txn_id, response).await.unwrap() })
7174
});
7275

76+
// Benchmark sqlite store.
77+
7378
let dir = tempfile::tempdir().unwrap();
7479
let store = Arc::new(runtime.block_on(SqliteCryptoStore::open(dir.path(), None)).unwrap());
7580
let machine =
@@ -85,6 +90,18 @@ pub fn keys_query(c: &mut Criterion) {
8590
drop(machine);
8691
}
8792

93+
// Benchmark (deprecated) sled store.
94+
95+
let dir = tempfile::tempdir().unwrap();
96+
let store = Arc::new(runtime.block_on(SledCryptoStore::open(dir.path(), None)).unwrap());
97+
let machine =
98+
runtime.block_on(OlmMachine::with_store(alice_id(), alice_device_id(), store)).unwrap();
99+
100+
group.bench_with_input(BenchmarkId::new("sled store", &name), &response, |b, response| {
101+
b.to_async(&runtime)
102+
.iter(|| async { machine.mark_request_as_sent(&txn_id, response).await.unwrap() })
103+
});
104+
88105
group.finish()
89106
}
90107

@@ -147,6 +164,28 @@ pub fn keys_claiming(c: &mut Criterion) {
147164
)
148165
});
149166

167+
group.bench_with_input(BenchmarkId::new("sled store", &name), &response, |b, response| {
168+
b.iter_batched(
169+
|| {
170+
let dir = tempfile::tempdir().unwrap();
171+
let store =
172+
Arc::new(runtime.block_on(SledCryptoStore::open(dir.path(), None)).unwrap());
173+
174+
let machine = runtime
175+
.block_on(OlmMachine::with_store(alice_id(), alice_device_id(), store))
176+
.unwrap();
177+
runtime
178+
.block_on(machine.mark_request_as_sent(&txn_id, &keys_query_response))
179+
.unwrap();
180+
(machine, &runtime, &txn_id)
181+
},
182+
move |(machine, runtime, txn_id)| {
183+
runtime.block_on(machine.mark_request_as_sent(txn_id, response)).unwrap()
184+
},
185+
BatchSize::SmallInput,
186+
)
187+
});
188+
150189
group.finish()
151190
}
152191

@@ -171,6 +210,8 @@ pub fn room_key_sharing(c: &mut Criterion) {
171210
group.throughput(Throughput::Elements(count as u64));
172211
let name = format!("{count} devices");
173212

213+
// Benchmark memory store.
214+
174215
group.bench_function(BenchmarkId::new("memory store", &name), |b| {
175216
b.to_async(&runtime).iter(|| async {
176217
let requests = machine
@@ -192,6 +233,8 @@ pub fn room_key_sharing(c: &mut Criterion) {
192233
})
193234
});
194235

236+
// Benchmark sqlite store.
237+
195238
let dir = tempfile::tempdir().unwrap();
196239
let store = Arc::new(runtime.block_on(SqliteCryptoStore::open(dir.path(), None)).unwrap());
197240

@@ -226,6 +269,37 @@ pub fn room_key_sharing(c: &mut Criterion) {
226269
drop(machine);
227270
}
228271

272+
// Benchmark (deprecated) sled store.
273+
274+
let dir = tempfile::tempdir().unwrap();
275+
let store = Arc::new(runtime.block_on(SledCryptoStore::open(dir.path(), None)).unwrap());
276+
277+
let machine =
278+
runtime.block_on(OlmMachine::with_store(alice_id(), alice_device_id(), store)).unwrap();
279+
runtime.block_on(machine.mark_request_as_sent(&txn_id, &keys_query_response)).unwrap();
280+
runtime.block_on(machine.mark_request_as_sent(&txn_id, &response)).unwrap();
281+
282+
group.bench_function(BenchmarkId::new("sled store", &name), |b| {
283+
b.to_async(&runtime).iter(|| async {
284+
let requests = machine
285+
.share_room_key(
286+
room_id,
287+
users.iter().map(Deref::deref),
288+
EncryptionSettings::default(),
289+
)
290+
.await
291+
.unwrap();
292+
293+
assert!(!requests.is_empty());
294+
295+
for request in requests {
296+
machine.mark_request_as_sent(&request.txn_id, &to_device_response).await.unwrap();
297+
}
298+
299+
machine.invalidate_group_session(room_id).await.unwrap();
300+
})
301+
});
302+
229303
group.finish()
230304
}
231305

@@ -246,12 +320,16 @@ pub fn devices_missing_sessions_collecting(c: &mut Criterion) {
246320

247321
runtime.block_on(machine.mark_request_as_sent(&txn_id, &response)).unwrap();
248322

323+
// Benchmark memory store.
324+
249325
group.bench_function(BenchmarkId::new("memory store", &name), |b| {
250326
b.to_async(&runtime).iter_with_large_drop(|| async {
251327
machine.get_missing_sessions(users.iter().map(Deref::deref)).await.unwrap()
252328
})
253329
});
254330

331+
// Benchmark sqlite store.
332+
255333
let dir = tempfile::tempdir().unwrap();
256334
let store = Arc::new(runtime.block_on(SqliteCryptoStore::open(dir.path(), None)).unwrap());
257335

@@ -271,6 +349,22 @@ pub fn devices_missing_sessions_collecting(c: &mut Criterion) {
271349
drop(machine);
272350
}
273351

352+
// Benchmark (deprecated) sled store.
353+
354+
let dir = tempfile::tempdir().unwrap();
355+
let store = Arc::new(runtime.block_on(SledCryptoStore::open(dir.path(), None)).unwrap());
356+
357+
let machine =
358+
runtime.block_on(OlmMachine::with_store(alice_id(), alice_device_id(), store)).unwrap();
359+
360+
runtime.block_on(machine.mark_request_as_sent(&txn_id, &response)).unwrap();
361+
362+
group.bench_function(BenchmarkId::new("sled store", &name), |b| {
363+
b.to_async(&runtime).iter(|| async {
364+
machine.get_missing_sessions(users.iter().map(Deref::deref)).await.unwrap()
365+
})
366+
});
367+
274368
group.finish()
275369
}
276370

0 commit comments

Comments
 (0)