Bir işlem için ayrı CPU çekirdek kullanımını nasıl ölçebilirim?


115

Çekirdeklere göre belirli bir işlem CPU kullanımını ölçmenin herhangi bir yolu var mı?

Bildiğim üst çekirdek tarafından tüm sistemin CPU kullanımı ölçen iyi taskset çalışmasına işlemi için izin verilen CPU çekirdek ile ilgili bilgiler sağlayabilir.

Ancak belirli bir işlemin CPU kullanımını CPU çekirdeklerine göre nasıl ölçebilirim?

Yanıtlar:


139

Bunu hala üstte yapabilirsiniz . İken üst klavyenizdeki basın '1' çalışıyorsa, o zaman çekirdek başına CPU kullanımını gösterecektir.

Belirli bir işlemin belirli bir kullanıcı hesabı altında çalıştırılmasıyla gösterilen işlemleri sınırlayın ve bu kullanıcıyla sınırlamak için 'u' yazın


3
Irix modunuI değiştirmek için de tuşuna basabilirsiniz ( Solaris modunun aksine ). Tüm yüzde işlem listesinde gösterilen bir göre olan CPU iplik . Tüm yüzde görece gösterilir bahsedilen işlemci toplam kapasite (yani bütün konuları - aka Tüm çekirdekler). onoff
7heo.tk

8
Bu, tek bir işleme özgü değildir, bu, birden çok çekirdekte tüm işlemlerin cpu kullanımını gösterir
m_vitaly

Bir argüman olarak "1" i nasıl geçirebiliriz top, mansayfa diyor top -1ama şikayet ediyor! Ayrı CPU kullanımının görüntülendiği top -1 -n 1tek bir yineleme elde etmek güzel olurdu top.
quanta

76

Kullanabilirsiniz:

 mpstat -P ALL 1

Her çekirdeğin ne kadar meşgul olduğunu gösterir ve her saniye otomatik olarak güncellenir. Çıktı şu şekilde olacaktır (dört çekirdekli bir işlemcide):

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

Bu komut orijinal soruyu yanıtlamaz, yani belirli bir işlem için CPU çekirdek kullanımını göstermez.


3
Bunun soruyu gerçekten cevaplamadığını düşünüyorum. Bu, yalnızca çalışan başka işlem yoksa aynı şeydir. Ayrıca bu, dört çekirdekli bir CPU gibi görünmüyor, daha çok sekiz çekirdekli (belki HT etkinken dörtlü).
domuz

1
HT etkinleştirilmiş dört çekirdekli.
Kamran Bigdely

Orijinal soruyu cevaplamıyor. Ancak benden (-1) bahsetmediği için.
KGhatak

1
@KGhatak'a katılıyorum, bu orijinal soru
-1'i

41

kullanabilirsiniz ps.
örneğin, çift çekirdekli CPU'da iki meşgul iş parçacığı ile python işleminin olması

$ 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, iş parçacığının şu anda atanmış olduğu CPU kimliğidir)

iş parçacıklarının aynı cpu çekirdeğinde çalıştığını görüyorsunuz (GIL nedeniyle)

aynı python betiğini jython'da çalıştırdığımızda, betiğin her iki çekirdeği de kullandığını görüyoruz (ve başka birçok hizmet veya neredeyse boşta olan iş parçacıkları var):

$ 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

çıktıyı işleyebilir ve her CPU çekirdeği için toplam CPU'yu hesaplayabilirsiniz.

Ne yazık ki, bu yaklaşım% 100 güvenilir görünmüyor, bazen ilk durumda iki iş parçacığının her bir CPU çekirdeğine ayrıldığını veya ikinci durumda iki iş parçacığının açık olduğunu görüyorum. aynı çekirdek ..


13

htop bireysel çekirdek kullanımına güzel bir genel bakış sunar


4

psSolüsyon ı ihtiyaç vardı neredeyse neyi ve özgün soru sordu tam olarak ne yapar atılmış bazı bash ile: başına çekirdekli özgü süreçlerin kullanımı görmek için

Bu, çok iş parçacıklı işlemlerin çekirdek başına kullanımını da gösterir .

Şunu kullanın: 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

Not: Bu istatistikler , son X saniyeye değil, işlem ömrüne dayalıdır , bu nedenle sayacı sıfırlamak için işleminizi yeniden başlatmanız gerekir.


Sözde dosyaları / proc / pid / * konumunda açmak ve ihtiyacınız olan verileri ayrıştırmak için C kitaplık işlevlerini read () ve open () kullanabilirsiniz.
GL2014

2
dstat -C 0,1,2,3 

Ayrıca size ilk 4 çekirdeğin CPU kullanımını verecektir. Elbette, 32 çekirdeğiniz varsa, bu komut biraz daha uzun sürebilir, ancak yalnızca birkaç çekirdekle ilgileniyorsanız yararlıdır.

Örneğin, yalnızca çekirdek 3 ve 7 ile ilgileniyorsanız,

dstat -C 3,7

Bu tek bir süreçle nasıl ilgili olacak?
einpoklum

1

Sadece bu problemi yaşadım ve burada benzer bir cevap buldum .

Yöntem, topistediğiniz şekilde ayarlamak ve ardından W(büyük W) tuşuna basmaktır. Bu, topmevcut düzenini $ HOME / .toprc konumundaki bir yapılandırma dosyasına kaydeder.

topFarklı konfigürasyonlarla birden çok 'ı çalıştırmak istiyorsanız bu işe yaramayabilir .

Bu yüzden, etrafta bir çalışma olarak düşündüğüm şey sayesinde, aşağıdakilerden birini yaparak farklı yapılandırma dosyalarına yazabilir / farklı yapılandırma dosyaları kullanabilirsiniz ...

1) İkili dosyayı yeniden adlandırın

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

Şimdi .top2rc$ HOME hesabınıza yazılacak

2) $ HOME'u başka bir yola ayarlayın, çünkü yapılandırma dosyasını $ HOME / .binary-name.rc dosyasına yazacaktır.

HOME=./
top

Şimdi .toprcmevcut klasöre yazılacak.

En üste çeşitli kullanım hesaplamalarını eklemek için diğer kişilerin yorumlarını kullanarak, bu bilgi için bir toplu çıktı oluşturabilirsiniz ve daha sonra, bilgileri bir komut dosyası aracılığıyla birleştirir. Belki yazdığınız kadar basit değil ama TÜM işlemleri sağlamak için top buldum, böylece daha sonra uzun bir çalışma sırasında başka türlü gözden kaçırmış olabileceğim bir durumu yeniden yakalayabilir ve yakalayabilirim (başıboş işlemlerden dolayı açıklanamayan ani CPU kullanımı)


1

perf statİhtiyacın olan şeyin bu olduğunu düşündüm .

Bir --cpu=listseçenek belirlediğinizde, bir işlemin belirli bir kullanımını gösterir . İşte perf stat --cpu=0-7 --no-aggr -- make all -jkomut kullanarak bir proje oluşturmanın cpu kullanımını izleme örneği . Çıktı:

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

Soldaki sütun belirli CPU indeksidir ve en sağdaki sütun CPU'nun kullanımıdır. --no-aggrSeçeneği belirtmezseniz , sonuç bir araya toplanacaktır. --pid=pidÇalışan bir süreci izlemek istiyorsanız bu seçenek yardımcı olacaktır.

Deneyin -a --per-coreya da -a perf-socketçok, daha gizli bilgiler sunacak.

Kullanımıyla ilgili daha fazla bilgi perf statbu eğiticide görülebilir: perf cpu istatistiği , ayrıca perf help statseçeneklerin anlamı konusunda yardımcı olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.