diff options
author | Nadia Derbey <Nadia.Derbey@bull.net> | 2008-04-29 04:00:40 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-29 11:06:12 -0400 |
commit | 4d89dc6ab2711258bfd12c72d753f3ad56b244e2 (patch) | |
tree | a971c08eab247a7d69ae5fe54c4e0bdfef5d29ba /ipc/msg.c | |
parent | f7bf3df8be72d98afa84f5ff183e14c1ba1e560d (diff) |
ipc: scale msgmni to the number of ipc namespaces
Since all the namespaces see the same amount of memory (the total one) this
patch introduces a new variable that counts the ipc namespaces and divides
msg_ctlmni by this counter.
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>
Diffstat (limited to 'ipc/msg.c')
-rw-r--r-- | ipc/msg.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -81,24 +81,28 @@ static int sysvipc_msg_proc_show(struct seq_file *s, void *it); | |||
81 | /* | 81 | /* |
82 | * Scale msgmni with the available lowmem size: the memory dedicated to msg | 82 | * Scale msgmni with the available lowmem size: the memory dedicated to msg |
83 | * queues should occupy at most 1/MSG_MEM_SCALE of lowmem. | 83 | * queues should occupy at most 1/MSG_MEM_SCALE of lowmem. |
84 | * This should be done staying within the (MSGMNI , IPCMNI) range. | 84 | * Also take into account the number of nsproxies created so far. |
85 | * This should be done staying within the (MSGMNI , IPCMNI/nr_ipc_ns) range. | ||
85 | */ | 86 | */ |
86 | static void recompute_msgmni(struct ipc_namespace *ns) | 87 | static void recompute_msgmni(struct ipc_namespace *ns) |
87 | { | 88 | { |
88 | struct sysinfo i; | 89 | struct sysinfo i; |
89 | unsigned long allowed; | 90 | unsigned long allowed; |
91 | int nb_ns; | ||
90 | 92 | ||
91 | si_meminfo(&i); | 93 | si_meminfo(&i); |
92 | allowed = (((i.totalram - i.totalhigh) / MSG_MEM_SCALE) * i.mem_unit) | 94 | allowed = (((i.totalram - i.totalhigh) / MSG_MEM_SCALE) * i.mem_unit) |
93 | / MSGMNB; | 95 | / MSGMNB; |
96 | nb_ns = atomic_read(&nr_ipc_ns); | ||
97 | allowed /= nb_ns; | ||
94 | 98 | ||
95 | if (allowed < MSGMNI) { | 99 | if (allowed < MSGMNI) { |
96 | ns->msg_ctlmni = MSGMNI; | 100 | ns->msg_ctlmni = MSGMNI; |
97 | goto out_callback; | 101 | goto out_callback; |
98 | } | 102 | } |
99 | 103 | ||
100 | if (allowed > IPCMNI) { | 104 | if (allowed > IPCMNI / nb_ns) { |
101 | ns->msg_ctlmni = IPCMNI; | 105 | ns->msg_ctlmni = IPCMNI / nb_ns; |
102 | goto out_callback; | 106 | goto out_callback; |
103 | } | 107 | } |
104 | 108 | ||