CPU-tid - CPU time

CPU-tid på enkelt CPU Multi Tasking System
  CPU-fargetid for program P1

CPU-tid (eller prosess tid ) er den mengde av tid som en sentral prosesseringsenhet (CPU) ble anvendt for å behandle instruksjoner av et dataprogram eller operativsystem , i motsetning til forløpt tid, som inkluderer for eksempel, å vente på input / output (I / O) -operasjoner eller gå inn i lavspenningsmodus (inaktiv). CPU-tiden måles i klokker eller sekunder. Ofte er det nyttig å måle CPU-tid som en prosentandel av CPU-kapasiteten, som kalles CPU-bruk . CPU-tid og CPU-bruk har to hovedbruksområder.

Den CPU-tid blir brukt til å kvantifisere den generelle empiriske effektiviteten av to funksjonelt identiske algoritmer. For eksempel tar en hvilken som helst sorteringsalgoritme en usortert liste og returnerer en sortert liste, og vil gjøre det i et deterministisk antall trinn basert på en gitt inngangsliste. Imidlertid har en boblesortering og en sammenslåingssortering ulik kjøretidskompleksitet slik at sammenslåingssortering har en tendens til å fullføres i færre trinn. Uten noen kjennskap til funksjonene til noen av algoritmene viser en større CPU-tid for boblesortering at det er mindre effektivt for bestemte inngangsdata enn sammenslåing.

Denne typen måling er spesielt nyttig når man sammenligner like algoritmer som ikke er trivielle i kompleksitet. I dette tilfellet er veggtiden (faktisk forløpt varighet) ikke relevant, datamaskinen kan utføre programmet tregere eller raskere avhengig av virkelige variabler som CPU-temperaturen, så vel som andre operativsystemvariabler, for eksempel prosessens prioritet.

Den CPU-bruken blir brukt til å kvantifisere hvor prosessoren er delt mellom dataprogrammer. Høy CPU-bruk av et enkelt program kan indikere at det er svært krevende for prosessorkraft eller at det kan fungere feil; for eksempel har den gått inn i en uendelig løkke . CPU-tid tillater måling av prosessorkraften som et enkelt program krever, og eliminerer forstyrrelser, som for eksempel tid som er ventet på input eller blir suspendert for å la andre programmer kjøre.

I motsetning er forløpt sanntid (eller rett og slett sanntid eller veggklokketid ) tiden det tar fra starten av et dataprogram til slutten, målt ved en vanlig klokke. Forløpt sanntid inkluderer I / O-tid, eventuelle multitasking-forsinkelser og alle andre typer ventetid på programmet.

Underavdeling

CPU-tid eller CPU-bruk kan rapporteres enten for hver tråd , for hver prosess eller for hele systemet. Videre, avhengig av hva nøyaktig CPUen gjorde, kan de rapporterte verdiene deles inn i:

  • Brukertid er hvor lang tid CPU var opptatt med å utføre kode i brukerområdet .
  • Systemtid er hvor lang tid CPU var opptatt med å utføre kode i kjerneplassen . Hvis denne verdien rapporteres for en tråd eller prosess, representerer den hvor lang tid kjernen gjorde på vegne av den utførende konteksten , for eksempel etter at en tråd sendte et systemanrop .
  • Inaktiv tid (bare for hele systemet) er hvor lang tid CPU ikke var opptatt, eller ellers hvor lang tid den utførte System Idle-prosessen . Tomgangstid måler faktisk ubrukt CPU-kapasitet.
  • Stjele tid (for hele systemet), på virtualisert maskinvare, er hvor lang tid operativsystemet ønsket å utføre, men som ikke fikk lov av hypervisoren . Dette kan skje hvis den fysiske maskinvaren kjører flere gjesteoperativsystem og hypervisor valgte å tildele en CPU-tidsluke til en annen.

Unix-kommandoer for CPU-tid

toppen viser CPU-tiden for forskjellige prosesser på et Unix-lignende ( GNU / Linux ) system

Unix-kommandoen toppen

Den Unix -kommandoen toppen gir CPU tid, prioritet, forløpt sanntid , og annen informasjon for alle prosesser og oppdateringer i sanntid.

Unix kommando tid

Den Unix -kommandoen tiden skriver CPU-tid og forløpt sanntid for en Unix prosess.

% 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

Denne prosessen tok totalt 0,337 sekunder CPU-tid, hvorav 0,327 sekunder ble brukt i brukerområdet, og de siste 0,010 sekundene i kjernemodus på vegne av prosessen. Forløpt sanntid var 1,15 sekunder.

Følgende er kildekoden til applikasjonen nextPrimeNumber som ble brukt i eksemplet ovenfor.

// 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;
}

POSIX funksjoner clock()oggetrusage()

POSIX-funksjoner clock() og getrusage()kan brukes til å få CPU-tid brukt av enhver prosess i et POSIX-miljø. Hvis prosessen er flertrådet, er CPU-tiden summen for alle tråder . Når Linux starter fra kjernen 2.6.26, er det en parameter RUSAGE_THREAD som fører til ressursbrukstatistikk bare for ringetråden.

Total CPU-tid

På maskiner med flere prosessorer kan et dataprogram bruke to eller flere CPUer for behandling ved hjelp av planlegging av parallell prosessering . I slike situasjoner brukes begrepet total CPU-tid , som er summen av CPU-tid som brukes av alle CPUene som brukes av dataprogrammet.

CPU-tid og forløpt sanntid

Forløpt sanntid er alltid større enn eller lik CPU-tiden for dataprogrammer som bare bruker en CPU for behandling. Hvis det ikke er ventetid på I / O eller andre ressurser, er forløpt sanntid og CPU-tid veldig like.

CPU-tid og forløpt sanntid for parallell behandlingsteknologi

Hvis et program bruker parallell behandling , vil den totale CPU-tiden for det programmet være mer enn forløpt sanntid. (Total CPU-tid) / (Antall CPUer) vil være det samme som forløpt sanntid hvis arbeidsbelastningen er jevnt fordelt på hver CPU og det ikke er ventetid på I / O eller andre ressurser.

Eksempel: Et program som er utført på en heksakjerneprosessor, oppretter tre Unix-prosesser for å oppfylle brukerkravet. Hver av disse tre prosessene oppretter to tråder, og teller totalt 6 arbeidstråder. Beregning fordeles jevnt på de 6 uavhengige trådene. Hvis ingen ventetid på ressurser er involvert, forventes total CPU-tid å være seks ganger forløpt sanntid.

Se også

Referanser

Eksterne linker