From 781609b27a9d42f59f50c9850abc42bcda025cfc Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Fri, 11 Feb 2022 15:47:45 +0000 Subject: [PATCH] uses sendmmsg in streamer (backport #23062) (#23080) * 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 (cherry picked from commit c078ca3fb3e203dbd4f3a9556166695e8223cea7) # Conflicts: # streamer/src/streamer.rs * removes mergify merge conflicts Co-authored-by: behzad nouri --- streamer/src/streamer.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/streamer/src/streamer.rs b/streamer/src/streamer.rs index 9f7db9c546..004c584642 100644 --- a/streamer/src/streamer.rs +++ b/streamer/src/streamer.rs @@ -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, }, solana_sdk::timing::timestamp, @@ -34,6 +35,9 @@ pub enum StreamerError { #[error("send packets error")] Send(#[from] SendError), + + #[error(transparent)] + SendPktsError(#[from] SendPktsError), } pub type Result = std::result::Result; @@ -126,7 +130,13 @@ fn recv_send( ) -> Result<()> { let timer = Duration::new(1, 0); let packet_batch = r.recv_timeout(timer)?; - 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::>())?; Ok(()) }