Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Feb 2009 00:09:42 -0800
From:      Garrett Cooper <yanefbsd@gmail.com>
To:        Bill Moran <wmoran@potentialtech.com>
Cc:        Kirk Strauser <kirk@strauser.com>, freebsd-hackers@freebsd.org, Christian Peron <csjp@freebsd.org>, "Brian A. Seklecki" <lavalamp@spiritual-machines.org>
Subject:   Re: shmmax tops out at 2G?
Message-ID:  <7d6fde3d0902240009q77e3be85n54c17f7404bc446b@mail.gmail.com>
In-Reply-To: <20090223151611.af79586c.wmoran@potentialtech.com>
References:  <1235404207.31655.2085.camel@soundwave.ws.pitbpa0.priv.collaborativefusion.com> <20090223190828.GA34866@jnz.sqrt.ca> <78AACD88-3F94-4B39-9122-9C4199DFFDBA@gmail.com> <20090223201217.GA35374@jnz.sqrt.ca> <20090223151611.af79586c.wmoran@potentialtech.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Feb 23, 2009 at 12:16 PM, Bill Moran <wmoran@potentialtech.com> wro=
te:
> In response to Christian Peron <csjp@freebsd.org>:
>
>> On Mon, Feb 23, 2009 at 11:58:09AM -0800, Garrett Cooper wrote:
>> [..]
>> >
>> > =A0 =A0 Why isn't the field an unsigned int / size_t? I don't see much=
 value
>> > in having the size be signed...
>>
>> No idea :) This code long predates me.
>
> It's that way because the original Sun spec for the API said so.
>
> It makes little sense to change it just to unsigned. =A0The additional 2G
> it would give doesn't really solve the tuning problem on a 64G system.
> This is simply a spec that has become outdated by modern hardware.

Ah, but an unsigned integer on a 64-bit system supports that kind of
precision ;). Or are you saying you're crazy enough to run PAE mode
with that much RAM 0-o?

Then again the bug filer's statement doesn't make sense given the data
-- there must be a int32_t used somewhere that's mucking up the
system. Trying to compile the test app with -Wall, this is what I see:

[gcooper@optimus ~]$ gcc -Wall -o test4 test4.c
test4.c: In function 'main':
test4.c:11: warning: 'return' with no value, in function returning non-void
test4.c:13: warning: format '%zd' expects type 'signed size_t', but
argument 2 has type 'int'
#include <stdio.h>
#include <sys/shm.h>

int main() {
size_t size =3D 2*1024*1024*1024l - 4096;
int segid;
printf("Requested: %zd\n", size);
segid =3D shmget(234, size, IPC_CREAT);
if(segid =3D=3D -1) {
perror("Died");
return;
}
printf("SHM ID : %zd\n", segid);
}

So I'm not 100% sure that this issue isn't a coding error, or the
sample app is just incorrect... When the error comes back though from
the perror, it returns EINVALID, not ENOMEM or something similar to
that. Not sure if it's because the value is truly invalid, or if it's
just a bad return code.

My 2 cents...
-Garrett



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7d6fde3d0902240009q77e3be85n54c17f7404bc446b>