CPU čas - CPU time
CPU time (or process time ) is the amount of time for which a central processing unit (CPU) was used for processing instructions of a computer program or operating system , protichůdně k uplynulému času, který zahrnuje například čekání na vstup / výstup (I / O) operace nebo vstup do režimu nízké spotřeby (nečinnosti). Čas CPU se měří v hodinách nebo sekundách. Často je užitečné měřit čas CPU jako procento kapacity CPU, které se říká využití CPU . Čas CPU a využití CPU mají dvě hlavní použití.
Čas CPU se používá ke kvantifikaci celkové empirické účinnosti dvou funkčně identických algoritmů. Například jakýkoli algoritmus řazení vezme netříděný seznam a vrátí seřazený seznam a provede tak v deterministickém počtu kroků založených na daném vstupním seznamu. Nicméně bubble sort a merge sort mají různé běžící časovou složitost tak, že sloučení druh inklinuje k dokončení v méně krocích. Bez jakékoli znalosti fungování obou algoritmů ukazuje větší doba CPU třídění bublin, že je pro konkrétní vstupní data méně účinná než sloučení.
Tento typ měření je obzvláště užitečný při porovnávání podobných algoritmů, které nejsou triviální ve složitosti. V tomto případě je čas na zeď (uplynulá skutečná doba trvání) irelevantní, počítač může spustit program pomaleji nebo rychleji v závislosti na proměnných reálného světa, jako je teplota CPU, a také na jiných proměnných operačního systému, jako je priorita procesu.
Využití CPU se používá ke kvantifikaci toho, jak je procesor sdílen mezi počítačovými programy. Vysoké využití CPU jediným programem může naznačovat, že je vysoce náročný na výpočetní výkon nebo že může selhat; například vstoupil do nekonečné smyčky . Čas CPU umožňuje měření výpočetního výkonu, který vyžaduje jeden program, eliminuje rušení, jako je čas prováděný čekáním na vstup nebo pozastavením, aby bylo možné spustit další programy.
Naproti tomu uplynulý reálný čas (nebo jednoduše reálný čas nebo čas nástěnných hodin ) je čas potřebný od začátku počítačového programu do konce měřený běžnými hodinami. Uplynulý reálný čas zahrnuje I / O čas, veškerá zpoždění multitaskingu a všechny ostatní typy čekání vzniklých programem.
Pododdělení
Čas CPU nebo využití CPU lze vykázat buď pro každé vlákno , pro každý proces nebo pro celý systém. Navíc, v závislosti na tom, co přesně CPU dělá, lze rozdělené hodnoty rozdělit na:
- Uživatelský čas je doba, po kterou byl procesor zaneprázdněn prováděním kódu v uživatelském prostoru .
- Systémový čas je doba, po kterou byl procesor zaneprázdněn prováděním kódu v prostoru jádra . Pokud je tato hodnota hlášena pro vlákno nebo proces, pak představuje dobu, po kterou jádro provádělo práci jménem provádějícího kontextu , například poté, co vlákno vydalo systémové volání .
- Doba nečinnosti (pouze pro celý systém) je doba, po kterou procesor nebyl zaneprázdněn, nebo jinak doba, po kterou byl spuštěn proces nečinnosti systému . Doba nečinnosti ve skutečnosti měří nevyužitou kapacitu procesoru.
- Čas ukradení (pouze pro celý systém) na virtualizovaném hardwaru je doba, kterou operační systém chtěl provést, ale hypervisor mu to nedovolil . K tomu může dojít, pokud na fyzickém hardwaru běží více hostovaných operačních systémů a hypervisor se rozhodl přidělit časový slot CPU jinému.
Unixové příkazy pro čas CPU
Příkaz Unix nahoru
Unix příkaz top poskytuje procesorového času, priorita, uplynulý reálný čas , a další informace o všech procesech a aktualizuje v reálném čase.
Čas příkazu Unixu
Čas příkazu Unix vytiskne čas procesoru a uplynulý čas pro proces Unix v reálném čase.
% 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
Tento proces trval celkem 0,337 sekundy času CPU, z čehož bylo v uživatelském prostoru stráveno 0,327 sekundy a konečných 0,010 sekundy v režimu jádra jménem procesu. Uplynulý reálný čas byl 1,15 sekundy.
Následuje zdrojový kód aplikace nextPrimeNumber, který byl použit ve výše uvedeném příkladu.
// 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;
}
Funkce POSIX clock()agetrusage()
Funkce POSIX clock() a getrusage()lze je použít k získání času CPU spotřebovaného jakýmkoli procesem v prostředí POSIX. Pokud je proces vícevláknový, čas CPU je součtem všech vláken . S Linuxem od jádra 2.6.26 existuje parametr RUSAGE_THREAD, který vede ke statistice využití zdrojů pouze pro volající vlákno.
Celkový čas CPU
Na víceprocesorových počítačích může počítačový program používat dva nebo více procesorů pro zpracování pomocí plánování paralelního zpracování . V takových situacích se používá pojem celkového času CPU , což je součet času CPU spotřebovaného všemi CPU využívanými počítačovým programem.
CPU čas a uplynulý reálný čas
Uplynulý reálný čas je vždy větší nebo roven času CPU u počítačových programů, které pro zpracování používají pouze jeden CPU. Pokud není na I / O nebo jiné zdroje zahrnuto žádné čekání, uplynulý reálný čas a čas CPU jsou velmi podobné.
CPU čas a uplynulý reálný čas pro technologii paralelního zpracování
Pokud program používá paralelní zpracování , celkový čas CPU pro tento program by byl více než jeho uplynulý reálný čas. (Celkový čas CPU) / (Počet CPU) by byl stejný jako uplynulý reálný čas, pokud je pracovní zátěž rovnoměrně rozložena na každém CPU a není zahrnuto čekání na I / O nebo jiné zdroje.
Příklad: Softwarová aplikace spuštěná na šestijádrovém procesoru vytváří tři unixové procesy pro splnění požadavku uživatele. Každý z těchto tří procesů vytváří dvě vlákna, což je výčet celkem 6 pracovních vláken. Výpočet je distribuován rovnoměrně na 6 nezávislých vláken. Pokud není zahrnuto žádné čekání na zdroje, očekává se, že celkový čas CPU bude šestinásobek uplynulého reálného času.
Viz také
Reference
externí odkazy
- Thimmannagari, Chandra (01.01.2005). Návrh CPU: Odpovědi na často kladené otázky . Springer. p. 68 . ISBN 0-387-23799-2.
- "Čas procesoru a CPU" . GNU C Library . 09.02.2014 . Citováno 2014-08-05 .
- msgstr "hodiny - zpráva o použitém čase CPU" . The Open Group Base Specification Issue 6, IEEE Std 1003.1, 2004 Edition . Citováno 2014-08-05 .
- msgstr "getrusage - získat informace o využití zdrojů" . The Open Group Base Specification Issue 6, IEEE Std 1003.1, 2004 Edition . Citováno 2014-08-05 .