Timp CPU - CPU time

Image
Durata procesorului pe un singur sistem multi-sarcini CPU
  Timp de culoare CPU pentru programul P1

Timpul procesorului (sau timpul procesului ) este cantitatea de timp pentru care o unitate centrală de procesare (CPU) a fost utilizată pentru procesarea instrucțiunilor unui program de computer sau a unui sistem de operare , spre deosebire de timpul scurs, care include, de exemplu, așteptarea intrării / ieșirii (I / O) sau intrarea în modul de consum redus (inactiv). Timpul procesorului este măsurat în bifări de ceas sau secunde. Adesea, este util să se măsoare timpul procesorului ca procent din capacitatea procesorului, care se numește utilizarea procesorului . Durata procesorului și utilizarea procesorului au două utilizări principale.

Timpul CPU este utilizat pentru a cuantifica eficiența empirică generală a doi algoritmi funcționali identici. De exemplu, orice algoritm de sortare ia o listă nesortată și returnează o listă sortată și o va face într-un număr determinist de pași bazat pe o listă de intrare dată. Cu toate acestea, sortarea cu bule și sortarea de îmbinare au o complexitate diferită a timpului de rulare, astfel încât sortarea de îmbinare tinde să se finalizeze în mai puțini pași. Fără nicio cunoaștere a funcționării oricărui algoritm, un timp mai mare de procesare a sortării cu bule arată că este mai puțin eficient pentru anumite date de intrare decât sortarea fuzionată.

Acest tip de măsurare este deosebit de util atunci când se compară algoritmi similari care nu sunt banali în complexitate. În acest caz, timpul de perete (durata reală scursă) este irelevant, computerul poate executa programul mai lent sau mai rapid, în funcție de variabilele din lumea reală, cum ar fi temperatura procesorului, precum și alte variabile ale sistemului de operare, cum ar fi prioritatea procesului.

Utilizarea procesorului este utilizată pentru a cuantifica modul în care procesorul este partajat între programele de computer. Utilizarea ridicată a procesorului de către un singur program poate indica faptul că este extrem de solicitant în ceea ce privește puterea de procesare sau că poate funcționa defectuos; de exemplu, a intrat într-o buclă infinită . Timpul CPU permite măsurarea puterii de procesare pe care o necesită un singur program, eliminând interferențele, cum ar fi timpul executat în așteptarea intrării sau suspendarea pentru a permite altor programe să ruleze.

În contrast, timpul real scurs (sau pur și simplu timpul real sau timpul ceasului de perete ) este timpul luat de la începutul unui program de computer până la sfârșit, măsurat de un ceas obișnuit. Timpul real scurs include timpul I / O, orice întârziere multitasking și toate celelalte tipuri de așteptări suportate de program.

Subdiviziune

Durata procesorului sau utilizarea CPU pot fi raportate fie pentru fiecare fir , pentru fiecare proces sau pentru întregul sistem. Mai mult, în funcție de ceea ce făcea exact CPU, valorile raportate pot fi împărțite în:

  • Timpul utilizatorului este cantitatea de timp în care CPU a fost ocupat executând cod în spațiul utilizatorului .
  • Timpul sistemului este cantitatea de timp în care CPU a fost ocupat executând codul în spațiul kernel . Dacă această valoare este raportată pentru un thread sau proces, atunci reprezintă cantitatea de timp în care nucleul a lucrat în numele contextului de execuție , de exemplu, după ce un thread a emis un apel de sistem .
  • Timpul de repaus (numai pentru întregul sistem) este timpul în care CPU nu a fost ocupat sau, în caz contrar, timpul de executare a procesului de repaus al sistemului . Timpul de repaus măsoară de fapt capacitatea neutilizată a procesorului.
  • Timpul de furt (numai pentru întregul sistem), pe hardware virtualizat , este cantitatea de timp pe care sistemul de operare a dorit să o execute, dar nu a fost permisă de către hipervizor . Acest lucru se poate întâmpla dacă hardware-ul fizic rulează mai multe sisteme de operare pentru oaspeți și hipervizorul a ales să aloce un interval de timp CPU altui.

Comenzi Unix pentru timpul procesorului

Image
afișarea top a timpului CPU al diferitelor procese pe un sistem tip Unix ( GNU / Linux )

Comanda Unix sus

Partea de sus a comenzii Unix oferă timp CPU, prioritate, timp real scurs și alte informații pentru toate procesele și le actualizează în timp real.

Timp de comandă Unix

Timpul de comandă Unix imprimă timpul CPU și timpul real scurs pentru un proces Unix.

% gcc nextPrimeNumber.c -o nextPrimeNumber
% time ./nextPrimeNumber 30000007
Prime number greater than 30000007 is 30000023
0.327u 0.010s 0:01.15 28.6%     0+0k 0+0io 0pf+0w

Acest proces a durat în total 0,337 secunde de timp CPU, din care 0,327 secunde s-au petrecut în spațiul utilizatorului și ultimele 0,010 secunde în modul kernel în numele procesului. Timpul real scurs a fost de 1,15 secunde.

Următorul este codul sursă al aplicației nextPrimeNumber care a fost utilizat în exemplul de mai sus.

// nextPrimeNumber.c
#include <stdio.h>
#include <stdlib.h>

int isPrimeNumber(unsigned long int n) {
    for (int i = 2; i <= (n >> 1); ++i)
        if (n % i == 0) return 0;
    return 1;
}

int main(int argc, char *argv[]) {
    unsigned long int argument = strtoul(argv[1], NULL, 10), n = argument;
    while (!isPrimeNumber(++n));

    printf("Prime number greater than %lu is %lu\n", argument, n);
    return 0;
}

Funcții POSIX clock()șigetrusage()

Funcțiile POSIX clock() și getrusage()pot fi utilizate pentru a obține timpul procesorului consumat de orice proces într-un mediu POSIX. Dacă procesul este multithread, timpul CPU este suma pentru toate firele . Cu Linux pornind de la kernel 2.6.26 există un parametru RUSAGE_THREAD care duce la statistici de utilizare a resurselor doar pentru firul de apelare.

Timp total CPU

Pe mașinile cu mai multe procesoare , un program de computer poate utiliza două sau mai multe procesoare pentru procesare utilizând planificarea procesării în paralel . În astfel de situații, este utilizată noțiunea de timp total al procesorului , care este suma timpului procesorului consumat de toate procesoarele utilizate de programul de calculator.

Timp CPU și timp real scurs

Timpul real scurs este întotdeauna mai mare sau egal cu timpul procesorului pentru programele de calculator care utilizează un singur procesor pentru procesare. Dacă nu este implicată nicio așteptare pentru I / O sau alte resurse, timpul real scurs și timpul procesorului sunt foarte similare.

Timp CPU și timp real scurs pentru tehnologia de procesare paralelă

Dacă un program utilizează procesare paralelă , timpul total al procesorului pentru acel program ar fi mai mare decât timpul său real scurs. (Timpul total al procesorului) / (Numărul de procesoare) ar fi același cu timpul real scurs dacă sarcina de lucru este distribuită uniform pe fiecare procesor și nu este implicată nicio așteptare pentru I / O sau alte resurse.

Exemplu: O aplicație software executată pe un procesor hexa-core creează trei procese Unix pentru îndeplinirea cerințelor utilizatorului. Fiecare dintre aceste trei procese creează două fire, enumerând un total de 6 fire de lucru. Calculul este distribuit uniform pe cele 6 fire independente. Dacă nu este implicată nicio așteptare pentru resurse, timpul total al procesorului este de așteptat să fie de șase ori mai mare decât timpul real scurs.

Vezi si

Referințe

linkuri externe