Ma «réponse» est longue - leur clé est de ne pas confondre «débit» avec «bande passante» - bien que la «bande passante» puisse être un facteur limitant
En bref, votre débit peut être limité même si votre bande passante n'est pas saturée.
J'ai dû aider les gens à comprendre l'impact des piles d'applications à plusieurs niveaux.
Pour l'aspect des communications TCP, j'utilise les différences de RTT (aller-retour).
Pour un niveau unique, vous pouvez comparer l'adresse IP locale (sur une carte réseau) avec lo0 (bouclage).
Pour les niveaux multiples, vous comparez / calculez les adresses "plus éloignées", par exemple, les niveaux multiples peuvent être soit deux VM dans le même hôte, soit des hôtes différents dans le même centre de données, soit des centres de données différents. (peut-être seulement 500 mètres de distance, mais toujours différent).
Pour info: pour de nombreuses applications, les différences RTT sont négligeables, mais pour les applications qui font 10 à 100 de milliers de petits messages pour le temps RTT d'application peuvent devenir un goulot d'étranglement.
(J'ai vu des situations où le "lot prenait près de 6 heures de plus en multiniveau lorsque le RTT était de 0,25 millisec plus long, par rapport à un seul niveau)
Donc, banc d'essai simple:
le
for host in 127.0.0.1 192.168.129.63 192.168.129.72 192.168.129.254 192.168.129.71 p5.aixtools.net
do
wget -q http://${host}/ -O - >/dev/null
sleep 1
done
Et mon programme de surveillance est tcpdump - avec l'option -ttt
-ttt
Prints a delta (in microseconds) between current and previous line on each dump line.
Une microseconde est une unité SI de temps égale à un millionième (0,000001 ou 10−6 ou 1/1 000 000). Autrement dit, 1000 microsecondes == 1 milliseconde.
Donc, dans deux fenêtres différentes, tcpdump fonctionne:
Pour les heures "locales": tcpdump -i lo0 -n -ttt port 80 Et pour le "remote" tcpdump -I en1 -n -ttt port 80
Dans les données ci-dessous - le but n'est pas de faire une analyse, mais de montrer comment vous pouvez identifier les «différences» dans le temps requis pour que les transactions se terminent. Lorsqu'un débit d'application correspond à des transactions en série - le débit par "sec | min | heure" est affecté par le temps total requis pour les "réponses". J'ai trouvé cela plus facile à expliquer en utilisant le concept de RTT - aller-retour.
Pour une véritable analyse, il y a d'autres choses à regarder. Ainsi, les seules lignes que je montrerai sont la prise de contact TCP initiale, et le premier paquet sortant et le retour ACK. Pour la comparaison, comparez les temps delta de combien de temps avant le retour de la "réponse".
127.0.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type 0, capture size 96 bytes
00:00:00.000000 IP 127.0.0.1.42445 > 127.0.0.1.80: S 1760726915:1760726915(0) win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096651 0>
00:00:00.**000035** IP 127.0.0.1.80 > 127.0.0.1.42445: S 3339083773:3339083773(0) ack 1760726916 win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096651 1482096651>
00:00:00.000013 IP 127.0.0.1.42445 > 127.0.0.1.80: . ack 1 win 33688 <nop,nop,timestamp 1482096651 1482096651>
00:00:00.**000014** IP 127.0.0.1.80 > 127.0.0.1.42445: . ack 1 win 33688 <nop,nop,timestamp 1482096651 1482096651>
192.168.129.63
notez le 01.XXXXXX - pour le sommeil d'une seconde sur l'interface "lo0"
00:00:01.006055 IP 192.168.129.63.42446 > 192.168.129.63.80: S 617235346:617235346(0) win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096653 0>
00:00:00.**000032** IP 192.168.129.63.80 > 192.168.129.63.42446: S 1228444163:1228444163(0) ack 617235347 win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096653 1482096653>
00:00:00.000014 IP 192.168.129.63.42446 > 192.168.129.63.80: . ack 1 win 33688 <nop,nop,timestamp 1482096653 1482096653>
00:00:00.**000010** IP 192.168.129.63.80 > 192.168.129.63.42446: . ack 1 win 33688 <nop,nop,timestamp 1482096653 1482096653>
192.168.129.72
machine virtuelle dans le même hôte - notez que l'heure commence à 00.000000 - premier paquet affiché (et le 01.XXXXXX pour les deux autres adresses ci-dessous)
root@x063:[/]tcpdump -i en1 -n -ttt port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en1, link-type 1, capture size 96 bytes
00:00:00.000000 IP 192.168.129.63.42447 > 192.168.129.72.80: S 865313265:865313265(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096655 0>
00:00:00.**000125** IP 192.168.129.72.80 > 192.168.129.63.42447: S 916041515:916041515(0) ack 865313266 win 65535 <mss 1460,nop,wscale 2,nop,nop,timestamp 1481318272 1482096655>
00:00:00.000028 IP 192.168.129.63.42447 > 192.168.129.72.80: . ack 1 win 32761 <nop,nop,timestamp 1482096655 1481318272>
00:00:00.**000055** IP 192.168.129.72.80 > 192.168.129.63.42447: . ack 1 win 65522 <nop,nop,timestamp 1481318272 1482096655>
192.168.129.254
mon routeur - en dehors de l'hôte, pas une machine virtuelle.
00:00:01.005947 IP 192.168.129.63.42448 > 192.168.129.254.80: S 2756186848:2756186848(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096657 0>
00:00:00.**000335** IP 192.168.129.254.80 > 192.168.129.63.42448: S 2327415811:2327415811(0) ack 2756186849 win 5792 <mss 1460,nop,nop,timestamp 44854195 1482096657,nop,wscale 2,nop,opt-14:03>
00:00:00.000022 IP 192.168.129.63.42448 > 192.168.129.254.80: . ack 1 win 32761 <nop,nop,timestamp 1482096657 44854195>
00:00:00.**000090** IP 192.168.129.63.42448 > 192.168.129.254.80: P 1:142(141) ack 1 win 32761 <nop,nop,timestamp 1482096657 44854195>
192.168.129.71
même connexion que 192.168.129.72, mais ceci est «occupé» tandis que «72» est inactif. J'espère que les poignées de main initiales sont presque identiques
00:00:01.005093 IP 192.168.129.63.42449 > 192.168.129.71.80: S 249227688:249227688(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096659 0>
00:00:00.**000072** IP 192.168.129.71.80 > 192.168.129.63.42449: S 1898177685:1898177685(0) ack 249227689 win 65535 <mss 1460,nop,wscale 2,nop,nop,timestamp 1482096104 1482096659>
00:00:00.000022 IP 192.168.129.63.42449 > 192.168.129.71.80: . ack 1 win 32761 <nop,nop,timestamp 1482096659 1482096104>
00:00:00.**000050** IP 192.168.129.71.80 > 192.168.129.63.42449: . ack 1 win 65522 <nop,nop,timestamp 1482096104 1482096659>
plusieurs sauts
c'est le même hôte, le même résultat apache, mais maintenant via l'interface externe (6 sauts IP, plutôt que direct) - vous pouvez maintenant l'effet de RTT longue distance. (ps, j'ai légèrement modifié l'adresse IP). Plus important - notez qu'il y a deux paquets sortants après la prise de contact initiale avant le premier ACK après le retour d'une prise de contact.
Donc, au lieu de 25 msec RTT, pensez que le RTT est de 250 microsecondes, contre 25 microsecondes - et vous avez 500k transactions (ce qui ne représente que 120 à 125 secondes supplémentaires par rapport au local, et le débit est, à mon humble avis, comparable. Mais avec 50 millions de transactions (comme je l'avais fait dans une situation réelle), vous gagnez 12500 secondes supplémentaires - ce qui ajoute environ 3,5 heures supplémentaires pour "littéralement" le même travail (et une partie de la solution dans ce cas était de rendre les paquets plus gros - le la taille moyenne était à l'origine de 400 à 450 octets).
Rappelez-vous, ce que je veux montrer ici est un moyen assez simple de tenir compte des différences de temps global pour qu'une application (tâche par lots) se termine lors de la comparaison d'architectures à plusieurs niveaux avec des architectures à un seul niveau.
00:00:01.162974 IP 192.168.129.63.42450 > XX.85.86.223.80: S 1331737569:1331737569(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096661 0>
00:00:00.**023962** IP XX.85.86.223.80 > 192.168.129.63.42450: S 3130510306:3130510306(0) ack 1331737570 win 65535 mss 1460,nop,wscale 2,nop,nop,timestamp 1482096106 1482096661,nop,opt-14:03>
00:00:00.000025 IP 192.168.129.63.42450 > XX.85.86.223.80: . ack 1 win 32761 <nop,nop,timestamp 1482096661 1482096106>
00:00:00.000062 IP 192.168.129.63.42450 > XX.85.86.223.80: P 1:142(141) ack 1 win 32761 <nop,nop,timestamp 1482096661 1482096106>
00:00:00.**024014** IP XX.85.86.223.80 > 192.168.129.63.42450: . ack 1 win 65522 <nop,nop,timestamp 1482096107 1482096661>
Une autre chose que j'aime à propos de l'utilisation de tcpdump est qu'il s'agit d'un programme généralement disponible. Rien de plus n'a besoin d'être installé.