[Qemu-devel] [PATCH v8 0/8] Optimize VMDK I/O by allocating multiple clusters

Ashijeet Acharya posted 8 patches 6 years, 8 months ago
Failed in applying to current master (apply log)
There is a newer version of this series
block/vmdk.c | 538 +++++++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 416 insertions(+), 122 deletions(-)
[Qemu-devel] [PATCH v8 0/8] Optimize VMDK I/O by allocating multiple clusters
Posted by Ashijeet Acharya 6 years, 8 months ago
Previously posted series patches:
v1 - http://lists.nongnu.org/archive/html/qemu-devel/2017-03/msg02044.html
v2 - http://lists.nongnu.org/archive/html/qemu-devel/2017-03/msg05080.html
v3 - http://lists.nongnu.org/archive/html/qemu-devel/2017-04/msg00074.html
v4 - http://lists.nongnu.org/archive/html/qemu-devel/2017-04/msg03851.html
v5 - http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg00929.html
v6 - http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg00947.html
v7 - http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg06600.html

This series helps to optimize the I/O performance of VMDK driver.

Patch 1 helps us to move vmdk_find_offset_in_cluster.

Patch 2 & 3 perform a simple function re-naming tasks.

Patch 4 is used to factor out metadata loading code and implement it in separate
functions. This will help us to avoid code duplication in future patches of this
series.

Patch 5 helps to set the upper limit of the bytes handled in one cycle.

Patch 6 adds new functions to help us allocate multiple clusters according to
the size requested, perform COW if required and return the offset of the first
newly allocated cluster.

Patch 7 changes the metadata update code to update the L2 tables for multiple
clusters at once.

Patch 8 helps us to finally change vmdk_get_cluster_offset() to find cluster
offset only as cluster allocation task is now handled by vmdk_alloc_clusters()

Optimization test results:

This patch series improves 128 KB sequential write performance to an
empty VMDK file by 54%

Benchmark command: ./qemu-img bench -w -c 1024 -s 128K -d 1 -t none -f
vmdk test.vmdk

Changes in v8:
- fix minor variable naming issue in patch 6

Changes in v7:
- comment the use of MIN() in calculating skip_end_bytes
- use extent->cluster_sectors instead of 128
- place check for m_data != NULL
- use g_new0(VmdkMetaData, 1) instead of g_malloc0(sizeof(*m_data))

Changes in v6:
- rename total_alloc_clusters as alloc_clusters_counter (fam)

Changes in v5:
- fix commit message and comment in patch 4 (fam)
- add vmdk_ prefix to handle_alloc() (fam)
- fix alignment issue in patch 6 (fam)
- use BDRV_SECTOR_BITS (fam)
- fix endianness calculation in patch 7 (fam)

Changes in v4:
- fix commit message in patch 1 (fam)
- drop size_to_clusters() function (fam)
- fix grammatical errors in function documentations (fam)
- factor out metadata loading coding in a separate patch (patch 4) (fam)
- rename vmdk_alloc_cluster_offset() to vmdk_alloc_clusters() (fam)
- break patch 4(in v3) into separate patches (patch 3 and 8) (fam)
- rename extent_size to extent_end (fam)
- use QEMU_ALIGN_UP instead of vmdk_align_offset. (fam)
- drop next and simply do m_data = m_data->next (fam)

Changes in v3:
- move size_to_clusters() from patch 1 to 3 (fam)
- use DIV_ROUND_UP in size_to_clusters (fam)
- make patch 2 compilable (fam)
- rename vmdk_L2update as vmdk_l2update and use UINT32_MAX (fam)
- combine patch 3 and patch 4 (as in v2) to make them compilable (fam)
- call bdrv_pwrite_sync() for batches of atmost 512 clusters at once (fam)

Changes in v2:
- segregate the ugly Patch 1 in v1 into 6 readable and sensible patches
- include benchmark test results in v2

Ashijeet Acharya (8):
  vmdk: Move vmdk_find_offset_in_cluster() to the top
  vmdk: Rename get_whole_cluster() to vmdk_perform_cow()
  vmdk: Rename get_cluster_offset() to vmdk_get_cluster_offset()
  vmdk: Factor out metadata loading code out of
    vmdk_get_cluster_offset()
  vmdk: Set maximum bytes allocated in one cycle
  vmdk: New functions to assist allocating multiple clusters
  vmdk: Update metadata for multiple clusters
  vmdk: Make vmdk_get_cluster_offset() return cluster offset only

 block/vmdk.c | 538 +++++++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 416 insertions(+), 122 deletions(-)

-- 
2.6.2


Re: [Qemu-devel] [PATCH v8 0/8] Optimize VMDK I/O by allocating multiple clusters
Posted by Stefan Hajnoczi 6 years, 8 months ago
On Thu, Jul 27, 2017 at 3:33 PM, Ashijeet Acharya
<ashijeetacharya@gmail.com> wrote:
> Previously posted series patches:
> v1 - http://lists.nongnu.org/archive/html/qemu-devel/2017-03/msg02044.html
> v2 - http://lists.nongnu.org/archive/html/qemu-devel/2017-03/msg05080.html
> v3 - http://lists.nongnu.org/archive/html/qemu-devel/2017-04/msg00074.html
> v4 - http://lists.nongnu.org/archive/html/qemu-devel/2017-04/msg03851.html
> v5 - http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg00929.html
> v6 - http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg00947.html
> v7 - http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg06600.html
>
> This series helps to optimize the I/O performance of VMDK driver.
>
> Patch 1 helps us to move vmdk_find_offset_in_cluster.
>
> Patch 2 & 3 perform a simple function re-naming tasks.
>
> Patch 4 is used to factor out metadata loading code and implement it in separate
> functions. This will help us to avoid code duplication in future patches of this
> series.
>
> Patch 5 helps to set the upper limit of the bytes handled in one cycle.
>
> Patch 6 adds new functions to help us allocate multiple clusters according to
> the size requested, perform COW if required and return the offset of the first
> newly allocated cluster.
>
> Patch 7 changes the metadata update code to update the L2 tables for multiple
> clusters at once.
>
> Patch 8 helps us to finally change vmdk_get_cluster_offset() to find cluster
> offset only as cluster allocation task is now handled by vmdk_alloc_clusters()
>
> Optimization test results:
>
> This patch series improves 128 KB sequential write performance to an
> empty VMDK file by 54%
>
> Benchmark command: ./qemu-img bench -w -c 1024 -s 128K -d 1 -t none -f
> vmdk test.vmdk
>
> Changes in v8:
> - fix minor variable naming issue in patch 6

Fam: Ping?

Ashijeet: Feel free to send a ping reply if no one reviews your
patches within a few days.

Re: [Qemu-devel] [PATCH v8 0/8] Optimize VMDK I/O by allocating multiple clusters
Posted by Ashijeet Acharya 6 years, 8 months ago
On Thu, Aug 10, 2017 at 1:41 PM, Stefan Hajnoczi <stefanha@gmail.com> wrote:

> On Thu, Jul 27, 2017 at 3:33 PM, Ashijeet Acharya
> <ashijeetacharya@gmail.com> wrote:
> > Previously posted series patches:
> > v1 - http://lists.nongnu.org/archive/html/qemu-devel/2017-
> 03/msg02044.html
> > v2 - http://lists.nongnu.org/archive/html/qemu-devel/2017-
> 03/msg05080.html
> > v3 - http://lists.nongnu.org/archive/html/qemu-devel/2017-
> 04/msg00074.html
> > v4 - http://lists.nongnu.org/archive/html/qemu-devel/2017-
> 04/msg03851.html
> > v5 - http://lists.nongnu.org/archive/html/qemu-devel/2017-
> 06/msg00929.html
> > v6 - http://lists.nongnu.org/archive/html/qemu-devel/2017-
> 06/msg00947.html
> > v7 - http://lists.nongnu.org/archive/html/qemu-devel/2017-
> 06/msg06600.html
> >
> > This series helps to optimize the I/O performance of VMDK driver.
> >
> > Patch 1 helps us to move vmdk_find_offset_in_cluster.
> >
> > Patch 2 & 3 perform a simple function re-naming tasks.
> >
> > Patch 4 is used to factor out metadata loading code and implement it in
> separate
> > functions. This will help us to avoid code duplication in future patches
> of this
> > series.
> >
> > Patch 5 helps to set the upper limit of the bytes handled in one cycle.
> >
> > Patch 6 adds new functions to help us allocate multiple clusters
> according to
> > the size requested, perform COW if required and return the offset of the
> first
> > newly allocated cluster.
> >
> > Patch 7 changes the metadata update code to update the L2 tables for
> multiple
> > clusters at once.
> >
> > Patch 8 helps us to finally change vmdk_get_cluster_offset() to find
> cluster
> > offset only as cluster allocation task is now handled by
> vmdk_alloc_clusters()
> >
> > Optimization test results:
> >
> > This patch series improves 128 KB sequential write performance to an
> > empty VMDK file by 54%
> >
> > Benchmark command: ./qemu-img bench -w -c 1024 -s 128K -d 1 -t none -f
> > vmdk test.vmdk
> >
> > Changes in v8:
> > - fix minor variable naming issue in patch 6
>
> Fam: Ping?
>
> Ashijeet: Feel free to send a ping reply if no one reviews your
> patches within a few days.
>

Hi Stefan,

I had a chat with Fam on #qemu-block before submitting this series and he
said he will be merging it soon when the freeze is over (I am not sure if
it is yet) since all the patches are already reviewed :-)

Ashijeet
Re: [Qemu-devel] [PATCH v8 0/8] Optimize VMDK I/O by allocating multiple clusters
Posted by Stefan Hajnoczi 6 years, 8 months ago
On Thu, Aug 10, 2017 at 9:18 AM, Ashijeet Acharya
<ashijeetacharya@gmail.com> wrote:
> On Thu, Aug 10, 2017 at 1:41 PM, Stefan Hajnoczi <stefanha@gmail.com> wrote:
>>
>> On Thu, Jul 27, 2017 at 3:33 PM, Ashijeet Acharya
>> <ashijeetacharya@gmail.com> wrote:
>> > Previously posted series patches:
>> > v1 -
>> > http://lists.nongnu.org/archive/html/qemu-devel/2017-03/msg02044.html
>> > v2 -
>> > http://lists.nongnu.org/archive/html/qemu-devel/2017-03/msg05080.html
>> > v3 -
>> > http://lists.nongnu.org/archive/html/qemu-devel/2017-04/msg00074.html
>> > v4 -
>> > http://lists.nongnu.org/archive/html/qemu-devel/2017-04/msg03851.html
>> > v5 -
>> > http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg00929.html
>> > v6 -
>> > http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg00947.html
>> > v7 -
>> > http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg06600.html
>> >
>> > This series helps to optimize the I/O performance of VMDK driver.
>> >
>> > Patch 1 helps us to move vmdk_find_offset_in_cluster.
>> >
>> > Patch 2 & 3 perform a simple function re-naming tasks.
>> >
>> > Patch 4 is used to factor out metadata loading code and implement it in
>> > separate
>> > functions. This will help us to avoid code duplication in future patches
>> > of this
>> > series.
>> >
>> > Patch 5 helps to set the upper limit of the bytes handled in one cycle.
>> >
>> > Patch 6 adds new functions to help us allocate multiple clusters
>> > according to
>> > the size requested, perform COW if required and return the offset of the
>> > first
>> > newly allocated cluster.
>> >
>> > Patch 7 changes the metadata update code to update the L2 tables for
>> > multiple
>> > clusters at once.
>> >
>> > Patch 8 helps us to finally change vmdk_get_cluster_offset() to find
>> > cluster
>> > offset only as cluster allocation task is now handled by
>> > vmdk_alloc_clusters()
>> >
>> > Optimization test results:
>> >
>> > This patch series improves 128 KB sequential write performance to an
>> > empty VMDK file by 54%
>> >
>> > Benchmark command: ./qemu-img bench -w -c 1024 -s 128K -d 1 -t none -f
>> > vmdk test.vmdk
>> >
>> > Changes in v8:
>> > - fix minor variable naming issue in patch 6
>>
>> Fam: Ping?
>>
>> Ashijeet: Feel free to send a ping reply if no one reviews your
>> patches within a few days.
>
>
> Hi Stefan,
>
> I had a chat with Fam on #qemu-block before submitting this series and he
> said he will be merging it soon when the freeze is over (I am not sure if it
> is yet) since all the patches are already reviewed :-)

Good to hear :).

QEMU 2.10 is scheduled to be released on 22nd or 29th of August.

Stefan

Re: [Qemu-devel] [PATCH v8 0/8] Optimize VMDK I/O by allocating multiple clusters
Posted by Ashijeet Acharya 6 years, 6 months ago
On Thu, Aug 10, 2017 at 11:13 PM, Stefan Hajnoczi <stefanha@gmail.com>
wrote:

> On Thu, Aug 10, 2017 at 9:18 AM, Ashijeet Acharya
> <ashijeetacharya@gmail.com> wrote:
> > On Thu, Aug 10, 2017 at 1:41 PM, Stefan Hajnoczi <stefanha@gmail.com>
> wrote:
> >>
> >> On Thu, Jul 27, 2017 at 3:33 PM, Ashijeet Acharya
> >> <ashijeetacharya@gmail.com> wrote:
> >> > Previously posted series patches:
> >> > v1 -
> >> > http://lists.nongnu.org/archive/html/qemu-devel/2017-03/msg02044.html
> >> > v2 -
> >> > http://lists.nongnu.org/archive/html/qemu-devel/2017-03/msg05080.html
> >> > v3 -
> >> > http://lists.nongnu.org/archive/html/qemu-devel/2017-04/msg00074.html
> >> > v4 -
> >> > http://lists.nongnu.org/archive/html/qemu-devel/2017-04/msg03851.html
> >> > v5 -
> >> > http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg00929.html
> >> > v6 -
> >> > http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg00947.html
> >> > v7 -
> >> > http://lists.nongnu.org/archive/html/qemu-devel/2017-06/msg06600.html
> >> >
> >> > This series helps to optimize the I/O performance of VMDK driver.
> >> >
> >> > Patch 1 helps us to move vmdk_find_offset_in_cluster.
> >> >
> >> > Patch 2 & 3 perform a simple function re-naming tasks.
> >> >
> >> > Patch 4 is used to factor out metadata loading code and implement it
> in
> >> > separate
> >> > functions. This will help us to avoid code duplication in future
> patches
> >> > of this
> >> > series.
> >> >
> >> > Patch 5 helps to set the upper limit of the bytes handled in one
> cycle.
> >> >
> >> > Patch 6 adds new functions to help us allocate multiple clusters
> >> > according to
> >> > the size requested, perform COW if required and return the offset of
> the
> >> > first
> >> > newly allocated cluster.
> >> >
> >> > Patch 7 changes the metadata update code to update the L2 tables for
> >> > multiple
> >> > clusters at once.
> >> >
> >> > Patch 8 helps us to finally change vmdk_get_cluster_offset() to find
> >> > cluster
> >> > offset only as cluster allocation task is now handled by
> >> > vmdk_alloc_clusters()
> >> >
> >> > Optimization test results:
> >> >
> >> > This patch series improves 128 KB sequential write performance to an
> >> > empty VMDK file by 54%
> >> >
> >> > Benchmark command: ./qemu-img bench -w -c 1024 -s 128K -d 1 -t none -f
> >> > vmdk test.vmdk
> >> >
> >> > Changes in v8:
> >> > - fix minor variable naming issue in patch 6
> >>
> >> Fam: Ping?
> >>
> >> Ashijeet: Feel free to send a ping reply if no one reviews your
> >> patches within a few days.
> >
> >
> > Hi Stefan,
> >
> > I had a chat with Fam on #qemu-block before submitting this series and he
> > said he will be merging it soon when the freeze is over (I am not sure
> if it
> > is yet) since all the patches are already reviewed :-)
>
> Good to hear :).
>
> QEMU 2.10 is scheduled to be released on 22nd or 29th of August.
>
> Stefan
>

Fam: Ping?

Ashijeet
Re: [Qemu-devel] [PATCH v8 0/8] Optimize VMDK I/O by allocating multiple clusters
Posted by Fam Zheng 6 years, 6 months ago
On Wed, 10/04 13:47, Ashijeet Acharya wrote:
> Fam: Ping?

Hi Ashijeet, looks like this patch doesn't apply to current master, could you
rebase and post another version?

Fam

Re: [Qemu-devel] [PATCH v8 0/8] Optimize VMDK I/O by allocating multiple clusters
Posted by Ashijeet Acharya 6 years, 6 months ago
On Wed, Oct 4, 2017 at 1:58 PM, Fam Zheng <famz@redhat.com> wrote:

> On Wed, 10/04 13:47, Ashijeet Acharya wrote:
> > Fam: Ping?
>
> Hi Ashijeet, looks like this patch doesn't apply to current master, could
> you
> rebase and post another version?
>

Hello Fam,

I will try to do it over the weekend then and you can merge it next week
hopefully.

Ashijeet

>
> Fam
>