uses sendmmsg in streamer (#23062)
packet::send_to sends packets one by one: https://github.com/solana-labs/solana/blob/9213fcb11/streamer/src/packet.rs#L63-L75 sendmmsg uses a single system call for multiple messages: https://github.com/solana-labs/solana/blob/9213fcb11/streamer/src/sendmmsg.rs#L94
This commit is contained in:
parent
34443a238e
commit
c078ca3fb3
|
@ -3,8 +3,9 @@
|
|||
|
||||
use {
|
||||
crate::{
|
||||
packet::{self, send_to, PacketBatch, PacketBatchRecycler, PACKETS_PER_BATCH},
|
||||
packet::{self, PacketBatch, PacketBatchRecycler, PACKETS_PER_BATCH},
|
||||
recvmmsg::NUM_RCVMMSGS,
|
||||
sendmmsg::{batch_send, SendPktsError},
|
||||
socket::SocketAddrSpace,
|
||||
},
|
||||
crossbeam_channel::{Receiver, RecvTimeoutError, SendError, Sender},
|
||||
|
@ -37,6 +38,9 @@ pub enum StreamerError {
|
|||
|
||||
#[error("send packets error")]
|
||||
Send(#[from] SendError<PacketBatch>),
|
||||
|
||||
#[error(transparent)]
|
||||
SendPktsError(#[from] SendPktsError),
|
||||
}
|
||||
|
||||
pub type Result<T> = std::result::Result<T, StreamerError>;
|
||||
|
@ -242,7 +246,13 @@ fn recv_send(
|
|||
if let Some(stats) = stats {
|
||||
packet_batch.packets.iter().for_each(|p| stats.record(p));
|
||||
}
|
||||
send_to(&packet_batch, sock, socket_addr_space)?;
|
||||
let packets = packet_batch.packets.iter().filter_map(|pkt| {
|
||||
let addr = pkt.meta.addr();
|
||||
socket_addr_space
|
||||
.check(&addr)
|
||||
.then(|| (&pkt.data[..pkt.meta.size], addr))
|
||||
});
|
||||
batch_send(sock, &packets.collect::<Vec<_>>())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue