שאלה כיצד ניתן לאמת את מהירות ה- NIC שלי?


אני פשוט התקנת כרטיס ממשק רשת חדש gigabit (NIC) ב- Linux. איך אני אומר אם זה באמת מוגדר gigabit במהירויות? אני רואה ethtool יש אפשרות להגדיר את המהירות, אבל אני לא מצליח להבין איך לדווח על המהירות הנוכחית.


101
2017-11-30 16:20




ethtool -h אומר: ethtool DEVNAME הצגת מידע סטנדרטי אודות ההתקן - Ryan Babchishin


תשובות:


פשוט להשתמש בפקודה כמו: ethtool eth0 כדי לקבל את המידע הדרוש. דוגמה you

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s

146
2017-11-30 16:23



אם אתה רוצה לקבל את הרשימה המלאה של כל הממשקים שלך עם מהירות הם, אתה יכול להשתמש בפקודה זו: for i in $(netstat -i | cut -f1 -d" " | tail -n+3) ; do echo "$i: $(ethtool "$i" | grep Speed | sed 's/Speed://g')" ; done - Code-Source
אם אתה מקבל "מהירות: לא ידוע!" ייתכן שאתה משתמש בשם ethXX שגוי, שווה בדיקה כפולה :) - rogerdpack


ניתן להשתמש במידע מן הקרנל כאשר ethtool חסר:

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

דוגמה עבור ממשק בשם eth0:

cat /sys/class/net/eth0/speed

55
2018-04-15 15:39



הערה: זמין רק מגרסה 2.6.33 - zhaorufei
קבלת "ארגומנט לא חוקי" - wi1
@ wi1: נוסף דוגמה כדי להבהיר את השימוש. האם זה עובד עכשיו? - Christian
@Christian כן זה תודה, אבל רק על כמה ממשקים שלי אשר קראתי הוא צפוי אז אני כל טוב - wi1
RHEL6 יש backported זה לתוך הקרנל שלהם 2.6.32. - Dan Pritts


הערה: דף האיש עבור mii-tool יש כתב ויתור זה:

This program is obsolete. For replacement check ethtool.

להשתמש mii-tool כדי לראות את מהירות הרשת.

לדוגמה,

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

40
2017-11-30 20:58



עבור מערכות מבוססות דביאן, ethtool אינו מותקן כברירת מחדל. אבל mii-tool היא כחלק מחבילת "net-tools" החיונית. אז זה היה הפתרון הטוב ביותר בשבילי. - mivk
אני רואה את זה בדף האיש עבור mii כלי "תוכנית זו היא מיושנת.התקן תקף הם רק 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD ו 10baseT-HD Ethernet כרטיסי עבור. : | - rogerdpack
בזמן mii-tool דוחות 'משא ומתן 100baseTx-FD זרימת שליטה, הקישור אישור ', שניהם ethtool ו cat /sys/class/net/eth…/speed להסכים על '1000Mb / s דופלקס מלא ". זה עבור בקר USB 3.0, כלומר הנהג ASIX AX88179 ('ax88179_178a' עבור לינוקס). - Anton Samsonov


יש כמה תשובות נהדרות כאן, רק רציתי להוסיף עוד כמה אפשרויות.

1. אני יודע שזה לא בדיוק מה שאמרת (לקרוא על דרכים אחרות). אבל אם אתה רוצה לדעת את הביצועים בעולם האמיתי של NIC שלך, במקום מה המחשב שלך אומר שזה צריך להיות, אתה יכול להשתמש iperf. אני בדרך כלל עושה את זה - כי אתה אף פעם לא יודע. קניתי 1Gb NIC לאחרונה כי זה הועבר רק ב 672Mbps אבל זה uplink היה 1GB. דבר טוב בדקתי.

תזדקק לשני מחשבים.

במחשב אחד, הפעל iperf במצב שרת:

iperf -s

מצד שני, להפעיל iperf במצב הלקוח:

iperf -c 192.168.0.10

אם ברצונך לראות את מהירות הדופלקס המלאה, נסה זאת במקום זאת:

iperf -d -c 192.168.0.10

תחליף 192.168.0.10 עבור כתובת ה- IP של השרתים

2. במערכות אובונטו, /var/log/kern.log יש רישום מוגבל של אירועים הקרנל. זה יהיה להקליט מהירות הקישור ואת הסטטוס של NIC כאשר הוא משתנה. אני בטוח הפצות אחרות כנראה לעשות משהו דומה או יכול להיות ההתקנה לעשות זאת.

$ 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. אתה כנראה לעולם לא, אי פעם צריך ללכת רחוק, אבל אתה יכול לכתוב קוד כי כדי לקבל את המהירות. עבודה נבדק שורש אינו נדרש.

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);
}

20
2017-10-01 10:28





כפי שציין חאלד, אתה אמור להיות מסוגל להפעיל את ethtool עם ממשק רק כטיעון. זה יהיה רשימה במהירויות הנתמכות, במהירויות המפורסם, המהירות הנוכחית, וכן חבורה של דברים אחרים מדי:

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

אתה יכול גם לרוץ dmesg, ו- grep עבור הממשק שלך, אך ייתכן שהדבר לא יפעל אם המערכת שלך פועלת במשך זמן רב והמאגר הנוכחי אינו מכיל עוד מידע זה (במקרה זה, יהיה עליך לבצע grep את ה- old / var / log / dmesg .* קבצים):

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

18
2017-11-30 16:40





השתמש בפקודה הבאה

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

מתייחס זה


8
2017-11-28 10:17



שימושי כאשר אין לך גישה שורש. - Mehdi Sadeghi
שימושי כאשר היומן לא מוחלף. אני במצב מצער. - zhaorufei
זה בא שימושי כאשר לא היו לי superuser privs על הקופסה. תודה! - Sankalp


גם עבור הפניה בעתיד שמתי לב כי שדה מהירות ethtool נותן את המהירות המקסימלית הנתמכת על ידי NIC ו- mii כלי לתת את המהירות בפועל שבו NIC פועל.

[ 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

UPDATE: לאחר זמן מה גיליתי את כלי mii לא החזיר את המהירות הנכונה כפי שזה היה מיושן ו הוצא משימוש ethtool היה חוזר מהירות משא ומתן.


1
2017-11-11 11:59





ethtool eth0 עבדה בשבילי. דוגמא:

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

-5
2017-07-11 11:39



אנא קרא תשובות אחרות לפני שתענה. זה כבר נאמר לפני שש שנים והיא התשובה המקובלת עם 66 upvotes. - Sven♦
עדיין ניתן לפרסם את תשובתו ללא קשר. בהתחשב בתשובות לא יכול לעבוד עבור מישהו, אז רק רציתי להוסיף אפשרות אחרת המתאימה לי במצב שלי. - dragon
התשובה שלך היא בדיוק כמו המקובל ואינו מוסיף ערך. - Sven♦
איפה הפקודה ethtool המוזכרים באפשרויות קודמות? - dragon
להסתכל על התשובה העליונה מאוד עם טריק ירוק ליד זה. זוהי התשובה המקובלת והיא משתמשת בבירור ethtool. - Sven♦