क्यों वास्तविक समय उपयोगकर्ता समय से कम हो सकता है


31

मेरे पास वीडियो फ़ाइलों को परिवर्तित करने वाली एक स्क्रिप्ट है और मैं इसे परीक्षण डेटा पर सर्वर पर चलाता हूं और इसके समय को मापता हूं time। परिणाम में मैंने देखा:

real    2m48.326s
user    6m57.498s
sys     0m3.120s

वास्तविक समय उपयोगकर्ता के समय से बहुत कम क्यों है? क्या इसका मल्टीथ्रेडिंग से कोई संबंध है? या और क्या?

संपादित करें: और मुझे लगता है कि स्क्रिप्ट लगभग 2m48s चल रही थी


अपने EDIT को फिर से बनाएं - जो कि सही समझ में आता है, चूंकि realसमय दीवार-घड़ी के समय के रूप में नीचे समझाया गया है (यानी हम क्या मापेंगे अगर हमारे पास एक घड़ी थी)
लेवॉन

जवाबों:


42

आपके द्वारा दिखाया गया आउटपुट थोड़ा अजीब है, क्योंकि वास्तविक समय आमतौर पर अन्य दो की तुलना में बड़ा होगा।

  • Realसमय दीवार घड़ी का समय है। (स्टॉपवॉच के साथ हम क्या माप सकते हैं)
  • User समय प्रक्रिया के भीतर उपयोगकर्ता-मोड में समय बिताने की मात्रा है
  • Sys प्रक्रिया के भीतर कर्नेल में CPU समय व्यतीत होता है।

इसलिए मुझे लगता है कि अगर काम कई प्रोसेसरों द्वारा समवर्ती रूप से किया जाता है, तो सीपीयू का समय बीता हुआ दीवार घड़ी के समय से अधिक होगा।

क्या यह एक समवर्ती / बहु-थ्रेडेड / समानांतर प्रकार का अनुप्रयोग था?

एक उदाहरण के रूप में, यह वही है जो मैं अपने लिनक्स सिस्टम पर प्राप्त करता हूं जब मैं time find .कमांड जारी करता हूं । जैसा कि अपेक्षित है कि realइस एकल उपयोगकर्ता / एकल कोर प्रक्रिया पर अन्य की तुलना में बीता हुआ समय बहुत बड़ा है।

real    0m5.231s
user    0m0.072s
sys     0m0.088s

अंगूठे का नियम है:

  • वास्तविक <उपयोगकर्ता: प्रक्रिया सीपीयू बाध्य है और कई कोर / सीपीयू पर समानांतर निष्पादन का लाभ उठाती है।
  • वास्तविक no उपयोगकर्ता: प्रक्रिया सीपीयू बाध्य है और समानांतर छूट का कोई लाभ नहीं लेती है।
  • वास्तविक> उपयोगकर्ता: प्रक्रिया I / O बाध्य है। कई कोर पर निष्पादन से कोई फायदा नहीं होगा।

मुझे नहीं पता कि avconvक्या बहु-सूत्र है। क्या यह हो सकता है। avconvकी नई पीढ़ी है ffmpeg। मैं 7 लघु flv फ़ाइलों (लगभग 20 सेकंड प्रत्येक) को परिवर्तित कर रहा था।
कोबेलेकी

वास्तविक समय आम तौर पर अन्य दो से बड़ा होगा - लेकिन मैं अन्य स्थिति के बारे में पूछता हूं
kobylecki

4
यह स्पष्टीकरण सही है। ऐसा लगता है कि यह प्रक्रिया 4 कोर पर चलाई गई थी। वास्तविक / sys / उपयोगकर्ता समय की गणना कैसे की जाती है, इस बारे में अधिक जानकारी के लिए हाइपरथ्रेडिंग की मेरी व्याख्या भी देखें । यह वास्तव में संबंधित नहीं है, लेकिन अवधारणाएं समान हैं।
बहमट

@kobylecki वास्तविक समय दूसरों की तुलना में कम है क्योंकि ऐसा लगता है कि एवोकॉन कई कोर पर चलाया जाता है। चूँकि मुझे उस सॉफ्टवेयर का पता नहीं है और न ही इसे कैसे चलाया जाता है, मैं 100% दावा नहीं करना चाहता, लेकिन यह ऐसा है जो उपलब्ध जानकारी (समय की माप की 3 पंक्तियों और ज्ञान) के आधार पर दिखता है: - )
लेवॉन

में findउदाहरण के usrमूल्य काफी कम है क्योंकि ज्यादातर समय बीच में आता है के दौरान खर्च किया गया है है, भले ही findथ्रेड हो गया होता यह रुके कम होता है (खेद है कि अगर मैं अंग्रेज़ी काल में महारत हासिल नहीं है)।
इमैनुएल

13

बस यह बताने के लिए कि क्या कहा गया है, दो थ्रेडेड प्रक्रियाओं के साथ कुछ गणना कर रहे हैं।

/*a.c/*
    #include <pthread.h>
    static void  * dosomething () {
        unsigned long a,b=1;
        for (a=1000000000; a>0; a--) b*=3;
        return NULL;
    }
    main () {
        pthread_t one, two;
        pthread_create(&one,NULL, dosomething, NULL);
        pthread_create(&two,NULL, dosomething, NULL);
        pthread_join (one, NULL);
        pthread_join (two, NULL);
    }
/* end of a.c */

संकलन

gcc a.c -lpthread

(यह केवल वर्णन करने के लिए है, वास्तविक जीवन में मुझे -D_REENTRANT ध्वज जोड़ना चाहिए था)

$ time ./a.out

real    0m7.415s
user    0m13.105s
sys     0m0.032s

(टाइम्स एक इंटेल एटम पर है जिसमें दो धीमे कोर हैं :))

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