Increase tpu coalescing and add parameter (#15536)
Should create larger entries on average
This commit is contained in:
@ -9,7 +9,7 @@ use solana_metrics::inc_new_counter_debug;
|
||||
pub use solana_sdk::packet::{Meta, Packet, PACKET_DATA_SIZE};
|
||||
use std::{io::Result, net::UdpSocket, time::Instant};
|
||||
|
||||
pub fn recv_from(obj: &mut Packets, socket: &UdpSocket, max_wait_ms: usize) -> Result<usize> {
|
||||
pub fn recv_from(obj: &mut Packets, socket: &UdpSocket, max_wait_ms: u64) -> Result<usize> {
|
||||
let mut i = 0;
|
||||
//DOCUMENTED SIDE-EFFECT
|
||||
//Performance out of the IO without poll
|
||||
@ -27,7 +27,7 @@ pub fn recv_from(obj: &mut Packets, socket: &UdpSocket, max_wait_ms: usize) -> R
|
||||
);
|
||||
match recv_mmsg(socket, &mut obj.packets[i..]) {
|
||||
Err(_) if i > 0 => {
|
||||
if start.elapsed().as_millis() > 1 {
|
||||
if start.elapsed().as_millis() as u64 > max_wait_ms {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -43,7 +43,7 @@ pub fn recv_from(obj: &mut Packets, socket: &UdpSocket, max_wait_ms: usize) -> R
|
||||
i += npkts;
|
||||
// Try to batch into big enough buffers
|
||||
// will cause less re-shuffling later on.
|
||||
if start.elapsed().as_millis() > max_wait_ms as u128 || i >= PACKETS_PER_BATCH {
|
||||
if start.elapsed().as_millis() as u64 > max_wait_ms || i >= PACKETS_PER_BATCH {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ fn recv_loop(
|
||||
channel: &PacketSender,
|
||||
recycler: &PacketsRecycler,
|
||||
name: &'static str,
|
||||
coalesce_ms: u64,
|
||||
) -> Result<()> {
|
||||
let mut recv_count = 0;
|
||||
let mut call_count = 0;
|
||||
@ -52,7 +53,7 @@ fn recv_loop(
|
||||
if exit.load(Ordering::Relaxed) {
|
||||
return Ok(());
|
||||
}
|
||||
if let Ok(len) = packet::recv_from(&mut msgs, sock, 1) {
|
||||
if let Ok(len) = packet::recv_from(&mut msgs, sock, coalesce_ms) {
|
||||
if len == NUM_RCVMMSGS {
|
||||
num_max_received += 1;
|
||||
}
|
||||
@ -86,6 +87,7 @@ pub fn receiver(
|
||||
packet_sender: PacketSender,
|
||||
recycler: PacketsRecycler,
|
||||
name: &'static str,
|
||||
coalesce_ms: u64,
|
||||
) -> JoinHandle<()> {
|
||||
let res = sock.set_read_timeout(Some(Duration::new(1, 0)));
|
||||
if res.is_err() {
|
||||
@ -96,7 +98,14 @@ pub fn receiver(
|
||||
.name("solana-receiver".to_string())
|
||||
.spawn(move || {
|
||||
thread_mem_usage::datapoint(name);
|
||||
let _ = recv_loop(&sock, exit, &packet_sender, &recycler.clone(), name);
|
||||
let _ = recv_loop(
|
||||
&sock,
|
||||
exit,
|
||||
&packet_sender,
|
||||
&recycler.clone(),
|
||||
name,
|
||||
coalesce_ms,
|
||||
);
|
||||
})
|
||||
.unwrap()
|
||||
}
|
||||
@ -207,6 +216,7 @@ mod test {
|
||||
s_reader,
|
||||
Recycler::new_without_limit(""),
|
||||
"test",
|
||||
1,
|
||||
);
|
||||
let t_responder = {
|
||||
let (s_responder, r_responder) = channel();
|
||||
|
Reference in New Issue
Block a user