سؤال كيف أتحقق من سرعة بطاقة NIC الخاصة بي؟


لقد قمت للتو بتثبيت بطاقة واجهة شبكة جيجابت (NIC) جديدة في Linux. كيف يمكنني معرفة ما إذا كان مضبوطًا بالفعل على سرعات gigabit؟ أنا أرى ethtool لديه خيار لتعيين السرعة ، ولكن لا يمكنني معرفة كيفية الإبلاغ عن سرعته الحالية.


101
2017-11-30 16:20


الأصل


يقول ethtool -h: ethtool DEVNAME عرض المعلومات القياسية حول الجهاز - Ryan Babchishin


الأجوبة:


ما عليك سوى استخدام أمر مثل: ethtool eth0 للحصول على المعلومات المطلوبة. مثلا:

$ sudo ethtool eth0 | grep Speed

Speed: 1000Mb/s

146
2017-11-30 16:23



إذا كنت ترغب في الحصول على القائمة الكاملة لكل واجهاتك بسرعة therr ، فيمكنك استخدام هذا الأمر: 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 هذا في نواة 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 هو ، كجزء من حزمة "الأدوات الصافية" الأساسية. لذلك كان هذا هو الحل الأفضل بالنسبة لي. - mivk
أرى هذا في صفحة الرجل ل mii-tool "هذا البرنامج عتيق. الوسائط الصالحة هي 100baseT4 فقط ، 100baseTx-FD ، 100baseTx-HD ، 10baseT-FD و 10baseT-HD ethernet cards. : | - rogerdpack
في حين mii-tool تقارير "التفاوض 100baseTx-FD التحكم في التدفق ، والربط موافق '، على حد سواء ethtool و cat /sys/class/net/eth…/speed أوافق على '1000Mb / s full duplex '. هذا هو لوحدة تحكم USB 3.0 ، وهي ASIX AX88179 ('ax88179_178a' برنامج التشغيل لـ Linux). - Anton Samsonov


هناك بعض الإجابات الرائعة هنا ، أردت فقط إضافة بعض الخيارات الأخرى.

1. وأنا أعلم أن هذا ليس تماما ما سألت (اقرأ على طرق أخرى). لكن إذا كنت تريد معرفة الأداء الحقيقي ل NIC الخاص بك، بدلاً من ما يقوله جهاز الكمبيوتر الخاص بك ، يمكنك استخدام iperf. أفعل هذا عادة - لأنك لا تعرف أبدًا. اشتريت بطاقة NIC بسرعة 1 غيغابايت مؤخرًا والتي تم نقلها بسرعة 672 ميغابت في الثانية ، إلا أن الإرسال كان يبلغ 1 غيغابايت. شيء جيد راجعت.

ستحتاج جهازي كمبيوتر.

على جهاز الكمبيوتر ، قم بتشغيل iperf في وضع الخادم:

iperf -s

على الجانب الآخر ، قم بتشغيل iperf في وضع العميل:

iperf -c 192.168.0.10

إذا كنت ترغب في رؤية سرعة الطباعة على الوجهين بالكامل ، فجرّب ذلك بدلاً من ذلك:

iperf -d -c 192.168.0.10

استبدل 192.168.0.10 بعنوان IP للخوادم

2. على أنظمة Ubuntu ، /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 للواجهة الخاصة بك ، ولكن قد لا يعمل هذا إذا كان النظام الخاص بك يعمل لفترة طويلة ولم يعد المخزن المؤقت الحالي يحتوي على هذه المعلومات (في هذه الحالة ، سيكون عليك ضغط الملفات القديمة / 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
جاء هذا في متناول اليدين عندما لم يكن لدي privus superuser على مربع. شكر! - Sankalp


أيضا للرجوع إليها في المستقبل لقد لاحظت أن حقل السرعة في ethtool يعطي السرعة القصوى التي يدعمها NIC و mii-tool تعطي السرعة الفعلية التي تعمل عليها بطاقة 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

تحديث: بعد فترة من الوقت تبين أن أداة mii لم تكن تعيد السرعة الصحيحة لأنها كانت قديمة ومتوقفة وكان ethtool يعيد السرعة المتفاوض عليها.


1
2017-11-11 11:59