ia64/linux-2.6.18-xen.hg

view scripts/Makefile.host @ 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 # Building binaries on the host system
3 # Binaries are used during the compilation of the kernel, for example
4 # to preprocess a data file.
5 #
6 # Both C and C++ is supported, but preferred language is C for such utilities.
7 #
8 # Samle syntax (see Documentation/kbuild/makefile.txt for reference)
9 # hostprogs-y := bin2hex
10 # Will compile bin2hex.c and create an executable named bin2hex
11 #
12 # hostprogs-y := lxdialog
13 # lxdialog-objs := checklist.o lxdialog.o
14 # Will compile lxdialog.c and checklist.c, and then link the executable
15 # lxdialog, based on checklist.o and lxdialog.o
16 #
17 # hostprogs-y := qconf
18 # qconf-cxxobjs := qconf.o
19 # qconf-objs := menu.o
20 # Will compile qconf as a C++ program, and menu as a C program.
21 # They are linked as C++ code to the executable qconf
23 # hostprogs-y := conf
24 # conf-objs := conf.o libkconfig.so
25 # libkconfig-objs := expr.o type.o
26 # Will create a shared library named libkconfig.so that consist of
27 # expr.o and type.o (they are both compiled as C code and the object file
28 # are made as position independent code).
29 # conf.c is compiled as a c program, and conf.o is linked together with
30 # libkconfig.so as the executable conf.
31 # Note: Shared libraries consisting of C++ files are not supported
33 __hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
35 # hostprogs-y := tools/build may have been specified. Retreive directory
36 host-objdirs := $(foreach f,$(__hostprogs), $(if $(dir $(f)),$(dir $(f))))
37 host-objdirs := $(strip $(sort $(filter-out ./,$(host-objdirs))))
40 # C code
41 # Executables compiled from a single .c file
42 host-csingle := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
44 # C executables linked based on several .o files
45 host-cmulti := $(foreach m,$(__hostprogs),\
46 $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
48 # Object (.o) files compiled from .c files
49 host-cobjs := $(sort $(foreach m,$(__hostprogs),$($(m)-objs)))
51 # C++ code
52 # C++ executables compiled from at least on .cc file
53 # and zero or more .c files
54 host-cxxmulti := $(foreach m,$(__hostprogs),$(if $($(m)-cxxobjs),$(m)))
56 # C++ Object (.o) files compiled from .cc files
57 host-cxxobjs := $(sort $(foreach m,$(host-cxxmulti),$($(m)-cxxobjs)))
59 # Shared libaries (only .c supported)
60 # Shared libraries (.so) - all .so files referenced in "xxx-objs"
61 host-cshlib := $(sort $(filter %.so, $(host-cobjs)))
62 # Remove .so files from "xxx-objs"
63 host-cobjs := $(filter-out %.so,$(host-cobjs))
65 #Object (.o) files used by the shared libaries
66 host-cshobjs := $(sort $(foreach m,$(host-cshlib),$($(m:.so=-objs))))
68 __hostprogs := $(addprefix $(obj)/,$(__hostprogs))
69 host-csingle := $(addprefix $(obj)/,$(host-csingle))
70 host-cmulti := $(addprefix $(obj)/,$(host-cmulti))
71 host-cobjs := $(addprefix $(obj)/,$(host-cobjs))
72 host-cxxmulti := $(addprefix $(obj)/,$(host-cxxmulti))
73 host-cxxobjs := $(addprefix $(obj)/,$(host-cxxobjs))
74 host-cshlib := $(addprefix $(obj)/,$(host-cshlib))
75 host-cshobjs := $(addprefix $(obj)/,$(host-cshobjs))
76 host-objdirs := $(addprefix $(obj)/,$(host-objdirs))
78 obj-dirs += $(host-objdirs)
80 #####
81 # Handle options to gcc. Support building with separate output directory
83 _hostc_flags = $(HOSTCFLAGS) $(HOST_EXTRACFLAGS) \
84 $(HOSTCFLAGS_$(basetarget).o)
85 _hostcxx_flags = $(HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \
86 $(HOSTCXXFLAGS_$(basetarget).o)
88 ifeq ($(KBUILD_SRC),)
89 __hostc_flags = $(_hostc_flags)
90 __hostcxx_flags = $(_hostcxx_flags)
91 else
92 __hostc_flags = -I$(obj) $(call flags,_hostc_flags)
93 __hostcxx_flags = -I$(obj) $(call flags,_hostcxx_flags)
94 endif
96 hostc_flags = -Wp,-MD,$(depfile) $(__hostc_flags)
97 hostcxx_flags = -Wp,-MD,$(depfile) $(__hostcxx_flags)
99 #####
100 # Compile programs on the host
102 # Create executable from a single .c file
103 # host-csingle -> Executable
104 quiet_cmd_host-csingle = HOSTCC $@
105 cmd_host-csingle = $(HOSTCC) $(hostc_flags) -o $@ $< \
106 $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
107 $(host-csingle): %: %.c FORCE
108 $(call if_changed_dep,host-csingle)
110 # Link an executable based on list of .o files, all plain c
111 # host-cmulti -> executable
112 quiet_cmd_host-cmulti = HOSTLD $@
113 cmd_host-cmulti = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \
114 $(addprefix $(obj)/,$($(@F)-objs)) \
115 $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
116 $(host-cmulti): %: $(host-cobjs) $(host-cshlib) FORCE
117 $(call if_changed,host-cmulti)
119 # Create .o file from a single .c file
120 # host-cobjs -> .o
121 quiet_cmd_host-cobjs = HOSTCC $@
122 cmd_host-cobjs = $(HOSTCC) $(hostc_flags) -c -o $@ $<
123 $(host-cobjs): %.o: %.c FORCE
124 $(call if_changed_dep,host-cobjs)
126 # Link an executable based on list of .o files, a mixture of .c and .cc
127 # host-cxxmulti -> executable
128 quiet_cmd_host-cxxmulti = HOSTLD $@
129 cmd_host-cxxmulti = $(HOSTCXX) $(HOSTLDFLAGS) -o $@ \
130 $(foreach o,objs cxxobjs,\
131 $(addprefix $(obj)/,$($(@F)-$(o)))) \
132 $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
133 $(host-cxxmulti): %: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE
134 $(call if_changed,host-cxxmulti)
136 # Create .o file from a single .cc (C++) file
137 quiet_cmd_host-cxxobjs = HOSTCXX $@
138 cmd_host-cxxobjs = $(HOSTCXX) $(hostcxx_flags) -c -o $@ $<
139 $(host-cxxobjs): %.o: %.cc FORCE
140 $(call if_changed_dep,host-cxxobjs)
142 # Compile .c file, create position independent .o file
143 # host-cshobjs -> .o
144 quiet_cmd_host-cshobjs = HOSTCC -fPIC $@
145 cmd_host-cshobjs = $(HOSTCC) $(hostc_flags) -fPIC -c -o $@ $<
146 $(host-cshobjs): %.o: %.c FORCE
147 $(call if_changed_dep,host-cshobjs)
149 # Link a shared library, based on position independent .o files
150 # *.o -> .so shared library (host-cshlib)
151 quiet_cmd_host-cshlib = HOSTLLD -shared $@
152 cmd_host-cshlib = $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \
153 $(addprefix $(obj)/,$($(@F:.so=-objs))) \
154 $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
155 $(host-cshlib): %: $(host-cshobjs) FORCE
156 $(call if_changed,host-cshlib)
158 targets += $(host-csingle) $(host-cmulti) $(host-cobjs)\
159 $(host-cxxmulti) $(host-cxxobjs) $(host-cshlib) $(host-cshobjs)