Hideo AOKI
cb45b0e966
[PATCH] overcommit: add calculate_totalreserve_pages()
...
These patches are an enhancement of OVERCOMMIT_GUESS algorithm in
__vm_enough_memory().
- why the kernel needed patching
When the kernel can't allocate anonymous pages in practice, currnet
OVERCOMMIT_GUESS could return success. This implementation might be
the cause of oom kill in memory pressure situation.
If the Linux runs with page reservation features like
/proc/sys/vm/lowmem_reserve_ratio and without swap region, I think
the oom kill occurs easily.
- the overall design approach in the patch
When the OVERCOMMET_GUESS algorithm calculates number of free pages,
the reserved free pages are regarded as non-free pages.
This change helps to avoid the pitfall that the number of free pages
become less than the number which the kernel tries to keep free.
- testing results
I tested the patches using my test kernel module.
If the patches aren't applied to the kernel, __vm_enough_memory()
returns success in the situation but autual page allocation is
failed.
On the other hand, if the patches are applied to the kernel, memory
allocation failure is avoided since __vm_enough_memory() returns
failure in the situation.
I checked that on i386 SMP 16GB memory machine. I haven't tested on
nommu environment currently.
This patch adds totalreserve_pages for __vm_enough_memory().
Calculate_totalreserve_pages() checks maximum lowmem_reserve pages and
pages_high in each zone. Finally, the function stores the sum of each
zone to totalreserve_pages.
The totalreserve_pages is calculated when the VM is initilized.
And the variable is updated when /proc/sys/vm/lowmem_reserve_raito
or /proc/sys/vm/min_free_kbytes are changed.
Signed-off-by: Hideo Aoki <haoki@redhat.com >
Signed-off-by: Andrew Morton <akpm@osdl.org >
Signed-off-by: Linus Torvalds <torvalds@osdl.org >
2006-04-11 06:18:32 -07:00
..
2006-03-26 23:13:39 +01:00
2006-03-21 08:52:18 -08:00
2006-03-20 23:24:25 -05:00
2006-03-31 12:18:48 -08:00
2006-04-01 02:25:19 -08:00
2006-03-22 13:56:56 -08:00
2006-04-09 22:25:35 -07:00
2006-04-01 02:22:54 -08:00
2006-03-27 08:44:43 -08:00
2006-04-11 06:18:30 -07:00
2006-03-28 09:16:05 -08:00
2006-03-27 08:44:50 -08:00
2006-03-21 21:21:31 -05:00
2006-03-20 14:08:55 -05:00
2006-03-27 08:44:40 -08:00
2006-03-31 12:19:00 -08:00
2006-03-24 07:33:20 -08:00
2006-03-26 08:57:15 -08:00
2006-03-28 13:03:44 +02:00
2006-03-23 20:00:26 +01:00
2006-04-09 11:53:16 -07:00
2006-03-26 08:57:01 -08:00
2006-03-23 07:38:10 -08:00
2006-03-25 08:22:56 -08:00
2006-03-28 09:16:05 -08:00
2006-03-23 07:38:09 -08:00
2006-03-25 18:15:24 +00:00
2006-03-28 09:16:06 -08:00
2006-03-27 08:44:59 -08:00
2006-03-27 08:44:49 -08:00
2006-03-25 08:23:01 -08:00
2006-03-28 09:16:04 -08:00
2006-03-24 07:33:22 -08:00
2006-03-28 09:16:06 -08:00
2006-03-21 20:14:08 +11:00
2006-03-31 12:19:00 -08:00
2006-03-20 22:50:58 -08:00
2006-03-28 09:16:05 -08:00
2006-03-27 08:44:59 -08:00
2006-03-22 10:58:05 -08:00
2006-03-25 08:22:53 -08:00
2006-03-27 08:44:59 -08:00
2006-03-28 09:16:07 -08:00
2006-03-25 09:10:54 -08:00
2006-03-20 22:42:39 -08:00
2006-03-26 08:56:54 -08:00
2006-03-28 09:16:06 -08:00
2006-03-23 07:38:17 -08:00
2006-03-23 07:38:14 -08:00
2006-03-28 09:16:06 -08:00
2006-03-31 12:18:54 -08:00
2006-03-31 12:19:00 -08:00
2006-03-23 07:38:09 -08:00
2006-04-01 01:41:22 +02:00
2006-03-20 14:49:55 -08:00
2006-03-25 09:24:53 -08:00
2006-03-27 08:44:50 -08:00
2006-04-02 00:08:05 -05:00
2006-03-23 07:38:14 -08:00
2006-03-28 09:16:05 -08:00
2006-03-26 08:57:05 -08:00
2006-03-26 08:56:53 -08:00
2006-03-26 08:56:56 -08:00
2006-04-02 13:59:55 +02:00
2006-03-28 09:16:06 -08:00
2006-03-23 14:21:50 -08:00
2006-03-27 08:44:51 -08:00
2006-03-23 14:21:51 -08:00
2006-03-26 08:57:00 -08:00
2006-03-20 17:04:53 -08:00
2006-03-24 07:33:28 -08:00
2006-03-20 17:09:11 -08:00
2006-03-20 22:41:23 -08:00
2006-03-20 22:39:47 -08:00
2006-03-28 18:36:41 -08:00
2006-04-09 11:53:16 -07:00
2006-03-25 08:22:53 -08:00
2006-04-02 00:10:28 -05:00
2006-03-26 08:56:56 -08:00
2006-03-31 12:18:54 -08:00
2006-03-26 08:56:56 -08:00
2006-03-20 17:06:24 -08:00
2006-03-20 17:07:03 -08:00
2006-03-20 22:21:10 -08:00
2006-03-25 08:22:55 -08:00
2006-03-26 08:56:55 -08:00
2006-04-09 11:53:53 -07:00
2006-04-02 00:10:28 -05:00
2006-03-28 09:16:05 -08:00
2006-03-27 08:44:50 -08:00
2006-04-02 00:10:28 -05:00
2006-03-20 13:42:58 -08:00
2006-03-20 13:42:59 -08:00
2006-03-23 07:38:12 -08:00
2006-03-26 08:57:03 -08:00
2006-03-31 12:18:57 -08:00
2006-04-10 14:15:47 -04:00
2006-03-24 07:33:25 -08:00
2006-03-20 17:19:17 -08:00
2006-03-23 07:38:12 -08:00
2006-03-27 08:44:52 -08:00
2006-03-25 08:22:53 -08:00
2006-04-09 11:53:16 -07:00
2006-03-27 08:44:50 -08:00
2006-03-24 07:33:23 -08:00
2006-03-26 08:57:00 -08:00
2006-03-31 12:18:49 -08:00
2006-03-28 09:16:05 -08:00
2006-03-22 07:53:57 -08:00
2006-04-10 10:16:37 -07:00
2006-03-27 08:44:48 -08:00
2006-03-25 08:39:20 -08:00
2006-03-25 08:22:52 -08:00
2006-03-28 09:16:06 -08:00
2006-03-31 12:19:01 -08:00
2006-03-23 07:38:13 -08:00
2006-03-23 07:38:14 -08:00
2006-03-23 07:38:14 -08:00
2006-03-28 09:16:06 -08:00
2006-03-21 23:58:08 -08:00
2006-03-29 15:57:29 -08:00
2006-03-20 22:58:21 -08:00
2006-04-09 22:25:41 -07:00
2006-04-09 22:25:41 -07:00
2006-04-09 22:25:41 -07:00
2006-03-20 18:52:01 -08:00
2006-03-20 13:44:40 -05:00
2006-03-20 13:44:15 -05:00
2006-03-28 09:16:06 -08:00
2006-03-20 13:44:27 -05:00
2006-03-27 08:44:47 -08:00
2006-03-27 08:44:50 -08:00
2006-03-28 09:16:05 -08:00
2006-04-10 10:16:37 -07:00
2006-03-31 12:18:49 -08:00
2006-03-29 13:24:50 +11:00
2006-03-23 14:35:16 -08:00
2006-03-27 08:44:48 -08:00
2006-03-31 12:19:00 -08:00
2006-04-02 23:11:04 +02:00
2006-03-23 07:38:07 -08:00
2006-03-28 09:16:04 -08:00
2006-03-25 08:22:53 -08:00
2006-03-28 09:16:06 -08:00
2006-03-23 07:38:16 -08:00
2006-03-28 09:16:06 -08:00
2006-03-25 08:22:51 -08:00
2006-03-25 08:22:59 -08:00
2006-03-28 09:16:06 -08:00
2006-03-23 07:38:17 -08:00
2006-03-28 09:16:06 -08:00
2006-03-25 08:22:53 -08:00
2006-03-23 19:56:55 +01:00
2006-03-27 08:44:51 -08:00
2006-03-23 01:16:06 -08:00
2006-04-10 16:36:50 -07:00
2006-03-25 09:24:53 -08:00
2006-03-23 07:38:12 -08:00
2006-03-25 23:03:13 +00:00
2006-03-22 17:33:12 -08:00
2006-04-02 00:08:05 -05:00
2006-03-28 18:36:43 -08:00
2006-03-31 02:27:06 -08:00
2006-03-28 18:36:42 -08:00
2006-03-26 08:56:55 -08:00
2006-03-20 22:41:23 -08:00
2006-03-28 09:16:05 -08:00
2006-03-26 08:57:00 -08:00
2006-03-26 08:57:00 -08:00
2006-03-24 07:33:31 -08:00
2006-04-11 06:18:32 -07:00
2006-03-28 09:16:02 -08:00
2006-03-31 12:18:54 -08:00
2006-03-20 22:40:29 -08:00
2006-03-20 21:32:58 -08:00
2006-03-27 08:44:49 -08:00
2006-03-26 08:57:03 -08:00
2006-03-31 12:18:52 -08:00
2006-03-26 08:56:57 -08:00
2006-03-31 12:18:56 -08:00
2006-03-27 08:44:43 -08:00
2006-03-25 08:22:52 -08:00
2006-03-23 07:38:11 -08:00
2006-03-26 08:57:00 -08:00
2006-03-25 08:23:01 -08:00
2006-03-23 07:38:14 -08:00
2006-03-28 09:16:06 -08:00
2006-03-20 14:49:58 -08:00
2006-03-28 09:16:05 -08:00
2006-04-02 04:56:04 -03:00
2006-03-23 07:38:08 -08:00
2006-03-23 07:12:57 -05:00
2006-03-24 07:33:26 -08:00
2006-03-22 00:01:31 -08:00
2006-03-20 21:25:50 -08:00
2006-03-25 08:22:53 -08:00