এসএসএইচ সেশনের সম্পূর্ণ বিলম্ব পরিমাপ করুন


15

একটি সুড়ঙ্গ এসএসএইচ অধিবেশনে সামগ্রিক বিলম্বকে মাপার / প্রতিবেদন করার কোনও উপায় আছে কি ?

আমার নির্দিষ্ট সেটআপটি হ'ল:

  • ক্লায়েন্ট (ওএস এক্স + ওয়াইফাই রাউটার + এডিএসএল মডেম)
  • গেটওয়ে এসএসএইচ সার্ভারটি ইন্টারনেটের মুখোমুখি
  • অভ্যন্তরীণ এসএসএইচ লক্ষ্য যা আমি টানেল করছি

আমি আমার স্থানীয় মেশিনে কনসোল এবং আমার কাছে চূড়ান্ত মেশিনে অধিবেশনটি খোলা রয়েছে তার কনসোলের মধ্যে বিলম্ব দেখতে আগ্রহী।


প্রথম সার্ভারে এসএসএইচ টানেল কেন এবং তারপরে দ্বিতীয় সার্ভারে এসএসএইচ কনসোল নয়।
বার্ট

উত্তর:


6

আমি নিজে এটি করার চেষ্টা করছিলাম এবং এটি নিয়ে এসেছি। সম্ভবত একটি সহজ উপায় আছে, কিন্তু আমি এটি নিয়ে এসেছি।

প্রথমে পাইপ প্রস্তুত করুন যা বেঞ্চমার্কিং প্রোগ্রামটি এসএসএইচ সংযোগের মাধ্যমে যোগাযোগের জন্য ব্যবহৃত হবে।

$ mkfifo /tmp/up /tmp/down

তারপরে কোনও রিমোট কমান্ড না চালিয়ে কন্ট্রোলমাস্টার মোডে একটি সংযোগ স্থাপন করুন। এটি আমাদের ইন্টারেক্টিভভাবে হোস্টের সাথে অনুমোদনের অনুমতি দেয়। সংযোগটি প্রতিষ্ঠিত হওয়ার পরে, এসএসএইচটি এখানে অগ্রভাগে "হ্যাঙ্গ" করবে।

$ ssh $HOST -N -M -S /tmp/control

সমান্তরাল টার্মিনালে, catপটভূমিতে রিমোট চালিত করুন। এটি আমাদের ইকো সার্ভার হবে যার বিলম্ব আমরা পরিমাপ করব। ইনপুট এবং আউটপুটগুলি ফিফোর সাথে সংযুক্ত রয়েছে:

$ ssh $HOST -S /tmp/control cat </tmp/up >/tmp/down &

এবং তারপরে একটি ছোট প্রোগ্রামকে upবেনমার্ক করুন ( ফিফোর কাছে একটি বাইট প্রেরণ করুন , ফিফোর কাছ থেকে একটি বাইট পাবেন down):

$ python -m timeit -s 'import os' \
    'os.write(3, "z"); z=os.read(4, 1); assert z=="z", "got %s" % z' \
    3>/tmp/up 4</tmp/down
10 loops, best of 3: 24.6 msec per loop

পরিমাপটি স্পষ্টতই বৃত্তাকার-ট্রিপের বিলম্ব দেখায়। আপনার যদি পরীক্ষার পুনরাবৃত্তি করতে হয় তবে শেষ দুটি কমান্ড ( sshএবং python) আবার চালান ।

যদি কিছু ভুল হয়ে যায় বলে মনে হয়, -vআরও ডিবাগিং আউটপুট পেতে এসএসএইচ পতাকা ব্যবহার করুন ।


4

আমি @ নিকট-ভার্সেটেন দ্বারা প্রস্তাবিত কিছু পদক্ষেপ এড়িয়ে গেছি:

python -m timeit --setup 'import subprocess; p = subprocess.Popen(["ssh", "user@host", "cat"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=0)' 'p.stdin.write(b"z"); assert p.stdout.read(1) == b"z"'

কোথায়

python -m timeitexecutes timeitপাইথন মডিউল।

-s/--setupবিকল্প বলে timeitযা বিবৃতি (গুলি) প্রতিটি পুনরাবৃত্তির আগের চালানো।

subprocess.Popen(["ssh", "user@host", "cat"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=0)প্রবর্তন ssh- catআপনার হোস্টের উপর নির্বাহ - একটি শিশু / সাবপ্রসেস হিসাবে, এর আইও স্ট্রিমগুলি পাইথন ফাইলের মতো বস্তুগুলিতে পুনর্নির্দেশ করে। bufsize=0কোনও আইও বাফার না করেছে তা নিশ্চিত করে, যার ফলে আইও অপেক্ষা করতে পারে।

এবং প্রতিটি লুপের জন্য:
p.stdin.write(b"z") সন্তানের কাছে একটি একক বাইট লিখুন (পরিবর্তে ssh থেকে cat)।
p.stdout.read(1)সন্তানের কাছ থেকে একক বাইট পড়ে। আশেপাশে থাকা দৃ tests়তা যাচাই করে যে সেই বাইট আপনি লিখেছেন তার মতো কিনা।

একই জিনিসটিতে সিদ্ধ হয় তবে নামী পাইপগুলি তৈরি করে ( mkfifo)) আমি লক্ষ্য করেছি যে আপনি যত বেশি লুপ চালাবেন তত দ্রুত প্রতিটি লুপ তত দ্রুত। এটি ব্যবহার করে নিয়ন্ত্রণ করুন -n/--number:python -m timeit --number 50 ...


3

sshpingইউটিলিটি দেখুন : https://github.com/spook/sshping

উদাহরণ:

# sshping 172.16.47.143
--- Login: 1725 msec
--- Minimum Latency: 4046 nsec
---  Median Latency: 11026 nsec  +/- 0 std dev
--- Average Latency: 178105 nsec
--- Maximum Latency: 8584886 nsec
---      Echo count: 1000 Bytes
---  Transfer Speed: 11694919 Bytes/second

# sshping --help
Usage: sshping [options] [user@]addr[:port]

  SSH-based ping that measures interactive character echo latency
  and file transfer throughput.  Pronounced "shipping".

Options:
  -c  --count NCHARS   Number of characters to echo, default 1000
  -e  --echocmd CMD    Use CMD for echo command; default: cat > /dev/null
  -h  --help           Print usage and exit
  -i  --identity FILE  Identity file, ie ssh private keyfile
  -p  --password PWD   Use password PWD (can be seen, use with care)
  -r  --runtime SECS   Run for SECS seconds, instead of count limit
  -t  --tests e|s      Run tests e=echo s=speed; default es=both
  -v  --verbose        Show more output, use twice for more: -vv

0

আমার ধারণা এটির জন্য টার্মিনাল ক্যোয়ারী সিকোয়েন্সগুলি ব্যবহার করা ছিল; সুবিধাটি হ'ল এটি কেবল সার্ভারে চালানো যেতে পারে, অসুবিধাটি হ'ল এটি টার্মিনাল ল্যাটেন্সিটি পরিমাপ করে, কেবলমাত্র সংযোগের বিলম্বিতা নয় (তবে আমার ধারণা, সাধারণত আপনার টার্মিনালের প্রতিক্রিয়া সময়টি नेटवर्क বিলম্বের সাথে তুলনায় নগন্য হবে) yমায়েব এটি সামগ্রিক বিলম্বিতা বলতে যা বোঝায় তা এমনকি

#!/usr/bin/env python3
# Measure terminal latency (round-trip time) using "Query device code" command
from sys import stdin, stdout
import tty, termios, time

oldtty = termios.tcgetattr(stdin)
try:
    tty.setcbreak(stdout)

    runs = 10
    results = []
    for _ in range(runs):
        stdout.write("\x1b[c")
        stdout.flush()
        t1 = time.time()
        ch = stdin.read(1)
        assert(ch == '\x1b')
        t2 = time.time()
        while stdin.read(1) != 'c': # swallow rest of report
            continue
        latency = (t2 - t1) * 1000
        print('%.1fms' % (latency))
        results.append(latency)

    print()
    print('avg: %.1fms min: %.1fms max: %.1fms' % (
        sum(results) / runs,
        min(results),
        max(results)))
finally:
    termios.tcsetattr(stdin, termios.TCSADRAIN, oldtty)

(এটি "ডিভাইস কোড ক্যোয়ারী" ব্যবহার করে, আমি যে সমস্ত টার্মিনালগুলিতে এর প্রতিক্রিয়া দেখিয়েছি: এক্সটার্ম, অ্যালক্রিট্টি, জিনোম-টার্মিনাল myself টার্মিনাল সম্পর্কে কিছু তথ্য কাজ করতে পারে এমন জিজ্ঞাসাবাদ করছে, দেখুন http://www.termsys.demon.co.uk/vtansi.htm )


1
এই উত্তরটি এখনও (যেমন, কেন TTY অভ্যন্তরীণ সাথে পরিচিত না তাদের জন্য কিছু ব্যাখ্যা ব্যবহার করতে পারে \x1b[cঅনুকূল হবে)
anx

নিশ্চিত নয় যে এটি অনুকূল, আমি মনে করি এটি একটি বৈধ আলোচনা: "ডিভাইস স্থিতি" শর্তাদির মধ্যে থেকে যে কোনও টার্মিনালটি সমর্থন করে এবং "ভালভাবে সমর্থিত" কোন ধারণা নেই, তবে " আমার অনুমান যে মৌলিক অবস্থা ক্যোয়ারী হবে (এমনকি বেয়ার হাড় Alacritty কাজ করে) হল
wump
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.