ia64/linux-2.6.18-xen.hg

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