İçeriğe Atla
Rehberler · 14 dk okuma · görüntülenme
100%

Linux SoftIRQ Satürasyonu ve IRQ Affinity Runbook'u

Paket drop, yüksek softirq ve ksoftirqd baskısında hızlı triage, ölçüm ve güvenli tuning adımları (ring, queue, IRQ, RPS).

SoftIRQ yükü, IRQ affinity ve paket işleme akışını gösteren kapak görseli

Üretimde bazı network incident’ları “servis bozuldu” gibi görünür ama kök sebep kernel’in paket işleme yolunda yaşanan satürasyondur: SoftIRQ artar, ksoftirqd CPU’yu yer, paketler drop olmaya başlar, gecikme yükselir. Bu tablo çoğu zaman “CPU boş görünüyor ama network ölü” şeklinde yanıltır.

Bu runbook; yüksek trafik gateway, NAT, edge proxy, IDS/IPS veya yoğun east-west trafiği olan node’larda, softirq satürasyonunu hızlı triage edip güvenli tuning yapmanız için pratik bir yol sunar.

SoftIRQ yükü, IRQ affinity ve paket işleme akışını gösteren kapak görseli
Network performansı sadece bandwidth değil, CPU’da paket işleme kapasitesidir.

Ne zaman şüphelenirim?

Şu semptomlar birlikte geliyorsa softirq düşünürüm:

  • p95/p99 latency artıyor, error rate yükseliyor
  • sar -n DEV ile rxdrop/txdrop artıyor
  • top/htop’ta ksoftirqd ve %si (softirq) yükseliyor
  • NIC istatistiklerinde rx_missed_errors, rx_no_buffer, ring overflow benzeri sayaçlar artıyor

0) Güvenlik: İlk 5 dakikada ne yapmam?

  • Kernel / NIC tuning’i “panic” ile değiştirirsen yanlış ayar daha büyük kesinti üretir.
  • Önce ölç, sonra küçük adım at, her adımda etkisini doğrula.

1) Hızlı triage: 10 komutluk kontrol listesi

1.1 CPU ve softirq dağılımı

mpstat -P ALL 1 5

Bak: bazı core’larda %si aşırı mı? Tek core’a yığılma var mı?

1.2 SoftIRQ sayaçları

cat /proc/softirqs

Bak: NET_RX ve NET_TX hızlı artıyor mu? Tek CPU’da mı?

1.3 NIC drop ve error sayaçları

ip -s link show dev eth0
ethtool -S eth0 | egrep -i 'drop|miss|error|no_buffer|timeout' | head -n 50

1.4 IRQ dağılımı

cat /proc/interrupts | egrep -i 'eth0|mlx|ixgbe|i40e|ena|virtio' | head -n 20

Bak: IRQ’lar tek CPU’da mı toplanmış?

1.5 Socket / TCP durumu (kuyruklar)

ss -s
netstat -s | head -n 80

1.6 Uygulama tarafı

  • Bu node’da aynı anda CPU heavy job var mı?
  • IRQ affinity değişti mi? (son config/deploy)

2) Kök neden sınıfları

Softirq incident’ını ben genelde şu sınıflara ayırırım:

  1. Tek CPU’ya yığılma (IRQ affinity kötü, queue sayısı düşük, irqbalance yanlış)
  2. NIC ring/queue yetersizliği (burst’te overflow)
  3. Packet processing maliyeti (conntrack/NAT, iptables/nftables, encapsulation, VXLAN/GRE)
  4. Driver/firmware (bug, offload uyumsuzluğu)
  5. Gürültülü komşu (virt üzerinde CPU steal / noisy neighbor)

Bu sınıfı belirlemek, doğru tuning knob’unu seçtirir.

3) Müdahale adımları (kontrollü)

3.1 IRQ affinity düzelt (en sık kazanç)

Amaç: NIC interrupt’larını tek core’a yığma.

  • irqbalance bazen iyi, bazen kötü çalışır. Üretimde kritik node’larda “bilinçli sabitleme” daha güvenlidir.

Kontrol:

systemctl status irqbalance

Uygulama:

  • NIC queue sayısına göre CPU core’ları seç
  • IRQ → core mapping yap
  • Değişim sonrası /proc/interrupts ile dağılımı doğrula

3.2 RX/TX queue sayısını artır

NIC’in desteklediği queue sayısı, paralel paket işleme kapasitesini belirler.

ethtool -l eth0
sudo ethtool -L eth0 combined 8

Not: değer, NIC/driver’a göre değişir. Aşırı artırmak da overhead üretir.

3.3 Ring buffer’ı büyüt (burst’te nefes alanı)

ethtool -g eth0
sudo ethtool -G eth0 rx 4096 tx 4096

Bu, mikroburs’lerde drop’u azaltabilir. Ama ring büyütmek gecikmeyi az da olsa artırabilir; ölçerek ilerle.

3.4 RPS/RFS (interrupt’tan sonra işi dağıt)

IRQ affinity ile yetmiyorsa, receive path’i dağıtmak için RPS düşünülebilir.

Bu knob’lar güçlüdür ama yanlışsa CPU tüketimini artırır. Bu yüzden:

  • Önce IRQ affinity + queue ile dene
  • Sonra sınırlı bir RPS ile canary uygula

3.5 Offload ayarları (GRO/LRO/TSO) — dikkatli

Offload’lar CPU’yu azaltabilir ama bazı trafik tiplerinde latency veya debug kabiliyetini etkileyebilir.

ethtool -k eth0 | head -n 40

Değişiklikleri kademeli yap, her adımda p95/p99 + drop’ları izle.

4) Doğrulama: “düzeldi” demek için kanıt

Ben şu kanıtları ararım:

  • rxdrop/txdrop sabitlendi veya düştü
  • %si dağıldı (tek core satüre değil)
  • ksoftirqd CPU tüketimi azaldı
  • Uygulama p95/p99 SLO bandına geri döndü

5) Kalıcı önlem: Alarm ve kapasite

Bu incident’lar tekrar eder. Kalıcı olarak:

  • softirq oranı için alarm (host-level)
  • NIC drop/error sayaçları için alarm
  • “peak PPS” ve “CPU per packet” için kapasite baseline
  • NAT/conntrack kullanıyorsan ayrı bütçe ve limitler

Sonuç

SoftIRQ satürasyonu, doğru runbook ile yönetilebilir bir incident sınıfıdır. Önce ölç, kök neden sınıfını belirle, sonra küçük ve doğrulanabilir adımlarla ilerle: IRQ affinity, queue, ring ve gerekirse RPS. Böylece “network bazen gidiyor” gibi belirsiz şikâyetler, kontrol edilebilir ve tekrarlanabilir bir operasyona dönüşür.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

Yeni yazılardan haberdar olun

Haftada bir yeni içerikler ve kaynaklar doğrudan e-postanıza gelsin.

Spam yok. Yalnızca yeni ve önemli içerikler için e-posta gönderilir.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar