Apakah ada cara untuk mengukur / melaporkan latensi keseluruhan dalam sesi SSH tunneled?
Pengaturan khusus saya adalah:
- Klien (OS X + router wifi + modem ADSL)
- Gateway SSH server terpapar ke Internet
- Target SSH internal yang saya tunneling
Saya tertarik melihat latensi antara konsol di komputer lokal saya dan mesin terakhir tempat sesi dibuka.
networking
ssh
performance-monitoring
latency
ikan buntal
sumber
sumber
Jawaban:
Sedang mencoba melakukan ini sendiri dan datang dengan ini. Mungkin ada cara yang lebih sederhana, tetapi inilah yang saya temukan.
Pertama, siapkan pipa yang akan digunakan untuk membuat program pembandingan berkomunikasi melalui koneksi SSH.
Kemudian buat koneksi dalam mode ControlMaster tanpa menjalankan perintah jarak jauh. Ini memungkinkan kami untuk mengotentikasi dengan host secara interaktif. Setelah koneksi dibuat, SSH hanya akan "menggantung" di sini di latar depan.
Di terminal paralel, jalankan remote
cat
di latar belakang. Ini akan menjadi server gema kami yang latensi akan kami ukur. Input dan output terhubung ke FIFO:Dan kemudian melakukan benchmark program kecil (mengirim byte ke
up
FIFO, menerima byte daridown
FIFO):Ukurannya jelas menunjukkan latensi bolak-balik. Jika Anda perlu mengulang percobaan, jalankan dua perintah terakhir (
ssh
danpython
) lagi.Jika ada yang tidak beres, gunakan
-v
tanda SSH untuk mendapatkan lebih banyak hasil debug.sumber
Saya melewatkan beberapa langkah yang disarankan oleh @ nicht-verstehen:
Dimana
python -m timeit
mengeksekusitimeit
modul Python.The
-s/--setup
pilihan memberitahutimeit
yang pernyataan (s) untuk menjalankan sebelum setiap ulangi.subprocess.Popen(["ssh", "user@host", "cat"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=0)
meluncurkanssh
- mengeksekusicat
pada host Anda - sebagai anak / subproses, mengarahkan aliran IO-nya ke objek seperti file Python.bufsize=0
memastikan tidak ada IO yang disangga, yang dapat menyebabkan IO menunggu.Dan untuk setiap loop:
p.stdin.write(b"z")
menulis satu byte ke anak (pada gilirannya melalui ssh kecat
).p.stdout.read(1)
membaca satu byte dari anak. Pernyataan di sekitarnya menguji apakah byte itu sama dengan yang Anda tulis.Mendidih ke hal yang sama, tetapi melompat membuat pipa bernama (
mkfifo
). Saya perhatikan bahwa semakin banyak loop yang Anda jalankan, semakin cepat setiap loopnya. Kontrol menggunakan-n/--number
:python -m timeit --number 50 ...
sumber
Lihat
sshping
utilitas: https://github.com/spook/sshpingContoh:
sumber
Gagasan saya adalah menggunakan urutan kueri terminal untuk ini; keuntungannya adalah ini hanya dapat dijalankan di server, kerugiannya adalah ia mengukur latensi terminal, tidak hanya latensi koneksi (tetapi saya kira, biasanya, waktu respons terminal Anda akan diabaikan dibandingkan dengan keterlambatan jaringan) —mungkin ini bahkan yang Anda maksud dengan latensi keseluruhan
(Ini menggunakan "Device Code Query", semua terminal yang saya coba balas ini: xterm, alacritty, gnome-terminal. Saya sendiri tidak dapat mencoba ini pada MacOS. Jadi YMMV, jika yang ini tidak, yang lain dari permintaan yang menginterogasi beberapa informasi tentang terminal mungkin berfungsi, lihat http://www.termsys.demon.co.uk/vtansi.htm )
sumber
\x1b[c
akan menguntungkan)