Operating System - HP-UX
1833178 Members
2678 Online
110051 Solutions
New Discussion

Question on 'maxdsiz' kernel parameter

 
Mahesh Kurse
Occasional Contributor

Question on 'maxdsiz' kernel parameter

Hello,

As far as I know, the data segment of the process can not grow more than the value set by 'maxdsiz' kernel parameter. In our system, we have set this value to 0xC800000 (approx. 209MB) for the 32-bit process.

$ file nemsMib
nemsMib: PA-RISC1.1 shared executable dynamically linked -not stripped

$ kmtune | grep maxdsiz
maxdsiz 0XC800000
maxdsiz_64bit 0x0000000040000000

But through 'top' and 'glance', we have seen that, the process - 'nemsMib' grows beyond this limit.
Here is the partial output of top -

Load averages: 0.55, 0.55, 0.53
156 processes: 144 sleeping, 10 running, 1 zombie, 1 starting
Cpu states:
CPU LOAD USER NICE SYS IDLE BLOCK SWAIT INTR SSYS
0 1.55 4.8% 0.0% 81.3% 13.9% 0.0% 0.0% 0.0% 0.0%
1 0.37 6.0% 0.0% 9.0% 85.1% 0.0% 0.0% 0.0% 0.0%
2 0.23 6.8% 0.0% 6.6% 86.7% 0.0% 0.0% 0.0% 0.0%
3 0.06 4.8% 0.0% 1.4% 93.8% 0.0% 0.0% 0.0% 0.0%
--- ---- ----- ----- ----- ----- ----- ----- ----- -----
avg 0.55 5.6% 0.0% 24.6% 69.9% 0.0% 0.0% 0.0% 0.0%

Memory: 728416K (578436K) real, 784336K (626448K) virtual, 969464K free Page# 1
/18

CPU TTY PID USERNAME PRI NI SIZE RES STATE TIME %WCPU %CPU COMMAND
3 ? 17517 omcadm 154 20 271M 240M sleep 29:22 5.27 5.26 nemsMib

And glance shows -
Type RefCt RSS VSS Locked File Name
--------------------------------------------------------------------------------
NULLDR/Shared na 4kb 4kb na
TEXT /Shared na 17.6mb 23.5mb na vxfs inode 1725
DATA /Priv na 232.8mb 241.3mb na vxfs inode 1725


Text RSS/VSS: 18mb/ 24mb Data RSS/VSS:233mb/241mb Stack RSS/VSS: 48kb/ 48kb
Shmem RSS/VSS:752kb/752kb Other RSS/VSS: 12mb/ 18mb

As can be seen from the output of glance, the process has data segment of 241 MB which exceeds 'maxdsiz' kernel parameter (~209MB) and still the process has been running fine. We have seen this process sometimes grow as high as 400MB !!

With this observation, is there any other parameter which controls the size of the process that it can grow in memory ?

And, what is exactly maxdsiz parameter for ?

Thanks,
Mahesh


3 REPLIES 3
Patrick Chim
Trusted Contributor

Re: Question on 'maxdsiz' kernel parameter

Hi,

I can only find the explanation of maxdsiz parameter for you ! :)

maxdsiz

Maxdsiz defines the maximum size of the data segment of a process. The default value of 64 MB is too small for most applications. We recommend this value be set to the maximum value of 1.9Gb. If maxdsiz is exceeded, the process will be terminated, usually with a SIGSEGV (segmentation violation) and you will probably see the following message:

Memory fault(coredump)

In this case, review the values of maxdsiz, maxssiz and maxtsiz. For more information on these parameters, please see the on-line Help section within SAM's Kernel Configuration. If you need to exceed the specified maximum of 1.9Gb, there are a couple of ways (yet to be supported) to do so. Contact your Hewlett Packard technical consultant for the details. It is important to note that the maxdsiz parameter must be modified in order for these procedures to work. Maxdsiz will need to be set to 2.75Gb or 3.6Gb depending on the method chosen and/or size required. It will also require a manual creation of a new kernel.

You can go to this link for more details.

http://www.hp-partners.com/edaweb_public/html/technical_support/tuning.html

Regards,
Patrick
Ravi_8
Honored Contributor

Re: Question on 'maxdsiz' kernel parameter

Hi, Mahesh
maxdsiz and maxdsiz_64bit specify the maximum data segment size, in bytes, for an executing process.

maxdsiz for 32-bit processors:
Minimum
0x400000 (4 Mbytes)
Maximum
0x7B03A000 (approx 2 Gbytes)
Default
0x4000000 (64 Mbytes)

maxdsiz_64bit for 64-bit processors:
Minimum
0x400000 (4 Mbytes)
Maximum
4396972769279
Default
0x4000000 (64 Mbytes)

maxdsiz and maxdsiz_64bit define the maximum size of the static data storage segment for executing 32-bit processes and 64-bit processes on 32-bit and 64-bit processors, respectively.

Whenever the system loads a process or an executing process attempts to expand its static storage segment the system checks the size of the process' static data storage segment.

If the process' requirements exceed maxdsiz or maxdsiz_64bit, the system returns an error to the calling process, possibly causing the process to terminate.

Since maxdsiz can go up to 2GB, and your process occupying only 241MB, still there is enough of space in data segment



never give up
Mahesh Kurse
Occasional Contributor

Re: Question on 'maxdsiz' kernel parameter

Hi Ravi,

As can be seen above, the value of 'maxdsiz' is 209MB on our system and glance shows that, the data segment has grown up to 241 MB. Still the process has not been terminated. How is this possible ?

Also, does data segment correspond only to static data ? By static data, do you mean only global, local and static variables in the program ?

Then where does the data allocated on the heap through malloc() and new() reside ? Is there any way I can control the heap size used by a process ?

Can you please answer these questions ?

Thanks,
Mahesh