यूनिक्स में विशेष रूप से दीवार-घड़ी-समय, उपयोगकर्ता-सीपीयू-समय और सिस्टम-सीपीयू-समय क्या हैं?


144

मैं नामों के आधार पर एक अनुमान लगा सकता हूं, लेकिन विशेष रूप से दीवार-घड़ी-समय, उपयोगकर्ता-सीपीयू-समय और यूनिक्स में सिस्टम-सीपीयू-समय क्या हैं?

क्या उपयोगकर्ता-सीपीयू समय, कर्नेल-सीपीयू समय-समय पर उपयोगकर्ता-कोड को निष्पादित करने में बिताया गया समय है, जो विशेषाधिकार प्राप्त संचालन (जैसे IO से डिस्क) की आवश्यकता के कारण कर्नेल में बिताया गया समय है?

यह माप किस समय की इकाई है?

और दीवार-घड़ी का समय वास्तव में सीपीयू पर खर्च की गई सेकंड की संख्या है या नाम केवल भ्रामक है?


जवाबों:


143

दीवार-घड़ी का समय वह समय होता है जब दीवार पर एक घड़ी (या हाथ में एक स्टॉपवॉच) होती है, जो प्रक्रिया की शुरुआत और 'अब' के बीच बीतने के रूप में मापेगी।

उपयोगकर्ता-सीपीयू समय और सिस्टम-सीपीयू समय बहुत ज्यादा है जैसा कि आपने कहा - उपयोगकर्ता कोड में खर्च किए गए समय और कर्नेल कोड में खर्च किए गए समय की मात्रा।

इकाइयाँ सेकंड (और उप-सेकंड्स हैं, जो माइक्रोसेकंड या नैनोसेकंड हो सकती हैं)।

दीवार-घड़ी का समय सेकंड की संख्या नहीं है जो प्रक्रिया ने सीपीयू पर खर्च किया है; यह बीता हुआ समय है, जिसमें सीपीयू पर अपनी बारी के इंतजार में समय व्यतीत होता है (जबकि अन्य प्रक्रियाओं को चलाने के लिए)।


16
तो क्या इसका मतलब यह है कि दीवार-घड़ी का समय हमेशा सीपीयू समय से अधिक होगा ?
पचेरियर

36
@ स्पेसर: एक सिंगल कोर मशीन पर, हाँ, लेकिन मल्टी-कोर मशीन और मल्टी-थ्रेडेड प्रोग्राम 1 सीपीयू सेकंड प्रति बीता हुआ सेकेंड से अधिक उपयोग कर सकते हैं।
जोनाथन लेफ़लर

@JonathanLeffler उत्तर के लिए धन्यवाद, मैं उस नैनोसेकंड की संख्या प्राप्त करना चाहता था जिसे समाप्त कर दिया गया है लेकिन सूत्र का उपयोग करके सीपीयू समय की CPUtime = #clock_cycles / clock_rateगणना करना बीते समय की गणना के समान नहीं हो सकता है। क्या आप जानते हैं कि क्या मुझे सीपीयू समय से बीता हुआ समय मिल सकता है?
Bionix1441

2
@ Bionix1441: आप कई कारणों से सीपीयू के समय को समाप्त नहीं कर सकते। सबसे पहले, एक प्रक्रिया बेकार हो सकती है, किसी भी सीपीयू समय का उपभोग नहीं कर सकती, मनमाने समय के लिए (उदाहरण के लिए, एक डेमन प्रक्रिया एक क्लाइंट के लिए इसे नेटवर्क पर कनेक्ट करने के लिए इंतजार कर रही है), इसलिए यह बीते हुए समय के दिनों के लिए कुछ भी नहीं कर सकता है। । दूसरा, यदि यह चल रहा है, तो इसके कई धागे हो सकते हैं, और यदि ऐसा है, तो कहें, 4 धागे हैं और सिस्टम पर 4 या अधिक कोर हैं, यह बीते हुए समय के प्रति सेकंड खर्च के 4 सीपीयू सेकंड को रैक कर सकता है। ये दिखाते हैं कि कोई सरल (या जटिल भी) सूत्र नहीं है जिसका आप उपयोग कर सकते हैं।
जोनाथन लेफलर

1
@ कैटिगरी: क्या आप जानते हैं कि यूनिक्स कर्नेल उपयोगकर्ता कार्यक्रमों से अलग चलता है। जब आपका प्रोग्राम एक सिस्टम कॉल (उदाहरण के लिए, read()या getpid()) करता है, तो कर्नेल आपके प्रोग्राम की ओर से कोड निष्पादित करता है। कर्नेल पूर्व-खाली मल्टी-टास्किंग को भी संभालता है ताकि अन्य कार्यक्रमों को चलाने के लिए अपनी बारी मिल जाए, और सिस्टम को सुचारू रूप से चलाने के लिए कुछ सामान्य हाउसकीपिंग काम करता है। इस कोड को 'कर्नेल कोड' ('कर्नेल मोड' में भी) निष्पादित किया जाता है। यह आपके द्वारा लिखे गए कोड और उपयोगकर्ता लाइब्रेरी (सिस्टम C लाइब्रेरी सहित) से अलग है जिसे आप चलाते हैं।
जोनाथन लेफलर

36

दीवार घड़ी का समय: कंप्यूटर की आंतरिक घड़ी के अनुसार समय बीत जाता है, जिसे बाहरी दुनिया में समय से मेल खाना चाहिए। इसका CPU उपयोग से कोई लेना-देना नहीं है; यह संदर्भ के लिए दिया गया है।

उपयोगकर्ता CPU समय और सिस्टम समय: वास्तव में आप क्या सोचते हैं। सिस्टम कॉल है, जो मैं शामिल / ओ कॉल जैसे read, writeआदि कर्नेल कोड और उस को क्रियान्वित करने में कूद द्वारा क्रियान्वित कर रहे।

यदि दीवार घड़ी का समय <CPU समय, तो आप समानांतर में एक कार्यक्रम निष्पादित कर रहे हैं। यदि दीवार घड़ी समय> CPU समय, आप डिस्क, नेटवर्क या अन्य उपकरणों की प्रतीक्षा कर रहे हैं।

सभी सेकंड में मापा जाता है, एसआई के अनुसार ।


7

दीवार घड़ी का समय ठीक वैसा ही है जैसा वह कहता है, आपकी दीवार पर घड़ी द्वारा मापे गए समय (या कलाई घड़ी)

उपयोगकर्ता सीपीयू समय "उपयोगकर्ता भूमि" में बिताया गया समय है, जो कि गैर-कर्नेल प्रक्रियाओं पर खर्च किया गया समय है

सिस्टम सीपीयू का समय कर्नेल में व्यतीत होता है, आमतौर पर सर्विसिंग सिस्टम कॉल में समय व्यतीत होता है।


7
time [WHAT-EVER-COMMAND]

real    7m2.444s
user    76m14.607s
sys 2m29.432s

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24

असली या दीवार-घड़ी

असली 7m2.444s

24 कोर प्रोसेसर वाले सिस्टम पर, इस cmd / प्रक्रिया को पूरा करने के लिए 7+ मिनट लगते हैं। सभी दिए गए कोर के साथ सबसे संभव समानता का उपयोग करके।

उपयोगकर्ता

उपयोगकर्ता 76m14.607s

Cmd / प्रक्रिया ने cpu समय की इस राशि का उपयोग किया है। दूसरे शब्दों में, सिंगल कोर सीपीयू के साथ मशीन पर, वास्तविक और उपयोगकर्ता लगभग बराबर होंगे, इसलिए एक ही कमांड को पूरा करने के लिए ~ 76 मिनट लगेंगे।

sys

sys 2m29.432s

इस cmd को चलाने के लिए सभी मूल / सिस्टम स्तर के संचालन को निष्पादित करने के लिए कर्नेल द्वारा लिया गया समय है, जिसमें संदर्भ स्विचिंग, संसाधन आवंटन, आदि शामिल हैं।

नोट: उदाहरण मानता है कि आपकी कमांड समानता / सूत्र का उपयोग करती है।

विस्तृत मैन पेज: https://linux.die.net/man/1/time


आपके द्वारा पोस्ट किए गए समय को देखते हुए, क्या यह लगभग आधा समानता नहीं है? (im सिर्फ (user + sys) / realउस का प्रतिनिधित्व करने के लिए कर रहे हैं ।
dtc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.