Skip to content

Commit 9d7a926

Browse files
authored
Tune UDP rmem/wmem using sys-tuner daemon (solana-labs#7273)
1 parent 0a390cb commit 9d7a926

File tree

4 files changed

+48
-5
lines changed

4 files changed

+48
-5
lines changed

Cargo.lock

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

net/remote/remote-node.sh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,6 @@ cat >> ~/solana/on-reboot <<EOF
126126
PATH="$HOME"/.cargo/bin:"$PATH"
127127
export USE_INSTALL=1
128128
129-
# shellcheck source=/dev/null
130-
SUDO_OK=1 source scripts/tune-system.sh
131-
132129
sudo RUST_LOG=info ~solana/.cargo/bin/solana-sys-tuner --user $(whoami) > sys-tuner.log 2>&1 &
133130
echo \$! > sys-tuner.pid
134131

sys-tuner/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ solana-logger = { path = "../logger", version = "0.22.0" }
2121
unix_socket2 = "0.5.4"
2222
users = "0.9.1"
2323
nix = "0.16.0"
24+
sysctl = "0.4.0"
2425

2526
[lib]
2627
name = "solana_sys_tuner"

sys-tuner/src/main.rs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use clap::{crate_description, crate_name, value_t_or_exit, App, Arg};
22
use log::*;
33

44
#[cfg(target_os = "linux")]
5-
fn tune_system(uid: u32) {
5+
fn tune_poh_service_priority(uid: u32) {
66
fn find_pid<P: AsRef<std::path::Path>, F>(
77
name: &str,
88
path: P,
@@ -64,6 +64,34 @@ fn tune_system(uid: u32) {
6464
}
6565
}
6666

67+
#[cfg(target_os = "linux")]
68+
fn tune_kernel_udp_buffers() {
69+
use sysctl::CtlValue::String;
70+
use sysctl::Sysctl;
71+
fn sysctl_write(name: &str, value: &str) {
72+
if let Ok(ctl) = sysctl::Ctl::new(name) {
73+
info!("Old {} value {:?}", name, ctl.value());
74+
let ctl_value = String(value.to_string());
75+
match ctl.set_value(String(value.to_string())) {
76+
Ok(v) if v == ctl_value => info!("Updated {} to {:?}", name, ctl_value),
77+
Ok(v) => info!(
78+
"Update returned success but {} was set to {:?}, instead of {:?}",
79+
name, v, ctl_value
80+
),
81+
Err(e) => error!("Failed to set {} to {:?}. Err {:?}", name, ctl_value, e),
82+
}
83+
} else {
84+
error!("Failed to find sysctl {}", name);
85+
}
86+
}
87+
88+
// Reference: https://medium.com/@CameronSparr/increase-os-udp-buffers-to-improve-performance-51d167bb1360
89+
sysctl_write("net.core.rmem_max", "134217728");
90+
sysctl_write("net.core.rmem_default", "134217728");
91+
sysctl_write("net.core.wmem_max", "134217728");
92+
sysctl_write("net.core.wmem_default", "134217728");
93+
}
94+
6795
#[cfg(unix)]
6896
fn main() {
6997
solana_logger::setup();
@@ -115,7 +143,10 @@ fn main() {
115143
if stream.is_ok() {
116144
info!("Tuning the system now");
117145
#[cfg(target_os = "linux")]
118-
tune_system(peer_uid);
146+
{
147+
tune_kernel_udp_buffers();
148+
tune_poh_service_priority(peer_uid);
149+
}
119150
}
120151
}
121152

0 commit comments

Comments
 (0)