view Documentation/arm/memory.txt @ 897:329ea0ccb344

balloon: try harder to balloon up under memory pressure.

Currently if the balloon driver is unable to increase the guest's
reservation it assumes the failure was due to reaching its full
allocation, gives up on the ballooning operation and records the limit
it reached as the "hard limit". The driver will not try again until
the target is set again (even to the same value).

However it is possible that ballooning has in fact failed due to
memory pressure in the host and therefore it is desirable to keep
attempting to reach the target in case memory becomes available. The
most likely scenario is that some guests are ballooning down while
others are ballooning up and therefore there is temporary memory
pressure while things stabilise. You would not expect a well behaved
toolstack to ask a domain to balloon to more than its allocation nor
would you expect it to deliberately over-commit memory by setting
balloon targets which exceed the total host memory.

This patch drops the concept of a hard limit and causes the balloon
driver to retry increasing the reservation on a timer in the same
manner as when decreasing the reservation.

Also if we partially succeed in increasing the reservation
(i.e. receive less pages than we asked for) then we may as well keep
those pages rather than returning them to Xen.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
author Keir Fraser <keir.fraser@citrix.com>
date Fri Jun 05 14:01:20 2009 +0100 (2009-06-05)
parents 831230e53067
line source
1 Kernel Memory Layout on ARM Linux
3 Russell King <rmk@arm.linux.org.uk>
4 November 17, 2005 (2.6.15)
6 This document describes the virtual memory layout which the Linux
7 kernel uses for ARM processors. It indicates which regions are
8 free for platforms to use, and which are used by generic code.
10 The ARM CPU is capable of addressing a maximum of 4GB virtual memory
11 space, and this must be shared between user space processes, the
12 kernel, and hardware devices.
14 As the ARM architecture matures, it becomes necessary to reserve
15 certain regions of VM space for use for new facilities; therefore
16 this document may reserve more VM space over time.
18 Start End Use
19 --------------------------------------------------------------------------
20 ffff8000 ffffffff copy_user_page / clear_user_page use.
21 For SA11xx and Xscale, this is used to
22 setup a minicache mapping.
24 ffff1000 ffff7fff Reserved.
25 Platforms must not use this address range.
27 ffff0000 ffff0fff CPU vector page.
28 The CPU vectors are mapped here if the
29 CPU supports vector relocation (control
30 register V bit.)
32 ffc00000 fffeffff DMA memory mapping region. Memory returned
33 by the dma_alloc_xxx functions will be
34 dynamically mapped here.
36 ff000000 ffbfffff Reserved for future expansion of DMA
37 mapping region.
39 VMALLOC_END feffffff Free for platform use, recommended.
40 VMALLOC_END must be aligned to a 2MB
41 boundary.
43 VMALLOC_START VMALLOC_END-1 vmalloc() / ioremap() space.
44 Memory returned by vmalloc/ioremap will
45 be dynamically placed in this region.
46 VMALLOC_START may be based upon the value
47 of the high_memory variable.
49 PAGE_OFFSET high_memory-1 Kernel direct-mapped RAM region.
50 This maps the platforms RAM, and typically
51 maps all platform RAM in a 1:1 relationship.
53 TASK_SIZE PAGE_OFFSET-1 Kernel module space
54 Kernel modules inserted via insmod are
55 placed here using dynamic mappings.
57 00001000 TASK_SIZE-1 User space mappings
58 Per-thread mappings are placed here via
59 the mmap() system call.
61 00000000 00000fff CPU vector page / null pointer trap
62 CPUs which do not support vector remapping
63 place their vector page here. NULL pointer
64 dereferences by both the kernel and user
65 space are also caught via this mapping.
67 Please note that mappings which collide with the above areas may result
68 in a non-bootable kernel, or may cause the kernel to (eventually) panic
69 at run time.
71 Since future CPUs may impact the kernel mapping layout, user programs
72 must not access any memory which is not mapped inside their 0x0001000
73 to TASK_SIZE address range. If they wish to access these areas, they
74 must set up their own mappings using open() and mmap().