- This topic has 1개 답변, 2명 참여, and was last updated 13 years, 1 month 전에 by 딱털서어. This post has been viewed 7659 times
-
-
time명령의 -f 옵션 활용하여 시스템 분석방법
==============================================
2011.12.16[목차]
1. time이란?
2. rea, user, sys의 출력결과 올바르게 이해하기
3. -f명령을 통한 프로세스/쓰레드의 CPU & Memory 자원 사용내역 분석#### 1. time이란?
특정 명령을 실행후 실행완료하기까지 소요되는 시간이 얼마나 되는지 알기 위해서
time 명령을 사용합니다.
time명령은 실행 결과로써 콘솔화면에 real, user, system 값을 출력합니다.#### 2. rea, user, sys의 출력결과 올바르게 이해하기
실제로 대다수의 개발자들이 real, user, system 출력값의 해석에 대해 정확하게 이해하지
못하고 있는 경우가 많습니다.
예를 들어, "#>time make -j4 modules" 의 실행결과가 아래와 같을 경우에 대해서 해석해 보겠습니다.
real 44m40.804s
user 74m40.316s
sys 7m43.553s일반적으로 위의 명령 실행 결과에 대해서
User + Sys = Real이라고 이해하는 사람이 많습니다.
하지만, 이렇게 이해할 경우 User(74m) + Sys(7m) > Real(44m)이 됩니다.
우리의 상식대로라면, time명령 자체가 문제가 있거나, 우리의 지식에 뭔가 문제가 있음을 알수 있습니다.따라서, 이제 User와 Sys의 출력값에 대한 정확한 이해가 필요합니다.
( #> man time 을 통해 나오는 내용이 요약 설명이라서, 실상 time의 출력값을 올바르게 이해하는것이 쉽지만은 않습니다. )* Real: 이 값은 gettimeofday()시스템콜을 사용하여 특정명령 사용전의 시간, 특정명령 사용후의 시간을
계산하여 그 차이값을 출력해줍니다. 즉, 특정명령을 실행후 완료되기까지 실제로 소요되는 시간의 값입니다.* User: User Space에서 특정명령이 실행되는 시간동안 실제로 사용되었던 CPU의 갯수
* Sys: Kernel Space에서 특정명령이 실행되는 시간동안 실제로 사용되었던 CPU의 갯수
위의 설명을 토대로 Sys, User, Real의 관계를 수식으로 표현해 보겠습니다.
아래의 공식을 통해서 우리가 한가지 정보를 정성적/정량적(?)으로 알수 있겠습니다.User+Sys의 합산값을 통해서 특정명령을 실행하는 동안에
실제로 몇개의 CPU가 사용이 되었는지를 계산해낼수 있게됩니다.1) [sys time of CPU] + [usr time of CPU] = [real time of command] * [the num of CPUs spent actually during execution time]
2) [the num of CPUs spent actually during execution] =(usr+sys) / real
예를 들어, 1개 이상의 CPU가 있게 된다면, 아래처럼 아마도 100% CPU 시간 이상의 수치값을 얻게 될 것입니다.
user 670.37
system 79.64
real 106.39
CPUs 704%위의 결과를 이해하기 위해서 한번 계산 해봅시다.
670.37(user) + 79.64(sys) = 750.01 CPU시간이 됩니다. 이는, 750.01 / 106.30(real) = 7.04가 됩니다.이처럼 user,sys값을 활용해서 특정 명령을 수행하는 동안에
실제로 CPU들이 사용된 평균갯수는 7.04개의 CPU가 됨을 우리는 알수 있습니다.#### 3. -f 명령을 통한 프로세스/쓰레드의 CPU & Memory 자원 사용내역 분석
time 명령을 통해 이것 외에도 특정 명령에 대한 시스템 분석 목적으로도 생각해볼 수 있습니다.
time 명령으로 잘 활용하면 프로세스들의 최적화를 위해서
임베디드환경에서 발빠르게 간단히 유용하게 사용될 수 있습니다.이를 위해서 -f 옵션을 아래의 몇가지 예제처럼 해당 임베디드 시스템에서 적절히 잘 활용하면 편리합니다.
예제1) ls 명령을 수행시의 USer Call, System Call, Real time 시간을 알아내는 방법이다.
rhel6#>> /usr/bin/time -f "Evaluation: \t%S system,\t%F major-fault,\t%R minor-fault" ls예제1) ls 명령을 수행시의 USer Call, System Call, Real time 시간을 알아내는 방법이다.
rhel6#>> /usr/bin/time -f "\t%U user,\t%S system,\t%e real" ls -Fs예제2) sync 명령을 수행시에 CPU의 사용량 및 RSS정보 및 문맥교환수를 알아내는 방법이다.
rhel6#>> /usr/bin/time -f "\t%P cpu,\t%t rss,\t%w cxt" sync
4% cpu, 0 rss, 23 cxt예제3) sync 명령을 수행시에 Major PageFault 및 Minor PageFault 정보
및 시스템의 페이지 사이즈를 알아내는 방법이다.
rhel6#>> /usr/bin/time -f "\t%F major-fault,\t%R minor-fault,\t%Z page-size" sync
0 major-fault, 174 minor-fault, 4096 page-size예제4) sync 명령을 수행시에 unshared 데이타영역 사이즈, unshared 스택 사이즈,
shared 텍스트 사이즈를 킬로 바이트 단위로 알아내는 방법이다.
rhel6#>> /usr/bin/time -f "\t%D unshared-data,\t%p unshared-stack,\t%X shared-text" top
0 unshared-data, 0 unshared-stack, 0 shared-texttime 명령에서 제공되는 -f 옵션을 이용하여 우리가 알아낼수 있는 정보들은 아래와 같습니다.
c Number of involuntary context switches because of time slice expiring.
C Name and arguments of command being timed.
D Average size of unshared data area, in kilobytes.
e Elapsed real time, in seconds.
E Elapsed real time as hours:minutes:seconds.
F Number of major (I/O-requiring) page faults.
I Number of filesystem inputs.
k Number of signals delivered to the process.
K Average total (data+stack+text) memory use, in kilobytes.
M Maximum resident set size, in kilobytes.
O Number of filesystem outputs.
p Average unshared stack size, in kilobytes.
P Percent of CPU used.
r Number of socket messages received.
R Number of minor (recoverable) page faults.
s Number of socket messages sent.
S Total CPU seconds used by the system on behalf of the process.
t Average resident set size, in kilobytes.
U Total CPU seconds used directly by the process.
w Number of voluntary context switches.
W Number of times the process was swapped out of main memory.
x Exit status of the command.
X Average shared text size, in kilobytes.
Z System page size, in bytes.이상.
* 오픈소스는 Open Innovationa & 윈윈전략을 도모할 지언정 절대 공짜(무료)임을 뜻하지 않는다.치
- 답변은 로그인 후 가능합니다.