ia64/linux-2.6.18-xen.hg

view scripts/Makefile.modpost @ 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
children
line source
1 # ===========================================================================
2 # Module versions
3 # ===========================================================================
4 #
5 # Stage one of module building created the following:
6 # a) The individual .o files used for the module
7 # b) A <module>.o file which is the .o files above linked together
8 # c) A <module>.mod file in $(MODVERDIR)/, listing the name of the
9 # the preliminary <module>.o file, plus all .o files
11 # Stage 2 is handled by this file and does the following
12 # 1) Find all modules from the files listed in $(MODVERDIR)/
13 # 2) modpost is then used to
14 # 3) create one <module>.mod.c file pr. module
15 # 4) create one Module.symvers file with CRC for all exported symbols
16 # 5) compile all <module>.mod.c files
17 # 6) final link of the module to a <module.ko> file
19 # Step 3 is used to place certain information in the module's ELF
20 # section, including information such as:
21 # Version magic (see include/vermagic.h for full details)
22 # - Kernel release
23 # - SMP is CONFIG_SMP
24 # - PREEMPT is CONFIG_PREEMPT
25 # - GCC Version
26 # Module info
27 # - Module version (MODULE_VERSION)
28 # - Module alias'es (MODULE_ALIAS)
29 # - Module license (MODULE_LICENSE)
30 # - See include/linux/module.h for more details
32 # Step 4 is solely used to allow module versioning in external modules,
33 # where the CRC of each module is retrieved from the Module.symers file.
35 PHONY := _modpost
36 _modpost: __modpost
38 include include/config/auto.conf
39 include scripts/Kbuild.include
40 include scripts/Makefile.lib
42 kernelsymfile := $(objtree)/Module.symvers
43 modulesymfile := $(KBUILD_EXTMOD)/Module.symvers
45 # Step 1), find all modules listed in $(MODVERDIR)/
46 __modules := $(sort $(shell grep -h '\.ko' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
47 modules := $(patsubst %.o,%.ko, $(wildcard $(__modules:.ko=.o)))
49 _modpost: $(modules)
52 # Step 2), invoke modpost
53 # Includes step 3,4
54 quiet_cmd_modpost = MODPOST
55 cmd_modpost = scripts/mod/modpost \
56 $(if $(CONFIG_MODVERSIONS),-m) \
57 $(if $(CONFIG_MODULE_SRCVERSION_ALL),-a,) \
58 $(if $(KBUILD_EXTMOD),-i,-o) $(kernelsymfile) \
59 $(if $(KBUILD_EXTMOD),-I $(modulesymfile)) \
60 $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
61 $(filter-out FORCE,$^)
63 PHONY += __modpost
64 __modpost: $(wildcard vmlinux) $(modules:.ko=.o) FORCE
65 $(call cmd,modpost)
67 # Declare generated files as targets for modpost
68 $(symverfile): __modpost ;
69 $(modules:.ko=.mod.c): __modpost ;
72 # Step 5), compile all *.mod.c files
74 # modname is set to make c_flags define KBUILD_MODNAME
75 modname = $(notdir $(@:.mod.o=))
77 quiet_cmd_cc_o_c = CC $@
78 cmd_cc_o_c = $(CC) $(c_flags) $(CFLAGS_MODULE) \
79 -c -o $@ $<
81 $(modules:.ko=.mod.o): %.mod.o: %.mod.c FORCE
82 $(call if_changed_dep,cc_o_c)
84 targets += $(modules:.ko=.mod.o)
86 # Step 6), final link of the modules
87 quiet_cmd_ld_ko_o = LD [M] $@
88 cmd_ld_ko_o = $(LD) $(LDFLAGS) $(LDFLAGS_MODULE) -o $@ \
89 $(filter-out FORCE,$^)
91 $(modules): %.ko :%.o %.mod.o FORCE
92 $(call if_changed,ld_ko_o)
94 targets += $(modules)
97 # Add FORCE to the prequisites of a target to force it to be always rebuilt.
98 # ---------------------------------------------------------------------------
100 PHONY += FORCE
102 FORCE:
104 # Read all saved command lines and dependencies for the $(targets) we
105 # may be building above, using $(if_changed{,_dep}). As an
106 # optimization, we don't need to read them if the target does not
107 # exist, we will rebuild anyway in that case.
109 targets := $(wildcard $(sort $(targets)))
110 cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
112 ifneq ($(cmd_files),)
113 include $(cmd_files)
114 endif
117 # Declare the contents of the .PHONY variable as phony. We keep that
118 # information in a variable se we can use it in if_changed and friends.
120 .PHONY: $(PHONY)