In che modo il tempo e l'utilizzo della CPU sono gli stessi?


23

Nella pagina di Wikipedia per il tempo della CPU , dice

Il tempo della CPU viene misurato in tick o secondi. Spesso è utile misurare il tempo della CPU come percentuale della capacità della CPU, che è chiamata utilizzo della CPU.

Non capisco come un periodo di tempo possa essere sostituito da una percentuale. Quando guardo top, non mi %CPUdice che MATLABsta usando 2.17 dei miei core?

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
18118 jasl      20   0 9248400 261528  78676 S 217.2  0.1   8:14.75 MATLAB      

Domanda

Per comprendere meglio l'utilizzo della CPU, come posso calcolare da solo l'utilizzo della CPU?


Premi "1" mentre hai "top" aperto per raccogliere più granularità su base core.
Peter,

Questo è il numero uno ( 1).
Michael Hampton

Lascia che Linux ti mostri quanto è impegnato ogni processore con questa richiesta della riga di comando. mpstat -P ALL 5 3 entra per stato multiprocessore 5 secondi 3 intervalli. Dividi la% di CPU indicata dal tuo numero di core per ottenere la CPU media occupata%. iostat -xm 5 3 invio indica il numero di core / CPU disponibili.
Wilson Hauck,

Risposte:


32

Il tempo della CPU è allocato in intervalli di tempo discreti (tick). Per un certo numero di intervalli di tempo, la CPU è occupata, altre volte non lo è (che è rappresentato dal processo inattivo). Nell'immagine seguente la CPU è occupata per 6 delle 10 sezioni CPU. 6/10 = .60 = 60% del tempo occupato (e quindi ci sarebbe il 40% di tempo di inattività).

inserisci qui la descrizione dell'immagine

Una percentuale è definita come "un numero o tasso che è espresso come un certo numero di parti di qualcosa diviso in 100 parti". Quindi, in questo caso, quelle parti sono intervalli di tempo discreti e l'elemento è intervalli di tempo occupato rispetto a intervalli di tempo inattivo - il tasso di intervalli di tempo occupato o inattivo.

Poiché le CPU funzionano in GHz (miliardi di cicli al secondo). Il sistema operativo suddivide quel tempo in unità più piccole chiamate tick. Non sono in realtà 1/10 di secondo. La frequenza di tick in Windows è di 10 milioni di tick in un secondo e in Linux lo è sysconf(_SC_CLK_TCK)(di solito 100 tick al secondo).

In qualcosa del genere top, i cicli di CPU occupati vengono ulteriormente suddivisi in percentuali di cose come il tempo dell'utente e il tempo di sistema. In topLinux e perfmon in Windows, otterrai spesso un display che supera il 100%, perché il totale è 100% * the_number_of_cpu_cores.

In un sistema operativo, è compito dello scheduler assegnare queste preziose sezioni ai processi, quindi lo scheduler è ciò che segnala questo.


1
Le fasce orarie non sono misurate in miliardesimi di secondo. Non sono così bassi. Sono più probabili da qualche parte tra 0,1 ms e 10 ms. La risoluzione dei valori temporali nelle API non è la stessa della frequenza degli interrupt del timer. Alcune chiamate API in Linux hanno tempi specificati in nanosecondi, ma non vorrai interruzioni del timer così frequentemente. Se avessi un milione di interruzioni al secondo, passeresti tutto il tempo della CPU sugli switch di contesto.
Kasperd,

2
Intendi 1000 tick? Tutti i miei sistemi Linux sono 1000 tick (EL5 e EL6) o 1000 tick + tickless (EL7). O intendi qualcos'altro?
Michael Hampton

1
La pagina man dice: "La variabile corrispondente è obsoleta". Non credo che si possa fare affidamento. Ho controllato la configurazione del kernel in /boot/config-2.6.32- qualunque cosa sia questo mese ...
Michael Hampton

1
Ah, no, non sono segnalati allo stesso modo. CLK_TCK è un valore ridimensionato esplicitamente per lo spazio utente e apparentemente è sempre 100 indipendentemente da quanti tick utilizza effettivamente il kernel. Ho trovato alcune buone spiegazioni su SO ( 1 , 2 )
Michael Hampton

2
Penso anche che i "segni di spunta" di Windows a cui fa riferimento quella chiamata API non sono gli stessi della frequenza di interruzione del timer di Windows , e quindi non sono realmente comparabili.
Michael Hampton

15

Il tempo della CPU è il tempo in cui il processo utilizza la CPU: la conversione in percentuale viene effettuata dividendo per la quantità di tempo reale trascorso.

Quindi, se ho un processo che utilizza 1 secondo di tempo della CPU per un periodo di 2 secondi, sta usando il 50% di una CPU.

Nel caso del processo MATLAB, il 217% indica che è stato utilizzato 2,17 secondi di tempo CPU al secondo nell'ultimo intervallo di campionamento, effettivamente monopolizzando 2 core CPU e prendendo un terzo.


5
Oppure potrebbe utilizzare il 25% di 8 CPU e parte di una nona.
Bob Jarvis - Ripristina Monica il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.