솔라리스 10 08/07 부터 유저가 직접 존의 리소스 컨트롤을 설정할 수 있습니다. 예를 들어 존이 사용할 수 있는 CPU 의 갯수를 설정한다거나 CPU 갯수의 범위를 지정할 수도 있습니다. 또한 존에 물리, 스왑, 그리고 locked-memory 등의 메모리 설정이 가능합니다. 이 글은 도움이 될만한 몇가지 리소스 컨트롤 팁에 대해 설명합니다.


1. 존의 컴퓨팅 리소스를 조정하기 위한 cpu-shares

비록 솔라리스10 08/07 이 존에 CPU 갯수를 지정할 수 있지만 종종 잘 동작하지 않을때가 있습니다. 예를 들어 8 코어 Sun Fire 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개의 프로세스들을 생성하고bigheadbighand 존들이 얼마만큼의 컴퓨팅 리소스를 소비 하는지 살펴 보겠습니다:

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-memoryswap 프로퍼티는 물리적 스왑 공간이 아니고 가상 스왑 공간 임

2Gbyte 의 메모리(1.5 Gbytes System Global Area [SGA] 와 0.5Gbytes Process Global area [PGA]) 로 오라클 데이타베이스 10g 를 실행하고 있는 존 bighead 에 최대 3 Gbytes 메모리와 1.5 Gbytes 스왑 스페이스를 주고 싶다고 한다면 다음과 같은 작업을 수행 합니다:

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

이제 여기서 스왑은 물리적 스왑 공간이 아닙니다. 썬 문서에 따르면 여기서의 스왑의 의미는 유저 프로세스 주소 공간 매핑에 의해 소비되는 총 스왑의 용량이고 tmpfs 가 이 존에 마운트 되어 있습니다. 우리가 스왑을 설정할때 capped-memory 스왑은 적절하게 설정되어야 합니다. 예를 들어:

<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 ) 즉 7 Gbytes 입니다.


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 보다 훨씬 큰 용량입니다. 썬은 이 버그에 대해 알고 있습니다.


이 글의 영문 원본은
Zone Resource Control in the Solaris 10 08/07 OS
에서 보실 수 있습니다.

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

2008/07/24 11:03 2008/07/24 11:03

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

댓글을 달아 주세요

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

◀ Prev 1  ... 56 57 58 59 60 61 62 63 64  ... 641  Next ▶