リンク速度を決定するためにifconfig出力をどのように処理しますか?

リンク速度を決定するためにifconfig出力をどのように処理しますか?

これはダウンロード速度をテストするために退屈で書かれたスクリプトです。

#!/bin/bash

get_ispeed() {
    echo $(ifconfig eth0 | grep bytes | grep RX | cut -d ':' -f 2 | cut -d ' ' -f 1);
}

for((;;));
do
    s1=`get_ispeed`;

    sleep 1s;

    s2=`get_ispeed`;

    d=$(($s2-$s1));

    echo $(($d / 1000))" kB/s";
done

私は実際にbashistではありませんが、「作業を実行する」かどうかはわかりません。 p
ifconfigはRXバイトを生成するので、kB / sを得るために1000で割ります。

答え1

リンク速度

私は実際にリンク速度を探しているとは思わない。接続の専用接続速度です。ethtool(ストレージに)インストールした場合は、次のコマンドを使用してリンク速度を取得できます。

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

帯域幅(コア)

帯域幅の速度を確認したい。特定の期間に総速度をどのくらい使用しましたか?インターフェイスが読み取ったバイト数を取得する方法はいくつかありますeth0

$ cat /sys/class/net/eth0/statistics/rx_bytes 
3431530366

また、/proc/net/devデータを提供するのがカーネル構造だと思いますifconfig

$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:629956414  572909    0    0    0     0          0         0 629956414  572909    0    0    0     0       0          0
  eth0:3431888253 329701689    0    0    0     0          0    359127 831203319 353144288    0    0    0     0       0          0
  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

ツールを使用した測定

より良い方法は、実際のツールを使用して帯域幅使用量を測定することです。ここにはさまざまなオプションがあります。

  1. wget/curlの使用

    これらは非常に簡単です。ダウンロードするには、大きなファイルを選択し、完了したら、両方のツールのいずれかで報告された統計を確認してください。

    $ wget --output-document=/dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip
    
    -or-
    
    $ curl -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip
    
  2. CLI監視ツールの使用

    このカテゴリには多くのツールがあります。始めるいくつかの方法は次のとおりです。

  3. 使用速度テスト-cli

    これは優れた利点を利用します。速度テストネットワークコマンドラインからウェブサイトにアクセスします。

    $ ./speedtest-cli
    Retrieving speedtest.net configuration...
    Retrieving speedtest.net server list...
    Testing from Comcast Cable (x.x.x.x)...
    Selecting best server based on ping...
    Hosted by FiberCloud, Inc (Seattle, WA) [12.03 km]: 44.028 ms
    Testing download speed........................................
    Download: 32.29 Mbit/s
    Testing upload speed..................................................
    Upload: 5.18 Mbit/s
    
  4. 使用アイパフ

    これを行うには、独自のサーバーとクライアントを設定し、2台のコンピューター間の帯域幅パフォーマンスを測定します。これは、特定のインターネットターゲットのパフォーマンスに依存するよりも、コンピュータ/ネットワークのパフォーマンスをより正確に把握できるという点で優れています。

    サーバーから:

    $ iperf -s
    

    クライアント側から:

    $ iperf -c myserver.mydom
     ------------------------------------------------------------
    Client connecting to 192.168.1.1, TCP port 5001
    TCP window size: 16.0 KByte (default)
    ------------------------------------------------------------
     [  3] local 192.168.1.3 port 52143 connected with 192.168.1.1 port 5001
     [ ID] Interval       Transfer     Bandwidth
     [  3]  0.0-10.0 sec    113 MBytes  94.7 Mbits/sec
    

引用する

答え2

私はあなたの質問と答えに本当に同意します。したがって、次の行でこれを行うことができます。

m1=`cat /sys/class/net/eth0/statistics/tx_bytes` ; sleep 10s ; m2=`cat /sys/class/net/eth0/statistics/rx_bytes` ; echo $((($m2-$m1)/10240))

そして非常によく印刷されます。

もっと洗練された方法で:

#!/bin/bash                                                                          

intervalo=3                                                                          
info="/sys/class/net/"                                                               
cd $info                                                                             
for interface in eth*                                                                
do                                                                                   
  rx1=`cat $info$interface/statistics/rx_bytes`                                      
  tx1=`cat $info$interface/statistics/tx_bytes`                                      
 `sleep $((intervalo))s`                                                            
  rx2=`cat $info$interface/statistics/rx_bytes`                                      
  tx2=`cat $info$interface/statistics/tx_bytes`
  echo $interface
  echo ----
  echo RX: $((($rx2-$rx1)/($intervalo*1024))) Kbps
  echo TX: $((($tx2-$tx1)/($intervalo*1024))) Kbps
done

これはうまく機能しますが、各インターフェイスの結果を保存するために配列を使用すると改善することができます。したがって、いずれのインターフェイスでもないすべてのインターフェイスに対してのみスリープモードが必要です。

答え3

リンクの広告速度と実際の速度は異なる場合があります。

sudo ethtool enp1s0
Settings for enp1s0:
Supported ports: [ TP ]
Supported link modes:   10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Full 
Advertised link modes:  10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Full 

これは、リンクの両端にあるデバイス間でネゴシエートされた実際のリンク速度を報告します。私のラップトップネットワークカードは私が接続しているローカルスイッチです。

そして、これらのツールが報告する実際の速度は次のとおりです。

sudo mii-tool enp1s0
enp1s0: negotiated 100baseTx-FD flow-control, link ok

sudo ethtool enp1s0 | grep -i speed
Speed: 100Mb/s

同じLANに接続されている同じ速度でコンテンツをダウンロードする場合にのみ、リンク速度に達します。

同じLAN上のサーバーからファイルをダウンロードする場合。 100Mb/sをすべて得ることができます。

そのため、接続位置によって速度が異なります。

関連情報