From: Rusty Russell <rusty@rustcorp.com.au>
To: Rafael Aquini <aquini@redhat.com>
Cc: Rik van Riel <riel@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org, linux-mm@kvack.org,
Peter Zijlstra <peterz@infradead.org>,
Andi Kleen <andi@firstfloor.org>,
Minchan Kim <minchan@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: Re: [PATCH v11 5/7] virtio_balloon: introduce migration primitives to balloon pages
Date: Mon, 12 Nov 2012 18:19:23 +1030 [thread overview]
Message-ID: <87lie71csc.fsf@rustcorp.com.au> (raw)
In-Reply-To: <20121108003403.GE10444@optiplex.redhat.com>
Rafael Aquini <aquini@redhat.com> writes:
> On Thu, Nov 08, 2012 at 09:32:18AM +1030, Rusty Russell wrote:
>> The first one can be delayed, the second one can be delayed if the host
>> didn't ask for VIRTIO_BALLOON_F_MUST_TELL_HOST (qemu doesn't).
>>
>> We could implement a proper request queue for these, and return -EAGAIN
>> if the queue fills. Though in practice, it's not important (it might
>> help performance).
>
> I liked the idea. Give me the directions to accomplish it and I'll give it a try
> for sure.
OK, let's get this applied first, but here are some pointers:
Here's the current callback function when the host has processed the
buffers we put in the queue:
static void balloon_ack(struct virtqueue *vq)
{
struct virtio_balloon *vb = vq->vdev->priv;
wake_up(&vb->acked);
}
It's almost a noop: here's how we use it to make our queues synchronous:
static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq)
{
struct scatterlist sg;
unsigned int len;
sg_init_one(&sg, vb->pfns, sizeof(vb->pfns[0]) * vb->num_pfns);
/* We should always be able to add one buffer to an empty queue. */
if (virtqueue_add_buf(vq, &sg, 1, 0, vb, GFP_KERNEL) < 0)
BUG();
virtqueue_kick(vq);
/* When host has read buffer, this completes via balloon_ack */
wait_event(vb->acked, virtqueue_get_buf(vq, &len));
}
And we set up the callback when we create the virtqueue:
vq_callback_t *callbacks[] = { balloon_ack, balloon_ack, stats_request };
...
err = vb->vdev->config->find_vqs(vb->vdev, nvqs, vqs, callbacks, names);
So off the top of my head it should be as simple as changing tell_host()
to only wait if the virtqueue_add_buf() fails (ie. queue is full).
Hmm, though you will want to synchronize the inflate and deflate queues:
if we tell the host we're giving a page up we want it to have seen that
before we tell it we're using it again...
Cheers,
Rusty.
WARNING: multiple messages have this Message-ID (diff)
From: Rusty Russell <rusty@rustcorp.com.au>
To: Rafael Aquini <aquini@redhat.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org,
"Michael S. Tsirkin" <mst@redhat.com>,
Rik van Riel <riel@redhat.com>, Mel Gorman <mel@csn.ul.ie>,
Andi Kleen <andi@firstfloor.org>,
Andrew Morton <akpm@linux-foundation.org>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Minchan Kim <minchan@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: Re: [PATCH v11 5/7] virtio_balloon: introduce migration primitives to balloon pages
Date: Mon, 12 Nov 2012 18:19:23 +1030 [thread overview]
Message-ID: <87lie71csc.fsf@rustcorp.com.au> (raw)
In-Reply-To: <20121108003403.GE10444@optiplex.redhat.com>
Rafael Aquini <aquini@redhat.com> writes:
> On Thu, Nov 08, 2012 at 09:32:18AM +1030, Rusty Russell wrote:
>> The first one can be delayed, the second one can be delayed if the host
>> didn't ask for VIRTIO_BALLOON_F_MUST_TELL_HOST (qemu doesn't).
>>
>> We could implement a proper request queue for these, and return -EAGAIN
>> if the queue fills. Though in practice, it's not important (it might
>> help performance).
>
> I liked the idea. Give me the directions to accomplish it and I'll give it a try
> for sure.
OK, let's get this applied first, but here are some pointers:
Here's the current callback function when the host has processed the
buffers we put in the queue:
static void balloon_ack(struct virtqueue *vq)
{
struct virtio_balloon *vb = vq->vdev->priv;
wake_up(&vb->acked);
}
It's almost a noop: here's how we use it to make our queues synchronous:
static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq)
{
struct scatterlist sg;
unsigned int len;
sg_init_one(&sg, vb->pfns, sizeof(vb->pfns[0]) * vb->num_pfns);
/* We should always be able to add one buffer to an empty queue. */
if (virtqueue_add_buf(vq, &sg, 1, 0, vb, GFP_KERNEL) < 0)
BUG();
virtqueue_kick(vq);
/* When host has read buffer, this completes via balloon_ack */
wait_event(vb->acked, virtqueue_get_buf(vq, &len));
}
And we set up the callback when we create the virtqueue:
vq_callback_t *callbacks[] = { balloon_ack, balloon_ack, stats_request };
...
err = vb->vdev->config->find_vqs(vb->vdev, nvqs, vqs, callbacks, names);
So off the top of my head it should be as simple as changing tell_host()
to only wait if the virtqueue_add_buf() fails (ie. queue is full).
Hmm, though you will want to synchronize the inflate and deflate queues:
if we tell the host we're giving a page up we want it to have seen that
before we tell it we're using it again...
Cheers,
Rusty.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Rusty Russell <rusty@rustcorp.com.au>
To: Rafael Aquini <aquini@redhat.com>
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
virtualization@lists.linux-foundation.org,
"Michael S. Tsirkin" <mst@redhat.com>,
Rik van Riel <riel@redhat.com>, Mel Gorman <mel@csn.ul.ie>,
Andi Kleen <andi@firstfloor.org>,
Andrew Morton <akpm@linux-foundation.org>,
Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
Minchan Kim <minchan@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: Re: [PATCH v11 5/7] virtio_balloon: introduce migration primitives to balloon pages
Date: Mon, 12 Nov 2012 18:19:23 +1030 [thread overview]
Message-ID: <87lie71csc.fsf@rustcorp.com.au> (raw)
In-Reply-To: <20121108003403.GE10444@optiplex.redhat.com>
Rafael Aquini <aquini@redhat.com> writes:
> On Thu, Nov 08, 2012 at 09:32:18AM +1030, Rusty Russell wrote:
>> The first one can be delayed, the second one can be delayed if the host
>> didn't ask for VIRTIO_BALLOON_F_MUST_TELL_HOST (qemu doesn't).
>>
>> We could implement a proper request queue for these, and return -EAGAIN
>> if the queue fills. Though in practice, it's not important (it might
>> help performance).
>
> I liked the idea. Give me the directions to accomplish it and I'll give it a try
> for sure.
OK, let's get this applied first, but here are some pointers:
Here's the current callback function when the host has processed the
buffers we put in the queue:
static void balloon_ack(struct virtqueue *vq)
{
struct virtio_balloon *vb = vq->vdev->priv;
wake_up(&vb->acked);
}
It's almost a noop: here's how we use it to make our queues synchronous:
static void tell_host(struct virtio_balloon *vb, struct virtqueue *vq)
{
struct scatterlist sg;
unsigned int len;
sg_init_one(&sg, vb->pfns, sizeof(vb->pfns[0]) * vb->num_pfns);
/* We should always be able to add one buffer to an empty queue. */
if (virtqueue_add_buf(vq, &sg, 1, 0, vb, GFP_KERNEL) < 0)
BUG();
virtqueue_kick(vq);
/* When host has read buffer, this completes via balloon_ack */
wait_event(vb->acked, virtqueue_get_buf(vq, &len));
}
And we set up the callback when we create the virtqueue:
vq_callback_t *callbacks[] = { balloon_ack, balloon_ack, stats_request };
...
err = vb->vdev->config->find_vqs(vb->vdev, nvqs, vqs, callbacks, names);
So off the top of my head it should be as simple as changing tell_host()
to only wait if the virtqueue_add_buf() fails (ie. queue is full).
Hmm, though you will want to synchronize the inflate and deflate queues:
if we tell the host we're giving a page up we want it to have seen that
before we tell it we're using it again...
Cheers,
Rusty.
next prev parent reply other threads:[~2012-11-12 7:49 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-07 3:05 [PATCH v11 0/7] make balloon pages movable by compaction Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 3:05 ` [PATCH v11 1/7] mm: adjust address_space_operations.migratepage() return code Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 19:56 ` Andrew Morton
2012-11-07 19:56 ` Andrew Morton
2012-11-07 19:56 ` Andrew Morton
2012-11-07 21:39 ` Rafael Aquini
2012-11-07 21:39 ` Rafael Aquini
2012-11-07 21:39 ` Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 3:05 ` [PATCH v11 2/7] mm: redefine address_space.assoc_mapping Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 3:05 ` [PATCH v11 3/7] mm: introduce a common interface for balloon pages mobility Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 21:02 ` Andrew Morton
2012-11-07 21:02 ` Andrew Morton
2012-11-07 21:02 ` Andrew Morton
2012-11-07 21:34 ` Rafael Aquini
2012-11-07 21:34 ` Rafael Aquini
2012-11-07 21:34 ` Rafael Aquini
2012-11-09 12:11 ` Mel Gorman
2012-11-09 12:11 ` Mel Gorman
2012-11-09 14:53 ` Rafael Aquini
2012-11-09 14:53 ` Rafael Aquini
2012-11-09 16:23 ` Mel Gorman
2012-11-09 16:23 ` Mel Gorman
2012-11-09 16:23 ` Mel Gorman
2012-11-09 17:58 ` Rafael Aquini
2012-11-09 17:58 ` Rafael Aquini
2012-11-09 17:58 ` Rafael Aquini
2012-11-09 14:53 ` Rafael Aquini
2012-11-09 12:11 ` Mel Gorman
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 3:05 ` [PATCH v11 4/7] mm: introduce compaction and migration for ballooned pages Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-09 12:16 ` Mel Gorman
2012-11-09 12:16 ` Mel Gorman
2012-11-09 12:16 ` Mel Gorman
2012-11-20 23:33 ` Andrew Morton
2012-11-20 23:33 ` Andrew Morton
2012-11-20 23:33 ` Andrew Morton
2012-11-27 11:59 ` Rafael Aquini
2012-11-27 11:59 ` Rafael Aquini
2012-11-27 11:59 ` Rafael Aquini
2012-11-07 3:05 ` [PATCH v11 5/7] virtio_balloon: introduce migration primitives to balloon pages Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 19:58 ` Andrew Morton
2012-11-07 19:58 ` Andrew Morton
2012-11-07 19:58 ` Andrew Morton
2012-11-07 22:02 ` Rafael Aquini
2012-11-07 22:02 ` Rafael Aquini
2012-11-07 22:02 ` Rafael Aquini
2012-11-07 23:02 ` Rusty Russell
2012-11-07 23:02 ` Rusty Russell
2012-11-07 23:02 ` Rusty Russell
2012-11-08 0:11 ` Andrew Morton
2012-11-08 0:11 ` Andrew Morton
2012-11-08 0:11 ` Andrew Morton
2012-11-08 0:32 ` Rafael Aquini
2012-11-08 0:32 ` Rafael Aquini
2012-11-08 0:32 ` Rafael Aquini
2012-11-10 15:53 ` Michael S. Tsirkin
2012-11-10 15:53 ` Michael S. Tsirkin
2012-11-10 15:53 ` Michael S. Tsirkin
2012-11-08 0:34 ` Rafael Aquini
2012-11-08 0:34 ` Rafael Aquini
2012-11-12 7:49 ` Rusty Russell [this message]
2012-11-12 7:49 ` Rusty Russell
2012-11-12 7:49 ` Rusty Russell
2012-11-08 0:34 ` Rafael Aquini
2012-11-10 15:53 ` Michael S. Tsirkin
2012-11-10 15:53 ` Michael S. Tsirkin
2012-11-10 15:53 ` Michael S. Tsirkin
2012-11-07 3:05 ` [PATCH v11 6/7] mm: introduce putback_movable_pages() Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 3:05 ` [PATCH v11 7/7] mm: add vm event counters for balloon pages compaction Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-07 3:05 ` Rafael Aquini
2012-11-09 12:20 ` Mel Gorman
2012-11-09 12:20 ` Mel Gorman
2012-11-09 12:20 ` Mel Gorman
2012-11-09 14:58 ` Rafael Aquini
2012-11-09 14:58 ` Rafael Aquini
2012-11-09 14:58 ` Rafael Aquini
2012-11-20 23:29 ` Andrew Morton
2012-11-20 23:29 ` Andrew Morton
2012-11-20 23:29 ` Andrew Morton
2012-11-10 15:55 ` Michael S. Tsirkin
2012-11-10 15:55 ` Michael S. Tsirkin
2012-11-11 19:22 ` Rafael Aquini
2012-11-11 19:22 ` Rafael Aquini
2012-11-11 19:22 ` Rafael Aquini
2012-11-10 15:55 ` Michael S. Tsirkin
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=87lie71csc.fsf@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=aquini@redhat.com \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan@kernel.org \
--cc=mst@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=riel@redhat.com \
--cc=virtualization@lists.linux-foundation.org \
/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.