🚀 Linux: Performance & Kernel Tuning
::: info
L’ottimizzazione in Linux consiste nel bilanciare l’uso della CPU, della memoria e dell’I/O del disco per ridurre i colli di bottiglia durante l’esecuzione di calcoli intensivi. Interverremo sui parametri del kernel tramite sysctl e sulla gestione della memoria tramite ZRAM.
:::
1. Gestione Memoria: ZRAM vs Swap
Lo Swap su disco (anche su NVMe) è ordini di grandezza più lento della RAM. La ZRAM crea un dispositivo di swap compresso direttamente nella RAM. Quando il sistema esaurisce la memoria, comprime i dati invece di scriverli sul disco.
Installazione e Configurazione (Debian/Ubuntu)
# Installazione dello strumento di gestione
sudo apt update && sudo apt install zram-tools -y
# Configurazione del servizio
# Modifica il file /etc/default/zramswap
# Imposta PERCENT=25 (usa il 25% della RAM per la compressione)
sudo nano /etc/default/zramswap
# Riavvio del servizio
sudo systemctl restart zramswap
Ottimizzazione Swappiness
Il valore di swappiness (0-100) definisce quanto aggressivamente il kernel sposta i dati in swap. Per una workstation/server, vogliamo che Linux usi la RAM il più possibile.
# Verifica il valore attuale (default spesso 60)
cat /proc/sys/vm/swappiness
# Imposta a 10 (consigliato per workstation/AI server)
sudo sysctl -w vm.swappiness=10
# Rendi la modifica persistente
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
2. CPU Performance: Governors
I moderni processori scalano la frequenza per risparmiare energia. Per lo sviluppo software, vogliamo che la CPU reagisca istantaneamente.
Impostare il Governor “Performance”
# Installazione utility
sudo apt install cpufrequtils -y
# Imposta tutti i core in modalità performance
sudo cpufreq-set -g performance
# Verifica lo stato
cpufreq-info | grep "current policy"
3. Storage & I/O Scheduler
Il modo in care il kernel accoda le richieste di lettura/scrittura impatta sulla reattività del sistema, specialmente durante il caricamento di modelli LLM o database pesanti.
Ottimizzazione per SSD/NVMe
Per i dischi moderni, il miglior scheduler è spesso none o mq-deadline.
# Verifica lo scheduler attivo (es. per /dev/nvme0n1)
cat /sys/block/nvme0n1/queue/scheduler
# Se vedi [mq-deadline], è già ottimizzato per SSD.
# Se hai molti processi concorrenti, puoi forzare 'none' per ridurre l'overhead della CPU.
echo "none" | sudo tee /sys/block/nvme0n1/queue/scheduler
📈 Architettura delle Risorse (Mermaid)
4. Kernel Tweaks via sysctl
Parametri avanzati per migliorare il throughput del network e il limite di file aperti (critico per Docker/Proxmox).
Aggiungi queste righe a /etc/sysctl.conf:
# Aumenta il numero massimo di file aperti
fs.file-max = 2097152
# Ottimizzazione buffer di rete per trasferimenti veloci (1Gbps+)
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Migliora la gestione delle connessioni entranti
net.core.somaxconn = 4096
Applica le modifiche: sudo sysctl -p
💡 Note dell’Ingegnere (Critical Thinking)
- ZRAM vs LLM: Se carichi un modello da 70B che occupa quasi tutta la RAM, la ZRAM potrebbe rallentare l’inferenza perché la CPU deve comprimere/decomprimere continuamente i pesi del modello. Monitora l’uso della CPU con
btop. - Thermal Throttling: Usare il governor
performancesu un laptop (come il tuo HP) potrebbe causare surriscaldamento. Se le ventole sono troppo rumorose, usa il governorschedutil(un ottimo compromesso moderno). - Dirty Ratio: Se scrivi molti dati su NAS (QNAP/Synology), aumenta
vm.dirty_ratioper permettere a Linux di usare più RAM come buffer prima di scrivere fisicamente sulla rete.
Ultimo aggiornamento: {{UPDATE_DATE}} | Tags: #Linux #Kernel #Performance #ZRAM #Sysctl