ia64/linux-2.6.18-xen.hg

view scripts/Kbuild.include @ 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 # kbuild: Generic definitions
4 # Convinient variables
5 comma := ,
6 squote := '
7 empty :=
8 space := $(empty) $(empty)
10 ###
11 # The temporary file to save gcc -MD generated dependencies must not
12 # contain a comma
13 depfile = $(subst $(comma),_,$(@D)/.$(@F).d)
15 ###
16 # filename of target with directory and extension stripped
17 basetarget = $(basename $(notdir $@))
19 ###
20 # Escape single quote for use in echo statements
21 escsq = $(subst $(squote),'\$(squote)',$1)
23 ###
24 # filechk is used to check if the content of a generated file is updated.
25 # Sample usage:
26 # define filechk_sample
27 # echo $KERNELRELEASE
28 # endef
29 # version.h : Makefile
30 # $(call filechk,sample)
31 # The rule defined shall write to stdout the content of the new file.
32 # The existing file will be compared with the new one.
33 # - If no file exist it is created
34 # - If the content differ the new file is used
35 # - If they are equal no change, and no timestamp update
36 # - stdin is piped in from the first prerequisite ($<) so one has
37 # to specify a valid file as first prerequisite (often the kbuild file)
38 define filechk
39 $(Q)set -e; \
40 echo ' CHK $@'; \
41 mkdir -p $(dir $@); \
42 $(filechk_$(1)) < $< > $@.tmp; \
43 if [ -r $@ ] && cmp -s $@ $@.tmp; then \
44 rm -f $@.tmp; \
45 else \
46 echo ' UPD $@'; \
47 mv -f $@.tmp $@; \
48 fi
49 endef
51 ######
52 # gcc support functions
53 # See documentation in Documentation/kbuild/makefiles.txt
55 # as-option
56 # Usage: cflags-y += $(call as-option, -Wa$(comma)-isa=foo,)
58 as-option = $(shell if $(CC) $(CFLAGS) $(1) -Wa,-Z -c -o /dev/null \
59 -xassembler /dev/null > /dev/null 2>&1; then echo "$(1)"; \
60 else echo "$(2)"; fi ;)
62 # cc-option
63 # Usage: cflags-y += $(call cc-option, -march=winchip-c6, -march=i586)
65 cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
66 > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
68 # cc-option-yn
69 # Usage: flag := $(call cc-option-yn, -march=winchip-c6)
70 cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
71 > /dev/null 2>&1; then echo "y"; else echo "n"; fi;)
73 # cc-option-align
74 # Prefix align with either -falign or -malign
75 cc-option-align = $(subst -functions=0,,\
76 $(call cc-option,-falign-functions=0,-malign-functions=0))
78 # cc-version
79 # Usage gcc-ver := $(call cc-version, $(CC))
80 cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
82 # cc-ifversion
83 # Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
84 cc-ifversion = $(shell if [ $(call cc-version, $(CC)) $(1) $(2) ]; then \
85 echo $(3); fi;)
87 # ld-option
88 # Usage: ldflags += $(call ld-option, -Wl$(comma)--hash-style=both)
89 ld-option = $(shell if $(CC) $(1) \
90 -nostdlib -o ldtest$$$$.out -xc /dev/null \
91 > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi; \
92 rm -f ldtest$$$$.out)
94 ###
95 # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
96 # Usage:
97 # $(Q)$(MAKE) $(build)=dir
98 build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
100 # Prefix -I with $(srctree) if it is not an absolute path
101 addtree = $(if $(filter-out -I/%,$(1)),$(patsubst -I%,-I$(srctree)/%,$(1))) $(1)
102 # Find all -I options and call addtree
103 flags = $(foreach o,$($(1)),$(if $(filter -I%,$(o)),$(call addtree,$(o)),$(o)))
105 # If quiet is set, only print short version of command
106 cmd = @$(echo-cmd) $(cmd_$(1))
108 # Add $(obj)/ for paths that is not absolute
109 objectify = $(foreach o,$(1),$(if $(filter /%,$(o)),$(o),$(obj)/$(o)))
111 ###
112 # if_changed - execute command if any prerequisite is newer than
113 # target, or command line has changed
114 # if_changed_dep - as if_changed, but uses fixdep to reveal dependencies
115 # including used config symbols
116 # if_changed_rule - as if_changed but execute rule instead
117 # See Documentation/kbuild/makefiles.txt for more info
119 ifneq ($(KBUILD_NOCMDDEP),1)
120 # Check if both arguments has same arguments. Result in empty string if equal
121 # User may override this check using make KBUILD_NOCMDDEP=1
122 arg-check = $(strip $(filter-out $(1), $(2)) $(filter-out $(2), $(1)) )
123 endif
125 # echo command. Short version is $(quiet) equals quiet, otherwise full command
126 echo-cmd = $(if $($(quiet)cmd_$(1)), \
127 echo ' $(call escsq,$($(quiet)cmd_$(1)))';)
129 make-cmd = $(subst \#,\\\#,$(subst $$,$$$$,$(call escsq,$(cmd_$(1)))))
131 # function to only execute the passed command if necessary
132 # >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file
133 # note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars
134 #
135 if_changed = $(if $(strip $(filter-out $(PHONY),$?) \
136 $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
137 @set -e; \
138 $(echo-cmd) $(cmd_$(1)); \
139 echo 'cmd_$@ := $(make-cmd)' > $(@D)/.$(@F).cmd)
141 # execute the command and also postprocess generated .d dependencies
142 # file
143 if_changed_dep = $(if $(strip $(filter-out $(PHONY),$?) \
144 $(filter-out FORCE $(wildcard $^),$^) \
145 $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
146 @set -e; \
147 $(echo-cmd) $(cmd_$(1)); \
148 scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(@D)/.$(@F).tmp; \
149 rm -f $(depfile); \
150 mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd)
152 # Usage: $(call if_changed_rule,foo)
153 # will check if $(cmd_foo) changed, or any of the prequisites changed,
154 # and if so will execute $(rule_foo)
155 if_changed_rule = $(if $(strip $(filter-out $(PHONY),$?) \
156 $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\
157 @set -e; \
158 $(rule_$(1)))