ia64/linux-2.6.18-xen.hg

view Documentation/networking/de4x5.txt @ 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 Originally, this driver was written for the Digital Equipment
2 Corporation series of EtherWORKS Ethernet cards:
4 DE425 TP/COAX EISA
5 DE434 TP PCI
6 DE435 TP/COAX/AUI PCI
7 DE450 TP/COAX/AUI PCI
8 DE500 10/100 PCI Fasternet
10 but it will now attempt to support all cards which conform to the
11 Digital Semiconductor SROM Specification. The driver currently
12 recognises the following chips:
14 DC21040 (no SROM)
15 DC21041[A]
16 DC21140[A]
17 DC21142
18 DC21143
20 So far the driver is known to work with the following cards:
22 KINGSTON
23 Linksys
24 ZNYX342
25 SMC8432
26 SMC9332 (w/new SROM)
27 ZNYX31[45]
28 ZNYX346 10/100 4 port (can act as a 10/100 bridge!)
30 The driver has been tested on a relatively busy network using the DE425,
31 DE434, DE435 and DE500 cards and benchmarked with 'ttcp': it transferred
32 16M of data to a DECstation 5000/200 as follows:
34 TCP UDP
35 TX RX TX RX
36 DE425 1030k 997k 1170k 1128k
37 DE434 1063k 995k 1170k 1125k
38 DE435 1063k 995k 1170k 1125k
39 DE500 1063k 998k 1170k 1125k in 10Mb/s mode
41 All values are typical (in kBytes/sec) from a sample of 4 for each
42 measurement. Their error is +/-20k on a quiet (private) network and also
43 depend on what load the CPU has.
45 =========================================================================
47 The ability to load this driver as a loadable module has been included
48 and used extensively during the driver development (to save those long
49 reboot sequences). Loadable module support under PCI and EISA has been
50 achieved by letting the driver autoprobe as if it were compiled into the
51 kernel. Do make sure you're not sharing interrupts with anything that
52 cannot accommodate interrupt sharing!
54 To utilise this ability, you have to do 8 things:
56 0) have a copy of the loadable modules code installed on your system.
57 1) copy de4x5.c from the /linux/drivers/net directory to your favourite
58 temporary directory.
59 2) for fixed autoprobes (not recommended), edit the source code near
60 line 5594 to reflect the I/O address you're using, or assign these when
61 loading by:
63 insmod de4x5 io=0xghh where g = bus number
64 hh = device number
66 NB: autoprobing for modules is now supported by default. You may just
67 use:
69 insmod de4x5
71 to load all available boards. For a specific board, still use
72 the 'io=?' above.
73 3) compile de4x5.c, but include -DMODULE in the command line to ensure
74 that the correct bits are compiled (see end of source code).
75 4) if you are wanting to add a new card, goto 5. Otherwise, recompile a
76 kernel with the de4x5 configuration turned off and reboot.
77 5) insmod de4x5 [io=0xghh]
78 6) run the net startup bits for your new eth?? interface(s) manually
79 (usually /etc/rc.inet[12] at boot time).
80 7) enjoy!
82 To unload a module, turn off the associated interface(s)
83 'ifconfig eth?? down' then 'rmmod de4x5'.
85 Automedia detection is included so that in principle you can disconnect
86 from, e.g. TP, reconnect to BNC and things will still work (after a
87 pause whilst the driver figures out where its media went). My tests
88 using ping showed that it appears to work....
90 By default, the driver will now autodetect any DECchip based card.
91 Should you have a need to restrict the driver to DIGITAL only cards, you
92 can compile with a DEC_ONLY define, or if loading as a module, use the
93 'dec_only=1' parameter.
95 I've changed the timing routines to use the kernel timer and scheduling
96 functions so that the hangs and other assorted problems that occurred
97 while autosensing the media should be gone. A bonus for the DC21040
98 auto media sense algorithm is that it can now use one that is more in
99 line with the rest (the DC21040 chip doesn't have a hardware timer).
100 The downside is the 1 'jiffies' (10ms) resolution.
102 IEEE 802.3u MII interface code has been added in anticipation that some
103 products may use it in the future.
105 The SMC9332 card has a non-compliant SROM which needs fixing - I have
106 patched this driver to detect it because the SROM format used complies
107 to a previous DEC-STD format.
109 I have removed the buffer copies needed for receive on Intels. I cannot
110 remove them for Alphas since the Tulip hardware only does longword
111 aligned DMA transfers and the Alphas get alignment traps with non
112 longword aligned data copies (which makes them really slow). No comment.
114 I have added SROM decoding routines to make this driver work with any
115 card that supports the Digital Semiconductor SROM spec. This will help
116 all cards running the dc2114x series chips in particular. Cards using
117 the dc2104x chips should run correctly with the basic driver. I'm in
118 debt to <mjacob@feral.com> for the testing and feedback that helped get
119 this feature working. So far we have tested KINGSTON, SMC8432, SMC9332
120 (with the latest SROM complying with the SROM spec V3: their first was
121 broken), ZNYX342 and LinkSys. ZNYX314 (dual 21041 MAC) and ZNYX 315
122 (quad 21041 MAC) cards also appear to work despite their incorrectly
123 wired IRQs.
125 I have added a temporary fix for interrupt problems when some SCSI cards
126 share the same interrupt as the DECchip based cards. The problem occurs
127 because the SCSI card wants to grab the interrupt as a fast interrupt
128 (runs the service routine with interrupts turned off) vs. this card
129 which really needs to run the service routine with interrupts turned on.
130 This driver will now add the interrupt service routine as a fast
131 interrupt if it is bounced from the slow interrupt. THIS IS NOT A
132 RECOMMENDED WAY TO RUN THE DRIVER and has been done for a limited time
133 until people sort out their compatibility issues and the kernel
134 interrupt service code is fixed. YOU SHOULD SEPARATE OUT THE FAST
135 INTERRUPT CARDS FROM THE SLOW INTERRUPT CARDS to ensure that they do not
136 run on the same interrupt. PCMCIA/CardBus is another can of worms...
138 Finally, I think I have really fixed the module loading problem with
139 more than one DECchip based card. As a side effect, I don't mess with
140 the device structure any more which means that if more than 1 card in
141 2.0.x is installed (4 in 2.1.x), the user will have to edit
142 linux/drivers/net/Space.c to make room for them. Hence, module loading
143 is the preferred way to use this driver, since it doesn't have this
144 limitation.
146 Where SROM media detection is used and full duplex is specified in the
147 SROM, the feature is ignored unless lp->params.fdx is set at compile
148 time OR during a module load (insmod de4x5 args='eth??:fdx' [see
149 below]). This is because there is no way to automatically detect full
150 duplex links except through autonegotiation. When I include the
151 autonegotiation feature in the SROM autoconf code, this detection will
152 occur automatically for that case.
154 Command line arguments are now allowed, similar to passing arguments
155 through LILO. This will allow a per adapter board set up of full duplex
156 and media. The only lexical constraints are: the board name (dev->name)
157 appears in the list before its parameters. The list of parameters ends
158 either at the end of the parameter list or with another board name. The
159 following parameters are allowed:
161 fdx for full duplex
162 autosense to set the media/speed; with the following
163 sub-parameters:
164 TP, TP_NW, BNC, AUI, BNC_AUI, 100Mb, 10Mb, AUTO
166 Case sensitivity is important for the sub-parameters. They *must* be
167 upper case. Examples:
169 insmod de4x5 args='eth1:fdx autosense=BNC eth0:autosense=100Mb'.
171 For a compiled in driver, in linux/drivers/net/CONFIG, place e.g.
172 DE4X5_OPTS = -DDE4X5_PARM='"eth0:fdx autosense=AUI eth2:autosense=TP"'
174 Yes, I know full duplex isn't permissible on BNC or AUI; they're just
175 examples. By default, full duplex is turned off and AUTO is the default
176 autosense setting. In reality, I expect only the full duplex option to
177 be used. Note the use of single quotes in the two examples above and the
178 lack of commas to separate items.