CPU 시간

CPU time
단일 CPU 멀티태스킹 시스템의 CPU 시간
프로그램 P1의 CPU 색상 시간

CPU 시간(또는 프로세스 시간)은 컴퓨터 프로그램 또는 운영 체제의 명령을 처리하기 위해 중앙 처리 장치(CPU)가 사용된 시간이며, 예를 들어 입출력(I/O) 작업을 기다리거나 저전력(아이돌) 모드로 전환되는 등의 경과 시간이 아닙니다.CPU 시간은 클럭틱 또는 초 단위로 측정됩니다.종종 CPU 시간을 CPU 용량의 백분율로 측정하는 것이 유용합니다. 이를 CPU 사용량이라고 합니다.CPU 시간과 CPU 사용률에는 크게 두 가지 용도가 있습니다.

CPU 시간은 기능적으로 동일한 두 알고리즘의 전체적인 경험적 효율성을 정량화하기 위해 사용됩니다.예를 들어 정렬 알고리즘은 정렬되지 않은 목록을 가져와서 정렬된 목록을 반환하고, 지정된 입력 목록에 기반한 결정론적 단계 수로 반환합니다.그러나 버블 정렬과 병합 정렬은 실행 시간의 복잡성이 다르기 때문에 병합 정렬은 더 적은 단계로 완료되는 경향이 있습니다.어느 알고리즘의 동작에 대한 지식이 없는 경우, 버블 정렬의 CPU 시간이 길면 머지 정렬보다 특정 입력 데이터에 대해 효율이 떨어진다는 것을 알 수 있습니다.

이러한 유형의 측정은 복잡성이 사소한 것이 아닌 유사한 알고리즘을 비교할 때 특히 유용합니다.이 경우 벽면 시간(실제 경과시간)이 무관한 경우 컴퓨터는 CPU 온도 등의 실제 변수와 프로세스의 우선순위 등의 다른 운영체제 변수에 따라 프로그램을 느리게 또는 빠르게 실행할 수 있습니다.

CPU 사용량은 컴퓨터 프로그램 간에 프로세서가 어떻게 공유되는지를 정량화하기 위해 사용됩니다.단일 프로그램의 CPU 사용률이 높으면 처리 능력이 매우 요구되거나 무한 루프에 들어간 경우 등 오작동이 발생할 수 있습니다.CPU 시간은 단일 프로그램이 필요로 하는 처리 능력을 측정하여 입력 대기 시간이나 다른 프로그램 실행을 위해 일시 중단되는 시간 등의 간섭을 제거합니다.

이와는 대조적으로 경과된 실시간(또는 단순히 실시간 또는 벽시계 시간)은 컴퓨터 프로그램의 시작부터 종료까지 일반 시계에 의해 측정되는 시간을 말합니다.경과된 실시간에는 프로그램에 의해 발생하는 I/O 시간, 멀티태스킹 지연 및 기타 모든 유형의 대기 시간이 포함됩니다.

소분할

CPU 시간 또는 CPU 사용률은 스레드, 각 프로세스 또는 시스템 전체에 대해 보고할 수 있습니다.또한 CPU가 정확히 무엇을 하고 있는지에 따라 보고된 값을 다음과 같이 세분화할 수 있습니다.

  • 사용자 시간은 CPU가 사용자 공간에서 코드를 실행 중이었던 시간입니다.
  • 시스템 시간은 CPU가 커널 공간에서 코드를 실행 중이었던 시간입니다.이 값이 스레드 또는 프로세스에 대해 보고되는 경우, 이는 실행 컨텍스트를 대신하여 커널이 작업을 수행한 시간을 나타냅니다(예를 들어 스레드가 시스템콜을 발행한 후).
  • 아이돌 시간(시스템 전체만 해당)은 CPU가 비지 상태가 아닌 시간 또는 시스템아이돌 프로세스를 실행한 시간입니다아이돌 시간은 실제로 사용되지 않는 CPU 용량을 측정합니다.
  • 가상화 하드웨어의 훔치는 시간(시스템 전체만 해당)은 운영체제가 실행하기를 원했지만 하이퍼바이저[1]의해 허용되지 않은 시간입니다.이 문제는 물리적 하드웨어에서 여러 게스트 운영 체제를 실행하고 하이퍼바이저가 CPU 시간 슬롯을 다른 시간대에 할당하도록 선택한 경우에 발생할 수 있습니다.

CPU 시간에 대한 Unix 명령어

Unix 계열(GNU/Linux) 시스템에서 다양한 프로세스의 CPU 시간 표시

Unix 명령어

Unix 명령어 top은 모든 프로세스에 대해 CPU 시간, priority, 경과된 실시간 및 기타 정보를 제공하고 실시간으로 업데이트합니다.

Unix 명령 시간

Unix 명령 시간은 Unix 프로세스의 CPU 시간과 경과된 시간을 실시간으로 출력합니다.

% gcc nextPrimeNumber.c -o nextPrimeNumber% time ./nextPrimeNumber 30000007 300007보다  소수30000023 0.327u 0.010s 0:01.15 28.6% 0+0k 0+0k 0pf+0w입니다.

이 프로세스에는 총 0.337초의 CPU 시간이 소요되며, 이 중 0.327초가 사용자 공간에서 소비되고 마지막 0.010초가 프로세스를 대신하여 커널 모드에서 소비되었습니다.경과된 실시간은 1.15초였습니다.

위의 예에서 사용된 응용 프로그램 next Prime Number의 소스 코드를 다음에 나타냅니다.

// next Prime Number . c #실패하다 <stdio.h> #실패하다 <stdlib.h>  인트 is Prime Number(IS 프라임 번호)(서명되어 있지 않다  인트 n) {     위해서 (인트 i = 2; i <=> (n >> 1); ++i)         한다면 (n % i == 0) 돌아가다 0;     돌아가다 1; }  인트 주된(인트 argc,  *argv[]) {     서명되어 있지 않다  인트 논쟁 = 스트롯(argv[1], 특수한 순서, 10), n = 논쟁;     하는 동안에 (!is Prime Number(IS 프라임 번호)(++n));      인쇄물("%lu보다 큰 소수는 %lu입니다.\n", 논쟁, n);     돌아가다 0; } 

POSIX 함수clock()그리고.getrusage()

POSIX는 기능하며 POSIX 환경의 모든 프로세스에서 소비되는 CPU 시간을 얻기 위해 사용할 수 있습니다.프로세스가 멀티스레드일 경우 CPU 시간은 모든 스레드의 합계입니다.커널 2.6.26부터 시작하는 Linux에서는 호출 스레드만의 리소스 사용률 통계로 이어지는 파라미터 RUSAGE_THREAD가 있습니다.

총 CPU 시간

멀티프로세서 머신에서는 병렬처리 스케줄링을 사용하여 처리하는데 컴퓨터 프로그램이 2개 이상의 CPU를 사용할 수 있습니다.이러한 상황에서는 컴퓨터 프로그램이 사용하는 모든 CPU가 소비하는 CPU 시간의 합계인 총 CPU 시간의 개념이 사용됩니다.

CPU 시간 및 경과된 실시간

처리에 CPU를 1개만 사용하는 컴퓨터 프로그램의 경우 경과된 실시간 시간은 항상 CPU 시간보다 크거나 같습니다.I/O 또는 기타 리소스에 대한 대기 시간이 없는 경우 경과된 실시간과 CPU 시간은 매우 유사합니다.

병렬 처리 기술을 위한 CPU 시간 및 경과된 실시간

프로그램이 병렬 처리를 사용하는 경우 해당 프로그램의 총 CPU 시간은 경과된 실시간보다 커집니다.(총 CPU 시간)/(CPU 수)는 작업 부하가 각 CPU에 균등하게 분산되어 I/O 및 기타 리소스에 대한 대기 시간이 없는 경우 경과된 실시간과 동일합니다.

예:헥사코어 프로세서에서 실행되는 소프트웨어 애플리케이션은 사용자 요건을 충족하기 위한 세 가지 Unix 프로세스를 생성합니다.이들 3가지 프로세스 각각은 2개의 스레드를 생성하여 총 6개의 작업 스레드를 열거합니다.계산은 6개의 독립된 스레드에 균등하게 배분됩니다.리소스를 기다리지 않는 경우 총 CPU 시간은 경과된 실시간의 6배가 될 것으로 예상됩니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Ehrhardt, Christian (July 2010). "CPU time accounting". IBM. Retrieved 2014-08-05.

외부 링크