2010-07-27 7 views
80

कोर द्वारा एक विशिष्ट प्रक्रिया सीपीयू उपयोग को मापने का कोई तरीका है?मैं प्रक्रिया के लिए अलग-अलग CPU कोर उपयोग को कैसे मापूं?

मुझे पता है top कोर सिस्टम द्वारा पूरे सिस्टम के सीपीयू उपयोग को मापने के लिए अच्छा है और taskset इस बारे में जानकारी प्रदान कर सकता है कि प्रक्रिया के लिए कौन सी सीपीयू कोर की अनुमति है।

लेकिन मैं सीपीयू कोर द्वारा एक विशिष्ट प्रक्रिया 'CPU उपयोग को कैसे मापूं?

उत्तर

32

आप ps का उपयोग कर सकते हैं।
उदा। डुअल कोर सीपीयू पर दो व्यस्त धागे के साथ अजगर प्रक्रिया होने:

$ ps -p 29492 -L -o pid,tid,psr,pcpu 
    PID TID PSR %CPU 
29492 29492 1 0.0 
29492 29493 1 48.7 
29492 29494 1 51.9 

आप देखते हैं कि धागे एक ही सीपीयू कोर पर चल रहे हैं (क्योंकि की (PSR सीपीयू आईडी धागा वर्तमान में करने के लिए आवंटित किया गया है) जीआईएल)

Jython में एक ही अजगर स्क्रिप्ट चलाने, हम देखते हैं, कि स्क्रिप्ट दोनों कोर कई अन्य सेवा या जो कुछ भी धागे, जो लगभग निष्क्रिय हैं) का उपयोग किया जाता है (और देखते हैं:

$ ps -p 28671 -L -o pid,tid,psr,pcpu 
    PID TID PSR %CPU 
28671 28671 1 0.0 
28671 28672 0 4.4 
28671 28673 0 0.6 
28671 28674 0 0.5 
28671 28675 0 2.3 
28671 28676 0 0.0 
28671 28677 1 0.0 
28671 28678 1 0.0 
28671 28679 0 4.6 
28671 28680 0 4.4 
28671 28681 1 0.0 
28671 28682 1 0.0 
28671 28721 1 0.0 
28671 28729 0 88.6 
28671 28730 1 88.5 

आप आउटपुट को संसाधित कर सकते हैं और प्रत्येक सीपीयू कोर के लिए कुल सीपीयू की गणना कर सकते हैं।

दुर्भाग्य से, इस दृष्टिकोण 100% विश्वसनीय होना प्रतीत नहीं होता है, कभी कभी मैं देख कि पहले मामले में, दो कार्यकारी धागे उत्तरार्द्ध मामले में प्रत्येक सीपीयू कोर करने के लिए अलग किया जा रहा है, या रिपोर्ट कर रहे हैं, दो धागे हैं एक ही कोर पर होने की ..

91

तुम अब भी में शीर्ष

प्रकार 1 यह कर सकते हैं सूचना दी - यह प्रत्येक सीपीयू

सीमा प्रक्रियाओं है कि विशिष्ट एक विशिष्ट उपयोगकर्ता खाते के अंतर्गत चलाने प्रक्रिया होने से पता चला पता चलता और उस उपयोगकर्ता को सीमित करने के लिए टाइप 'यू' का उपयोग करें

+5

इसलिए का एक अच्छा सिंहावलोकन देता है .. कैसे मैं इस पढ़ा करते हैं? – Zhianc

+1

आप * Irix मोड * टॉगल करने के लिए 'I' दबा सकते हैं (जैसा कि * सोलारिस मोड * के विपरीत है)। जब 'चालू' हो, तो प्रक्रिया सूची में प्रदर्शित प्रतिशत ** ** CPU थ्रेड ** के सापेक्ष है। जब 'ऑफ' होता है, तो कहा गया प्रतिशत ** सीपीयू समग्र क्षमता ** (यानी * सभी धागे * - उर्फ ​​सभी कोर) के अपेक्षाकृत प्रदर्शित होता है। –

+3

'htop' भी काम करता है – phyatt

62

आप उपयोग कर सकते हैं:

mpstat -P ALL 1 

इससे पता चलता है कि कितना प्रत्येक कोर व्यस्त है और यह स्वचालित रूप से प्रत्येक दूसरे अद्यतन करता है।

10:54:41 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 
10:54:42 PM all 8.20 0.12 0.75 0.00 0.00 0.00 0.00 0.00 90.93 
10:54:42 PM 0 24.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 74.00 
10:54:42 PM 1 22.00 0.00 2.00 0.00 0.00 0.00 0.00 0.00 76.00 
10:54:42 PM 2 2.02 1.01 0.00 0.00 0.00 0.00 0.00 0.00 96.97 
10:54:42 PM 3 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00 
10:54:42 PM 4 14.15 0.00 1.89 0.00 0.00 0.00 0.00 0.00 83.96 
10:54:42 PM 5 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00 
10:54:42 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 
10:54:42 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 

यह आदेश मूल प्रश्न हालांकि यानी यह एक विशिष्ट प्रक्रिया के लिए सीपीयू कोर उपयोग प्रदर्शित नहीं करता है का उत्तर न मिले: निर्गम (एक क्वाड-कोर प्रोसेसर पर) कुछ इस तरह होगा।

+1

मुझे लगता है कि यह वास्तव में प्रश्न का उत्तर नहीं देता है। यदि कोई अन्य प्रक्रिया चल रही नहीं है तो यह वही बात है। यह भी एक कोर कोर सीपीयू प्रतीत नहीं होता है, आठ कोर की तरह अधिक (शायद एचटी सक्षम के साथ चौकोर)। –

+0

यह एचटी सक्षम के साथ एक क्वाड कोर है। –

+0

मूल प्रश्न का उत्तर नहीं देता है। हालांकि, इसका उल्लेख करने के लिए (-1) मुझसे नहीं। – KGhatak

3

ps समाधान किया गया था लगभग कि मैं क्या जरूरत है और कुछ बैश में फेंक दिया के साथ बिल्कुल वही करती लिए क्या मूल प्रश्न पूछा: विशिष्ट प्रक्रियाओं

के प्रति कोर उपयोग को देखने के लिए इस के प्रति कोर उपयोग दिखाता है बहु थ्रेडेड प्रक्रियाएं भी।

इस तरह का उपयोग करें: cpustat `pgrep processname`` pgrep otherprocessname` ...

#!/bin/bash 

pids=() 
while [ $# != 0 ]; do 
     pids=("${pids[@]}" "$1") 
     shift 
done 

if [ -z "${pids[0]}" ]; then 
     echo "Usage: $0 <pid1> [pid2] ..." 
     exit 1 
fi 

for pid in "${pids[@]}"; do 
     if [ ! -e /proc/$pid ]; then 
       echo "Error: pid $pid doesn't exist" 
       exit 1 
     fi 
done 

while [ true ]; do 
     echo -e "\033[H\033[J" 
     for pid in "${pids[@]}"; do 
       ps -p $pid -L -o pid,tid,psr,pcpu,comm= 
     done 
     sleep 1 
done 

नोट: ये आँकड़े, प्रक्रिया जीवन, नहीं पिछले एक्स सेकंड के आधार पर तो आप काउंटर रीसेट करने के लिए अपनी प्रक्रिया को पुनः आरंभ करने की आवश्यकता होगी रहे हैं।

+0

का उत्तर नहीं देता है क्या पीएस कमांड – Bionix1441

+0

के बराबर सी सी सिस्कल है आप सी lib lib कार्यों को पढ़ सकते हैं() और खुले() को छद्म फ़ाइलों को/proc/पिड/* और जो भी डेटा आपको चाहिए उसे पार्स करें। – GL2014

0

मुझे बस यह समस्या थी और मुझे एक समान उत्तर here मिला।

विधि top को जिस तरह से आप चाहते हैं उसे सेट करना है और फिर W (पूंजी डब्ल्यू) दबाएं। यह '$ घर/.toprc

में एक विन्यास फाइल करने के लिए मौजूदा लेआउट हालांकि यह तब जब आप एकाधिक top चलाना चाहते हैं काम नहीं कर सकते' top बचाता अलग विन्यास के साथ।

तो के माध्यम से मैं क्या आप के चारों ओर एक काम/विभिन्न config फ़ाइलों को लिख सकते हैं तो निम्न में से कोई एक करके अलग config फ़ाइलों का उपयोग ...

1) का नाम बदलें द्विआधारी

ln -s /usr/bin/top top2 
    ./top2 

अब पर विचार .top2rc अपने $ HOME के ​​लिए लिखा जा रहा है

2) कुछ वैकल्पिक पथ पर सेट $ HOME, क्योंकि यह $ HOME/.binary-name.rc फाइल करने के लिए अपने कॉन्फ़िग फ़ाइल लिखेंगे

HOME=./ 
top 

अब .toprc वर्तमान फ़ोल्डर में लिखा जा रहा है।

अन्य लोगों टिप्पणियों के उपयोग के माध्यम से शीर्ष में लेखांकन विभिन्न उपयोग जोड़ने के लिए आपको लगता है कि जानकारी के लिए एक बैच उत्पादन बना सकते हैं और बाद एक स्क्रिप्ट के माध्यम से जानकारी coalesces। हो सकता है कि काफी के रूप में आप स्क्रिप्ट के रूप में आसान नहीं है, लेकिन इतना है कि बाद में मैं संक्षेप और एक राज्य एक लंबे समय है कि मैं हाथों से निकल सकता है के दौरान (आवारा प्रक्रिया के कारण अस्पष्टीकृत अचानक CPU उपयोग)

1
पर कब्जा कर सकते हैं मैं मेरे सभी प्रक्रियाओं प्रदान करने के लिए शीर्ष पाया

मैंने सोचा कि perf stat आपको क्या चाहिए।

यह है जब आप एक --cpu=list विकल्प निर्दिष्ट एक प्रक्रिया का एक विशिष्ट उपयोग दिखाता है। perf stat --cpu=0-7 --no-aggr -- make all -j कमांड का उपयोग कर प्रोजेक्ट बनाने के सीपीयू उपयोग की निगरानी करने का एक उदाहरण यहां दिया गया है। उत्पादन होता है:

CPU0   119254.719293 task-clock (msec)   # 1.000 CPUs utilized   (100.00%) 
CPU1   119254.724776 task-clock (msec)   # 1.000 CPUs utilized   (100.00%) 
CPU2   119254.724179 task-clock (msec)   # 1.000 CPUs utilized   (100.00%) 
CPU3   119254.720833 task-clock (msec)   # 1.000 CPUs utilized   (100.00%) 
CPU4   119254.714109 task-clock (msec)   # 1.000 CPUs utilized   (100.00%) 
CPU5   119254.727721 task-clock (msec)   # 1.000 CPUs utilized   (100.00%) 
CPU6   119254.723447 task-clock (msec)   # 1.000 CPUs utilized   (100.00%) 
CPU7   119254.722418 task-clock (msec)   # 1.000 CPUs utilized   (100.00%) 
CPU0     8,108 context-switches   # 0.068 K/sec     (100.00%) 
CPU1    26,494 context-switches            (100.00%) 
CPU2    10,193 context-switches            (100.00%) 
CPU3    12,298 context-switches            (100.00%) 
CPU4    16,179 context-switches            (100.00%) 
CPU5    57,389 context-switches            (100.00%) 
CPU6     8,485 context-switches            (100.00%) 
CPU7    10,845 context-switches            (100.00%) 
CPU0     167 cpu-migrations   # 0.001 K/sec     (100.00%) 
CPU1     80 cpu-migrations            (100.00%) 
CPU2     165 cpu-migrations            (100.00%) 
CPU3     139 cpu-migrations            (100.00%) 
CPU4     136 cpu-migrations            (100.00%) 
CPU5     175 cpu-migrations            (100.00%) 
CPU6     256 cpu-migrations            (100.00%) 
CPU7     195 cpu-migrations            (100.00%) 

बाएँ स्तंभ विशिष्ट सीपीयू सूचकांक और सही है सबसे स्तंभ सीपीयू के उपयोग है। यदि आप विकल्प निर्दिष्ट नहीं करते हैं, तो परिणाम एक साथ एकत्रित हो जाएगा। --pid=pid विकल्प मदद करेगा यदि आप किसी चल रहे प्रक्रिया की निगरानी करना चाहते हैं।

भी -a --per-core या -a perf-socket प्रयास करें, जो और अधिक वर्गीकृत जानकारी पेश करेंगे। perf stat के उपयोग के बारे

अधिक इस ट्यूटोरियल में देखा जा सकता है: perf cpu statistic, यह भी perf help stat विकल्पों के अर्थ पर मदद मिलेगी।

1
dstat -C 0,1,2,3 

आपको पहले 4 कोर का सीपीयू उपयोग भी देगा। बेशक, यदि आपके पास 32 कोर हैं तो यह आदेश थोड़ी देर तक उपयोगी हो जाता है लेकिन उपयोगी होता है यदि आप केवल कुछ कोर में रूचि रखते हैं।

उदाहरण के लिए, आप केवल कोर 3 में रुचि रखते हैं और फिर 7 तुम कर सकते हो

dstat -C 3,7 
2

htop व्यक्ति कोर उपयोग

संबंधित मुद्दे