링크 속도를 결정하기 위해 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. 사용아이퍼프

    이를 위해 자체 서버와 클라이언트를 설정한 다음 두 컴퓨터 간의 대역폭 성능을 측정합니다. 이는 특정 인터넷 대상의 성능에 의존하는 것보다 컴퓨터/네트워크 성능을 더 정확하게 파악할 수 있다는 점에서 더 좋습니다.

    서버에서:

    $ 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를 모두 얻을 수 있습니다.

따라서 연결 위치에 따라 속도가 달라집니다.

관련 정보