लिनक्स में रिबूट के बाद से जिफियों की वर्तमान संख्या कैसे प्राप्त करें?


6

लिनक्स की /proc/PID/statलिस्ट में कई मेट्रिक्स हैं जिन्हें जिफियों में मापा जाता है। क्या रिबूट के बाद से # जिफ़ियों का वर्तमान पाने का कोई तरीका है ? Jiffies मैं भी USER_HZ मान से कुछ गुना अधिक है।

क्या मैं cpuलाइन में पहले 4 तर्कों को जोड़कर इसे प्राप्त कर सकता हूं /proc/stat?


अद्यतन :

$ date +"%s.%N" && grep '^jiffies' timer_list
1262103103.162169230
jiffies: 1007865965
jiffies: 1007865965
jiffies: 1007865965
jiffies: 1007865965
$ date +"%s.%N" && grep '^jiffies' timer_list
1262103108.706475051
jiffies: 1007867351
jiffies: 1007867351
jiffies: 1007867351
jiffies: 1007867351

इन दोनों के बीच का डेल्टा लगभग 250 जीफ / सेकंड है। ऐसा प्रतीत होता है मानो प्रति सीपीयू की सभी जिफ़ियाँ रेखाएँ समतुल्य हों (हालाँकि मुझे लगता है कि हो सकता है कि वे गर्म न हों। मुझे लगता है कि यह मुझे एक सुसंगत जिफिस काउंटर को खींचने के लिए सबसे अच्छी जगह देता है।

जवाबों:


4

कंप्यूटर पार्लियामेंट में तकनीकी रूप से झिझक, सिस्टम टाइमर इंटरप्ट के 1 टिक की अवधि है। हालांकि यह पूर्ण नहीं है। इंटेल x86 जिफ़ी पर लिनक्स 2.6.13+ के लिए 4ms है, लेकिन आर्किटेक्चर और कर्नेल संस्करण के आधार पर 1ms से लेकर 10ms तक हो सकता है।

से कर्नेल टाइमर सिस्टम पेज:

ऐतिहासिक रूप से, कर्नेल ने HZ के मूल्य के रूप में 100 का उपयोग किया, 10 एमएस के एक झटके अंतराल की उपज। 2.4 के साथ, i386 के लिए HZ मान 1000 में बदल गया था, 1 एमएस के एक पल अंतराल के साथ। हाल ही में (2.6.13) कर्नेल ने H3 को i386 से 250 में बदल दिया। (1000 को बहुत अधिक माना गया)।

यह सूचीबद्ध करता है /proc/timer_listऔर /proc/timer_stats

आप बूट समय पर टाइमर_स्टेट्स को सक्रिय कर सकते हैं, फिर इस फाइल को आँकड़े प्रिंट कर सकते हैं।


टाइमर_स्टेट्स को कैसे सक्रिय करता है? सही है, 'जीफिज' इस मामले में एक मनमाना वेतन वृद्धि है जब तक कि विभिन्न /proc/PID/statफाइलें एक मीट्रिक की रिपोर्ट करती हैं जो कुछ कुल के बराबर होती हैं जिनका उपयोग मैं सापेक्ष% s की गणना के लिए कर सकता हूं। ठीक है, इसलिए "jiffies" लाइन में है /proc/timer_list, मैं मूल पोस्ट को अपडेट करूंगा।
Jé Queue

1
आँकड़ों का संग्रह शुरू करने के लिए "इको 1> / प्रोक / टाइमर_स्टेट्स", जिसे आप अपने इनिट चक्र की शुरुआत में रख सकते हैं।
डेरेन हॉल

2

नहीं, आपको केवल पहली पंक्ति की आवश्यकता है। पहली पंक्ति दूसरी सीपीयू लाइनों में सब कुछ एकत्र करती है।

उदाहरण आउटपुट:

[जॉन @ कमाल] $ बिल्ली / proc / स्टेट
सीपीयू 35024984 1771325 94153391 1810948613 2648063 352387 557232
cpu0 13955475 927654 59431476 895791946 1910028 318618 438048
cpu1 21069509 843671 34721915 915156667 738035 33769 119184
intr 1403502159 1138402452 597 0 3 0 5 0 1 0 0 12315 0 92119425 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 एक 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57676632 0 0 0 0 0 0 0 0 0 115290726 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 एक 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 21043582666
btime 1252332786
प्रक्रियाओं 25663823
procs_running 1
procs_blocked 0

प्रत्येक स्तंभ का क्या अर्थ है (बाएं से दाएं):

  • उपयोगकर्ता: उपयोगकर्ता मोड में निष्पादन की सामान्य प्रक्रिया
  • अच्छा: उपयोगकर्ता मोड में निष्पादित प्रक्रियाएँ
  • सिस्टम: कर्नेल मोड में निष्पादन की प्रक्रिया
  • बेकार: बेकार समय
  • iowait: I / O के पूरा होने की प्रतीक्षा कर रहा है
  • irq: सर्विसिंग में रुकावट आती है
  • softirq: सर्विसिंग softirqs

जैसा कि आप देख सकते हैं, सीपीयू (उपयोगकर्ता मोड प्रक्रियाओं) के बाद का पहला कॉलम एक साथ जोड़े गए 2 नंबर के बराबर है।


क्या यह केवल उस उपयोगकर्ता समय के लिए नहीं है जिसके लिए cpu शेड्यूल किया गया था? दूसरों को अच्छा, सिस्टम और बेकार जा रहा है?
जेई कतार

प्रत्येक स्तंभ का अर्थ जोड़ा गया।
जॉन टी

ठीक है, लेकिन शुरू से ही कुल # जिफ़ियों को खोजने के लिए, क्या कोई ऐसा कुछ नहीं करेगा awk '/^cpu/{print $2+$3+$4+$5}' /proc/stat?
जे क्यू कतार

आप केवल उपयोगकर्ता, अच्छा, सिस्टम और निष्क्रिय चाहते हैं? आप कर सकते हैंawk '/^cpu\>/{print $2+$3+$4+$5}' /proc/stat
जॉन टी

ऐसा प्रतीत होता है जैसे कि किसी भी समय डेल्टा एक योग के साथ संगत नहीं है /proc/stat!
Jé Queue

1

सेकंड प्रति सेकंड:

awk 'BEGIN {"cat /proc/timer_list | grep '\''^jiffies'\'' | awk '\''{print $2}'\''" | getline a; "cat /proc/uptime | awk '\''{print $1}'\''" | getline b ;printf "%.4f\n", a/b}'

स्पष्टीकरण: यह बूट्स को तब से विभाजित करता है जब बूट पाया जाता है / proc / टाइमर_लिस्ट सेकंड में बूट होने के बाद / proc / uptime में पाया जाता है


मुझे 75409.1301ऐसा मिलता है जो सामान्य मामले में स्थिर नहीं लगता है। uname -aरिपोर्ट Linux semyol-329-b 3.19.0-33-lowlatency #38~14.04.1-Ubuntu SMP PREEMPT Fri Nov 6 19:30:45 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
मिको रानाल्टेन ने

1

बाद में लिनक्स कर्नेल में आप क्वेरी कर सकते हैं /proc/timer_listऔर सिस्टम के भीतर मौजूद प्रत्येक सीपीयू से रिबूट के बाद से जिफियों की संख्या का पता लगा सकते हैं । उन्हें हमेशा मेल खाना चाहिए।

$ grep -E "^cpu|^jiff" /proc/timer_list
cpu: 0
jiffies: 4299690231
cpu: 1
jiffies: 4299690231

यदि आप timer_list.cउस बिट के पीछे के कोड को देखते हैं जो ऊपर प्रिंट करता है:

...
...
        P_ns(iowait_sleeptime);
        P(last_jiffies);
        P(next_timer);
        P_ns(idle_expires);
        SEQ_printf(m, "jiffies: %Lu\n",
               (unsigned long long)jiffies);

ध्यान दें कि यह है unsigned long long

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