Skip to content

Commit d4d9502

Browse files
committed
Update requests bench
1 parent 5516c6f commit d4d9502

File tree

1 file changed

+70
-45
lines changed

1 file changed

+70
-45
lines changed

substrate/client/network/benches/request_response_protocol.rs

Lines changed: 70 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ use criterion::{
2222
};
2323
use sc_network::{
2424
config::{
25-
FullNetworkConfiguration, IncomingRequest, NetworkConfiguration, NonDefaultSetConfig,
26-
NonReservedPeerMode, NotificationHandshake, OutgoingResponse, Params, ProtocolId, Role,
27-
SetConfig,
25+
FullNetworkConfiguration, IncomingRequest, NetworkConfiguration, NonReservedPeerMode,
26+
NotificationHandshake, OutgoingResponse, Params, ProtocolId, Role, SetConfig,
2827
},
29-
IfDisconnected, NetworkBackend, NetworkRequest, NetworkWorker, NotificationMetrics,
30-
NotificationService, Roles,
28+
IfDisconnected, Litep2pNetworkBackend, NetworkBackend, NetworkRequest, NetworkWorker,
29+
NotificationMetrics, NotificationService, Roles,
3130
};
32-
use sc_network_common::sync::message::BlockAnnouncesHandshake;
31+
use sc_network_common::{sync::message::BlockAnnouncesHandshake, ExHashT};
3332
use sc_network_types::build_multiaddr;
34-
use sp_runtime::traits::Zero;
33+
use sp_core::H256;
34+
use sp_runtime::traits::{Block as BlockT, Zero};
3535
use std::{
3636
net::{IpAddr, Ipv4Addr, TcpListener},
3737
str::FromStr,
@@ -62,51 +62,51 @@ fn get_listen_address() -> sc_network::Multiaddr {
6262
build_multiaddr!(Ip4(ip), Tcp(port))
6363
}
6464

65-
pub fn create_network_worker(
65+
pub fn create_network_worker<B, H, N>(
6666
listen_addr: sc_network::Multiaddr,
67-
) -> (
68-
NetworkWorker<runtime::Block, runtime::Hash>,
69-
async_channel::Receiver<IncomingRequest>,
70-
Box<dyn NotificationService>,
71-
) {
67+
) -> (N, async_channel::Receiver<IncomingRequest>, Box<dyn NotificationService>)
68+
where
69+
B: BlockT<Hash = H256> + 'static,
70+
H: ExHashT,
71+
N: NetworkBackend<B, H>,
72+
{
7273
let (tx, rx) = async_channel::bounded(10);
73-
let request_response_config =
74-
NetworkWorker::<runtime::Block, runtime::Hash>::request_response_config(
75-
"/request-response/1".into(),
76-
vec![],
77-
MAX_SIZE,
78-
MAX_SIZE,
79-
Duration::from_secs(2),
80-
Some(tx),
81-
);
74+
let request_response_config = N::request_response_config(
75+
"/request-response/1".into(),
76+
vec![],
77+
MAX_SIZE,
78+
MAX_SIZE,
79+
Duration::from_secs(2),
80+
Some(tx),
81+
);
82+
let role = Role::Full;
8283
let mut net_conf = NetworkConfiguration::new_local();
8384
net_conf.listen_addresses = vec![listen_addr];
8485
let mut network_config = FullNetworkConfiguration::new(&net_conf, None);
8586
network_config.add_request_response_protocol(request_response_config);
86-
let (block_announce_config, notification_service) = NonDefaultSetConfig::new(
87+
let genesis_hash = runtime::Hash::zero();
88+
let (block_announce_config, notification_service) = N::notification_config(
8789
"/block-announces/1".into(),
8890
vec![],
8991
1024,
9092
Some(NotificationHandshake::new(BlockAnnouncesHandshake::<runtime::Block>::build(
9193
Roles::from(&Role::Full),
9294
Zero::zero(),
93-
runtime::Hash::zero(),
94-
runtime::Hash::zero(),
95+
genesis_hash,
96+
genesis_hash,
9597
))),
9698
SetConfig {
9799
in_peers: 1,
98100
out_peers: 1,
99101
reserved_nodes: vec![],
100102
non_reserved_mode: NonReservedPeerMode::Accept,
101103
},
104+
NotificationMetrics::new(None),
105+
network_config.peer_store_handle(),
102106
);
103-
let worker = NetworkWorker::<runtime::Block, runtime::Hash>::new(Params::<
104-
runtime::Block,
105-
runtime::Hash,
106-
NetworkWorker<_, _>,
107-
> {
107+
let worker = N::new(Params::<B, H, N> {
108108
block_announce_config,
109-
role: Role::Full,
109+
role,
110110
executor: Box::new(|f| {
111111
tokio::spawn(f);
112112
}),
@@ -123,15 +123,21 @@ pub fn create_network_worker(
123123
(worker, rx, notification_service)
124124
}
125125

126-
async fn run_serially(size: usize, limit: usize) {
126+
async fn run_serially<B, H, N>(size: usize, limit: usize)
127+
where
128+
B: BlockT<Hash = H256> + 'static,
129+
H: ExHashT,
130+
N: NetworkBackend<B, H>,
131+
{
127132
let listen_address1 = get_listen_address();
128133
let listen_address2 = get_listen_address();
129-
let (mut worker1, _rx1, _notification_service1) = create_network_worker(listen_address1);
130-
let service1 = worker1.service().clone();
131-
let (worker2, rx2, _notification_service2) = create_network_worker(listen_address2.clone());
132-
let peer_id2 = *worker2.local_peer_id();
134+
let (worker1, _rx1, _notification_service1) = create_network_worker::<B, H, N>(listen_address1);
135+
let service1 = worker1.network_service().clone();
136+
let (worker2, rx2, _notification_service2) =
137+
create_network_worker::<B, H, N>(listen_address2.clone());
138+
let peer_id2 = worker2.network_service().local_peer_id();
133139

134-
worker1.add_known_address(peer_id2, listen_address2.into());
140+
worker1.network_service().add_known_address(peer_id2, listen_address2.into());
135141

136142
let network1_run = worker1.run();
137143
let network2_run = worker2.run();
@@ -188,15 +194,21 @@ async fn run_serially(size: usize, limit: usize) {
188194
// The libp2p request-response implementation does not provide any backpressure feedback.
189195
// So this benchmark is useless until we implement it for litep2p.
190196
#[allow(dead_code)]
191-
async fn run_with_backpressure(size: usize, limit: usize) {
197+
async fn run_with_backpressure<B, H, N>(size: usize, limit: usize)
198+
where
199+
B: BlockT<Hash = H256> + 'static,
200+
H: ExHashT,
201+
N: NetworkBackend<B, H>,
202+
{
192203
let listen_address1 = get_listen_address();
193204
let listen_address2 = get_listen_address();
194-
let (mut worker1, _rx1, _notification_service1) = create_network_worker(listen_address1);
195-
let service1 = worker1.service().clone();
196-
let (worker2, rx2, _notification_service2) = create_network_worker(listen_address2.clone());
197-
let peer_id2 = *worker2.local_peer_id();
205+
let (worker1, _rx1, _notification_service1) = create_network_worker::<B, H, N>(listen_address1);
206+
let service1 = worker1.network_service().clone();
207+
let (worker2, rx2, _notification_service2) =
208+
create_network_worker::<B, H, N>(listen_address2.clone());
209+
let peer_id2 = worker2.network_service().local_peer_id();
198210

199-
worker1.add_known_address(peer_id2, listen_address2.into());
211+
worker1.network_service().add_known_address(peer_id2, listen_address2.into());
200212

201213
let network1_run = worker1.run();
202214
let network2_run = worker2.run();
@@ -261,10 +273,23 @@ fn run_benchmark(c: &mut Criterion) {
261273
let size = 2usize.pow(exponent);
262274
group.throughput(Throughput::Bytes(REQUESTS as u64 * size as u64));
263275
group.bench_with_input(
264-
BenchmarkId::new("consistently", label),
276+
BenchmarkId::new("libp2p/serially", label),
277+
&(size, REQUESTS),
278+
|b, &(size, limit)| {
279+
b.to_async(&rt).iter(|| {
280+
run_serially::<runtime::Block, runtime::Hash, NetworkWorker<_, _>>(size, limit)
281+
});
282+
},
283+
);
284+
group.bench_with_input(
285+
BenchmarkId::new("litep2p/serially", label),
265286
&(size, REQUESTS),
266287
|b, &(size, limit)| {
267-
b.to_async(&rt).iter(|| run_serially(size, limit));
288+
b.to_async(&rt).iter(|| {
289+
run_serially::<runtime::Block, runtime::Hash, Litep2pNetworkBackend>(
290+
size, limit,
291+
)
292+
});
268293
},
269294
);
270295
}

0 commit comments

Comments
 (0)