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.
