1. message queue 개략 설명
Name Default Max Brief Description
------ ------- -------------- ---------------------------------
msgmap 100 2147483647 메세지 map에 있는 entry 갯수
msgmax 2048 2147483647* 메세지 최대 크기
msgmnb 4096 2147483647* 메세지 큐의 최대 크기
msgmni 50 2147483647 메세지 큐 identifier의 갯수
msgssz 8 2147483647* 메세지 segment의 크기
msgtql 40 2147483647 시스템 메세지 헤더 갯수
msgseg 1024 32767* 메세지 segment의 수 (MUST BE < 32768)
2. message queue 세부 설명
msgmap
메세지 큐 resource map의 크기를 정의한다. 이 map에 있는 하나의 entry는
연속적인 가용한 공간를 차지한다. 이것은 msgsnd(2) 시스템 콜에 의해
얻어지는 메세지 큐 segment를 위한 공간으로 사용된다.
msgmax
하나의 메세지에 대한 크기를 제한한다. 메세지의 크기가 이 값보다 크면
msgsnd(2) 시스템 콜은 EINVAL 오류값을 리턴한다.
이 값은 최대 2GB까지 사용할 수 있지만 시스템의 다른 요소들이 65535로
제한된 것이 있기 때문에 65535보다 큰 값을 사용할 경우에 예기치 못한
결과가 발생할 수 도 있다.
msgmnb
하나의 메세지 큐가 수용할 수 있는 메세지의 최대 크기를 제한한다.
이 값은 메세지 큐에 보관되어 있는 메세지들의 크기(byte)의 합계이다.
위에 기술된 최대값은 Solaris 2.4 이상의 버전이고, 그 이전의 버전에서는
최대값이 65535로 제한된다.
msgmni
시스템에 가용한 메세지 큐 identifier의 갯수를 정의한다.
시스템은 이 값만큼의 msgmni control structure에 해당되는 커널 메모리를
미리 할당한다. 하나의 control structure는 144 바이트이다.
msgtql
시스템에서 가용한 메세지 큐 헤더를 갯수를 정의한다. 메세지 큐에 들어
있지만 아직 읽혀지지 않은 메세지는 하나의 메세지 큐 헤더를 차지한다.
시스템은 이 값만큼의 msgtql control structure에 해당되는 커널 메모리를
미리 할당한다. 하나의 control structure는 12 바이트이다.
msgssz & msgseg
이 두개의 값에 의하여, 모든 큐에 있는 모든 메세지에 대한 가용한 전체
바이트 수를 정의한다. 시스템은 메세지 큐들에 대하여 커널 메모리를
미리 할당한다. 메모리의 총합은 msgssz * msgsseg 이다.
msgssz * msgsseg의 값은 2147483647을 넘어서는 안된다.
3. message queue parameter 설정하기
message queue parameter를 시스템에 설정하려면 /etc/system 화일에 다음과
같은 라인을 추가하고, 시스템을 rebooting하면 변경사항이 반영된다.
set msgsys:msginfo_variable = value
여기서 'variable'은 위에서 설명한 Name 필드에 있는 값이다.
예를 들면,
set msgsys:msginfo_msgmap = 150
msgmap(message queue resource map)의 값을 150으로 변경한다.
4. message queue parameter 값을 조사하기
시스템에 설정되어 있는 message queue parameter의 값은 'sysdef' 명령어로
확인할 수 있다.
$ sysdef
.... Skip ....
*
* IPC Semaphores
*
100 entries in msg map (MSGMAP)
2048 max message size (MSGMAX)
4096 max bytes on queue (MSGMNB)
50 message queue identifiers (MSGMNI)
8 message segment size (MSGSSZ)
40 system message headers (MSGTQL)
1024 message segments (MSGSEG)
.... Skip ....
위에 있는 값들이 0로 보일 수 도 있다. 이 경우는 message queue module이
커널에 올라와 있지 않기 때문이다. Solaris 2.x에서는 dynamic kernel을
사용한다. 이는 kernel module들이 사용될 때, kernel에 결합되고, 사용하지
않으면 커널에서 제거된다는 것을 의미한다. 강제적으로 message queue
module을 커널에 load하려면 다음과 같이 'modload'명령어를 사용할 수 있다.
# modload -p sys/msgsys
그리고 다시 sysdef 명령어는 사용하면, message queue parameter를 확인할
수 있다.
5. 커널 메모리의 제약
Solaris 2.5 이상 버전에서는 message queue가 메모리의 1/4 이상이 할당되지
못하도록 하며, 그 이상이 할당되면 경고 메세지를 출력하고, message queue
module을 load하지 않는다.
'OS > SOLARIS' 카테고리의 다른 글
기술문서 (0) | 2006.06.16 |
---|---|
시스템 시간 동기화 하기 (0) | 2006.05.24 |
[펌] 커널 파라메터의 수정 (0) | 2005.12.23 |
[펌] 시스템에서 maxuser 수와 max process 의 수는 (0) | 2005.12.23 |
솔라리스 테입드라이브 명령어 (0) | 2005.11.15 |