[LINUX] Ich habe versucht, die Netzwerkbandbreite und -verzögerung mit dem Befehl tc zu steuern

■ Zweck

Mit dem Befehl tc (Verkehrssteuerung) können Sie die Latenz und den Durchsatz des Netzwerks steuern. Die Verzögerung und Bandbreite können sich abhängig von der Entfernung des Computers ändern, und die Zeit für die Datenübertragung kann sich ändern. Überprüfen wir also, ob die Verzögerung und die Bandbreite mit dem Befehl tc gesteuert werden können.

■ Zusammensetzung

構成-non.png Installieren Sie zwei Compute-Instanzen in Oracle Cloud und versuchen Sie, die Netzwerkleistung zwischen ihnen mit TC-Befehlen zu steuern.

■ Überprüfen Sie die aktuelle Umgebung

Überprüfen Sie Latenz, Durchsatz und TPS zu Client-> Server

● Bestätigung der Verzögerung (RTT)

ping, um RTT zu überprüfen Bestätigen Sie diesmal, dass der Durchschnitt 0,166 ms beträgt

[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

● Bandcheck

Führen Sie iperf3 aus, um den Durchsatz zu überprüfen Bestätigen Sie diesmal, dass es ungefähr 2 Gbit / s sind

[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.

■ Verzögerung und Bandsteuerung mit dem Befehl tc

Versuchen Sie, die Verzögerung und Bandbreite auf dem Client-Computer zu steuern, da das Paket von der Client-Seite gesendet wird.

① Überprüfen Sie die einzustellende Netzwerkschnittstelle

Bestätigung des Network Interfece-Namens, um mit dem Client eine Verbindung zum Server herzustellen Vergewissern Sie sich, dass der Name der Schnittstelle diesmal ens3 lautet

[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

② 100 ms Verzögerungssteuerung für die Ausführung des Befehls

Dieses Mal werde ich versuchen, es auf 100 ms zu steuern 100ms ist ungefähr die Entfernung von Japan zu den Vereinigten Staaten

[opc@client-inst01 ~]$ sudo tc qdisc add dev ens3 root handle 1:0 netem delay 100ms

③ 50-Mbit / s-Bandsteuerung zur Ausführung des Befehls

Dieses Mal werde ich versuchen, es auf 50 Mbit / s zu steuern Versuchen Sie zu diesem Zeitpunkt, die folgenden Werte zu verwenden

・ Rate = 50 MBit ・ CONFIG_HZ = 1000 ・ Burst = Rate / CONFIG_HZ = 50 kb ・ Limit = Burst x 10 = 500 kb

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

・ 50-Mbit / s-Bandsteuerung zur Ausführung des Befehls

[opc@client-inst01 ~]$ sudo tc qdisc add dev ens3 parent 1:1 handle 10:0 tbf rate 50mbit burst 50kb limit 500kb

④ Überprüfen Sie die Einstellungen des Befehls 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

⑤ Bestätigung der Verzögerung (RTT)

ping, um RTT zu überprüfen Stellen Sie sicher, dass es auf durchschnittlich 100 ms gesteuert werden kann

[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

⑥ Bandcheck

Führen Sie iperf3 aus, um RTT zu überprüfen Stellen Sie sicher, dass eine Steuerung mit 50 Mbit / s möglich ist

[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

⑦ Abbrechen der Befehlseinstellung

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

Recommended Posts

Ich habe versucht, die Netzwerkbandbreite und -verzögerung mit dem Befehl tc zu steuern
Ich habe versucht, die Zugverspätungsinformationen mit LINE Notify zu benachrichtigen
Ich versuchte, Trauer und Freude über das Problem der stabilen Ehe auszudrücken.
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
[Einführung in PID] Ich habe versucht, ♬ zu steuern und zu spielen
[Einführung in AWS] Ich habe versucht, eine Konversations-App zu portieren und mit text2speech @ AWS playing zu spielen
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe versucht, das Artikel-Update des Livedoor-Blogs mit Python und Selen zu automatisieren.
Sphinx-Schnellstart wurde zu einem Problem und ich versuchte, einen alternativen Befehl zu erstellen, und der Stress verschwand
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, die Emotionen des gesamten Romans "Wetterkind" zu analysieren
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Ich habe versucht, die Uhrzeit und das heutige Wetter anzuzeigen
Ich habe versucht, zum Zeitpunkt der Bereitstellung mit Fabric und ChatWork Api automatisch in ChatWork zu posten
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, den Datenverkehr mit WebSocket in Echtzeit zu beschreiben
Ich habe versucht, die Anfängerausgabe des Ameisenbuchs mit Python zu lösen
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe versucht, die Lesezeichen zu visualisieren, die mit Doc2Vec und PCA nach Slack fliegen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe am Wochenende versucht, mit Bitcoin Systre zu beginnen
Ich habe versucht, das Bild mit OpenCV im "Bleistift-Zeichenstil" zu verarbeiten
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe mein eigenes neuronales 3-Layer-Forward-Propagation-Netzwerk erstellt und versucht, die Berechnung genau zu verstehen.
Ich habe zum ersten Mal versucht, mit DynamoDB und Step Functions eine serverlose Stapelverarbeitung zu erstellen
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Ich habe versucht, TSP mit QAOA zu lösen
[Python] Ich habe versucht, die Nacht der Galaxienbahn mit WordCloud zu visualisieren!
Ich versuchte zusammenzufassen, bis ich die Bank verließ und Ingenieur wurde
Ich habe versucht, die Altersgruppe und die Ratenverteilung von Atcoder zu visualisieren
Ich habe versucht, die Genauigkeit meines eigenen neuronalen Netzwerks zu verbessern
765 Ich habe versucht, die drei Berufsfamilien durch CNN zu identifizieren (mit Chainer 2.0.0).
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, datetime <-> string mit tzinfo mit strftime () und strptime () zu konvertieren.
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe es mit den Top 100 PyPI-Paketen versucht.> Ich habe versucht, die auf Python installierten Pakete grafisch darzustellen