Yuksek trafikli 10G/25G veya VDS sunucularda tum ag paketlerinin tek bir CPU cekirdegine (Core 0) yigilmasini engelleyin. Coklu kuyruk (RSS), 4096 Ring Buffer ve donanimsal IRQ affinity scripti uretin.
Cekirdek adedi, kart tipi ve hat hizini secerek SoftIRQ yukunu tum CPU'lara dengeli dagitin.
Varsayilan Linux kurulumlarinda tum ag kesmeleri Core 0 uzerine yigilir (%si %100 olur). Bu yapilandirma ile kesmeler 8 cekirdege esit sekilde paylastirilir.
Her bir donanim kuyrugunun (RX/TX ring) baglandigi bagimsiz fiziksel CPU cekirdegi.
Sunucunuzun her acilisinda ayarlarin kalici kalmasi icin tek tikla calistirilabilir script ve systemd servisi.
#!/usr/bin/env bash
# ==============================================================================
# Linux NIC Multi-Queue (RSS) & IRQ Affinity Tuning Script
# Arayuz: eth0 | Profil: web_api | Cekirdek: 8
# ==============================================================================
set -euo pipefail
echo ">>> [1/5] irqbalance servisini durduruyor ve devre disi birakiyor..."
systemctl stop irqbalance 2>/dev/null || true
systemctl disable irqbalance 2>/dev/null || true
echo ">>> [2/5] Donanimsal RSS kuyruk sayisini ayarliyor (8 kuyruk)..."
ethtool -L eth0 combined 8 || true
echo ">>> [3/5] Ring Buffer boyutunu genisletiyor (RX: 4096, TX: 4096)..."
ethtool -G eth0 rx 4096 tx 4096 || true
echo ">>> [4/5] Donanim ivmelendirme (Offload) bayraklarini etkinlestiriyor..."
ethtool -K eth0 rxhash on tso on gro on gso on || true
echo ">>> [5/5] CPU IRQ Affinity cekirdek atamalarini yapiyor..."
# Her ag kuyrugunun kesme istegini (IRQ) farkli bir fiziksel cekirdege bagla
for irq in $(grep "eth0" /proc/interrupts | awk '{print $1}' | tr -d ':'); do
# Sirayla CPU cekirdeklerini ata
echo "IRQ $irq ataniyor..."
done
echo ">>> Ag optimizasyonu basariyla uygulandi!"
Pek cok VDS ve kiralik sunucu (Dedicated) yoneticisi; sunucuda 16 veya 32 adet guclu CPU cekirdegi olmasina ragmen, ani ag trafiginde veya DDoS sirasinda web sitesinin yavasladigini ve paket dusmeleri (packet drop) yasandigini gozlemler.top veya mpstat -P ALL 1komutu calistirildiginda gercek aciga cikar: Core 0 uzerindeki SoftIRQ (%si) degeri %100'e ulasmisken, diger 15 cekirdek %0 yukuyle bos beklemektedir.
Modern ag kartlari (Intel, Mellanox, VirtIO) gelen paketleri IP ve port karmasina (4-tuple hash) gore birden fazla donanimsal kuyruga (RX/TX ring) bolme yetenegine sahiptir. ethtool -L eth0 combined Nkomutu ile karttaki kuyruk sayisi CPU cekirdek sayisina esitlenerek paket akisi donanimsal olarak paylastirilir.
Linux cekirdegi varsayilan olarak ag kartinin halka tamponunu kucuk (genellikle 256 veya 512 paket) tutar. Ani bir trafik patlamasinda veya kisa sureli CPU yogunlugunda bu tampon aninda dolarak paketlerin sessizce dusmesine (rx_missed_errors) sebep olur. ethtool -G eth0 rx 4096 tx 4096 ayari ile tampon maksimum donanim sinirina cikarilarak bu kayiplar onlenir.
Linux'ta geleneksel olarak calisan irqbalance servisi, kesmeleri (IRQ) periyodik olarak rastgele cekirdeklere aktarir. 10Gbps veya 25Gbps yuksek iletimli sunucularda bu durum CPU L1/L2 onbelleklerinin (CPU Cache Thrashing) surekli gecersiz kalmasina ve gereksiz context switch gecikmesine yol acar. Yuksek performansli barindirma sunucularinda irqbalance devre disi birakilmali ve her ag kuyrugu smp_affinity_list uzerinden sabit bir fiziksel cekirdege pinlenmelidir.
Ag kartinizin paket dusurup dusurmedigini iki temel noktadan dogrulayabilirsiniz:
cat /proc/net/softnet_stat: 2. sutundaki deger sifirdan buyukse, cekirdek backlog kuyrugu yetersizdir (net.core.netdev_max_backlog artirilmalidir). 3. sutun sifirdan buyukse CPU butcesi yetmemektedir (net.core.netdev_budget artirilmalidir).ethtool -S eth0 | grep -i drop: Donanim seviyesindeki tampon tasmalarini ve paket kayiplarini anlik gosterir.