Existe-t-il un moyen de mesurer / signaler la latence globale dans une session SSH tunnelée?
Ma configuration particulière est:
- Client (OS X + routeur wifi + modem ADSL)
- Le serveur Gateway SSH exposé à Internet
- Cible SSH interne vers laquelle je creuse un tunnel
Je suis intéressé à voir la latence entre la console sur ma machine locale et la dernière machine sur laquelle j'ai ouvert la session.
networking
ssh
performance-monitoring
latency
poisson-globe
la source
la source
Réponses:
J'essayais de le faire moi-même et j'ai trouvé ça. Il existe probablement un moyen plus simple, mais c'est ce que j'ai trouvé.
Tout d'abord, préparez les tuyaux qui seront utilisés pour faire communiquer le programme d'analyse comparative via la connexion SSH.
Établissez ensuite une connexion en mode ControlMaster sans exécuter de commande à distance. Cela nous permet de nous authentifier de manière interactive avec l'hôte. Une fois la connexion établie, SSH se "suspend" juste ici au premier plan.
Dans un terminal parallèle, exécutez remote
cat
en arrière-plan. Ce sera notre serveur d'écho dont nous mesurerons la latence. Les entrées et sorties sont connectées aux FIFO:Et puis comparer un petit programme (envoyer un octet à
up
FIFO, recevoir un octet dedown
FIFO):La mesure montre évidemment la latence aller-retour. Si vous devez répéter l'expérience, exécutez à nouveau les deux dernières commandes (
ssh
etpython
).Si quelque chose semble mal se passer, utilisez l'
-v
indicateur SSH pour obtenir plus de sortie de débogage.la source
J'ai sauté quelques étapes suggérées par @ nicht-verstehen:
Où
python -m timeit
exécute letimeit
module Python.L'
-s/--setup
option indiquetimeit
quelle (s) instruction (s) exécuter avant chaque répétition.subprocess.Popen(["ssh", "user@host", "cat"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=0)
se lancessh
- s'exécutantcat
sur votre hôte - en tant qu'enfant / sous-processus, redirigeant ses flux d'E / S vers des objets de type fichier Python.bufsize=0
s'assure qu'aucun IO n'est mis en mémoire tampon, ce qui peut entraîner des attentes d'E / S.Et pour chaque boucle:
p.stdin.write(b"z")
écrit un seul octet à l'enfant (à son tour via ssh tocat
).p.stdout.read(1)
lit un seul octet de l'enfant. L'assertion qui l'entoure teste si cet octet est le même que celui que vous lui avez écrit.Se résume à la même chose, mais ignore la création des canaux nommés (
mkfifo
). J'ai remarqué que plus vous exécutez de boucles, plus chaque boucle est rapide. Contrôlez-le en utilisant-n/--number
:python -m timeit --number 50 ...
la source
Voir l'
sshping
utilitaire: https://github.com/spook/sshpingExemple:
la source
Mon idée était d'utiliser des séquences de requêtes terminales pour cela; l'avantage est que cela peut simplement être exécuté sur le serveur, l'inconvénient est qu'il mesure la latence du terminal, non seulement la latence de la connexion (mais je suppose que, généralement, le temps de réponse de votre terminal sera négligeable par rapport aux retards du réseau) - peut-être c'est même ce que vous entendez par latence globale
(Cela utilise "Device Code Query", tous les terminaux auxquels j'ai essayé de répondre: xterm, alacritty, gnome-terminal. Je ne peux pas essayer moi-même sous MacOS. Donc YMMV, si celui-ci ne le fait pas, une autre des demandes qui interrogent certaines informations sur le terminal peuvent fonctionner, voir http://www.termsys.demon.co.uk/vtansi.htm )
la source
\x1b[c
serait favorable)