Ottimizzazione VPS e game server

Qualsiasi cosa inseritela qui
Rispondi
Avatar utente
Matteo
Admin
Admin
Messaggi: 49
Iscritto il: venerdì 5 novembre 2021, 11:10

Ottimizzazione VPS e game server

1. CPU pinning (vincolare un processo a un core specifico)

Immagina che la tua VPS abbia 4 core virtuali. Normalmente Linux decide da solo su quale core far girare un processo. Questo è comodo, ma può portare a micro-latenze: un processo “salta” da un core all’altro e perde tempo nella cache CPU.
Se invece dici al sistema “questo server di CoD gira sempre sul core 2”, ottieni prestazioni più stabili (meno lag e spike).

Esempio pratico:

Scopri su quali core puoi lavorare:

lscpu


Avvia un processo vincolato a un core (es. core 2):

taskset -c 2 ./cod4server start


LinuxGSM ha anche opzioni per passargli questi parametri. Non sempre serve, ma se hai più game server sulla stessa VPS, evita che si rubino cicli di CPU.

2. Tickrate e parametri di sistema (sysctl)

Il “tickrate” è la frequenza con cui il server aggiorna e invia gli stati di gioco ai client (movimenti, spari, hit detection). Nei giochi come CoD o Quake, un tickrate più alto = maggiore fluidità e precisione.

Linux di default non è ottimizzato per tickrate altissimi, perché pensa più a risparmiare risorse che a dare latenze millisecondo-precise.
Puoi cambiare alcune impostazioni del kernel con sysctl per renderlo più “responsivo”:

Aumentare la frequenza degli interrupt del timer (hz)

Modificare lo scheduler (che decide la priorità dei processi)

Disattivare o ridurre la latenza da risparmio energetico

Esempio:

# Riduci la latenza del networking
sudo sysctl -w net.ipv4.tcp_low_latency=1

# Dai più priorità ai processi interattivi (tipo i game server)
sudo sysctl -w kernel.sched_child_runs_first=0


Queste modifiche vanno capite e testate: non esiste un “settaggio magico universale”. Ma i server FPS vecchi tendono a beneficiarne.

3. Monitoring (Prometheus + Grafana o simili)

Immagina un cruscotto dell’auto: vedi giri motore, temperatura, velocità. Monitoring fa lo stesso per i tuoi server.

Prometheus raccoglie metriche (CPU, RAM, traffico di rete, query al DB).

Grafana le visualizza in dashboard belle e chiare.

Perché è utile?
Se un server inizia a laggare, non devi indovinare se è il processore, la RAM o il database intasato: lo vedi in tempo reale su un grafico. Puoi anche impostare allarmi (tipo “se l’uso CPU sta al 90% per più di 5 minuti, mandami un messaggio su Telegram”).

Esempio di cose che scopriresti:

Il tuo CoD4 satura un core al 100% ogni volta che c’è un’ondata di giocatori.

MariaDB ha un picco di query durante i cambi mappa.

Un VPS è più sovraccarico degli altri e conviene spostare un server altrove.

In breve:

CPU pinning = più stabilità, meno lag da “salti” tra core.

Sysctl/tickrate tuning = spremere il kernel per dare priorità ai tuoi game server invece che al risparmio energetico.

Monitoring = smettere di andare a sensazione e avere dati chiari su cosa sta succedendo.

Vuoi che ti mostri dei parametri sysctl specifici già usati da chi hosta server di CoD/Quake per migliorare tickrate e reattività?

Hai detto:
questo posso copiarlo ed incollarlo sul mio vps come root e funziona? # Riduci la latenza del networking
sudo sysctl -w net.ipv4.tcp_low_latency=1

# Dai più priorità ai processi interattivi (tipo i game server)
sudo sysctl -w kernel.sched_child_runs_first=0
ChatGPT ha detto:

Puoi incollarlo, ma facciamo chiarezza così non ti esplode nulla sotto i piedi 🙂

Quei comandi funzionano subito quando li lanci come root (non serve neanche sudo se sei già dentro come root). Però sono temporanei: appena riavvii la VPS tornano ai valori di default.

Ecco i dettagli:

1. Riduci la latenza del networking
sysctl -w net.ipv4.tcp_low_latency=1


Dice allo stack TCP di preferire la latenza bassa al posto della massima banda.

Nei game server è quasi sempre meglio: meno ritardo nei pacchetti.

2. Priorità ai processi interattivi
sysctl -w kernel.sched_child_runs_first=0


È una piccola modifica allo scheduler di Linux: i processi figli non partono subito con priorità rispetto al padre.

Risultato: i processi interattivi (come i tuoi game server) hanno un comportamento più prevedibile.

Non è una “turbo modalità”, ma riduce certi ritardi casuali.

Come renderli permanenti

Se ti piacciono i risultati, aggiungi queste righe al file /etc/sysctl.conf oppure crea un file dedicato in /etc/sysctl.d/99-gameserver.conf:

net.ipv4.tcp_low_latency=1
kernel.sched_child_runs_first=0


Poi ricarichi:

sysctl -p

⚠️ Nota importante

Non c’è rischio di distruggere la VPS con questi due settaggi: al massimo non noti differenze.
Altri parametri (tipo quelli su timer HZ, o cose sullo scheduling CFS più avanzate) possono invece avere effetti collaterali, quindi questi due che hai citato sono un buon punto di partenza sicuro.
Rispondi