리눅스에서 time 명령 사용시 출력되는 real, user, sys의 의미에 대해서 알아보았습니다.
.
2023. 11. 5 최초작성
2025. 10. 18 보충
2026. 6. 26 보충
.
OpenCV를 빌드할 때 다음처럼 빌드 명령어 앞에 time 명령을 추가하여 빌드하는데 걸리는 시간을 측정해봤습니다.
time make -j$(nproc)
.
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 시간의 몇 배인지 확인하면 병렬 처리가 얼마나 효과적으로 이루어졌는지 직관적으로 알 수 있습니다. 다만 정확하게 계산하려면 CPU가 일한 총 시간인 user+sys를 기준으로 (user+sys) / real을 구해야 합니다. 위 OpenCV 예시로 계산하면 (316분 48초 + 18분 5초) / 92분 16초 ≈ 약 3.6으로, 평균적으로 약 3.6개의 코어를 활용했다고 볼 수 있습니다.
.
참고