2009-04-19 14 views
5

में थ्रेड सीपीयू उपयोग मीट्रिक कैसे प्राप्त करें मुझे किसी प्रक्रिया में सभी थ्रेड के लिए CPU उपयोग मीट्रिक प्राप्त करने की आवश्यकता है।Redhat Linux

  • ऑपरेटिंग सिस्टम = RedHat Linux
  • प्रोग्रामिंग भाषा = सी ++ POSIX
  • का उपयोग कर
  • आवश्यकताओं = indefinetly नमूने हर कुछ सेकंड लेने के लिए ही नहीं, कुछ ही समय में एक स्नैपशॉट के लिए की जरूरत है।
  • बाधाओं = धागा

    मुझे पता है तुम "टॉप" आदेश का उपयोग कर सकते हैं में अतिरिक्त कोड लिखने की अनुमति नहीं है, लेकिन क्या अन्य तरीकों से देखते हैं? क्या "पीएस" के लिए कोई ध्वज है?

आपकी सभी मदद के लिए अग्रिम धन्यवाद।

उत्तर

0

आप इसे gnu gprof के साथ ऐसा करने में सक्षम हो सकते हैं जो लिनक्स में उपलब्ध है। मेरा मानना ​​है कि वे थ्रेडिंग का समर्थन करने का दावा करते हैं, लेकिन यह प्रक्रिया स्तर पर प्रोफाइलिंग से अधिक जटिल है, इसलिए आपको वह परिणाम नहीं मिल रहे हैं जिन्हें आप ढूंढ रहे हैं।

आपकी स्थिति के लिए यहां एक howto है।

5

आप पूरी प्रक्रिया के लिए जानकारी प्राप्त करने के लिए /proc/[your PID]/stat की सामग्री पढ़ सकते हैं और यदि आपके पास 2.6 कर्नेल है तो व्यक्तिगत थ्रेड के लिए जानकारी के साथ /proc/[your PID]/task/[thread ID]/stat भी है। (here देखें)

विशेष रूप से, आप इन दो क्षेत्रों मिलेगा:

jiffies कि इस प्रक्रिया उपयोगकर्ता मोड में तय किया गया है की संख्या।

STIME% लू

jiffies कि इस प्रक्रिया कर्नेल मोड में तय किया गया है की संख्या।

cutime% ld

यहाँ समस्याग्रस्त हिस्सा इकाई जिसमें मान दिया जाता है। एक जिफ्फी 1/एचजेड सेकेंड है, जहां एचजेड कर्नेल घड़ी टिक दर है और यह घड़ी दर निर्धारित करना कठिन हिस्सा है।

यदि आपको केवल एक विशिष्ट सिस्टम के लिए इसकी आवश्यकता है, तो आप केवल कुछ परीक्षण कर सकते हैं या अपने कर्नेल हेडर देख सकते हैं और इस प्रोग्राम को अपने प्रोग्राम में हार्डकोड कर सकते हैं। यदि आप जानना चाहते हैं कि इसे अधिक सामान्य तरीके से कैसे निर्धारित किया जाए, तो आप देख सकते हैं कि its source code (old_Hertz_hack() फ़ंक्शन और संबंधित टिप्पणियां देखें)

+0

मुझे किसी विशेष मशीन पर Hz मान प्राप्त करने का कोई तरीका मिला: बिल्ली/बूट/config-'uname -r' | grep एचजेड –

1

संभवतः एक आसान तरीका है ऐसा करने के लिए getrusage का उपयोग RUSAGE_THREAD के लिनक्स विशिष्ट एक्सटेंशन के साथ करना है। एक बार आपके पास इन बार हो जाने के बाद, आप पिछली बार नमूने के समय घटा सकते हैं, और अपने अंतिम नमूने के बाद से गुजरने वाले वास्तविक समय से विभाजित हो सकते हैं। यह कहता है कि आप CPU उपयोग को प्रतिशत के रूप में प्राप्त करते हैं।

लिनक्स विशिष्ट दस्तावेज़ीकरण के लिए, rusage liunx man page देखें।

0

आप प्रक्रिया आईडी को पहले खोजने के लिए "शीर्ष" कमांड का उपयोग कर सकते हैं।

उसके बाद, आप निम्न आदेश केवल प्रदर्शन सीपीयू/स्मृति उपयोग करने के लिए प्रक्रिया के लिए

top -p {pid} 

उसके बाद का उपयोग कर सकते हैं, तो आप "Shift" + "h" प्रेस धागे को दिखाने के लिए कर सकते हैं