Skip to content

Commit 06053fc

Browse files
committed
Remove duplicate generate_routes benchmark code
Refactor generate_routes and generate_mpp_routes into a single utility for benchmarking. The utility is parameterized with features in order to test both single path and multi-path routing. Additionally, it is parameterized with a Score to be used with other scorers.
1 parent 35d4ebb commit 06053fc

File tree

1 file changed

+23
-39
lines changed

1 file changed

+23
-39
lines changed

lightning/src/routing/router.rs

Lines changed: 23 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -4963,6 +4963,8 @@ pub(crate) mod test_utils {
49634963
#[cfg(all(test, feature = "unstable", not(feature = "no-std")))]
49644964
mod benches {
49654965
use super::*;
4966+
use bitcoin::secp256k1::PublicKey;
4967+
use ln::features::InvoiceFeatures;
49664968
use routing::scoring::Scorer;
49674969
use util::logger::{Logger, Record};
49684970

@@ -4973,47 +4975,29 @@ mod benches {
49734975
fn log(&self, _record: &Record) {}
49744976
}
49754977

4976-
#[bench]
4977-
fn generate_routes(bench: &mut Bencher) {
4978+
fn read_network_graph() -> NetworkGraph {
49784979
let mut d = test_utils::get_route_file().unwrap();
4979-
let graph = NetworkGraph::read(&mut d).unwrap();
4980-
let nodes = graph.read_only().nodes().clone();
4981-
let scorer = Scorer::with_fixed_penalty(0);
4982-
4983-
// First, get 100 (source, destination) pairs for which route-getting actually succeeds...
4984-
let mut path_endpoints = Vec::new();
4985-
let mut seed: usize = 0xdeadbeef;
4986-
'load_endpoints: for _ in 0..100 {
4987-
loop {
4988-
seed *= 0xdeadbeef;
4989-
let src = PublicKey::from_slice(nodes.keys().skip(seed % nodes.len()).next().unwrap().as_slice()).unwrap();
4990-
seed *= 0xdeadbeef;
4991-
let dst = PublicKey::from_slice(nodes.keys().skip(seed % nodes.len()).next().unwrap().as_slice()).unwrap();
4992-
let payment_params = PaymentParameters::from_node_id(dst);
4993-
let amt = seed as u64 % 1_000_000;
4994-
if get_route(&src, &payment_params, &graph, None, amt, 42, &DummyLogger{}, &scorer).is_ok() {
4995-
path_endpoints.push((src, dst, amt));
4996-
continue 'load_endpoints;
4997-
}
4998-
}
4999-
}
4980+
NetworkGraph::read(&mut d).unwrap()
4981+
}
50004982

5001-
// ...then benchmark finding paths between the nodes we learned.
5002-
let mut idx = 0;
5003-
bench.iter(|| {
5004-
let (src, dst, amt) = path_endpoints[idx % path_endpoints.len()];
5005-
let payment_params = PaymentParameters::from_node_id(dst);
5006-
assert!(get_route(&src, &payment_params, &graph, None, amt, 42, &DummyLogger{}, &scorer).is_ok());
5007-
idx += 1;
5008-
});
4983+
#[bench]
4984+
fn generate_routes_with_default_scorer(bench: &mut Bencher) {
4985+
let network_graph = read_network_graph();
4986+
let scorer = Scorer::default();
4987+
generate_routes(bench, &network_graph, scorer, InvoiceFeatures::empty());
50094988
}
50104989

50114990
#[bench]
5012-
fn generate_mpp_routes(bench: &mut Bencher) {
5013-
let mut d = test_utils::get_route_file().unwrap();
5014-
let graph = NetworkGraph::read(&mut d).unwrap();
4991+
fn generate_mpp_routes_with_default_scorer(bench: &mut Bencher) {
4992+
let network_graph = read_network_graph();
4993+
let scorer = Scorer::default();
4994+
generate_routes(bench, &network_graph, scorer, InvoiceFeatures::known());
4995+
}
4996+
4997+
fn generate_routes<S: Score>(
4998+
bench: &mut Bencher, graph: &NetworkGraph, scorer: S, features: InvoiceFeatures
4999+
) {
50155000
let nodes = graph.read_only().nodes().clone();
5016-
let scorer = Scorer::with_fixed_penalty(0);
50175001

50185002
// First, get 100 (source, destination) pairs for which route-getting actually succeeds...
50195003
let mut path_endpoints = Vec::new();
@@ -5024,9 +5008,9 @@ mod benches {
50245008
let src = PublicKey::from_slice(nodes.keys().skip(seed % nodes.len()).next().unwrap().as_slice()).unwrap();
50255009
seed *= 0xdeadbeef;
50265010
let dst = PublicKey::from_slice(nodes.keys().skip(seed % nodes.len()).next().unwrap().as_slice()).unwrap();
5027-
let payment_params = PaymentParameters::from_node_id(dst).with_features(InvoiceFeatures::known());
5011+
let params = PaymentParameters::from_node_id(dst).with_features(features.clone());
50285012
let amt = seed as u64 % 1_000_000;
5029-
if get_route(&src, &payment_params, &graph, None, amt, 42, &DummyLogger{}, &scorer).is_ok() {
5013+
if get_route(&src, &params, &graph, None, amt, 42, &DummyLogger{}, &scorer).is_ok() {
50305014
path_endpoints.push((src, dst, amt));
50315015
continue 'load_endpoints;
50325016
}
@@ -5037,8 +5021,8 @@ mod benches {
50375021
let mut idx = 0;
50385022
bench.iter(|| {
50395023
let (src, dst, amt) = path_endpoints[idx % path_endpoints.len()];
5040-
let payment_params = PaymentParameters::from_node_id(dst).with_features(InvoiceFeatures::known());
5041-
assert!(get_route(&src, &payment_params, &graph, None, amt, 42, &DummyLogger{}, &scorer).is_ok());
5024+
let params = PaymentParameters::from_node_id(dst).with_features(features.clone());
5025+
assert!(get_route(&src, &params, &graph, None, amt, 42, &DummyLogger{}, &scorer).is_ok());
50425026
idx += 1;
50435027
});
50445028
}

0 commit comments

Comments
 (0)