66 lines
2.1 KiB
Rust
66 lines
2.1 KiB
Rust
|
#![feature(test)]
|
||
|
|
||
|
extern crate solana_core;
|
||
|
extern crate test;
|
||
|
|
||
|
use log::*;
|
||
|
use solana_core::bank_forks::BankForks;
|
||
|
use solana_core::cluster_info::{ClusterInfo, Node};
|
||
|
use solana_core::contact_info::ContactInfo;
|
||
|
use solana_core::genesis_utils::{create_genesis_block, GenesisBlockInfo};
|
||
|
use solana_core::leader_schedule_cache::LeaderScheduleCache;
|
||
|
use solana_core::packet::to_packets_chunked;
|
||
|
use solana_core::retransmit_stage::retransmit;
|
||
|
use solana_core::test_tx::test_tx;
|
||
|
use solana_runtime::bank::Bank;
|
||
|
use solana_sdk::pubkey::Pubkey;
|
||
|
use solana_sdk::timing::timestamp;
|
||
|
use std::net::UdpSocket;
|
||
|
use std::sync::mpsc::channel;
|
||
|
use std::sync::{Arc, RwLock};
|
||
|
use test::Bencher;
|
||
|
|
||
|
#[bench]
|
||
|
fn bench_retransmit(bencher: &mut Bencher) {
|
||
|
solana_logger::setup();
|
||
|
let mut cluster_info = ClusterInfo::new_with_invalid_keypair(Node::new_localhost().info);
|
||
|
const NUM_PEERS: usize = 2;
|
||
|
for _ in 0..NUM_PEERS {
|
||
|
let id = Pubkey::new_rand();
|
||
|
let contact_info = ContactInfo::new_localhost(&id, timestamp());
|
||
|
cluster_info.insert_info(contact_info);
|
||
|
}
|
||
|
let cluster_info = Arc::new(RwLock::new(cluster_info));
|
||
|
|
||
|
let GenesisBlockInfo { genesis_block, .. } = create_genesis_block(100_000);
|
||
|
let bank0 = Bank::new(&genesis_block);
|
||
|
let bank_forks = BankForks::new(0, bank0);
|
||
|
let bank = bank_forks.working_bank();
|
||
|
let bank_forks = Arc::new(RwLock::new(bank_forks));
|
||
|
let (packet_sender, packet_receiver) = channel();
|
||
|
let socket = UdpSocket::bind("0.0.0.0:0").unwrap();
|
||
|
socket.set_nonblocking(true).unwrap();
|
||
|
|
||
|
let leader_schedule_cache = Arc::new(LeaderScheduleCache::new_from_bank(&bank));
|
||
|
|
||
|
let tx = test_tx();
|
||
|
let len = 4096;
|
||
|
let chunk_size = 1024;
|
||
|
let batches = to_packets_chunked(&vec![tx; len], chunk_size);
|
||
|
|
||
|
bencher.iter(move || {
|
||
|
for packets in batches.clone() {
|
||
|
packet_sender.send(packets).unwrap();
|
||
|
}
|
||
|
info!("sent...");
|
||
|
retransmit(
|
||
|
&bank_forks,
|
||
|
&leader_schedule_cache,
|
||
|
&cluster_info,
|
||
|
&packet_receiver,
|
||
|
&socket,
|
||
|
)
|
||
|
.unwrap();
|
||
|
});
|
||
|
}
|