time 명령 사용시 출력되는 real, user, sys의 의미에 대해서 알아보았습니다.
2023. 11. 5 최초작성
2025. 10. 18 보충
OpenCV를 빌드할 때 time 명령을 사용하여 시간을 측정해봤습니다.
OpenCV 빌드 완료 후, 다음처럼 측정시간이 출력되는데 이때 보이는 real, user, sys의 의미에 대해 알아보았습니다.
real 92m15.953s
user 316m48.971s
sys 18m5.063s
time 명령의 결과에 나타나는 real, user, sys 시간은 리눅스 및 유닉스 시스템에서 프로세스가 실행되는 동안 걸린 시간을 나타냅니다.real은 실제 프로그램이 실행되는데 걸린 시간을 의미하며, user 및 sys는 프로그램을 CPU에서 처리하는데 걸린 시간입니다.
- real은 프로그램이 실행된 시작된 시점부터 종료될 때까지 실제로 경과한 전체 시간입니다. 즉, 실제 실행 시간을 측정한 시간이며, 프로그램 실행 중 다른 프로세스가 실행됨에 따라 프로그램이 대기하게 된 시간을 포함합니다.
- user는 해당 프로그램의 프로세스가 사용자 모드에서 실행되는 동안 걸린 CPU 시간을 나타냅니다. CPU 시간은 CPU가 실제로 프로그램의 명령을 처리하는 데 걸린 시간을 말합니다. 여러 CPU에서 병렬로 작업을 수행할 수 있는 멀티스레드 프로그램의 경우, 모든 코어의 시간이 합산되어 user 시간이 real 시간보다 클 수 있습니다. 다른 프로세스가 실행됨에 따라 프로그램이 대기하게 된 시간은 포함하지 않습니다.
- sys는 시스템 모드에서 프로세스가 실행되는 데 걸린 CPU 시간으로, 커널 내부에서 실행되는 시간을 나타냅니다.
위에서 보여준 OpenCV 빌드시 측정된 결과에서 user 시간이 real 시간보다 크다는 것은 여러 CPU 코어가 사용되어 프로그램이 병렬로 실행되었음을 의미합니다. 실제로는 92분이 걸렸지만, 여러 코어가 작업에 참여함으로써 총 사용자 CPU 시간은 316분에 달했다는 것을 알 수 있습니다. 여러 CPU 코어를 통해 프로그램을 동시에 실행하여 전체 실행 시간을 단축된 것입니다.
user+sys는 프로그램이 실행중에 사용한 실제 CPU 시간을 알려줍니다. 이 수치는 모든 CPU에 걸쳐 있으므로 프로세스에 여러 스레드가 있는 경우(이 프로세스가 둘 이상의 프로세서가 있는 컴퓨터에서 실행 중일 경우) real의 경과 시간을 초과할 수 있습니다(일반적으로 발생함).
User+Sys를 사용하면 프로세스의 CPU 사용량을 측정할 수 있습니다. 이를 사용하여 성능을 벤치마킹할 수 있습니다. 이 기능은 둘 이상의 CPU 코어가 계산에 사용되는 멀티 스레드 코드에 특히 유용합니다.
real은 실제 경과 시간을 나타내며, user 및 sys 값은 CPU 실행 시간을 나타낸다는 점을 기억하세요. 따라서 멀티코어 시스템에서는 user 및 sys 시간의 합이 real 시간을 초과할 수 있습니다.
OpenCV 빌드 예시에서는 user 시간이 real 시간보다 컸지만, 반대의 경우도 자주 발생합니다. real 시간이 user+sys 시간보다 훨씬 큰 경우는 프로그램이 실제 CPU를 사용하지 않고 대기하는 시간이 많다는 것을 의미합니다. 이러한 대기 시간은 다음과 같은 경우에 발생합니다:
디스크 I/O 대기 (파일 읽기/쓰기)
네트워크 응답 대기 (다운로드, API 호출 등)
사용자 입력 대기
다른 프로세스의 완료 대기
시스템에 부하가 많아 CPU 자원을 할당받지 못한 경우
예를 들어, 네트워크에서 파일을 다운로드하는 프로그램을 실행하면 다음과 같은 결과를 볼 수 있습니다:
real 2m30.000s
user 0m0.050s
sys 0m0.100s
이는 실제로는 2분 30초가 걸렸지만, CPU는 매우 짧은 시간만 사용했음을 보여줍니다.
성능 벤치마킹 시 주의사항
프로그램의 성능을 측정할 때는 다음 사항을 고려해야 합니다:
CPU 집약적 작업: user+sys 시간을 확인하여 실제 CPU 사용량을 측정합니다. 이 값은 시스템의 다른 프로세스 영향을 받지 않아 더 일관된 벤치마킹 결과를 제공합니다.
I/O 집약적 작업: real 시간을 확인하여 사용자 관점의 실제 경과 시간을 측정합니다.
멀티코어 최적화 확인: user 시간이 real 시간의 몇 배인지 확인하면 병렬 처리가 얼마나 효과적으로 이루어졌는지 알 수 있습니다. 예를 들어, user가 real의 4배라면 평균적으로 4개의 코어를 효과적으로 활용했다고 볼 수 있습니다.
참고
https://stackoverflow.com/a/556411
