Skip to main content
Support

KB Article #58987

$LDR_CNTRL - how to configure it efficiently in Integrator on AIX?

Problem

-- how to configure efficiently $LDR_CNTRL in Integrator 3.4.1 on AIX?


Resolution

* LDR_CNTRL=USERREGS has no efect on memory allocation. An effect of this is that some general purpose registers are saved between system calls. From what I understand it's needed for java garbage collection to work properly. And for dumps. The procengine is already compiled with this option activated ( -bM:ur) so it has no effect whatsoever.

What might work is setting export LDR_CNTRL=MAXDATA=0x40000000.
Basically the default aix 32bit memory model is the following:
There are 16 segments that can be addresed, each of 256 mb in size. For the default mem model:
- segment 0 is reserved for kernel code and data
- segment 1 is reserved for process code
- segment 2 is reserved for user stack and data
- segment 13 for shared library text
- segment 15 for shared library data
- other segments are only available using mmap or shmat

 

So for heap and stack there's only 256 mb available, even if ulimit -d is set to unlimited.
You can set LDR_CNTRL=MAXDATA=0xN0000000, where N is between 1 and 8 That will have the following efect:
- segment 2 is reserved only for stack
- N segments will be used for the heap
- remaining segments for mmap and shmat

So that means you will have N*256 mb available for the heap (if ulimit -d is set to unlimited).

 

You can find a detailed description in:
http://www.redbooks.ibm.com/redbooks/pdfs/sg245674.pdf, Chapter 3.

 

The memory usage of the procengine should be watched in order to see if it becomes stable after a few runs.

 

to configure it in Integrator 3.4.1 do:

 

export LDR_TEMP=MAXDATA=0x30000000

 

in $CORE_ROOT/local/config/enviroment.dat add:
*:
LDR_CNTRL=$LDR_TEMP