From: Andrew Morton <akpm@linux-foundation.org>
To: Dmitry Torokhov <dtor@vmware.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"pv-drivers@vmware.com" <pv-drivers@vmware.com>,
Avi Kivity <avi@redhat.com>,
Jeremy Fitzhardinge <jeremy@goop.org>
Subject: Re: [PATCH v2] VMware Balloon driver
Date: Wed, 21 Apr 2010 16:54:49 -0700 [thread overview]
Message-ID: <20100421165449.364d5325.akpm@linux-foundation.org> (raw)
In-Reply-To: <20100415210030.GA5359@dtor-ws.eng.vmware.com>
On Thu, 15 Apr 2010 14:00:31 -0700
Dmitry Torokhov <dtor@vmware.com> wrote:
> This is standalone version of VMware Balloon driver. Ballooning is a
> technique that allows hypervisor dynamically limit the amount of memory
> available to the guest (with guest cooperation). In the overcommit
> scenario, when hypervisor set detects that it needs to shuffle some memory,
> it instructs the driver to allocate certain number of pages, and the
> underlying memory gets returned to the hypervisor. Later hypervisor may
> return memory to the guest by reattaching memory to the pageframes and
> instructing the driver to "deflate" balloon.
>
> Signed-off-by: Dmitry Torokhov <dtor@vmware.com>
> ---
>
> Unlike previous version, that tried to integrate VMware ballooning transport
> into virtio subsystem, and use stock virtio_ballon driver, this one implements
> both controlling thread/algorithm and hypervisor transport.
>
> We are submitting standalone driver because KVM maintainer (Avi Kivity)
> expressed opinion (rightly) that our transport does not fit well into
> virtqueue paradigm and thus it does not make much sense to integrate
> with virtio.
>
> There were also some concerns whether current ballooning technique is
> the right thing. If there appears a better framework to achieve this we
> are prepared to evaluate and switch to using it, but in the meantime
> we'd like to get this driver upstream.
>
> Changes since v1:
> - added comments throughout the code;
> - exported stats moved from /proc to debugfs;
> - better changelog.
>
>
> ...
>
> +#define VMW_BALLOON_NOSLEEP_ALLOC_MAX 16384U
> +
> +#define VMW_BALLOON_RATE_ALLOC_MIN 512U
> +#define VMW_BALLOON_RATE_ALLOC_MAX 2048U
> +#define VMW_BALLOON_RATE_ALLOC_INC 16U
> +
> +#define VMW_BALLOON_RATE_FREE_MIN 512U
> +#define VMW_BALLOON_RATE_FREE_MAX 16384U
> +#define VMW_BALLOON_RATE_FREE_INC 16U
hum. What do these do and what units are they in? Needs a comment?
>
> ...
>
> +#define VMWARE_BALLOON_CMD(cmd, data, result) \
> +({ \
> + unsigned long __stat, __dummy1, __dummy2; \
> + __asm__ __volatile__ ("inl (%%dx)" : \
> + "=a"(__stat), \
> + "=c"(__dummy1), \
> + "=d"(__dummy2), \
> + "=b"(result) : \
> + "0"(VMW_BALLOON_HV_MAGIC), \
> + "1"(VMW_BALLOON_CMD_##cmd), \
> + "2"(VMW_BALLOON_HV_PORT), \
> + "3"(data) : \
> + "memory"); \
> + result &= -1UL; \
> + __stat & -1UL; \
> +})
This is OK for both x86_32 and x86_64?
Was it actually intended that this driver be enabled for 32-bit?
> +#define STATS_INC(stat) (stat)++
> +
> +struct vmballoon_stats {
> + unsigned int timer;
> +
> + /* allocation statustics */
> + unsigned int alloc;
> + unsigned int alloc_fail;
> + unsigned int sleep_alloc;
> + unsigned int sleep_alloc_fail;
> + unsigned int refused_alloc;
> + unsigned int refused_free;
> + unsigned int free;
> +
> + /* monitor operations */
> + unsigned int lock;
> + unsigned int lock_fail;
> + unsigned int unlock;
> + unsigned int unlock_fail;
> + unsigned int target;
> + unsigned int target_fail;
> + unsigned int start;
> + unsigned int start_fail;
> + unsigned int guest_type;
> + unsigned int guest_type_fail;
> +};
> +
> +struct vmballoon {
> +
> + /* list of reserved physical pages */
> + struct list_head pages;
> +
> + /* transient list of non-balloonable pages */
> + struct list_head refused_pages;
> +
> + /* balloon size in pages */
> + unsigned int size;
> + unsigned int target;
> +
> + /* reset flag */
> + bool reset_required;
> +
> + /* adjustment rates (pages per second) */
> + unsigned int rate_alloc;
> + unsigned int rate_free;
> +
> + /* slowdown page allocations for next few cycles */
> + unsigned int slow_allocation_cycles;
> +
> + /* statistics */
> + struct vmballoon_stats stats;
> +
> + /* debugfs file exporting statistics */
> + struct dentry *dbg_entry;
> +
> + struct sysinfo sysinfo;
> +
> + struct delayed_work dwork;
> +};
afaict all the stats stuff is useless if CONFIG_DEBUG_FS=n. Perhaps in
that case the vmballoon.stats field should be omitted and STATS_INC
be made a no-op?
>
> ...
>
next prev parent reply other threads:[~2010-04-21 23:55 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-04 21:52 [PATCH] VMware Balloon driver Dmitry Torokhov
2010-04-05 21:24 ` Andrew Morton
2010-04-05 22:03 ` Jeremy Fitzhardinge
2010-04-05 22:17 ` Andrew Morton
2010-04-05 22:26 ` Avi Kivity
2010-04-05 22:40 ` Andrew Morton
2010-04-05 23:01 ` Dmitry Torokhov
2010-04-05 23:03 ` Dan Magenheimer
2010-04-05 23:11 ` Andrew Morton
2010-04-05 23:28 ` Dmitry Torokhov
2010-04-06 16:28 ` Avi Kivity
2010-04-05 23:28 ` Jeremy Fitzhardinge
2010-04-05 23:34 ` Andrew Morton
2010-04-06 0:26 ` Dan Magenheimer
2010-04-06 16:30 ` Avi Kivity
2010-04-06 17:27 ` Dan Magenheimer
2010-04-06 23:20 ` Dave Hansen
2010-04-05 22:58 ` Dmitry Torokhov
2010-04-06 16:32 ` Avi Kivity
2010-04-06 17:06 ` Dmitry Torokhov
2010-04-06 17:42 ` Avi Kivity
2010-04-06 18:25 ` Jeremy Fitzhardinge
2010-04-06 18:36 ` Avi Kivity
2010-04-06 19:18 ` Jeremy Fitzhardinge
2010-04-08 5:30 ` Pavel Machek
2010-04-08 7:18 ` Avi Kivity
2010-04-08 17:01 ` Jeremy Fitzhardinge
2010-04-15 21:00 ` [PATCH v2] " Dmitry Torokhov
2010-04-21 19:59 ` Dmitry Torokhov
2010-04-21 20:18 ` Andrew Morton
2010-04-21 20:52 ` Dmitry Torokhov
2010-04-21 21:13 ` Andrew Morton
2010-04-22 0:09 ` Dmitry Torokhov
2010-04-21 23:54 ` Andrew Morton [this message]
2010-04-22 0:00 ` Dmitry Torokhov
2010-04-22 1:02 ` [Pv-drivers] " Dmitry Torokhov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100421165449.364d5325.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=avi@redhat.com \
--cc=dtor@vmware.com \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pv-drivers@vmware.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.