औसत समय कमांड कैसे करें?


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

क्या इसके लिए कोई UNIX टूल है? क्या GNU / Linux में एक है?

जवाबों:


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()जिसे आप सीधे उपयोग कर सकते हैं। या इस पर एक नज़र डालें, एक साधारण स्टॉपवॉच फ़ंक्शन जोड़ी। इसके अलावा "@ सिस्टम कमांड निष्पादित करना" @Rosetta कोड (या नहीं, यह नहीं है system("command")) देखें।

Edit2 मैंने बस इस प्रश्न को देखा , " सही" संबंधित "कॉलम में एक स्क्रिप्ट के भीतर समय को मापने वाला ", यह इस्तेमाल किया जा सकता है, भी, अर्थात, समय ले लो, लूप ( Nसमय) के लिए, समय फिर से लें, समय की गणना करें, द्वारा विभाजित करें N। (और भी आसान है, कोशिश करें time ( for-loop ), इसके आउटपुट को पार्स करें, विभाजित करें N)।


3

आप Rऔसत, मानक-विचलन और अन्य दिलचस्प मूल्यों को जल्दी से गणना करने के लिए उपयोग कर सकते हैं ।

उदाहरण के लिए, आप CSV फ़ाइल में कई रनटाइम माप लिखने के लिए 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
}

फिर आप इस तरह R के साथ मान उत्पन्न कर सकते हैं:

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 ...। कोई डेटा अवधारण मुद्दा (राउंड रॉबिन डेटाबेस)।

नुकसान: साधारण SQL टेबल / दृश्य की तुलना में rrd डेटाबेस को परिभाषित करना थोड़ा कठिन है


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.