Short version:
Main problem is it seems prctl for process.max-sem-nsems is not working.
When I do a prctl $$ I see the kernel parameter set, but when specifying it on the command line it doesn't think it exists (?)
Detailed version:
Going through the oracle 10 pre-installation config tasks on solaris 10, I see the kernel settings which need to be set:
noexec_user_stack 1 (/etc/system)
project.max-sem-ids 100
process.max-sem-nsems 256
project.max-shm-memory 4294967295
project.max-shm-ids 100
I added the kernel settings to all the projects also just because I'm over paranoid even though oracle is using user.oracle by default.
Anyway, all seem fine except for process.max-sem-nsems. I get an error when trying to prctl it.
# cat /etc/project
system:0::::process.max-sem-nsems=(priv,256,deny);project.max-sem-ids=(priv,128,deny);project.max-shm-ids=(priv,128,deny);project.max-shm-memory=(priv,4294967295,deny)
user.root:1::::
noproject:2::::
default:3::::process.max-sem-nsems=(priv,256,deny);project.max-sem-ids=(priv,128,deny);project.max-shm-ids=(priv,128,deny);project.max-shm-memory=(priv,4294967295,deny)
group.staff:10::::
user.oracle:100:Oracle:oracle::process.max-sem-nsems=(priv,256,deny);project.max-sem-ids=(priv,128,deny);project.max-shm-ids=(priv,128,deny);project.max-shm-memory=(priv,4294967295,deny)
# su - oracle
Sun Microsystems Inc. SunOS 5.10 Generic January 2005
$ id -p
uid=50(oracle) gid=200(oinstall) projid=100(user.oracle)
$ prctl -n process.max-sem-nsems -i project user.oracle
prctl: cannot get/set process rctl on task or project
usage:
..
..
$ prctl $$ | more
..
..
process.max-sem-ops
privileged 512 - deny -
system 2.15G max deny -
process.max-sem-nsems
privileged 256 - deny -
system 32.8K max deny -
process.max-address-space
privileged 16.0EB max deny -
system 16.0EB max deny -
..
..
$ uname -a
SunOS hostname..com 5.10 Generic_127127-11 sun4u sparc SUNW,Sun-Fire-V245
$
Any idea what's going on?
by: turnbulldPosted on 2009-10-13 at 11:49:09ID: 25562979
The tunable is a process tuning, not project. Your prctl command is trying to assign it to a project, not a process. You could use projmod to set the value in /etc/projects against the user.oracle project or you can use prctl to set the value against a named process like this:
prctl -n process.max-sem-nsems -v 512 -p 12345
which will cause whatever process 12345 is to operate with the resource set to 512.