UNIX에서 벽시계 시간, 사용자 CPU 시간 및 시스템 CPU 시간은 구체적으로 무엇입니까?


144

이름을 기반으로 추측 할 수 있지만 UNIX의 벽 시계 시간, 사용자 CPU 시간 및 시스템 CPU 시간은 무엇입니까?

user-cpu 시간은 사용자 코드를 실행하는 데 걸리는 시간입니까? 커널 cpu 시간은 특권 작업 (예 : IO to disk)이 필요하기 때문에 커널에서 보낸 시간입니까?

이 측정 시간은 몇 시간입니까?

그리고 벽시계 시간은 실제로 프로세스가 CPU에 소비 한 시간 (초)입니까, 아니면 이름이 오해의 소지가 있습니까?


답변:


143

벽시계 시간은 벽의 시계 (또는 스톱워치)가 프로세스 시작과 '지금'사이에 경과 한 것으로 측정하는 시간입니다.

사용자 CPU 시간과 시스템 CPU 시간은 사용자 코드에서 보낸 시간과 커널 코드에서 보낸 시간의 양과 거의 같습니다.

단위는 초 (마이크로 초 또는 나노초 일 수있는 1 초)입니다.

벽시계 시간은 프로세스가 CPU에서 소비 한 시간 (초)이 아닙니다. CPU의 전원 켜기를 기다리는 데 소요 된 시간 (다른 프로세스가 실행되는 동안)을 포함하여 경과 시간입니다.


16
이것이 벽시계 시간이 항상 CPU 시간 보다 길다는 것을 의미 합니까?
Pacerier

36
@Pacerier : 단일 코어 머신에서는 가능하지만 멀티 코어 머신 및 멀티 스레드 프로그램은 초당 1 초 이상 CPU를 사용할 수 있습니다.
Jonathan Leffler

@JonathanLeffler는 답변 주셔서 감사합니다. 경과 된 나노 초 수를 얻고 싶었지만 수식을 사용하여 CPU 시간 CPUtime = #clock_cycles / clock_rate을 계산하는 것은 경과 시간을 계산하는 것과 같을 수 없습니다. CPU 시간에서 경과 시간을 얻을 수 있는지 알고 있습니까?
Bionix1441

2
@ Bionix1441 : 여러 가지 이유로 CPU 시간에서 경과 시간을 도출 할 수 없습니다. 첫째, 프로세스는 임의의 기간 동안 CPU 시간을 소비하지 않고 유휴 상태 일 수 있습니다 (예 : 클라이언트가 네트워크를 통해 연결을 기다리는 데몬 프로세스). 경과 시간에 며칠 동안 아무 것도 할 수 없습니다 . 둘째, 실행중인 경우 여러 개의 스레드가있을 수 있으며 4 개의 스레드가 있고 시스템에 4 개 이상의 코어가있는 경우 초당 경과 된 시간당 4 초의 CPU 소모량을 쌓을 수 있습니다. 이것들은 사용할 수있는 간단한 (또는 복잡한) 공식이 없다는 것을 보여줍니다.
Jonathan Leffler

1
@Catbuilts : 유닉스 커널이 사용자 프로그램과 별도로 실행된다는 것을 알고 있습니까? 프로그램이 시스템 호출 (예 : read()또는 getpid())을 수행하면 커널은 프로그램 대신 코드를 실행합니다. 커널은 또한 선점 형 멀티 태스킹을 처리하여 다른 프로그램이 차례대로 실행되도록하고 일반적인 하우스 키핑 작업을 수행하여 시스템을 원활하게 실행합니다. 이 코드는 '커널 코드'( '커널 모드')에서 실행됩니다. 이것은 작성한 코드 및 실행 한 사용자 라이브러리 (시스템 C 라이브러리 포함)와 다릅니다.
Jonathan Leffler

36

벽시계 시간 : 컴퓨터의 내부 시계에 따라 경과 한 시간으로 외부 세계의 시간과 일치해야합니다. 이것은 CPU 사용량과 아무 관련이 없습니다. 참고로 제공됩니다.

사용자 CPU 시간과 시스템 시간 : 정확히 당신이 생각하는 것. I을 포함 시스템 호출, / O는 다음과 같은 호출 read, write커널 코드와 그것을 실행에 점프에 의해 실행되는 등.

벽시계 시간 <CPU 시간이면 프로그램을 병렬로 실행하는 것입니다. 벽시계 시간> CPU 시간이면 디스크, 네트워크 또는 기타 장치를 기다리는 것입니다.

모든 것은 SI 당 초 단위로 측정됩니다 .


7

벽시계 시간은 정확히 말 그대로 벽의 시계 (또는 손목 시계)에 의해 측정 된 시간입니다.

사용자 CPU 시간은 "사용자 랜드"에 소요 된 시간, 즉 비 커널 프로세스에 소요 된 시간입니다

시스템 CPU 시간은 커널에서 보낸 시간이며 일반적으로 시스템 호출을 처리하는 데 소요 된 시간입니다.


7
time [WHAT-EVER-COMMAND]

real    7m2.444s
user    76m14.607s
sys 2m29.432s

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24

실제 또는 벽시계

실제 7m2.444s

24 코어 프로세서가있는 시스템에서이 cmd / process는 완료하는 데 7 분 이상이 걸렸습니다. 그것은 주어진 모든 코어와 가장 가능한 병렬 처리를 활용함으로써 가능합니다.

사용자

사용자 76m14.607s

cmd / process는이 많은 양의 CPU 시간을 활용했습니다. 다시 말해, 단일 코어 CPU가 장착 된 시스템에서 실제 사용자와 사용자는 거의 동일하므로 동일한 명령을 완료하는 데 ~ 76 분이 소요됩니다.

sys

시스템 2m29.432s

컨텍스트 전환, 리소스 할당 등을 포함하여이 cmd를 실행하기 위해 커널이 모든 기본 / 시스템 레벨 작업을 실행하는 데 걸리는 시간입니다.

참고 :이 예에서는 명령이 병렬 처리 / 스레드를 사용한다고 가정합니다.

자세한 매뉴얼 페이지 : https://linux.die.net/man/1/time


당신이 게시 한 시간을 감안할 때, 병렬 처리의 약 절반이 완료되지 않습니까? (그냥 (user + sys) / real그것을 표현하고 있습니다.
dtc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.