NIC'imin hızını nasıl doğrularım?


119

Linux'a yeni bir gigabit ağ arayüz kartı (NIC) kurdum. Gerçekten gigabit hızlarına ayarlanmış olup olmadığını nasıl anlarım? ethtoolHızı ayarlama seçeneğine sahip olduğumu görüyorum , ancak şu anki hızını nasıl rapor edeceğimi bilemiyorum.


1
ethtool -h diyor ki: ethtool DEVNAME Cihaz hakkında standart bilgileri görüntüle
Ryan Babchishin

Yanıtlar:


165

Sadece ethtool eth0gerekli gibi bir komut kullanın: gerekli bilgileri almak için. Ör:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s

2
Tüm arayüzlerinizin tam hızını kendi hızlarında kullanmak istiyorsanız, şu komutu kullanabilirsiniz:for i in $(netstat -i | cut -f1 -d" " | tail -n+3) ; do echo "$i: $(ethtool "$i" | grep Speed | sed 's/Speed://g')" ; done
Kod Kaynağı

"Hız: Bilinmeyen!" Alırsanız yanlış ethXX adını kullanıyor olabilirsiniz, çifte çeke değer :)
rogerdpack

76

Ethtool eksik olduğunda çekirdekten gelen bilgileri kullanmak mümkündür:

cat /sys/class/net/<interface>/speed

Eth0 isimli arayüz için örnek:

cat /sys/class/net/eth0/speed

5
Not: Yalnızca 2.6.33 sürümünden beri kullanılabilir
zhaorufei

6
"Geçersiz değişken" in alınması
wi1

@ wi1: Kullanımı açıklığa kavuşturmak için bir örnek eklendi. Şimdi çalışıyor mu
Hıristiyan

@Christian Evet, teşekkürler, ancak okuduğum bazı arayüzlerimden beklenenler bu yüzden hepsi iyiyim
wi1

RHEL6 bunu 2.6.32 çekirdeğinde destekledi.
Dan Pritts

42

NOT: için man sayfası mii-toolşu feragatnameye sahiptir:

This program is obsolete. For replacement check ethtool.

mii-toolAnlaşmalı ağ hızını izlemek için kullanın .

Ör.

eth0: no link
eth1: negotiated 100baseTx-FD, link ok

15
Debian tabanlı sistemler için ethtoolvarsayılan olarak yüklenmez. Ancak mii-tool, temel "net-tools" paketinin bir parçası olarak. Yani bu benim için en iyi çözümdü.
mivk

1
Bunu, mii-aracı için man sayfasında görüyorum. "Bu program eski. : |
rogerdpack

İken mii-toolraporlar 'müzakere 100 BaseTX-FD akış kontrolünü ok bağlantı', hem ethtoolve cat /sys/class/net/eth…/speed'üzerinde anlaşmaya 1000 Mb / s Tam dubleks'. Bu, USB 3.0 denetleyicisi, yani ASIX AX88179 (Linux için 'ax88179_178a' sürücüsü) içindir.
Anton Samsonov

23

Burada harika cevaplar var, sadece birkaç seçenek daha eklemek istedim.

1. Bunun tam olarak sorduğunuz şey olmadığını biliyorum (başka yollarla da okuyun). Ancak , NIC'nizin gerçek dünya performansını bilmek istiyorsanız , bilgisayarınızın olması gerektiği gibi değil, iperf'i kullanabilirsiniz. Bunu genellikle yaparım - çünkü asla bilemezsiniz. Geçenlerde bir 1 Gb NIC aldım, sadece 672 Mb / s hızında aktarıldığını, ancak uplink'in 1 Gb olduğunu söyledi. İyi ki kontrol ettim.

İki bilgisayara ihtiyacınız olacak.

Birinci bilgisayarda, iperf'i sunucu modunda çalıştırın:

iperf -s

Diğer yandan, istemci modunda iperf'i çalıştırın:

iperf -c 192.168.0.10

Tam çift yönlü hızı görmek istiyorsanız, bunun yerine şunu deneyin:

iperf -d -c 192.168.0.10

Sunucular IP adresi için 192.168.0.10 yerine

2. Ubuntu sistemlerinde, /var/log/kern.logçekirdek olaylarının günlüğü sınırlıdır. Değişken NIC'in bağlantı hızını ve durumunu kaydeder. Eminim diğer dağıtımlar da benzer bir şey yapar veya bunu yapmak için kurulum yapılabilir.

$ tail -n 300 /var/log/kern.log.1 | grep slave0
Aug 28 12:54:04 haze kernel: [ 9452.766248] e1000e: slave0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Aug 28 12:54:41 haze NetworkManager[921]: <info>  [1472403281.8486] device (slave0): link disconnected
Aug 28 12:54:41 haze kernel: [ 9489.898476] e1000e: slave0 NIC Link is Down

3. Muhtemelen asla, asla bu kadar ileri gitmeniz gerekmeyecek, ancak hızı elde etmek için c kodu yazabilirsiniz . Test edilmiş çalışma ve kök gerekli değildir.

https://stackoverflow.com/questions/2872058/get-link-speed-programmatically

#include <stdio.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <linux/sockios.h>
#include <linux/if.h>
#include <linux/ethtool.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
    int sock;
    struct ifreq ifr;
    struct ethtool_cmd edata;
    int rc;
    sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
    if (sock < 0) {
        perror("socket");
        exit(1);
    }
    strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));
    ifr.ifr_data = &edata;
    edata.cmd = ETHTOOL_GSET;
    rc = ioctl(sock, SIOCETHTOOL, &ifr);
    if (rc < 0) {
        perror("ioctl");
        exit(1);
    }
    switch (ethtool_cmd_speed(&edata)) {
        case SPEED_10: printf("10Mbps\n"); break;
        case SPEED_100: printf("100Mbps\n"); break;
        case SPEED_1000: printf("1Gbps\n"); break;
        case SPEED_2500: printf("2.5Gbps\n"); break;
        case SPEED_10000: printf("10Gbps\n"); break;
        default: printf("Speed returned is %d\n", edata.speed);
    }
    return (0);
}

1
Beklenmeyen performansa ilişkin nihai kararınız neydi?
rogerdpack

Belirttiginiz gibi iperf'i kullanmak, yalnizca nicelik hizi degil, mevcut hizi elde etmek istiyorsa cevaptir.
droid-zilla

18

Khaled'in dediği gibi, ethtool komutunu sadece arabirimde bağımsız değişken olarak çalıştırabilmelisiniz. Bu, desteklenen hızları, reklamı yapılan hızları, mevcut hızı ve bir sürü başka şeyi listeler:

Settings for eth0:
    Supported ports: [ TP ]
    Supported link modes:   10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Supports auto-negotiation: Yes
    Advertised link modes:  10baseT/Half 10baseT/Full 
                            100baseT/Half 100baseT/Full 
                            1000baseT/Full 
    Advertised auto-negotiation: Yes
    Speed: 1000Mb/s
    Duplex: Full
    Port: Twisted Pair
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: on
    Supports Wake-on: d
    Wake-on: d
    Current message level: 0x00000007 (7)
    Link detected: yes

dmesgArayüzünüzü çalıştırabilir ve grep yapabilirsiniz , ancak sisteminiz uzun süredir çalışıyorsa ve mevcut arabellek artık bu bilgiye sahip değilse, bu durumda çalışmayabilir (eski / var /log/dmesg.* files):

dmesg |grep eth0
[    2.867481] e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
[   19.429444] ADDRCONF(NETDEV_UP): eth0: link is not ready
[   19.431555] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[   19.449341] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   26.972379] e1000: eth0: e1000_set_tso: TSO is Enabled
[   29.920458] eth0: no IPv6 routers present

10

Aşağıdaki komutu kullan

 dmesg | grep -i duplex
 Output: eth0: link up, 100Mbps, full-duplex, lpa 0x45E1

bakın bu


Kök erişiminiz olmadığında kullanışlıdır.
Mehdi Sadeghi,

Kaydın üzerine yazılmadığında yararlıdır. Talihsiz durumdayım.
zhaorufei

Bu kutu üzerinde süper kullanıcı ayrıcalıklarına sahip olmadığımda çok kullanışlı oldu. Teşekkürler!
Sankalp

1

Gelecekte başvurmak için ayrıca ethtool'deki hız alanının NIC tarafından desteklenen maksimum hızı sağladığını ve mii aracının NIC'nin çalıştığı gerçek hızı verdiğini fark ettim.

[ root @  ]# mii-tool
eth0: negotiated 100baseTx-FD, link ok
[ root @  ]# ethtool eth0
Settings for eth0:
        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
        Port: Twisted Pair
        PHYAD: 2
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: off (auto)
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

GÜNCELLEME: Bir süre sonra, mii aracı eski olduğu ve kullanımdan kaldırıldığı için doğru hıza geri dönmüyordu ve ethtool anlaşılan hızı geri veriyordu.


-6

ethtool eth0benim için çalıştı. Örnek:

$ethtool eth0 |grep -i speed
Speed: 1000Mb/s

1
Lütfen cevaplamadan önce diğer cevapları okuyun. Bu durumun altı yıl önce olduğu söyleniyor ve 66 oy ile kabul edilen cevap.
Sven

kimse ne olursa olsun cevabını hala gönderebilir. Verilen cevaplar biri için işe yaramayabilir, bu yüzden benim durumumda bana uygun başka bir seçenek eklemek istedim.
ejderha

Cevabınız, kabul edilenle tamamen aynı ve değer katmıyor.
Sven

ethtool komutu önceki seçeneklerde nerede belirtilmiştir?
ejderha,

En üstteki cevaba, yanındaki yeşil keneye bakın. Bu kabul edilen cevap ve çok net bir şekilde kullanıyor ethtool.
Sven
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.