linux/include
Nadia Derbey f7bf3df8be ipc: scale msgmni to the amount of lowmem
On large systems we'd like to allow a larger number of message queues.  In
some cases up to 32K.  However simply setting MSGMNI to a larger value may
cause problems for smaller systems.

The first patch of this series introduces a default maximum number of message
queue ids that scales with the amount of lowmem.

Since msgmni is per namespace and there is no amount of memory dedicated to
each namespace so far, the second patch of this series scales msgmni to the
number of ipc namespaces too.

Since msgmni depends on the amount of memory, it becomes necessary to
recompute it upon memory add/remove.  In the 4th patch, memory hotplug
management is added: a notifier block is registered into the memory hotplug
notifier chain for the ipc subsystem.  Since the ipc namespaces are not linked
together, they have their own notification chain: one notifier_block is
defined per ipc namespace.  Each time an ipc namespace is created (removed) it
registers (unregisters) its notifier block in (from) the ipcns chain.  The
callback routine registered in the memory chain invokes the ipcns notifier
chain with the IPCNS_MEMCHANGE event.  Each callback routine registered in the
ipcns namespace, in turn, recomputes msgmni for the owning namespace.

The 5th patch makes it possible to keep the memory hotplug notifier chain's
lock for a lesser amount of time: instead of directly notifying the ipcns
notifier chain upon memory add/remove, a work item is added to the global
workqueue.  When activated, this work item is the one who notifies the ipcns
notifier chain.

Since msgmni depends on the number of ipc namespaces, it becomes necessary to
recompute it upon ipc namespace creation / removal.  The 6th patch uses the
ipc namespace notifier chain for that purpose: that chain is notified each
time an ipc namespace is created or removed.  This makes it possible to
recompute msgmni for all the namespaces each time one of them is created or
removed.

When msgmni is explicitely set from userspace, we should avoid recomputing it
upon memory add/remove or ipcns creation/removal.  This is what the 7th patch
does: it simply unregisters the ipcns callback routine as soon as msgmni has
been changed from procfs or sysctl().

Even if msgmni is set by hand, it should be possible to make it back
automatically recomputed upon memory add/remove or ipcns creation/removal.
This what is achieved in patch 8: if set to a negative value, msgmni is added
back to the ipcns notifier chain, making it automatically recomputed again.

This patch:

Compute msg_ctlmni to make it scale with the amount of lowmem.  msg_ctlmni is
now set to make the message queues occupy 1/32 of the available lowmem.

Some cleaning has also been done for the MSGPOOL constant: the msgctl man page
says it's not used, but it also defines it as a size in bytes (the code
expresses it in Kbytes).

Signed-off-by: Nadia Derbey <Nadia.Derbey@bull.net>
Cc: Yasunori Goto <y-goto@jp.fujitsu.com>
Cc: Matt Helsley <matthltc@us.ibm.com>
Cc: Mingming Cao <cmm@us.ibm.com>
Cc: Pierre Peiffer <pierre.peiffer@bull.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-04-29 08:06:12 -07:00
..
acpi
asm-alpha alpha: teach the compiler that BUG doesn't return 2008-04-28 08:58:27 -07:00
asm-arm mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
asm-avr32 mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
asm-blackfin [Blackfin] arch: add include/boot .gitignore files 2008-04-25 08:29:11 +08:00
asm-cris cris: add constfy to pgd_offset() 2008-04-28 08:58:28 -07:00
asm-frv mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
asm-generic gpiochip_reserve() 2008-04-28 08:58:34 -07:00
asm-h8300
asm-ia64 dma/ia64: update ia64 machvecs, swiotlb.c 2008-04-29 08:06:12 -07:00
asm-m32r mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
asm-m68k mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
asm-m68knommu
asm-mips Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus 2008-04-28 10:51:43 -07:00
asm-mn10300 mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
asm-parisc mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
asm-powerpc proper __do_softirq() prototype 2008-04-29 08:06:02 -07:00
asm-ppc mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
asm-s390 s390: implement pte special bit 2008-04-28 08:58:23 -07:00
asm-sh hugetlbfs: common code update for s390 2008-04-28 08:58:25 -07:00
asm-sparc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6 2008-04-28 09:45:57 -07:00
asm-sparc64 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6 2008-04-28 09:45:57 -07:00
asm-um mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
asm-v850
asm-x86 x86: olpc: add One Laptop Per Child architecture support 2008-04-29 08:06:07 -07:00
asm-xtensa mm: introduce pte_special pte bit 2008-04-28 08:58:23 -07:00
crypto [CRYPTO] aes: Export generic setkey 2008-04-21 10:19:34 +08:00
keys KEYS: Fix the comment to match the file name in rxrpc-type.h. 2008-04-21 22:43:55 +00:00
linux ipc: scale msgmni to the amount of lowmem 2008-04-29 08:06:12 -07:00
math-emu
media V4L/DVB (7677): saa7134: Add/fix Beholder entries 2008-04-24 14:09:46 -03:00
mtd
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 2008-04-28 09:44:11 -07:00
pcmcia
rdma IB: expand ib_umem_get() prototype 2008-04-29 08:06:12 -07:00
rxrpc
scsi [SCSI] rework scsi_target allocation 2008-04-22 15:16:31 -05:00
sound [ALSA] Define MPU401 registers in sound/mpu401_uart.h 2008-04-24 12:38:22 +02:00
video fbdev: platforming hecubafb and n411 2008-04-28 08:58:41 -07:00
xen xen: add balloon driver 2008-04-24 23:57:33 +02:00
Kbuild