Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1350097 > unrolled thread
| Started by | "Michael S. Tsirkin" <mst@redhat.com> |
|---|---|
| First post | 2016-03-04 10:50 +0100 |
| Last post | 2016-03-08 15:20 +0100 |
| Articles | 6 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [Qemu-devel] [RFC qemu 0/4] A PV solution for live migration optimization "Michael S. Tsirkin" <mst@redhat.com> - 2016-03-04 10:50 +0100
RE: [Qemu-devel] [RFC qemu 0/4] A PV solution for live migration optimization "Li, Liang Z" <liang.z.li@intel.com> - 2016-03-04 11:20 +0100
Re: [Qemu-devel] [RFC qemu 0/4] A PV solution for live migration optimization "Michael S. Tsirkin" <mst@redhat.com> - 2016-03-04 11:40 +0100
RE: [Qemu-devel] [RFC qemu 0/4] A PV solution for live migration optimization "Li, Liang Z" <liang.z.li@intel.com> - 2016-03-04 16:20 +0100
Re: [Qemu-devel] [RFC qemu 0/4] A PV solution for live migration optimization "Michael S. Tsirkin" <mst@redhat.com> - 2016-03-08 15:10 +0100
RE: [Qemu-devel] [RFC qemu 0/4] A PV solution for live migration optimization "Li, Liang Z" <liang.z.li@intel.com> - 2016-03-08 15:20 +0100
| From | "Michael S. Tsirkin" <mst@redhat.com> |
|---|---|
| Date | 2016-03-04 10:50 +0100 |
| Subject | Re: [Qemu-devel] [RFC qemu 0/4] A PV solution for live migration optimization |
| Message-ID | <r8UwZ-4Id-63@gated-at.bofh.it> |
On Fri, Mar 04, 2016 at 09:12:12AM +0000, Li, Liang Z wrote: > > Although I wonder which is cheaper; that would be fairly expensive for the > > guest wouldn't it? And you'd somehow have to kick the guest before > > migration to do the ballooning - and how long would you wait for it to finish? > > About 5 seconds for an 8G guest, balloon to 1G. Get the free pages bitmap take about 20ms > for an 8G idle guest. > > Liang Where is the time spent though? allocating within guest? Or passing the info to host? If the former, we can use existing inflate/deflate vqs: Have guest put each free page on inflate vq, then on deflate vq. -- MST
[toc] | [next] | [standalone]
| From | "Li, Liang Z" <liang.z.li@intel.com> |
|---|---|
| Date | 2016-03-04 11:20 +0100 |
| Message-ID | <r8UZX-57O-11@gated-at.bofh.it> |
| In reply to | #1350097 |
> On Fri, Mar 04, 2016 at 09:12:12AM +0000, Li, Liang Z wrote: > > > Although I wonder which is cheaper; that would be fairly expensive > > > for the guest wouldn't it? And you'd somehow have to kick the guest > > > before migration to do the ballooning - and how long would you wait for > it to finish? > > > > About 5 seconds for an 8G guest, balloon to 1G. Get the free pages > > bitmap take about 20ms for an 8G idle guest. > > > > Liang > > Where is the time spent though? allocating within guest? > Or passing the info to host? > If the former, we can use existing inflate/deflate vqs: > Have guest put each free page on inflate vq, then on deflate vq. > Maybe I am not clear enough. I mean if we inflate balloon before live migration, for a 8GB guest, it takes about 5 Seconds for the inflating operation to finish. For the PV solution, there is no need to inflate balloon before live migration, the only cost is to traversing the free_list to construct the free pages bitmap, and it takes about 20ms for a 8GB idle guest( less if there is less free pages), passing the free pages info to host will take about extra 3ms. Liang > -- > MST
[toc] | [prev] | [next] | [standalone]
| From | "Michael S. Tsirkin" <mst@redhat.com> |
|---|---|
| Date | 2016-03-04 11:40 +0100 |
| Message-ID | <r8Vjk-5hs-31@gated-at.bofh.it> |
| In reply to | #1350120 |
On Fri, Mar 04, 2016 at 10:11:00AM +0000, Li, Liang Z wrote: > > On Fri, Mar 04, 2016 at 09:12:12AM +0000, Li, Liang Z wrote: > > > > Although I wonder which is cheaper; that would be fairly expensive > > > > for the guest wouldn't it? And you'd somehow have to kick the guest > > > > before migration to do the ballooning - and how long would you wait for > > it to finish? > > > > > > About 5 seconds for an 8G guest, balloon to 1G. Get the free pages > > > bitmap take about 20ms for an 8G idle guest. > > > > > > Liang > > > > Where is the time spent though? allocating within guest? > > Or passing the info to host? > > If the former, we can use existing inflate/deflate vqs: > > Have guest put each free page on inflate vq, then on deflate vq. > > > > Maybe I am not clear enough. > > I mean if we inflate balloon before live migration, for a 8GB guest, it takes about 5 Seconds for the inflating operation to finish. And these 5 seconds are spent where? > For the PV solution, there is no need to inflate balloon before live migration, the only cost is to traversing the free_list to > construct the free pages bitmap, and it takes about 20ms for a 8GB idle guest( less if there is less free pages), > passing the free pages info to host will take about extra 3ms. > > > Liang So now let's please stop talking about solutions at a high level and discuss the interface changes you make in detail. What makes it faster? Better host/guest interface? No need to go through buddy allocator within guest? Less interrupts? Something else? > > -- > > MST
[toc] | [prev] | [next] | [standalone]
| From | "Li, Liang Z" <liang.z.li@intel.com> |
|---|---|
| Date | 2016-03-04 16:20 +0100 |
| Message-ID | <r8ZGi-7O-5@gated-at.bofh.it> |
| In reply to | #1350133 |
> > Maybe I am not clear enough.
> >
> > I mean if we inflate balloon before live migration, for a 8GB guest, it takes
> about 5 Seconds for the inflating operation to finish.
>
> And these 5 seconds are spent where?
>
The time is spent on allocating the pages and send the allocated pages pfns to QEMU
through virtio.
> > For the PV solution, there is no need to inflate balloon before live
> > migration, the only cost is to traversing the free_list to construct
> > the free pages bitmap, and it takes about 20ms for a 8GB idle guest( less if
> there is less free pages), passing the free pages info to host will take about
> extra 3ms.
> >
> >
> > Liang
>
> So now let's please stop talking about solutions at a high level and discuss the
> interface changes you make in detail.
> What makes it faster? Better host/guest interface? No need to go through
> buddy allocator within guest? Less interrupts? Something else?
>
I assume you are familiar with the current virtio-balloon and how it works.
The new interface is very simple, send a request to the virtio-balloon driver,
The virtio-driver will travers the '&zone->free_area[order].free_list[t])' to
construct a 'free_page_bitmap', and then the driver will send the content
of 'free_page_bitmap' back to QEMU. That all the new interface does and
there are no ' alloc_page' related affairs, so it's faster.
Some code snippet:
----------------------------------------------
+static void mark_free_pages_bitmap(struct zone *zone,
+ unsigned long *free_page_bitmap, unsigned long pfn_gap) {
+ unsigned long pfn, flags, i;
+ unsigned int order, t;
+ struct list_head *curr;
+
+ if (zone_is_empty(zone))
+ return;
+
+ spin_lock_irqsave(&zone->lock, flags);
+
+ for_each_migratetype_order(order, t) {
+ list_for_each(curr, &zone->free_area[order].free_list[t]) {
+
+ pfn = page_to_pfn(list_entry(curr, struct page, lru));
+ for (i = 0; i < (1UL << order); i++) {
+ if ((pfn + i) >= PFN_4G)
+ set_bit_le(pfn + i - pfn_gap,
+ free_page_bitmap);
+ else
+ set_bit_le(pfn + i, free_page_bitmap);
+ }
+ }
+ }
+
+ spin_unlock_irqrestore(&zone->lock, flags); }
----------------------------------------------------
Sorry for my poor English and expression, if you still can't understand,
you could glance at the patch, total about 400 lines.
>
> > > --
> > > MST
[toc] | [prev] | [next] | [standalone]
| From | "Michael S. Tsirkin" <mst@redhat.com> |
|---|---|
| Date | 2016-03-08 15:10 +0100 |
| Message-ID | <raquL-1Uq-53@gated-at.bofh.it> |
| In reply to | #1350301 |
On Fri, Mar 04, 2016 at 03:13:03PM +0000, Li, Liang Z wrote:
> > > Maybe I am not clear enough.
> > >
> > > I mean if we inflate balloon before live migration, for a 8GB guest, it takes
> > about 5 Seconds for the inflating operation to finish.
> >
> > And these 5 seconds are spent where?
> >
>
> The time is spent on allocating the pages and send the allocated pages pfns to QEMU
> through virtio.
What if we skip allocating pages but use the existing interface to send pfns
to QEMU?
> > > For the PV solution, there is no need to inflate balloon before live
> > > migration, the only cost is to traversing the free_list to construct
> > > the free pages bitmap, and it takes about 20ms for a 8GB idle guest( less if
> > there is less free pages), passing the free pages info to host will take about
> > extra 3ms.
> > >
> > >
> > > Liang
> >
> > So now let's please stop talking about solutions at a high level and discuss the
> > interface changes you make in detail.
> > What makes it faster? Better host/guest interface? No need to go through
> > buddy allocator within guest? Less interrupts? Something else?
> >
>
> I assume you are familiar with the current virtio-balloon and how it works.
> The new interface is very simple, send a request to the virtio-balloon driver,
> The virtio-driver will travers the '&zone->free_area[order].free_list[t])' to
> construct a 'free_page_bitmap', and then the driver will send the content
> of 'free_page_bitmap' back to QEMU. That all the new interface does and
> there are no ' alloc_page' related affairs, so it's faster.
>
>
> Some code snippet:
> ----------------------------------------------
> +static void mark_free_pages_bitmap(struct zone *zone,
> + unsigned long *free_page_bitmap, unsigned long pfn_gap) {
> + unsigned long pfn, flags, i;
> + unsigned int order, t;
> + struct list_head *curr;
> +
> + if (zone_is_empty(zone))
> + return;
> +
> + spin_lock_irqsave(&zone->lock, flags);
> +
> + for_each_migratetype_order(order, t) {
> + list_for_each(curr, &zone->free_area[order].free_list[t]) {
> +
> + pfn = page_to_pfn(list_entry(curr, struct page, lru));
> + for (i = 0; i < (1UL << order); i++) {
> + if ((pfn + i) >= PFN_4G)
> + set_bit_le(pfn + i - pfn_gap,
> + free_page_bitmap);
> + else
> + set_bit_le(pfn + i, free_page_bitmap);
> + }
> + }
> + }
> +
> + spin_unlock_irqrestore(&zone->lock, flags); }
> ----------------------------------------------------
> Sorry for my poor English and expression, if you still can't understand,
> you could glance at the patch, total about 400 lines.
> >
> > > > --
> > > > MST
[toc] | [prev] | [next] | [standalone]
| From | "Li, Liang Z" <liang.z.li@intel.com> |
|---|---|
| Date | 2016-03-08 15:20 +0100 |
| Message-ID | <raqEq-1XQ-13@gated-at.bofh.it> |
| In reply to | #1353078 |
> On Fri, Mar 04, 2016 at 03:13:03PM +0000, Li, Liang Z wrote: > > > > Maybe I am not clear enough. > > > > > > > > I mean if we inflate balloon before live migration, for a 8GB > > > > guest, it takes > > > about 5 Seconds for the inflating operation to finish. > > > > > > And these 5 seconds are spent where? > > > > > > > The time is spent on allocating the pages and send the allocated pages > > pfns to QEMU through virtio. > > What if we skip allocating pages but use the existing interface to send pfns to > QEMU? > I think it will be much faster, allocating pages is the main reason for the long time of the operation. Experiment is needed to get the exact time spend on sending the pfns. Liang
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web