গড় কমান্ড কিভাবে?


18

আমি timeআমার কিছু কমান্ড আইএনএন করছি । এখন ব্যবস্থাগুলির গড় গড় ধরতে, আমি আমার কমান্ডগুলিকে একটি নির্দিষ্ট সংখ্যক বার চালনা এবং সময় দিতে চাই এবং গণনা করা গড় এবং মানক বিচ্যুতি সহ ফলাফলগুলি পেতে পারি। ফলাফলটি এরকম হবে:

avgtime -n 100 my_command

real    0m5.388s stdev 0m0.068s
user    0m5.380s stdev 0m0.067s
sys     0m0.004s stdev 0m0.000s

এর জন্য কি কোনও ইউনিক্স সরঞ্জাম রয়েছে? জিএনইউ / লিনাক্সের কি একটি আছে?

উত্তর:


7

পাইথন সহ যে কোনও সিস্টেমে উপলব্ধ টাইমিট মডিউলটি ব্যবহার করার চেষ্টা করতে পারেন:

$ python -m timeit "__import__('os').system('my command here')"
10 loops, best of 3: 591 msec per loop

os.system()প্রতিটি কমান্ডের সাহায্যে শেল তৈরি / তৈরি করার ওভারহেড ব্যবহার করে । সম্ভবত আরও ভাল সাবপ্রোসেসক্ল্যাক ব্যবহার করুন ()
অ্যান্থন

সত্য, তবে সম্ভবত স্থির-ইশ হতে পারে
bhdnx

4

এটি হুবহু ইউনিক্স বা জিএনইউ / লিনাক্স সরঞ্জাম নয়, তবে আপনি এটির জন্য পরিসংখ্যানগত কম্পিউটিংয়ের জন্য আর সফ্টওয়্যার পরিবেশটি বেশ স্বাচ্ছন্দ্যে ব্যবহার করতে পারেন । (যদিও আমি আপনার কাজের জন্য আরও নির্দিষ্ট কিছু খুঁজে পাচ্ছি না ))

সম্পাদনা করুন আমি কিভাবে এটা সন্দেহ পারে, অবশ্যই সেখানে একটি বেঞ্চমার্ক প্যাকেজ R: rbenchmark। এটি আপাতভাবে মোড়ানো system.time()যা আপনি সরাসরি ব্যবহার করতে পারেন। অথবা এটি দেখুন, একটি সাধারণ স্টপওয়াচ ফাংশন জুটি। এছাড়াও "সিস্টেম কমান্ড কার্যকর করা হচ্ছে" @ রোসেটা কোড দেখুন (বা না, এটি হয় system("command")))

সম্পাদনা 2 আমি কেবল এই প্রশ্নটি দেখেছি , "স্ক্রিপ্টের মধ্যে সময় পরিমাপ" ডান "সম্পর্কিত" কলামে, এটিও ব্যবহার করা যেতে পারে, অর্থাত্ সময় নিতে, লুপের জন্য ( Nসময়) করতে পারে, আবার সময় নিতে পারে, টাইমস্প্যান গণনা করে, ভাগ করে N। (এমনকি আরও সহজ, চেষ্টা করুন time ( for-loop ), এর ফলাফলকে পার্স করুন , ভাগ করে নিন N)।


3

আপনি Rগড়, মান-বিচ্যুতি এবং অন্যান্য আকর্ষণীয় মানগুলি দ্রুত গণনা করতে ব্যবহার করতে পারেন ।

উদাহরণস্বরূপ, আপনি একটি সিএসভি ফাইলে বেশ কয়েকটি রানটাইম পরিমাপ লিখতে GNU সময় ব্যবহার করতে পারেন:

function measure
{
  f=$1; shift
  n=$2; shift
  echo wall,user,sys,rss > "$f"
  for i in $(seq $n); do
    /usr/bin/time --output "$f" --append --format '%e,%U,%S,%M' "$@" >/dev/null
  done
}

তারপরে আপনি আর এর মতো মানগুলি তৈরি করতে পারেন:

Rscript --vanilla -e "b=read.csv(file='$f');summary(b);sapply(b, sd);"

আমি একটি ছোট বেঞ্চমার্ক স্ক্রিপ্ট তৈরি করেছি যা আর আউটপুটটির কিছু সুন্দর মুদ্রণও করে, যেমন:

$ benchmark.sh 100 ./some_prog arg1 arg2
n=100 | min    | Q1     | med    | mean   | Q3     | max    | std
wall  | 0.0400 | 0.0400 | 0.0500 | 0.0471 | 0.0500 | 0.0800 | 0.00624
user  | 0.0400 | 0.0400 | 0.0400 | 0.0426 | 0.0400 | 0.0700 | 0.00562
sys   | 0      | 0      | 0      | 0      | 0      | 0      | 0.00000
rss   | 2608   | 2657   | 2704   | 2728   | 2764   | 2920   | 95.06524

1

বিকল্প 1 - বর্গক্ষেত্র :

কমান্ড এবং সময় কলামগুলির সাথে সাধারণ সারণী তৈরি করুন এবং সঠিক সমষ্টি গণনা সহ দেখুন। টাইমিংয়ের পরে, টেবিলে একটি সারি যুক্ত করুন

সুবিধা: সমাধান 2 এর তুলনায় একটি সারণী সংজ্ঞায়িত করা সহজ।

অসুবিধাগুলি: আপনার ডেটা ধরে রাখার বিষয়ে যত্নশীল (আপনার কি?) প্রয়োজন।

বিকল্প 2 - rrdtool :

Rrd ডেটা বেস ফাইল, ডেটা সংজ্ঞা এবং সংহতকরণ কার্যগুলি সংজ্ঞায়িত করুন। সময় করার পরে, সাথে ডাটাবেস ফিড rrdtool update ...

সুবিধা: আপনি সহজেই এর সাথে গ্রাফ তৈরি করতে পারেন rrdtool graph ...। কোনও তথ্য ধরে রাখার সমস্যা নেই (রাউন্ড রবিন ডাটাবেস)।

অসুবিধাগুলি: সহজ এসকিউএল টেবিল / প্রদর্শনের তুলনায় আরআরডি ডাটাবেস সংজ্ঞায়িত করা কিছুটা শক্ত


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.