[LINUX] J'ai essayé de contrôler la bande passante et le délai du réseau avec la commande tc

■ Objectif

La commande tc (Traffic Control) vous permet de contrôler la latence et le débit du réseau. Le délai et la bande passante peuvent changer en fonction de la distance de l'ordinateur et l'heure du transfert des données peut changer. Alors, vérifions si le délai et la bande passante peuvent être contrôlés avec la commande tc.

■ Composition

構成-non.png Installez deux instances Compute sur Oracle Cloud et essayez de contrôler les performances du réseau entre elles avec des commandes TC.

■ Vérifiez l'environnement actuel

Vérifiez la latence, le débit, TPS vers Client-> Serveur

● Confirmation du délai (RTT)

ping pour vérifier RTT Cette fois, confirmez que la moyenne est de 0,166 ms

[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

● Vérification de la bande

Exécutez iperf3 pour vérifier le débit Cette fois, confirmez qu'il s'agit d'environ 2 Gbits / s

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

■ Contrôle du délai et de la bande avec la commande tc

Puisque le paquet est envoyé du côté client, essayez de contrôler le délai et la bande passante sur l'ordinateur client.

① Vérifiez l'interface réseau à régler

Confirmation du nom de l'interface réseau pour se connecter au serveur avec le client Confirmez que le nom de l'interface est cette fois 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

② Exécution de la commande tc de contrôle de retard de 100 ms

Cette fois, je vais essayer de le contrôler à 100ms 100 ms est à peu près la distance entre le Japon et les États-Unis

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

③ Exécution de la commande tc de contrôle de bande 50Mbps

Cette fois, je vais essayer de le contrôler à 50 Mbps À ce moment-là, essayez d'utiliser les valeurs suivantes

・ Taux = 50 Mbits ・ CONFIG_HZ = 1000 ・ Rafale = taux / CONFIG_HZ = 50 ko ・ Limite = rafale x 10 = 500 ko

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

・ Exécution de la commande tc de contrôle de bande 50 Mbps

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

④ Vérifiez les paramètres de la commande 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

⑤ Confirmation du délai (RTT)

ping pour vérifier RTT Confirmez qu'il peut être contrôlé à 100 ms en moyenne

[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

⑥ Vérification de la bande

Exécutez iperf3 pour vérifier RTT Confirmez que le contrôle est possible jusqu'à 50 Mbits / s

[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

⑦ Annuler la configuration de la commande tc

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

Recommended Posts

J'ai essayé de contrôler la bande passante et le délai du réseau avec la commande tc
J'ai essayé de notifier les informations de retard de train avec LINE Notify
J'ai essayé d'exprimer de la tristesse et de la joie face au problème du mariage stable.
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé d'apprendre l'angle du péché et du cos avec le chainer
[Introduction au PID] J'ai essayé de contrôler et de jouer ♬
[Introduction à AWS] J'ai essayé de porter une application de conversation et de jouer avec text2speech @ AWS ♪
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
J'ai essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.
sphinx-quickstart est devenu un problème et j'ai essayé de créer une commande alternative et le stress a disparu
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
J'ai essayé de prédire et de soumettre les survivants du Titanic avec Kaggle
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé d'analyser les émotions de tout le roman "Weather Child" ☔️
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé d'illustrer le temps et le temps du langage C
J'ai essayé d'afficher l'heure et la météo d'aujourd'hui w
J'ai essayé de publier automatiquement sur ChatWork au moment du déploiement avec Fabric et ChatWork Api
J'ai essayé d'estimer la section.
J'ai essayé de décrire le trafic en temps réel avec WebSocket
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
[Linux] J'ai essayé de résumer les commandes de confirmation des ressources
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de visualiser les signets volant vers Slack avec Doc2Vec et PCA
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de démarrer avec Bitcoin Systre le week-end
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé de détecter facilement les points de repère du visage avec python et dlib
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
J'ai créé mon propre réseau de neurones à propagation directe à 3 couches et j'ai essayé de comprendre le calcul en profondeur.
J'ai essayé de créer un traitement par lots sans serveur pour la première fois avec DynamoDB et Step Functions
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de reconnaître le mot de réveil
J'ai essayé de commencer avec Hy
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé de résoudre TSP avec QAOA
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!
J'ai essayé de résumer jusqu'à ce que je quitte la banque et devienne ingénieur
J'ai essayé de visualiser la tranche d'âge et la distribution des taux d'Atcoder
J'ai essayé d'améliorer la précision de mon propre réseau neuronal
765 J'ai essayé d'identifier les trois familles professionnelles par CNN (avec Chainer 2.0.0)
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé de convertir la chaîne datetime <-> avec tzinfo en utilisant strftime () et strptime ()
J'ai essayé d'extraire automatiquement les mouvements des joueurs Wiire avec un logiciel
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
J'ai essayé avec les 100 meilleurs packages PyPI> J'ai essayé de représenter graphiquement les packages installés sur Python