@@ -22,16 +22,16 @@ use criterion::{
2222} ;
2323use 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 } ;
3332use 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 } ;
3535use 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