솔라리스10 08/07 버전 부터 존의 리소스를 직접 컨트롤할 수 있습니다.
이 글은 그 방법에 대해 설명합니다
.

솔라리스10 08/07 버전 부터 유저들은 존의 리소스 컨트롤을 직접 설정할 수 있습니다. 예를 들어 존이 사용할 CPU 의 숫자를 설정할 수 있고 혹은 CPU 의 갯수를 범위로 지정할 수도 있습니다. 또한 존의 물리적, 스왑, 그리고 락 메모리도 지정할 수 있습니다. 이 글은 리소스 컨트롤 지정에 도움이 될만한 정보들을 제공 합니다.

1. cpu-shares 를 사용하여 존의 컴퓨팅 자원들을 조정합니다.

비록 솔라리스10 08/07 버전이 존에서 사용될 CPU 의 갯수를 지정할 수 있도록 허락하더라도 종종 이것이 잘 동작하지 않을때가 있습니다. 예를 들어 8-코어의 썬 파이어 T2000 서버에서 3개의 존에 dedicated-cpu 를 사용한다고 해 봅시다. 각각의 존은 4-20 의 지정된 ncpus 를 서로 다른 중요도 값으로 지정되어 있습니다. 그러나 시스템이 완전히 사용되고 있을때 중요도 값이 항상 자기가 맡은 역활대로 동작하지는 않습니다. 종종 낮은 중요도 값의 존이 높은 중요도 값의 존 보다 더 많은 컴퓨팅 리소스를 소비할 때도 있습니다.

다음의 예에서 필자는 cpu-shares 가 잘 동작함을 데모로 보여드립니다.

 
root@bigfoot# dispadmin -d
FSS     (Fair Share)
root@bigfoot# zonecfg -z global info rctl
rctl:
        name: zone.cpu-shares
        value: (priv=privileged,limit=4,action=none)
root@bigfoot# zonecfg -z bighead info rctl name=zone.cpu-shares
rctl:
        name: zone.cpu-shares
        value: (priv=privileged,limit=3,action=none)
root@bigfoot# zonecfg -z bighand info rctl name=zone.cpu-shares
rctl:
        name: zone.cpu-shares
        value: (priv=privileged,limit=3,action=none)

bighead 에 20개의 프로세스를 생성해 보겠습니다:

 
<username>@bighead> perl -e 'while (--$ARGV[0] and fork) {}; while () {}'
20 &

bighand 에 12개의 프로세스를 생성해 보겠습니다:

 
<username>@bighand> perl -e 'while (--$ARGV[0] and fork) {}; while () {}'
12 &
 
root@bigfoot# vmstat 3 3
 kthr      memory            page            disk          faults
 cpu
 r b w   swap      free  re  mf pi  po fr de sr s1 s2 s3 s4  in   sy
 cs   us  sy id
 4 0 0 37954888 15215072 66 206 259  1  1  0 60 13 -0 -0 24 818 4186
 1780 64  0  36
 0 0 0 38747216 15152224 0    5   0  0  0  0  0  0  0  0  0 768  272
 339 100  0   0
 0 0 0 38746960 15151968 0    0   0  0  0  0  0  0  0  0  0 788  247
 347 100  0   0
 
root@bigfoot# prstat -Z
ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE
     1       55  202M  264M   1.6%   0:36:11  62% bighead
     2       47  199M  263M   1.6%   0:20:29  37% bighand
     0       49  219M  291M   1.8%   0:01:36 0.1% global

위에서 보듯이 시스템은 완벽하게 사용되고 있지 않고, 각각의 존은 필요한대로의 컴퓨팅 리소스를 사용하고 있습니다.

이제 존 bigfoot 에 15개의 프로세스를 생성해서 bighead 와 bighand 존이 얼마나 자원을 소모하고 있는지 살펴 보겠습니다:

 
root@bigfoot# perl -e 'while (--$ARGV[0] and fork) {}; while () {}'
15 &
 
root@bigfoot# vmstat 3 3
 kthr      memory            page            disk          faults
 cpu
 r  b w   swap      free   re  mf  pi po fr de sr s1 s2 s3 s4  in   sy
 cs   us   sy id
 5  0 0 37520616 15249888 102 314 406  1  1  0 94 13 -0 -0 24 869 6466
 2592  50  1 49
 15 0 0 38745928 15151392   0   5   0  0  0  0  0  1  0  0  0 806  325
 366  100  0  0
 15 0 0 38745672 15151136   0   0   0  0  0  0  0  0  0  0  0 739  234
 320  100  0  0
 
root@bigfoot# prstat -Z
ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE
     0       65  228M  298M   1.8%   1:32:55  40% global
     1       55  202M  264M   1.6%   1:59:48  30% bighead
     2       47  199M  263M   1.6%   1:37:32  29% bighand
 
root@bigfoot# prstat -Z
ZONEID    NPROC  SWAP   RSS MEMORY      TIME  CPU ZONE
     0       65  228M  298M   1.8%   1:19:15  38% global
     2       47  199M  263M   1.6%   1:27:31  31% bighand
     1       55  202M  264M   1.6%   1:48:24  31% bighead

위에서 보듯이 각각의 존은 그것의 cpu-shares 에 맞게 컴퓨팅 자원의 일부분을 소모하고 있고 시스템의 컴퓨팅 리소스들이 완전히 사용되고 있습니다.

2. capped-memory 의 swap 프로퍼티는 가상 swap 공간이고 물리적인 swap 공간이 아닙니다.

bighead 존에서는 오라클 데이타베이스 10g 엔터프라이즈 에디션이 전체 2Gbyte 의 메모리로 실행되고 있습니다 (1.5Gbyte SGA 와 0.5Gbytes PGA). 우리는 여기에 최대 3Gbytes 의 메모리와 1.5Gbytes 의 스왑 공간을 다음과 같이 주고 싶다고 해 보면:

 
zonecfg:bighead> info capped-memory
capped-memory:
        physical: 3G
        [swap: 1.5G]

존 bighead 에서 오라클 데이타베이스를 시작시킵니다:

 
oracle@bighead> sqlplus /nolog
SQL> conn / as sysdba
SQL& startup
ORA-27102: out of memory
SVR4 Error: 12: Not enough space

그러므로 여기서 swap 은 물리 swap 공간이 아닙니다. 썬의 문서에 따라서 여기서의 swap 은 유저 프로세스 공간 매핑에 의해 사용될 수 있는 전체 swap 의 양을 의미하며 tmpfs 에 마운트 됩니다. swap 을 설정할때 capped-memory swap 은 적절하게 설정되어야 합니다. 예를 들어:

 
<username>@bigfoot> vmstat -p 5
 memory           page          executable      anonymous
 filesystem
 swap     free     re  mf  fr  de  sr  epi  epo  epf  api
 apo  apf fpi fpo fpf
 38671464 15156336 40  77   1   0   5 1442    0    0  242
 0    0    44   1   1
 38875352 15312016  0   3   0   0   0    0    0    0    0
 0    0     0   0   0

우리의 경우 3 * ( 38 / 15 ) 즉 7Gbtes 가 되어야 합니다.

3. 종종 존은 최대 제한 보다 더 많은 물리적 메모리를 소모 합니다.

 
zonecfg:bighead> info capped-memory
capped-memory:
physical: 1G
[swap: 7G]
[locked: 1G]

오라클 데이타베이스는 시작시키는데에 꽤 오랜 시간이 걸립니다. 존에 의해 사용되는 Resident Set Size (RSS) 메모리는 다음과 같이 오락가락 합니다:

 
# prstat -Z
ZONEID NPROC  SWAP   RSS  MEMORY    TIME  CPU  ZONE
36        54  1824M  158M  1.0%  0:01:54 0.5%  bighead
36        54  1824M 1779M 11%    0:01:59 0.3%  bighead
36        55  1828M  258M  1.6%  0:02:01 0.6%  bighead
36        55  1829M 1788M 11%    0:02:13 0.3%  bighead
 

그러나 1779 Mbytes 는 1 Gbyte 보다는 훨씬 많은 용량입니다. 썬은 이미 이 버그에 대해 알고 있습니다.


이 글의 영문 원본은
BigAdmin System Administration Portal의 Community-Submitted Tech Tips 에서 보실 수 있습니다.

"관리자코너" 카테고리의 다른 글

2008/12/24 16:44 2008/12/24 16:44

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/699

댓글을 달아 주세요

[로그인][오픈아이디란?]

◀ Prev 1  ... 161 162 163 164 165 166 167 168 169  ... 806  Next ▶