CPU-tid - CPU time
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
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
- Thimmannagari, Chandra (2005-01-01). CPU-design: svar på vanlige spørsmål . Springer. s. 68 . ISBN 0-387-23799-2.
- "Processor And CPU Time" . GNU C-biblioteket . 2014-02-09 . Hentet 2014-08-05 .
- "klokke - rapporter CPU - tid brukt" . Open Group Base Spesifikasjoner Utgave 6, IEEE Std 1003.1, 2004-utgave . Hentet 2014-08-05 .
- "getrusage - få informasjon om ressursutnyttelse" . Open Group Base Spesifikasjoner Utgave 6, IEEE Std 1003.1, 2004-utgave . Hentet 2014-08-05 .