start work on using seperate threads for sockets and handlers

This commit is contained in:
Joakim Frostegård 2020-04-11 19:35:15 +02:00
parent 8d7cbb7926
commit 3527952242
12 changed files with 180 additions and 98 deletions

View file

@ -23,8 +23,6 @@ pub fn bench(
config: &Config,
requests: Arc<Vec<([u8; MAX_REQUEST_BYTES], SocketAddr)>>
) -> (usize, Duration){
let mut responses = Vec::with_capacity(ANNOUNCE_REQUESTS);
let mut buffer = [0u8; MAX_PACKET_SIZE];
let mut cursor = Cursor::new(buffer.as_mut());
let mut num_responses: usize = 0;
@ -50,11 +48,10 @@ pub fn bench(
&state,
config,
&mut small_rng,
&mut responses,
requests,
);
for (response, _) in responses.drain(..) {
while let Ok((response, src)) = state.response_queue.pop(){
if let Response::Announce(_) = response {
num_responses += 1;
}

View file

@ -19,8 +19,6 @@ pub fn bench(
state: State,
requests: Arc<Vec<([u8; MAX_REQUEST_BYTES], SocketAddr)>>
) -> (usize, Duration){
let mut responses = Vec::with_capacity(ITERATIONS);
let mut buffer = [0u8; MAX_PACKET_SIZE];
let mut cursor = Cursor::new(buffer.as_mut());
let mut num_responses: usize = 0;
@ -42,9 +40,9 @@ pub fn bench(
let requests = requests.drain(..);
handle_connect_requests(&state, &mut rng, &mut responses, requests);
handle_connect_requests(&state, &mut rng, requests);
for (response, _) in responses.drain(..){
while let Ok((response, _)) = state.response_queue.pop(){
if let Response::Connect(_) = response {
num_responses += 1;
}

View file

@ -73,6 +73,8 @@ fn run(bench_config: BenchConfig){
let mut announce_data = (0usize, Duration::new(0, 0));
let mut scrape_data = (0usize, Duration::new(0, 0));
let config = Config::default();
println!("# Benchmarking request handlers\n");
// Benchmark connect handler
@ -95,7 +97,7 @@ fn run(bench_config: BenchConfig){
let pb = create_progress_bar("Connect handler", bench_config.num_rounds);
for _ in (0..bench_config.num_rounds).progress_with(pb){
let state = State::new();
let state = State::new(&config);
let handles: Vec<_> = (0..bench_config.num_threads).map(|_| {
let requests = requests.clone();
@ -115,7 +117,6 @@ fn run(bench_config: BenchConfig){
let mut rng = SmallRng::from_rng(thread_rng()).unwrap();
let info_hashes = create_info_hashes(&mut rng);
let config = Config::default();
// Benchmark announce handler
let last_torrents: Option<Arc<TorrentMap>> = {
@ -156,7 +157,7 @@ fn run(bench_config: BenchConfig){
let mut last_torrents = None;
for i in (0..bench_config.num_rounds).progress_with(pb){
let mut state = State::new();
let mut state = State::new(&config);
state.connections = connections.clone();
@ -185,7 +186,7 @@ fn run(bench_config: BenchConfig){
// Benchmark scrape handler
{
let mut state = State::new();
let mut state = State::new(&config);
state.torrents = last_torrents.unwrap();
let requests = scrape::create_requests(&mut rng, &info_hashes);

View file

@ -22,8 +22,6 @@ pub fn bench(
state: &State,
requests: Arc<Vec<([u8; MAX_REQUEST_BYTES], SocketAddr)>>
) -> (usize, Duration){
let mut responses = Vec::with_capacity(SCRAPE_REQUESTS);
let mut buffer = [0u8; MAX_PACKET_SIZE];
let mut cursor = Cursor::new(buffer.as_mut());
let mut num_responses: usize = 0;
@ -45,11 +43,10 @@ pub fn bench(
handle_scrape_requests(
&state,
&mut responses,
requests,
);
for (response, _src) in responses.drain(..){
while let Ok((response, _)) = state.response_queue.pop(){
if let Response::Scrape(_) = response {
num_responses += 1;
}