System Performance Tuning, 2nd Edition | ||
polaris% vmstat 5 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr s1 s1 s2 -- in sy cs us sy id 0 0 0 1425960 396952 0 727 4 1 1 0 0 0 3 0 0 141 2220 121 38 12 50 0 0 0 1426912 397856 0 1207 8 0 0 0 0 0 4 0 0 148 3513 153 29 20 51 0 0 0 1426072 396896 0 628 6 0 0 0 0 0 2 0 0 330 7017 930 40 14 46메모리 부족의 가장 중요한 척도는 sr 열입니다. 여기서는 0값을 계속해서 유지하고 있습니다. 메모리가 부족할 경우, 우리가 해야 할 첫번째 방법은 priority paging을 사용하는 것입니다. 여기서 약간 의심스러운 점은 id 열에서 볼 수 있는 것처럼 약간의 idle 시간이 있다는 사실입니다. 이에 대해서 살펴봐야 할 것입니다.
polaris% iostat -xnP 5 ... extended device statistics r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t0d0s0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t0d0s1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t0d0s2 0.2 2.6 0.6 8.6 0.0 0.0 0.0 14.0 0 2 c0t1d0s0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t1d0s2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 polaris:vold(pid208) ...많은 디스크 활동은 없습니다. 입출력은 오직 /export/src(c0tld0s0) 에서만 일어납니다. c0t0d0s0는 swap 영역이고 c0t0d0s1은 / 입니다.
polaris% mpstat 5 CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl 0 294 0 115 214 13 92 9 6 0 0 599 9 5 1 85 1 489 0 67 28 14 39 13 8 1 0 1875 63 22 1 14 CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl 0 147 0 155 216 12 96 12 5 1 0 871 5 9 0 85 1 1098 1 71 32 17 60 14 10 1 0 2890 51 32 3 14아주 유용한 일을 하는데 있어 오직 하나의 프로세서만을 이용하는 것처럼 보입니다. e-Gizmo가 소프트웨어 개발에 사용하는 이러한 멀티프로세서 시스템에서는 dmake 라는 것을 사용할 수 있습니다. 이는 컴파일 과정을 병렬화합니다. 우리가 이 소프트웨어를 사용하여 CPU 사용률을 높힐 수 있는지 살펴보도록 하겠습니다(† 역자 주: 리눅스의 make는 이미 -j 옵션을 가지고 있습니다. 두 개 이상의 CPU를 갖고 있는 시스템이 있다면 make 명령을 사용할 때 -j [thread_number] 옵션을 추가하면 됩니다.).
polaris% /bin/time -p dmake -j 2 ... real 614.14 user 867.14 sys 219.82퍼포먼스 향상을 위해 관심을 가져야 할 부분은 wall-clock 컴파일 시간으로/bin/time은 이를 "real"로 나타냅니다. 여기서 우리는 훌륭하게도 거의 2분에 가까운 시간을 줄였습니다. mpstat의 결과를 보면 대부분의 idle 시간을 줄였다는 것을 알 수 있습니다.
polaris% mpstat 5 ... CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl 0 448 0 80 221 12 83 33 9 1 0 1372 76 15 1 8 1 440 0 105 39 14 48 24 8 1 0 1218 84 13 1 2 ...우리는 프로세서 수보다 많은 병렬 실행 스레드를 지정할 수도 있습니다. 그래서 몇 가지 테스트를 해봤고 그 결과는 다음과 같습니다.
-j real time (m:s) user time (m:s) sys time (m:s) 1 18:03.03 14:14.34 3:27.34 2 10:14.14 14:27.14 3:39.82 3 9:41.86 14:28.37 3:39.45 4 9:34.66 14:33.45 3:39:22여기서 우리는 스레드가 많아질수록 대체적으로 시간이 줄어든다는 것을 알 수 있습니다. 더 많은 j 값에 대한 실험을 해보면 컴파일 시간을 몇 초 정도 줄일 수도 있겠지만 e-Gizmo사의 테스트 요청 시간이 많지 않았기 때문에 여기까지만 테스트를 하였습니다.
polaris% vmstat 5 procs memory page disk faults cpu r b w swap free re mf pi po fr de sr s1 s1 s2 -- in sy cs us sy id 1 0 0 1412432 368488 0 1583 11 0 0 0 0 0 5 0 0 512 5491 1135 71 28 0 2 0 0 1409768 365920 0 1552 11 0 0 0 0 0 10 0 0 530 5417 812 73 27 0 2 0 0 1412144 367768 0 1460 1 0 0 0 0 0 4 0 0 561 4954 518 73 27 0 polaris% iostat -xnP 5 extended device statistics r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t0d0s0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t0d0s1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t0d0s2 1.2 5.0 8.6 229.0 0.0 0.2 0.0 32.3 0 3 c0t1d0s0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 c0t1d0s2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 islington:vold(pid208)이상 우리가 수행 했던 것보다 더 쉬운 성능 향상은 더 이상 없습니다. 게다가 클라이언트 시스템에 매달릴 시간이 더 이상 없었기 때문에 우리는 여기까지만 하고 작업을 마무리 지었습니다. 그리고 e-Gizmo의 엔지니어들은 성능 향상을 이룰 수 있었기 때문에 이제 더 이상 골머리를 앓을 필요도 없어졌습니다.
이전 글 : 파이썬으로 수학 가르치기
다음 글 : 톰캣 사용하기 I - 자바 웹 애플리케이션
최신 콘텐츠