benchmark_network/
lib.rs

1use crate::config::Config;
2pub mod config;
3pub mod message;
4pub mod network;
5pub mod unit;
6use crate::{
7    message::{message::Message, mtype::Type},
8    network::{client, io::send},
9    unit::*,
10};
11use network::server;
12use std::time::Instant;
13
14pub fn run_server(config: Config, is_limited: Option<usize>) {
15    let port = config.port();
16    let pool_size = 1;
17    let queue_size = 1;
18    server::listen_portable(port, pool_size, queue_size, is_limited);
19}
20
21pub fn run_client(config: Config) {
22    let server_address = config.server();
23    let port = config.port();
24    println!("Connecting to {}:{}...", server_address, port);
25    let mut stream = client::connect(server_address, port).expect("Unable to connect");
26    assert_eq!(stream.peer_addr().unwrap().ip(), server_address);
27
28    let client_address = config.client();
29    let body_size = config.message_size();
30    let mtype = Type::Benchmark;
31    let msg = Message::new(client_address, server_address, body_size, mtype);
32    let mut sent_batches = 0;
33    loop {
34        let now = Instant::now();
35
36        for _counter in 0..config.batch_size() {
37            let size = send(&mut stream, &msg).expect("Unable to send message");
38            assert_eq!(size, body_size);
39        }
40
41        let elapsed = now.elapsed().as_secs_f64();
42        let sent_bytes = (config.message_size() * config.batch_size()) as f64;
43        let sent_bits = (sent_bytes * 8.0) as f64;
44
45        let throughput = sent_bits / elapsed;
46        println!(
47            "Throughput: {}; Sent bytes: {}; Time elapsed: {:.2}s",
48            throughput_to_string(throughput),
49            data_to_string(sent_bytes),
50            elapsed
51        );
52        sent_batches += 1;
53        if sent_batches == config.number_batches() {
54            break;
55        }
56    }
57
58    let msg = Message::new(client_address, server_address, 0, Type::Close);
59    let size = send(&mut stream, &msg).expect("Unable to send message");
60    assert_eq!(size, 0);
61}