Cosa sono in particolare i tempi di orologio da parete, utente-CPU-time e sistema-CPU-time in UNIX?


144

Posso fare un'ipotesi in base ai nomi, ma cosa sono specificamente i tempi di wall-time, user-cpu-time e system-cpu-time in UNIX?

Il tempo utente-CPU è il tempo impiegato nell'esecuzione del codice utente mentre il tempo CPU-CPU è il tempo impiegato nel kernel a causa della necessità di operazioni privilegiate (come IO sul disco)?

In quale unità di tempo è presente questa misurazione.

E il tempo del wall-clock è davvero il numero di secondi che il processo ha trascorso nella CPU o il nome è solo fuorviante?


Risposte:


143

Il tempo dell'orologio a muro è il tempo in cui un orologio sul muro (o un cronometro in mano) misurerebbe come trascorso tra l'inizio del processo e "adesso".

Il tempo della CPU dell'utente e il tempo della CPU di sistema sono praticamente come hai detto: la quantità di tempo speso nel codice utente e la quantità di tempo speso nel codice kernel.

Le unità sono secondi (e secondi, che potrebbero essere microsecondi o nanosecondi).

Il tempo del wall-clock non è il numero di secondi che il processo ha trascorso nella CPU; è il tempo trascorso, incluso il tempo trascorso in attesa del suo avvio sulla CPU (mentre altri processi iniziano a funzionare).


16
Questo significa che il tempo dell'orologio da parete sarà sempre maggiore del tempo della cpu?
Pacerier,

36
@Pacerier: su una macchina single core, sì, ma le macchine multi-core e i programmi multi-thread possono utilizzare più di 1 secondo di CPU al secondo trascorso.
Jonathan Leffler,

@JonathanLeffler grazie per la risposta, volevo ottenere il numero di nanosecondi trascorsi ma calcolare il tempo della CPU usando la formula CPUtime = #clock_cycles / clock_ratenon può essere lo stesso del calcolo del tempo trascorso. Sai se riesco a ottenere il tempo trascorso dal tempo della CPU?
Bionix1441,

2
@ Bionix1441: non è possibile derivare il tempo trascorso dal tempo della CPU per diversi motivi. Innanzitutto, un processo può essere inattivo, senza consumare alcun tempo della CPU, per periodi arbitrari (ad esempio, un processo daemon in attesa che un client si connetta ad esso sulla rete), quindi potrebbe non fare nulla per giorni alla volta del tempo trascorso . In secondo luogo, se è in esecuzione, potrebbe avere più thread e, se ha, diciamo, 4 thread e ci sono 4 o più core sul sistema, potrebbe accumulare 4 secondi CPU dello sforzo impiegato al secondo del tempo trascorso. Questi mostrano che non esiste una formula semplice (o addirittura complessa) che potresti usare.
Jonathan Leffler,

1
@Catbuilts: sei consapevole che il kernel Unix funziona separatamente dai programmi utente. Quando il programma effettua una chiamata di sistema (ad esempio read()o getpid()), il kernel esegue il codice per conto del programma. Il kernel gestisce anche il multi-tasking preventivo in modo che altri programmi inizino il loro turno, e fa alcuni lavori di pulizia generali per mantenere il sistema senza intoppi. Questo codice viene eseguito in "codice kernel" (anche in "modalità kernel"). Questo è distinto dal codice che hai scritto e dalle librerie utente (inclusa la libreria C di sistema) che esegui.
Jonathan Leffler,

36

Orologio da parete: tempo trascorso in base all'orologio interno del computer, che dovrebbe corrispondere al tempo nel mondo esterno. Questo non ha nulla a che fare con l'utilizzo della CPU; è dato per riferimento.

Tempo CPU utente e tempo di sistema: esattamente quello che pensi. Le chiamate di sistema, che includono I / O chiamate come read, writeecc vengono eseguiti gettandosi nel codice del kernel e l'esecuzione di questo.

Se il tempo di clock è <tempo CPU, allora stai eseguendo un programma in parallelo. Se il tempo dell'orologio a muro> tempo della CPU, stai aspettando il disco, la rete o altri dispositivi.

Tutti sono misurati in secondi, secondo il SI .


7

Il tempo dell'orologio a muro è esattamente quello che dice, il tempo trascorso come misurato dall'orologio sulla tua parete (o orologio da polso)

Il tempo della CPU dell'utente è il tempo trascorso nella "terra dell'utente", ovvero il tempo impiegato in processi non kernel

Il tempo della CPU di sistema è il tempo impiegato nel kernel, in genere il tempo impiegato per le chiamate di sistema.


7
time [WHAT-EVER-COMMAND]

real    7m2.444s
user    76m14.607s
sys 2m29.432s

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24

vero o orologio da parete

7m2.444 reali

Su un sistema con processore a 24 core, il completamento di questo cmd / processo ha richiesto oltre 7 minuti. Questo utilizzando il parallelismo più possibile con tutti i core dati.

utente

utente 76m14.607s

Il cmd / process ha utilizzato questa quantità di tempo della CPU. In altre parole, su macchine con CPU single core, il reale e l'utente saranno quasi uguali, quindi lo stesso comando richiederà ~ 76 minuti per essere completato.

SYS

sys 2m29.432s

Questo è il tempo impiegato dal kernel per eseguire tutte le operazioni di base / a livello di sistema per eseguire questo cmd, incluso il cambio di contesto, l'allocazione delle risorse, ecc.

Nota: nell'esempio si presuppone che il comando utilizzi parallelismo / thread.

Pagina man dettagliata: https://linux.die.net/man/1/time


Date le volte che hai pubblicato, non è circa la metà del parallelismo fatto? (Sto solo facendo (user + sys) / realper rappresentarlo.
dtc
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.