ia64/linux-2.6.18-xen.hg

view scripts/kconfig/Makefile @ 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 # Kernel configuration targets
3 # These targets are used from top-level makefile
5 PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
7 xconfig: $(obj)/qconf
8 $< arch/$(ARCH)/Kconfig
10 gconfig: $(obj)/gconf
11 $< arch/$(ARCH)/Kconfig
13 menuconfig: $(obj)/mconf
14 $(Q)$(MAKE) $(build)=scripts/kconfig/lxdialog
15 $< arch/$(ARCH)/Kconfig
17 config: $(obj)/conf
18 $< arch/$(ARCH)/Kconfig
20 oldconfig: $(obj)/conf
21 $< -o arch/$(ARCH)/Kconfig
23 silentoldconfig: $(obj)/conf
24 $< -s arch/$(ARCH)/Kconfig
26 update-po-config: $(obj)/kxgettext
27 xgettext --default-domain=linux \
28 --add-comments --keyword=_ --keyword=N_ \
29 --files-from=scripts/kconfig/POTFILES.in \
30 --output scripts/kconfig/config.pot
31 $(Q)ln -fs Kconfig_i386 arch/um/Kconfig_arch
32 $(Q)for i in `ls arch/`; \
33 do \
34 scripts/kconfig/kxgettext arch/$$i/Kconfig \
35 | msguniq -o scripts/kconfig/linux_$${i}.pot; \
36 done
37 $(Q)msgcat scripts/kconfig/config.pot \
38 `find scripts/kconfig/ -type f -name linux_*.pot` \
39 --output scripts/kconfig/linux_raw.pot
40 $(Q)msguniq --sort-by-file scripts/kconfig/linux_raw.pot \
41 --output scripts/kconfig/linux.pot
42 $(Q)rm -f arch/um/Kconfig_arch
43 $(Q)rm -f scripts/kconfig/linux_*.pot scripts/kconfig/config.pot
45 PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig
47 randconfig: $(obj)/conf
48 $< -r arch/$(ARCH)/Kconfig
50 allyesconfig: $(obj)/conf
51 $< -y arch/$(ARCH)/Kconfig
53 allnoconfig: $(obj)/conf
54 $< -n arch/$(ARCH)/Kconfig
56 allmodconfig: $(obj)/conf
57 $< -m arch/$(ARCH)/Kconfig
59 defconfig: $(obj)/conf
60 ifeq ($(KBUILD_DEFCONFIG),)
61 $< -d arch/$(ARCH)/Kconfig
62 else
63 @echo *** Default configuration is based on '$(KBUILD_DEFCONFIG)'
64 $(Q)$< -D arch/$(ARCH)/configs/$(KBUILD_DEFCONFIG) arch/$(ARCH)/Kconfig
65 endif
67 %_defconfig: $(obj)/conf
68 $(Q)$< -D arch/$(ARCH)/configs/$@ arch/$(ARCH)/Kconfig
70 # Help text used by make help
71 help:
72 @echo ' config - Update current config utilising a line-oriented program'
73 @echo ' menuconfig - Update current config utilising a menu based program'
74 @echo ' xconfig - Update current config utilising a QT based front-end'
75 @echo ' gconfig - Update current config utilising a GTK based front-end'
76 @echo ' oldconfig - Update current config utilising a provided .config as base'
77 @echo ' randconfig - New config with random answer to all options'
78 @echo ' defconfig - New config with default answer to all options'
79 @echo ' allmodconfig - New config selecting modules when possible'
80 @echo ' allyesconfig - New config where all options are accepted with yes'
81 @echo ' allnoconfig - New config where all options are answered with no'
83 # ===========================================================================
84 # Shared Makefile for the various kconfig executables:
85 # conf: Used for defconfig, oldconfig and related targets
86 # mconf: Used for the mconfig target.
87 # Utilizes the lxdialog package
88 # qconf: Used for the xconfig target
89 # Based on QT which needs to be installed to compile it
90 # gconf: Used for the gconfig target
91 # Based on GTK which needs to be installed to compile it
92 # object files used by all kconfig flavours
94 hostprogs-y := conf mconf qconf gconf kxgettext
95 conf-objs := conf.o zconf.tab.o
96 mconf-objs := mconf.o zconf.tab.o
97 kxgettext-objs := kxgettext.o zconf.tab.o
99 ifeq ($(MAKECMDGOALS),xconfig)
100 qconf-target := 1
101 endif
102 ifeq ($(MAKECMDGOALS),gconfig)
103 gconf-target := 1
104 endif
107 ifeq ($(qconf-target),1)
108 qconf-cxxobjs := qconf.o
109 qconf-objs := kconfig_load.o zconf.tab.o
110 endif
112 ifeq ($(gconf-target),1)
113 gconf-objs := gconf.o kconfig_load.o zconf.tab.o
114 endif
116 clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \
117 .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c
118 subdir- += lxdialog
120 # Needed for systems without gettext
121 KBUILD_HAVE_NLS := $(shell \
122 if echo "\#include <libintl.h>" | $(HOSTCC) $(HOSTCFLAGS) -E - > /dev/null 2>&1 ; \
123 then echo yes ; \
124 else echo no ; fi)
125 ifeq ($(KBUILD_HAVE_NLS),no)
126 HOSTCFLAGS += -DKBUILD_NO_NLS
127 endif
129 # generated files seem to need this to find local include files
130 HOSTCFLAGS_lex.zconf.o := -I$(src)
131 HOSTCFLAGS_zconf.tab.o := -I$(src)
133 HOSTLOADLIBES_qconf = $(KC_QT_LIBS) -ldl
134 HOSTCXXFLAGS_qconf.o = $(KC_QT_CFLAGS) -D LKC_DIRECT_LINK
136 HOSTLOADLIBES_gconf = `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
137 HOSTCFLAGS_gconf.o = `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
138 -D LKC_DIRECT_LINK
140 $(obj)/qconf.o: $(obj)/.tmp_qtcheck
142 ifeq ($(qconf-target),1)
143 $(obj)/.tmp_qtcheck: $(src)/Makefile
144 -include $(obj)/.tmp_qtcheck
146 # QT needs some extra effort...
147 $(obj)/.tmp_qtcheck:
148 @set -e; echo " CHECK qt"; dir=""; pkg=""; \
149 pkg-config --exists qt 2> /dev/null && pkg=qt; \
150 pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
151 if [ -n "$$pkg" ]; then \
152 cflags="\$$(shell pkg-config $$pkg --cflags)"; \
153 libs="\$$(shell pkg-config $$pkg --libs)"; \
154 moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
155 dir="$$(pkg-config $$pkg --variable=prefix)"; \
156 else \
157 for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
158 if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
159 done; \
160 if [ -z "$$dir" ]; then \
161 echo "*"; \
162 echo "* Unable to find the QT installation. Please make sure that"; \
163 echo "* the QT development package is correctly installed and"; \
164 echo "* either install pkg-config or set the QTDIR environment"; \
165 echo "* variable to the correct location."; \
166 echo "*"; \
167 false; \
168 fi; \
169 libpath=$$dir/lib; lib=qt; osdir=""; \
170 $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
171 osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
172 test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
173 test -f $$libpath/libqt-mt.so && lib=qt-mt; \
174 cflags="-I$$dir/include"; \
175 libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
176 moc="$$dir/bin/moc"; \
177 fi; \
178 if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
179 echo "*"; \
180 echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
181 echo "*"; \
182 moc="/usr/bin/moc"; \
183 fi; \
184 echo "KC_QT_CFLAGS=$$cflags" > $@; \
185 echo "KC_QT_LIBS=$$libs" >> $@; \
186 echo "KC_QT_MOC=$$moc" >> $@
187 endif
189 $(obj)/gconf.o: $(obj)/.tmp_gtkcheck
191 ifeq ($(gconf-target),1)
192 -include $(obj)/.tmp_gtkcheck
194 # GTK needs some extra effort, too...
195 $(obj)/.tmp_gtkcheck:
196 @if `pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then \
197 if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then \
198 touch $@; \
199 else \
200 echo "*"; \
201 echo "* GTK+ is present but version >= 2.0.0 is required."; \
202 echo "*"; \
203 false; \
204 fi \
205 else \
206 echo "*"; \
207 echo "* Unable to find the GTK+ installation. Please make sure that"; \
208 echo "* the GTK+ 2.0 development package is correctly installed..."; \
209 echo "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; \
210 echo "*"; \
211 false; \
212 fi
213 endif
215 $(obj)/zconf.tab.o: $(obj)/lex.zconf.c $(obj)/zconf.hash.c
217 $(obj)/kconfig_load.o: $(obj)/lkc_defs.h
219 $(obj)/qconf.o: $(obj)/qconf.moc $(obj)/lkc_defs.h
221 $(obj)/gconf.o: $(obj)/lkc_defs.h
223 $(obj)/%.moc: $(src)/%.h
224 $(KC_QT_MOC) -i $< -o $@
226 $(obj)/lkc_defs.h: $(src)/lkc_proto.h
227 sed < $< > $@ 's/P(\([^,]*\),.*/#define \1 (\*\1_p)/'
230 ###
231 # The following requires flex/bison/gperf
232 # By default we use the _shipped versions, uncomment the following line if
233 # you are modifying the flex/bison src.
234 # LKC_GENPARSER := 1
236 ifdef LKC_GENPARSER
238 $(obj)/zconf.tab.c: $(src)/zconf.y
239 $(obj)/lex.zconf.c: $(src)/zconf.l
240 $(obj)/zconf.hash.c: $(src)/zconf.gperf
242 %.tab.c: %.y
243 bison -l -b $* -p $(notdir $*) $<
244 cp $@ $@_shipped
246 lex.%.c: %.l
247 flex -L -P$(notdir $*) -o$@ $<
248 cp $@ $@_shipped
250 %.hash.c: %.gperf
251 gperf < $< > $@
252 cp $@ $@_shipped
254 endif