• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: calling sysctl at startup - how?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: calling sysctl at startup - how?


  • Subject: Re: calling sysctl at startup - how?
  • From: Terry Lambert <email@hidden>
  • Date: Thu, 03 Jan 2008 22:21:03 -0800

If you attach and detach multiple times, you are potentially risking fragging the address space. This is particularly true if you are attaching and detaching adjacent to a heap allocation area, since we attempt to handle large allocations (if you are making any) by trying "best fit".  So if you are going to track somethingg that big, pick a place fairly high up.

Another common issue might be a missing or incorrect detach (an mmap()'ed file does not have this issue, since whatever is already in the region being mapped gets blown away by the call - a two-edged sword).  You can use the vm_stat tool to check out your address space for drags or dangling attached memory.

If you are going to use a large shared memory segment, my recommendation would be to attach it and leave it attached, which avoids both possible coding errors and fragmentation.  Worst case, all it's going to take is swap space (on disk, just like the mmap()'ed file approach).

Hope this helps.

-- Terry

On Jan 3, 2008, at 9:10 PM, Norm Green <email@hidden> wrote:

Thanks, sysctl.conf did the job.

 

The app is 64-bit and I use 1 large shared memory segment because it needs to be contiguous. 

 

BTW, I’ve had some trouble when my program detaches and attaches an existing memory segment several times.  After the 3rd or 4th call to shmat(), it starts to fail using an address that previously succeeded.  I usually need to specify the address because my app needs it to be 16 KB aligned and shmat() seems to return 4 KB aligned addresses.  To get around this, I keep rolling the address forward by 16 KB until I find one that works.

 

Norm Green

 


From: Terry Lambert [mailto:email@hidden]
Sent: Thursday, January 03, 2008 8:49 PM
To: Norm Green
Cc: email@hidden
Subject: Re: calling sysctl at startup - how?

 

man sysctl.conf

 

You will probably not end up happy setting it to 2G, unless your application is 64 bit and makes multiple segments adjacent to each other, rather than 1 big segment, or you refuge the page 0 size to 4K in your 64 bit app so that allocations can happen below the 4G boundary.  32 bit apps are only going to find about 1.5G of contiguous address space available to them because of frame buffers, framewoks, etc..

 

PS: My usual recommendation at this point is that you mmap() a file instead to get your shared memory, if you need to avoid these limits. This has the (usually desirable) side effect of creating persistent backing store for the segment contents, as well.

 

-- Terry

On Jan 3, 2008, at 6:31 PM, Norm Green <email@hidden> wrote:

What is the “right” way to run a sysctl command when the system boots up?  I’ve read that using the /etc/rc.* files is discouraged.  I want to run this command to enable large amounts of shared memory when the system boots:

 

sysctl -w kern.sysv.shmmax=0x80000000 kern.sysv.shmseg=8 kern.sysv.shmall=0x80000000

 

 

Thanks,

 

 

Norm Green

 

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

References: 
 >RE: calling sysctl at startup - how? (From: Norm Green <email@hidden>)

  • Prev by Date: RE: calling sysctl at startup - how?
  • Next by Date: Re: How can I get the maximum shared memory segment size in program?
  • Previous by thread: RE: calling sysctl at startup - how?
  • Next by thread: DKIOCCDREADTOC returning BCD numbers?
  • Index(es):
    • Date
    • Thread