mirror of https://github.com/ospab/ostp.git
perf: heavily tune UDP socket buffers via socket2 to support 10Gbps+ micro-burst resilience
This commit is contained in:
parent
ecba33e6d8
commit
f0a93b4161
|
|
@ -745,7 +745,7 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
|
|||
|
||||
[[package]]
|
||||
name = "ostp"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"base64",
|
||||
|
|
@ -762,7 +762,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "ostp-client"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
|
|
@ -773,13 +773,14 @@ dependencies = [
|
|||
"rand",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"socket2",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ostp-core"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
|
|
@ -812,7 +813,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "ostp-server"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"bytes",
|
||||
|
|
@ -820,13 +821,14 @@ dependencies = [
|
|||
"rand",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"socket2",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ostp-tun-helper"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
|
|
|
|||
|
|
@ -16,3 +16,4 @@ serde_json = "1.0"
|
|||
json_comments = "0.2"
|
||||
portable-atomic.workspace = true
|
||||
chrono = "0.4"
|
||||
socket2 = "0.6.3"
|
||||
|
|
|
|||
|
|
@ -609,9 +609,14 @@ impl Bridge {
|
|||
max_sent_history: 65536, // Greatly expanded to guarantee that oldest unacked packets are not prematurely popped and lost
|
||||
})?;
|
||||
|
||||
let socket = UdpSocket::bind(&self.local_bind_addr)
|
||||
.await
|
||||
.with_context(|| format!("failed to bind local udp {}", self.local_bind_addr))?;
|
||||
let addr = self.local_bind_addr.parse::<std::net::SocketAddr>().map_err(|e| anyhow::anyhow!("invalid bind addr: {}", e))?;
|
||||
let domain = if addr.is_ipv6() { socket2::Domain::IPV6 } else { socket2::Domain::IPV4 };
|
||||
let sock = socket2::Socket::new(domain, socket2::Type::DGRAM, Some(socket2::Protocol::UDP))?;
|
||||
let _ = sock.set_recv_buffer_size(33554432); // 32MB
|
||||
let _ = sock.set_send_buffer_size(33554432); // 32MB
|
||||
sock.bind(&addr.into())?;
|
||||
sock.set_nonblocking(true)?;
|
||||
let socket = UdpSocket::from_std(sock.into())?;
|
||||
|
||||
if self.turn_enabled {
|
||||
let turn_addr = if self.turn_server.contains(':') {
|
||||
|
|
|
|||
|
|
@ -13,3 +13,4 @@ ostp-core = { path = "../ostp-core" }
|
|||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
rand.workspace = true
|
||||
socket2 = "0.6.3"
|
||||
|
|
|
|||
|
|
@ -116,7 +116,14 @@ pub async fn run_server(
|
|||
}
|
||||
});
|
||||
|
||||
let socket = UdpSocket::bind(&bind_addr).await?;
|
||||
let addr = bind_addr.parse::<std::net::SocketAddr>().map_err(|e| anyhow::anyhow!("invalid bind addr: {}", e))?;
|
||||
let domain = if addr.is_ipv6() { socket2::Domain::IPV6 } else { socket2::Domain::IPV4 };
|
||||
let sock = socket2::Socket::new(domain, socket2::Type::DGRAM, Some(socket2::Protocol::UDP))?;
|
||||
let _ = sock.set_recv_buffer_size(33554432); // 32MB
|
||||
let _ = sock.set_send_buffer_size(33554432); // 32MB
|
||||
sock.bind(&addr.into())?;
|
||||
sock.set_nonblocking(true)?;
|
||||
let socket = UdpSocket::from_std(sock.into())?;
|
||||
let protocol_config = ProtocolConfig {
|
||||
role: NoiseRole::Responder,
|
||||
psk: [0u8; 32],
|
||||
|
|
|
|||
Loading…
Reference in New Issue