LoginSignup
24
23

tcコマンドでNetworkの帯域と遅延を制御してみてみた

Last updated at Posted at 2020-08-13

■ 目的

tcコマンド(Traffic Control)は、Networkの遅延(Latency)と帯域(Throughput)を制御することができます。
コンピューターの距離により遅延、帯域が変わり、データ転送などの時間がかわることがあります。コンピューターを遠隔に離した場合、既存の処理に影響が出るかtcコマンドを使用して事前に検証することができます。
ということで、tcコマンドで、遅延、帯域が制御できるか確認してみてみます。

■ 構成

構成-non.png Oracle Cloud上にComputeインスタンスを2台設置して、その間のNetworkパフォーマンスをTCコマンドで制御してみてみます

■ 現環境確認

Client --> Server へのレイテンシ、スループット、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を実行してスループット確認
今回は、約2 Gbits/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コマンドで遅延と帯域制御

Client側からパケットを送信するので、clientコンピューターで遅延と帯域を制御してみてみます

① 設定する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(遅延)確認
平均100 msへ制御できていることを確認

[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を実行して Bandwidth(帯域)確認
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

■ 参考

 ・Traffic Control HOWTO
 ・man7.org > Linux > man-pages > tc(8) — Linux manual page
 ・How to Use the Linux Traffic Control
 ・Linux Traffic Controlを使用してレイテンシーをシミュレートし、Oracle Databaseのフェッチ・サイズを調査する

24
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
23