tc 명령으로 네트워크 대역폭과 지연을 제어해 보았습니다.

■ 목적



tc 명령(Traffic Control)은 네트워크 지연(Latency)과 대역(Throughput)을 제어할 수 있습니다.
컴퓨터 거리에 따라 지연, 대역폭이 변경되고 데이터 전송과 같은 시간이 달라질 수 있습니다. 컴퓨터를 원격으로 놓으면 기존 처리에 영향을 미치거나 tc 명령을 사용하여 미리 확인할 수 있습니다.
그래서 tc 명령으로 지연, 대역을 제어할 수 있는지 확인해 봅니다.

■ 구성




Oracle Cloud에 Compute 인스턴스를 2대 설치하고, 그 사이의 Network 성능을 TC 커맨드로 제어해 봅니다.

■ 현 환경 확인



클라이언트 --> 서버에 대기 시간, 처리량 및 TPS 확인

● 지연 (RTT) 확인



ping을 실행하여 RTT 확인
이번에는 평균 0.166ms임을 확인
[opc@client-inst01 ~]$ sudo ping 10.0.0.2 -c 5
    PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
    64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.178 ms
    64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.182 ms
    64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.135 ms
    64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.177 ms
    64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=0.160 ms

    --- 10.0.0.2 ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 4110ms
    rtt min/avg/max/mdev = 0.135/0.166/0.182/0.020 ms

● 대역 확인



iperf3을 실행하여 처리량 확인
이번에는 약 2Gbits/sec인지 확인
[opc@client-inst01 ~]$ sudo iperf3 -c 10.0.0.2
    Connecting to host 10.0.0.2, port 5201
    [  4] local 10.0.0.5 port 33750 connected to 10.0.0.2 port 5201
    [ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
    [  4]   0.00-1.00   sec   377 MBytes  3.17 Gbits/sec  1165   2.06 MBytes
    [  4]   1.00-2.00   sec   254 MBytes  2.13 Gbits/sec  2338    323 KBytes
    [  4]   2.00-3.00   sec   231 MBytes  1.94 Gbits/sec  1480   1.31 MBytes
    [  4]   3.00-4.00   sec   244 MBytes  2.04 Gbits/sec  2127   61.2 KBytes
    [  4]   4.00-5.00   sec   229 MBytes  1.92 Gbits/sec  953    166 KBytes
    [  4]   5.00-6.00   sec   239 MBytes  2.00 Gbits/sec  2055    629 KBytes
    [  4]   6.00-7.00   sec   205 MBytes  1.72 Gbits/sec  1336   1.77 MBytes
    [  4]   7.00-8.00   sec   274 MBytes  2.30 Gbits/sec  2216   96.1 KBytes
    [  4]   8.00-9.00   sec   238 MBytes  1.99 Gbits/sec  1198    891 KBytes
    [  4]   9.00-10.00  sec   232 MBytes  1.95 Gbits/sec  1486    638 KBytes
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval           Transfer     Bandwidth       Retr
    [  4]   0.00-10.00  sec  2.46 GBytes  2.12 Gbits/sec  16354             sender
    [  4]   0.00-10.00  sec  2.46 GBytes  2.11 Gbits/sec                  receiver

    iperf Done.

■ tc 명령으로 지연 및 대역 제어



클라이언트 측에서 패킷을 보내므로 클라이언트 컴퓨터에서 지연과 대역폭을 제어해 봅니다.

① 설정하는 Network Interface 확인



Client에서 Server에 연결하는 Network Interfece 이름 확인
이번에는 Interface 이름이 ens3인지 확인
[root@client-inst01 ~]# ifconfig
    ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9000
            inet 10.0.0.5  netmask 255.255.255.0  broadcast 10.0.0.255
            ether 02:00:23:17:3a  txqueuelen 1000  (Ethernet)
            RX packets 454466  bytes 165785003 (158.1 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 503382  bytes 277089862 (264.2 MiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

② 100ms 지연 제어 tc 명령 실행



이번에 100ms로 제어해 보겠습니다.
100ms는 대체로 일본에서 미국 정도의 거리입니다.
[opc@client-inst01 ~]$ sudo tc qdisc add dev ens3 root handle 1:0 netem delay 100ms

③ 50Mbps 대역 제어 tc 명령 실행



이번에 50Mbps로 제어해 보겠습니다.
그 때 다음 값을 사용해 보겠습니다.
・rate = 50mbit
・CONFIG_HZ = 1000
・burst = rate/CONFIG_HZ = 50kb
・limit = burst x 10 = 500kb

※CONFIG_HZ값 확인
[opc@client-inst01 ~]$ sudo cat /boot/config-`uname -r` | grep CONFIG_HZ=
    CONFIG_HZ=1000

· 50Mbps 대역 제어 tc 명령 실행
[opc@client-inst01 ~]$ sudo tc qdisc add dev ens3 parent 1:1 handle 10:0 tbf rate 50mbit burst 50kb limit 500kb

④ tc 명령 설정 확인


[opc@client-inst01 ~]$ sudo tc -s qdisc show dev ens3
    qdisc netem 1: root refcnt 17 limit 1000 delay 100.0ms
    Sent 288635914 bytes 38521 pkt (dropped 0, overlimits 0 requeues 14)
    backlog 102b 1p requeues 14
    qdisc tbf 10: parent 1:1 rate 50Mbit burst 25Kb lat 36.9ms
    Sent 35582 bytes 73 pkt (dropped 0, overlimits 0 requeues 0)
    backlog 0b 0p requeues 0

⑤ 지연(RTT) 확인



ping을 실행하여 RTT 확인
평균 100ms로 제어할 수 있는지 확인
[opc@client-inst01 ~]$ ping 10.0.0.2 -c 5
    PING 10.0.0.101 (10.0.0.101) 56(84) bytes of data.
    64 bytes from 10.0.0.101: icmp_seq=1 ttl=64 time=100 ms
    64 bytes from 10.0.0.101: icmp_seq=2 ttl=64 time=100 ms
    64 bytes from 10.0.0.101: icmp_seq=3 ttl=64 time=100 ms
    64 bytes from 10.0.0.101: icmp_seq=4 ttl=64 time=100 ms
    64 bytes from 10.0.0.101: icmp_seq=5 ttl=64 time=100 ms

    --- 10.0.0.101 ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 4004ms
    rtt min/avg/max/mdev = 100.160/100.192/100.218/0.283 ms

⑥ 대역 확인



iperf3을 실행하여 RTT 확인
50Mbits/sec로 제어할 수 있는지 확인
[opc@client-inst01 ~]$ sudo iperf3 -c 10.0.0.2
    Connecting to host 10.0.0.2, port 5201
    [  4] local 10.0.0.5 port 44108 connected to 10.0.0.2 port 5201
    [ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
    [  4]   0.00-1.00   sec  6.18 MBytes  51.8 Mbits/sec   44    743 KBytes
    [  4]   1.00-2.00   sec  6.25 MBytes  52.4 Mbits/sec    5    638 KBytes
    [  4]   2.00-3.00   sec  5.00 MBytes  41.9 Mbits/sec    0    725 KBytes
    [  4]   3.00-4.00   sec  6.25 MBytes  52.4 Mbits/sec    0    751 KBytes
    [  4]   4.00-5.00   sec  6.25 MBytes  52.4 Mbits/sec    0    751 KBytes
    [  4]   5.00-6.00   sec  6.25 MBytes  52.4 Mbits/sec    0    778 KBytes
    [  4]   6.00-7.00   sec  5.00 MBytes  41.9 Mbits/sec    0    813 KBytes
    [  4]   7.00-8.00   sec  6.25 MBytes  52.4 Mbits/sec    0    848 KBytes
    [  4]   8.00-9.00   sec  6.25 MBytes  52.4 Mbits/sec    3    664 KBytes
    [  4]   9.00-10.00  sec  6.25 MBytes  52.4 Mbits/sec    0    786 KBytes
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval           Transfer     Bandwidth       Retr
    [  4]   0.00-10.00  sec  59.9 MBytes  50.3 Mbits/sec   52             sender
    [  4]   0.00-10.00  sec  56.9 MBytes  47.7 Mbits/sec                  receiver

    iperf Done.



    --- 10.0.0.2 ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 4004ms
    rtt min/avg/max/mdev = 100.160/100.192/100.218/0.283 ms

⑦ tc 명령 설정 해제


[opc@tokyo-inst01 ~]$ sudo tc qdisc del dev ens3 root

좋은 웹페이지 즐겨찾기