मैं एक प्रक्रिया के लिए अलग सीपीयू कोर उपयोग कैसे माप सकता हूं?


114

क्या कोर द्वारा विशिष्ट प्रक्रिया CPU उपयोग को मापने का कोई तरीका है?

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

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

जवाबों:


139

आप अभी भी शीर्ष में ऐसा कर सकते हैं । जबकि शीर्ष चल रहा है, अपने कीबोर्ड पर '1' दबाएं, यह तब प्रति कोर सीपीयू उपयोग दिखाएगा।

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


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

8
यह एक एकल प्रक्रिया के लिए विशिष्ट नहीं है, यह कई कोर में सभी प्रक्रियाओं के सीपीयू उपयोग को प्रदर्शित करता है
m_vitaly

हम कैसे "1" के लिए एक तर्क के रूप पारित कर सकते हैं top, manपेज का कहना है top -1, लेकिन यह शिकायत! top -1 -n 1एक एकल पुनरावृत्ति प्राप्त करना अच्छा होगा topलेकिन अलग-अलग सीपीयू उपयोग के साथ प्रदर्शित किया जाएगा।
क्वांटा

76

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

 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

यह आदेश मूल प्रश्न का उत्तर नहीं देता है, हालांकि यह एक विशिष्ट प्रक्रिया के लिए सीपीयू कोर उपयोग नहीं दिखाता है।


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

1
यह एचटी सक्षम के साथ एक क्वाड कोर है।
कामरान बिगडेल

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

1
मैं @Khatak से सहमत हूं, यह मूल प्रश्न का उत्तर नहीं देता है -1
jodag

41

आप उपयोग कर सकते हैं 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

(पीएसआर सीपीयू आईडी है जो धागा वर्तमान में सौंपा गया है)

आप देखते हैं कि धागे एक ही सीपीयू कोर पर चल रहे हैं (जीआईएल के कारण)

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

$ 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% विश्वसनीय नहीं लगता है, कभी-कभी मैं देखता हूं कि पहले मामले में, दो कार्यशील थ्रेड को प्रत्येक सीपीयू कोर को अलग करने की सूचना दी जाती है, या बाद के मामले में, दो थ्रेड्स के चालू होने की सूचना दी जाती है। वही मूल ।।



4

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

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


आप सी / एफ / सी / पीआईडी ​​/ * पर छद्म फ़ाइलों को खोलने के लिए और (जो भी डेटा की जरूरत हो उसे पार्स करने के लिए पढ़े गए सी) फ़ंक्शनल फ़ंक्शन () और ओपन () का उपयोग कर सकते हैं।
GL2014

2
dstat -C 0,1,2,3 

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

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

dstat -C 3,7

यह एकल प्रक्रिया के लिए कैसे प्रासंगिक होगा?
14

1

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

विधि यह है topकि आप इसे जिस तरह से चाहते हैं उसे सेट करें और फिर दबाएं W(कैपिटल डब्ल्यू)। यह top$ HOME / .toprc में कॉन्फ़िगरेशन फ़ाइल के वर्तमान लेआउट को बचाता है

हालाँकि यह काम नहीं कर सकता है यदि आप topअलग-अलग कॉन्फ़िगरेशन के साथ कई को चलाना चाहते हैं ।

तो क्या मैं आपके आस-पास के काम पर विचार करता हूं, इसके लिए आप अलग-अलग कॉन्फिग फाइल को लिख सकते हैं / निम्न में से एक करके अलग-अलग कॉन्फिग फाइल का उपयोग कर सकते हैं ...

1) बाइनरी का नाम बदलें

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

अब .top2rcआपके $ HOME में लिखा जाने वाला है

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

HOME=./
top

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

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


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%)

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

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

perf statइस ट्यूटोरियल में देखे जा सकने वाले उपयोग के बारे में अधिक जानकारी : पूर्ण सीपीयू आँकड़ा , perf help statविकल्पों के अर्थ पर भी मदद करेगा।

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