time
명령어란?리눅스에서 프로그램이나 스크립트의 실행 시간을 확인하기 위해 time
명령어를 사용할 수 있습니다.
time <프로그램 실행 명령어>
만약 MySQL dump 백업 시간을 측정하고 싶다면 아래와 같이 사용할 수 있습니다.
time ( mysqldump -u<username> -p<password> -S <소켓파일위치> DBNAME > dump.sql )
실행하면 아래와 같은 결과를 확인할 수 있습니다.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
real 341m58.124s
user 464m9.282s
sys 13m10.743s
그럼 이때 real, user, sys 가 각각 의미하는 것은 무엇이고, 실제 해당 커맨드 수행에 소요된 시간은 얼마일까요?
real 은 실제 경과 시간(Actual elapsed time)을 의미하며 wall clock time 이라고도 합니다.
순수하게 측정된 전체 실행시간을 의미하며 환경과 상황에 따른 변수가 작용할 수 있습니다.
call 을 실행한 순간부터 마치는 순간까지 측정되며, 여러 프로세스들의 실행 시간, I/O 대기 등 프로세스 블락 시간을 포함합니다.
프로세스 내부의 user-mode code가 실행되는데에 걸린 CPU time 을 의미합니다.
커널 밖에서 실행 되는 시간이며, 연산이 진행되는 동안 CPU가 소비한 누적 시간의 합을 의미합니다. (프로세스 블락 대기 시간 미포함)
프로세스 내부의 커널에서 실행된 CPU time 입니다.
메모리 할당 및 I/O 작업과 같은 커널 단에서 실행되는 System Call 작업 시간동안 CPU가 소비한 누적 시간에 해당됩니다.
sys time과 user time을 합하면 프로세스가 사용한 실제 CPU time을 알 수 있습니다.
여러 프로세서가 병렬로 동작할 수 있기 때문에 위의 예시처럼 real time보다 user time + sys time 이 더 클 수 있습니다.