솔라리스 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개의 프로세스들을 생성하고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 프로퍼티는 물리적 스왑 공간이 아니고 가상 스왑 공간 임
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
에서 보실 수 있습니다.
"관리자코너" 카테고리의 다른 글
- 썬 버추얼 데스크탑 커넥터 1.0(베타)을 사용한 VDI 데모 구축 (댓글 0개 / 트랙백 0개) 2008/01/23
- 솔라리스 부트 매니저를 이용한 부트 디스크 미러링 방법 (댓글 1개 / 트랙백 0개) 2005/09/23
- 솔라리스 10 5/08 릴리스의 새로운 기능 (댓글 0개 / 트랙백 0개) 2008/06/11
- Solaris 10의 컨테이너를 이용하여 보안을 향상시키는 방법 - Part 1 of 2 (댓글 1개 / 트랙백 0개) 2005/10/23
- 설정 파일 관리 베스트 프랙티스 (댓글 0개 / 트랙백 0개) 2008/05/19
- The Zone Manager 스크립트 (댓글 1개 / 트랙백 0개) 2005/11/23
- 스크립트를 이용한 자동화된 시스템 체크 (댓글 0개 / 트랙백 0개) 2008/06/16
- 플래시 어카이브로 부터 솔라리스10 Branded 존 설치하기 (댓글 0개 / 트랙백 0개) 2008/08/19
- xVM DomU 지원을 솔라리스 라이브CD 배포판에 추가하기 (댓글 0개 / 트랙백 0개) 2008/12/05
- 솔라리스 레디 애플리케이션 및 솔루션 (댓글 0개 / 트랙백 0개) 2008/03/13
댓글을 달아 주세요