ethtool ile Ağ Arayüzü Donanım Bilgisi ve Bağlantı Durumu Sorgulama

Bir gün gece yarısı alarm çaldı. Uyku sersemliğiyle monitöre bakıyorum: üretim sunucusundaki bir uygulama sürekli timeout veriyor, ama ping atıyorum gidiyor, traceroute normal görünüyor. Ne var ki bir şeyler kesinlikle yanlış. O gece ethtool beni kurtardı. Çünkü sorun ağ kartının 1Gbps yerine 100Mbps’te çalışıyor olmasıydı ve bunu bulmak için tam olarak doğru araca ihtiyacım vardı.

ethtool, Linux sistemlerde ağ arayüzlerinin donanım düzeyindeki bilgilerine ulaşmak için kullanılan, çoğu sysadmin’in varlığından habersiz olduğu ama bir kez tanıdıktan sonra vazgeçemeyeceği bir komut satırı aracıdır. ip ve ifconfig sana IP adresi, MAC adresi ve istatistik gibi üst düzey bilgileri verir. ethtool ise daha derine iner: hız, duplex modu, otomatik müzakere (auto-negotiation), sürücü bilgisi, donanım offload özellikleri ve bağlantının fiziksel durumu gibi konuları sorgular.

ethtool Kurulumu ve Temel Kullanım

Çoğu modern Linux dağıtımında ethtool ya önceden yüklüdür ya da paket yöneticisiyle anında yüklenebilir.

# Debian/Ubuntu
apt install ethtool

# RHEL/CentOS/Rocky Linux
dnf install ethtool

# Kurulu olup olmadığını kontrol etmek için
which ethtool
ethtool --version

Temel kullanımı şu şekilde: komutun ardından arayüz adını yazıyorsunuz. Sistem artık eth0 yerine enp3s0, ens192, eno1 gibi öngörülebilir isimler kullandığından arayüz adını önce ip link show ile doğrulamak iyi bir alışkanlıktır.

# Temel bağlantı bilgisi
ethtool enp3s0

# Çıktı örneği:
# Settings for enp3s0:
#     Supported ports: [ TP ]
#     Supported link modes:   10baseT/Half 10baseT/Full
#                             100baseT/Half 100baseT/Full
#                             1000baseT/Full
#     Supported pause frame use: No
#     Supports auto-negotiation: Yes
#     Advertised link modes:  10baseT/Half 10baseT/Full
#                             100baseT/Half 100baseT/Full
#                             1000baseT/Full
#     Advertised pause frame use: No
#     Advertised auto-negotiation: Yes
#     Speed: 1000Mb/s
#     Duplex: Full
#     Auto-negotiation: on
#     Port: Twisted Pair
#     PHYAD: 0
#     Transceiver: internal
#     MDI-X: off (auto)
#     Link detected: yes

Bu çıktının her satırı bir şey anlatıyor. Speed ve Duplex en çok baktığım iki satır. Link detected: yes ise fiziksel kablo bağlantısının var olduğunu gösteriyor, yoksa no yazıyor ve bu başlı başına büyük bir ipucu.

Sürücü ve Donanım Bilgisi Sorgulamak

Bir sunucuyu ilk kez elinize aldığınızda, ya da bir ağ kartının hangi sürücüyü kullandığını anlamanız gerektiğinde -i parametresi devreye giriyor.

ethtool -i enp3s0

# Çıktı:
# driver: e1000e
# version: 3.2.6-k
# firmware-version: 0.13-4
# expansion-rom-version:
# bus-info: 0000:00:19.0
# supports-statistics: yes
# supports-test: yes
# supports-eeprom-access: yes
# supports-register-dump: yes
# supports-priv-flags: yes

driver: Hangi kernel modülünün bu kartı yönettiğini gösterir. e1000e Intel’in gigabit serisi için kullanılan sürücüdür. ixgbe ise Intel’in 10GbE kartları için kullanılır. VMware ortamlarında vmxnet3 görürsünüz.

bus-info: PCI slot bilgisini verir. Bu bilgiyle lspci komutunu birleştirerek kartın tam donanım kimliğine ulaşabilirsiniz.

firmware-version: NIC’in firmware sürümü. Bazı performans sorunları veya güvenlik açıkları firmware güncellemesiyle çözülür. Bu sürümü üreticinin sitesiyle karşılaştırmak bazen çok işe yarar.

# bus-info bilgisini lspci ile kullanmak
lspci -v -s 0000:00:19.0

İstatistiklere Bakmak: -S Parametresi

Paket kaybı mı var? Hata sayacı artıyor mu? -S parametresi NIC’in kendi tuttuğu istatistikleri döker. Bu istatistikler ip -s link çıktısından çok daha ayrıntılıdır.

ethtool -S enp3s0

Çıktı karta göre değişir ama genelde şunları içerir:

  • rx_errors: Alınan hatalı paket sayısı. Sıfırdan farklıysa ciddi bir sorun var demektir.
  • tx_errors: Gönderilen hatalı paket sayısı.
  • rx_missed_errors: Tampon doluğu için alınamayan paketler. Bu değer artıyorsa interrupt affinity veya ring buffer ayarlarına bakmak gerekiyor.
  • collisions: Çarpışma sayısı. Full-duplex bağlantılarda sıfır olmalı. Değilse duplex uyumsuzluğu vardır.

Gerçek hayatta bu çıktıyı grep ile filtrelemek çok pratik oluyor:

# Sadece hata sayaçlarına bakmak
ethtool -S enp3s0 | grep -i error

# Belirli aralıklarla izlemek
watch -n 2 'ethtool -S enp3s0 | grep -E "error|drop|miss"'

Bu izleme yöntemini üretimde aktif sorun giderirken sıkça kullanıyorum. Sayaçların artıp artmadığını anlık görmek çok değerli.

Bağlantı Hızı ve Duplex Modunu Değiştirmek

Auto-negotiation her zaman beklediğiniz gibi çalışmaz. Özellikle eski anahtarlar veya bazı sanayii ekipmanları, müzakere sürecinde 100Mbps’te takılıp kalabiliyor. Manuel olarak hız ve duplex belirlemek bu durumları çözüyor.

# Hız ve duplex'i manuel olarak ayarlamak (önce auto-negotiation kapatılmalı)
ethtool -s enp3s0 speed 1000 duplex full autoneg off

# Tekrar auto-negotiation'ı açmak
ethtool -s enp3s0 autoneg on

# Sadece hız değiştirmek (duplex otomatik)
ethtool -s enp3s0 speed 100 duplex full autoneg off

Önemli uyarı: Bu değişiklikler geçicidir, sistem yeniden başlatıldığında sıfırlanır. Kalıcı hale getirmek için dağıtıma göre farklı yollar izlenmesi gerekir. NetworkManager kullanan sistemlerde:

# NetworkManager ile kalıcı ethtool ayarı
nmcli connection modify "Kablolu bağlantı 1" ethtool.ring-rx 4096
# veya /etc/NetworkManager/conf.d/ altında özel ayar dosyası oluşturulabilir

RHEL tabanlı sistemlerde /etc/sysconfig/network-scripts/ifcfg-enp3s0 dosyasına ETHTOOL_OPTS="speed 1000 duplex full autoneg off" satırı eklenerek de yapılabilir.

Ring Buffer Boyutunu Sorgulamak ve Ayarlamak

Yüksek trafik altında paket kaybı yaşıyorsanız ve NIC istatistiklerinde rx_missed_errors veya benzeri sayaçlar artıyorsa, ring buffer boyutu kritik bir ayar noktasıdır.

# Mevcut ring buffer boyutlarını görmek
ethtool -g enp3s0

# Çıktı:
# Ring parameters for enp3s0:
# Pre-set maximums:
# RX:     4096
# RX Mini:    0
# RX Jumbo:   0
# TX:     4096
# Current hardware settings:
# RX:     256
# TX:     256

Görüldüğü gibi kart 4096’ya kadar destekliyor ama sistem 256’da çalışıyor. Yüksek throughput senaryolarında bu bir darboğaz olabilir.

# Ring buffer boyutunu artırmak
ethtool -G enp3s0 rx 4096 tx 4096

# Sadece RX'i artırmak
ethtool -G enp3s0 rx 2048

Bu ayarı yaptıktan sonra tekrar -S ile istatistiklere bakın ve rx_missed_errors sayacının artmayı bırakıp bırakmadığını kontrol edin.

Donanım Offload Özelliklerini Sorgulamak

Modern NIC’ler bir çok işlemi CPU yerine kendi üzerlerinde yapabiliyor: checksum hesaplama, TCP segmentation, large receive offload gibi. Bunları kontrol etmek hem performans optimizasyonu hem de bazı sorunları debug etmek için önemlidir.

ethtool -k enp3s0

# Çıktının bir kısmı:
# Features for enp3s0:
# rx-checksumming: on
# tx-checksumming: on
#     tx-checksum-ipv4: off [fixed]
#     tx-checksum-ip-generic: on
# scatter-gather: on
# tcp-segmentation-offload: on
# generic-segmentation-offload: on
# generic-receive-offload: on
# large-receive-offload: off [fixed]

[fixed] olarak işaretlenen özellikler değiştirilemez, donanım tarafından desteklenmiyordur. Diğerleri açılıp kapatılabilir.

# Generic Receive Offload'u kapatmak (bazı packet capture senaryolarında gerekebilir)
ethtool -K enp3s0 gro off

# TCP Segmentation Offload'u kapatmak
ethtool -K enp3s0 tso off

# Birden fazla özelliği aynı anda değiştirmek
ethtool -K enp3s0 tso off gso off gro off

Özellikle Wireshark veya tcpdump ile paket yakalamak istediğinizde bazı offload özellikleri garip görünen paketlere yol açabilir. Troubleshooting sırasında bu özellikleri geçici olarak kapatmak analizi kolaylaştırır.

WoL (Wake on LAN) Durumunu Sorgulamak

Veri merkezlerinde uzaktan açma kabiliyeti kritiktir. WoL’un açık olup olmadığını ve hangi modda çalıştığını ethtool ile hızlıca görebilirsiniz.

ethtool enp3s0 | grep -i wake

# Çıktı:
# Supports Wake-on: pumbg
# Wake-on: d

Supports Wake-on satırındaki harfler desteklenen modları gösterir:

  • p: PHY activity
  • u: Unicast mesajı
  • m: Multicast mesajı
  • b: Broadcast mesajı
  • g: Magic packet (en yaygın kullanılan)
  • d: Devre dışı

Wake-on: d görüyorsanız WoL kapalı demektir. Magic packet ile açmak için:

ethtool -s enp3s0 wol g

Fiber ve SFP Modül Bilgisi

10GbE ve üzeri sistemlerde genellikle SFP/SFP+ modüller kullanılır. Bu modüllerin sıcaklık, voltaj ve optik güç gibi telemetri verilerine ethtool ile ulaşmak mümkün.

# SFP modül bilgisi (EEPROM verisi)
ethtool -m enp4s0f0

# DOM (Digital Optical Monitoring) verisi varsa
# Transceiver type, vendor adı, sıcaklık, voltaj vs. görürsünüz

Her kart ve sürücü bu özelliği desteklemez ama destekleyenler için bu çıktı altın değerindedir. Optik güç düştüğünde ya da sıcaklık normalin üzerine çıktığında fiziksel bir sorun olduğunu anlayabilirsiniz.

Toplu Ağ Kartı Raporu: Pratik Script

Birden fazla sunucu veya çok arayüzlü bir sistemde tüm ağ kartlarının durumunu tek seferde görmek için basit bir bash scripti işe yarıyor:

#!/bin/bash
# Tüm fiziksel ağ arayüzlerinin ethtool özetini çıkartır

for iface in $(ip link show | grep -E '^[0-9]+:' | awk '{print $2}' | tr -d ':' | grep -v lo); do
    echo "========================================="
    echo "Arayüz: $iface"
    echo "-----------------------------------------"
    
    # Hız ve bağlantı durumu
    speed=$(ethtool $iface 2>/dev/null | grep "Speed:" | awk '{print $2}')
    duplex=$(ethtool $iface 2>/dev/null | grep "Duplex:" | awk '{print $2}')
    link=$(ethtool $iface 2>/dev/null | grep "Link detected:" | awk '{print $3}')
    driver=$(ethtool -i $iface 2>/dev/null | grep "driver:" | awk '{print $2}')
    
    echo "Hız: ${speed:-bilinmiyor}"
    echo "Duplex: ${duplex:-bilinmiyor}"
    echo "Bağlantı: ${link:-bilinmiyor}"
    echo "Sürücü: ${driver:-bilinmiyor}"
    echo ""
done

Bu scripti /usr/local/bin/net-summary olarak kaydetip çalıştırılabilir yaparsanız her an hızlıca durumu görebilirsiniz. Ansible ile fleet genelinde çalıştırmak da mümkün elbette.

Gerçek Dünya Senaryosu: Duplex Uyumsuzluğu

Daha önce bahsettiğim gecenin devamı şöyle gelişti. ethtool enp3s0 çıktısına baktığımda şunu gördüm:

Speed: 100Mb/s
Duplex: Half
Auto-negotiation: on
Link detected: yes

Sorun belliydi: Half-duplex. Bu, aynı anda hem gönderip hem alamıyorsunuz demek. Yüksek trafik altında bu adeta ölüm çanıdır. Network ekibi switch portunu kontrol etti, port yanlışlıkla speed 100 duplex half olarak sabitlenmişti ve NIC auto-negotiation yaptığında bununla müzakere ederek Half-duplex’te anlaşmışlardı.

Switch tarafındaki ayar düzeltildikten sonra NIC otomatik olarak 1000Mbps Full-duplex’e geçti. Uygulama timeout’ları anında durdu. Bulmak 45 dakika, çözmek 2 dakika sürdü. ethtool olmasa sabaha kadar uğraşırdık.

Interrupt Affinity Kontrolü

Yüksek trafik senaryolarında NIC interruptlarının hangi CPU çekirdeğine atandığını bilmek önemlidir. Direkt ethtool komutu değil ama onunla birlikte kullanılan bir akış:

# NIC'in kullandığı interrupt numaralarını bulmak
cat /proc/interrupts | grep enp3s0

# Interrupt affinity'yi kontrol etmek
cat /proc/irq/[interrupt_no]/smp_affinity

# ethtool ile kaç tane RX/TX kuyruğu olduğuna bakmak
ethtool -l enp3s0

# Kuyruk sayısını değiştirmek
ethtool -L enp3s0 combined 4

Çok çekirdekli sistemlerde RSS (Receive Side Scaling) ve interrupt affinity doğru ayarlanmazsa tüm ağ trafiği tek bir çekirdeğe yığılabilir. Bu da %100 CPU kullanımına ve düşen performansa yol açar.

Monitoring İçin ethtool’u Otomatize Etmek

Prometheus ve node_exporter kullanan ortamlarda ethtool istatistiklerini metrik olarak toplamak mümkündür. node_exporter’ın --collector.ethtool özelliği bunu doğrudan destekler:

# node_exporter'ı ethtool collector ile başlatmak
node_exporter --collector.ethtool

# Hangi metriklerin toplandığını kontrol etmek
curl -s localhost:9100/metrics | grep ethtool

Bu sayede Grafana dashboardlarında NIC hata sayaçlarını görselleştirebilir, alertler kurabilirsiniz. rx_errors veya rx_missed_errors belirli bir eşiği aşınca alarm almak çok değerli.

Zabbix kullananlar için ise bir external check scripti yazıp belirli sayaçları düzenli aralıklarla sorgulayabilirsiniz.

Sık Kullanılan Parametreler Özeti

Referans olarak sık kullandığım parametreler:

  • ethtool : Temel bağlantı bilgisi, hız, duplex, auto-negotiation
  • -i : Sürücü, firmware ve PCI bus bilgisi
  • -S : Detaylı NIC istatistikleri ve hata sayaçları
  • -g : Ring buffer boyutlarını göster
  • -G : Ring buffer boyutlarını değiştir
  • -k : Donanım offload özelliklerini göster
  • -K : Donanım offload özelliklerini değiştir
  • -l : Kanal (kuyruk) sayısını göster
  • -L : Kanal sayısını değiştir
  • -m : Transceiver/SFP modül bilgisi
  • -s : Hız, duplex, WoL gibi ayarları değiştir
  • -t : NIC üzerinde self-test çalıştır

Sonuç

ethtool, sysadmin araç kutusunun en değerli ama en az kullanılan aletlerinden biri. Ağla ilgili bir sorun yaşadığınızda önce ping ve traceroute‘a bakmak doğal bir refleks. Ama fiziksel katmanda bir şeyler ters gidiyorsa, yani hız yanlış müzakere edilmişse, ring buffer doluyorsa, NIC firmware’i buggy ise, bunu görmek için ethtool şart.

Benim kişisel alışkanlığım, yeni bir sunucuyu teslim aldığımda ya da kurulumunu yaptığımda ilk çalıştırdığım komutlar arasında ethtool -i ve ethtool bulunuyor. Bu sayede ağ kartının doğru tanındığından, doğru hızda çalıştığından ve firmware sürümünün güncel olduğundan emin oluyorum. Sonradan yaşanacak problemlerin önemli bir kısmını bu basit kontroller baştan engelliyor.

Gece yarısı alarm almak istemiyorsanız, ethtoolu daha iyi tanımanızı tavsiye ederim.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir