2010年3月25日 星期四

Linux message queue

Messages:要傳達的資料以訊息(Message)形態存在於一塊給定的共享記憶體中,可供接收端process來讀取,所謂的message是指一小塊的資料片斷,比方說400 bytes,每個message都可經由訊息佇列 (message queue)提供給不同的process間傳遞,message queue的資料結構基本上是linked list,儲存了每個message的addres、type、size以及指到下一個message的指標(pointer),每個process必須有正確的權限才能在 message queue中讀取與自己相關的message。

Linux:#sysctl -a       //可顯示目前kernel的一些參數設定

msgmap:隨著message的傳送與接收,保留給message的可用系統空間是一直在變化的。 因此kernel必須在resource map來記錄哪些空間已經配置給某些message,哪些空間尚可供利用。Resource map的大小由msgmap所決定。
 
msgmax:一個message的最大size。
    Minimum:0
    Maximum:65 535 bytes
    Default:8192 bytes
 
msgmnb:一個message queue中最多可以同時有多少size的message在排隊。
    Minimum:0
    Maximum:65 535 bytes
    Default:16384 bytes

msgmni:系統中最多可存在message queue的數目。每一個message queue都會有相對應的單一identifier(Message Queue Identifiers),identifier存放在non-swappable kernel area 。msgmni (message maximum number of identifiers) 定義了系統identifier的數目。
    Minimum:1
    Maximum:Memory limited
    Default:50

msgseg:一個message queue可以容納的message segment的數目。
    Minimum:1
    Maximum:32767
    Default:2048

msgssz:當一個message擺放到message queue時,系統會決定該為message配置一或多個segment的空間,每個message segment的size(單位是bytes),由msgssz所定義。換言之,msgseg與msgssz相乘的結果就是整個message queue的size(但不包括message header的空間)。
    Minimum:1
    Maximum:Memory limited
    Default:8 bytes

更細部的設定,請參考:http://gis.nchc.org.tw/lsi/Linux_Basic/discuss/look.asp?id=415&Page=8&ADMIN=1 or http://publib.boulder.ibm.com/infocenter/cicstg/v6r0m0/index.jsp?topic=/com.ibm.cicstg600.doc/ccllan0242.htm


Linux 修改:#vi /etc/sysctl.conf
      加入kernel.msgmnb=65535
PS:需要重開機才會生效。

沒有留言:

張貼留言