view drivers/block/cciss_scsi.h @ 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
line source
1 /*
2 * Disk Array driver for Compaq SA53xx Controllers, SCSI Tape module
3 * Copyright 2001 Compaq Computer Corporation
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * NON INFRINGEMENT. See the GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 *
19 * Questions/Comments/Bugfixes to iss_storagedev@hp.com
20 *
21 */
23 #ifndef _CCISS_SCSI_H_
24 #define _CCISS_SCSI_H_
26 #include <scsi/scsicam.h> /* possibly irrelevant, since we don't show disks */
28 // the scsi id of the adapter...
29 #define SELF_SCSI_ID 15
30 // 15 is somewhat arbitrary, since the scsi-2 bus
31 // that's presented by the driver to the OS is
32 // fabricated. The "real" scsi-3 bus the
33 // hardware presents is fabricated too.
34 // The actual, honest-to-goodness physical
35 // bus that the devices are attached to is not
36 // addressible natively, and may in fact turn
37 // out to be not scsi at all.
41 /*
43 Note, cmd_per_lun could give us some trouble, so I'm setting it very low.
44 Likewise, SCSI_CCISS_CAN_QUEUE is set very conservatively.
46 If the upper scsi layer tries to track how many commands we have
47 outstanding, it will be operating under the misapprehension that it is
48 the only one sending us requests. We also have the block interface,
49 which is where most requests must surely come from, so the upper layer's
50 notion of how many requests we have outstanding will be wrong most or
51 all of the time.
53 Note, the normal SCSI mid-layer error handling doesn't work well
54 for this driver because 1) it takes the io_request_lock before
55 calling error handlers and uses a local variable to store flags,
56 so the io_request_lock cannot be released and interrupts enabled
57 inside the error handlers, and, the error handlers cannot poll
58 for command completion because they might get commands from the
59 block half of the driver completing, and not know what to do
60 with them. That's what we get for making a hybrid scsi/block
61 driver, I suppose.
63 */
65 struct cciss_scsi_dev_t {
66 int devtype;
67 int bus, target, lun; /* as presented to the OS */
68 unsigned char scsi3addr[8]; /* as presented to the HW */
69 };
71 struct cciss_scsi_hba_t {
72 char *name;
73 int ndevices;
75 struct cciss_scsi_dev_t dev[CCISS_MAX_SCSI_DEVS_PER_HBA];
76 };
78 #endif /* _CCISS_SCSI_H_ */
79 #endif /* CONFIG_CISS_SCSI_TAPE */