[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 19/19] qcow2: Gather clusters in a looping loop
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-devel] [PATCH 19/19] qcow2: Gather clusters in a looping loop |
Date: |
Mon, 25 Mar 2013 19:48:58 +0100 |
User-agent: |
Mutt/1.5.21 (2010-09-15) |
Am 25.03.2013 um 18:30 hat Kevin Wolf geschrieben:
> Instead of just checking once in exactly this order if there are
> dependendies, non-COW clusters and new allocation, this starts looping
> around these. This way we can, for example, gather non-COW clusters after
> new allocations as long as the host cluster offsets stay contiguous.
>
> Once handle_dependencies() is extended so that COW areas of in-flight
> allocations can be overwritten, this allows to continue with gathering
> other clusters (we wouldn't be able to do that without this change
> because we would have missed a possible second dependency in one of the
> next clusters).
>
> This means that in the typical sequential write case, we can combine the
> COW overwrite of one cluster with the allocation of the next cluster as
> soon as something like Delayed COW gets actually implemented. It is only
> by avoiding splitting requests this way that Delayed COW actually starts
> improving performance noticably.
>
> Signed-off-by: Kevin Wolf <address@hidden>
Self NAK.
> @@ -1159,9 +1178,12 @@ again:
> * the right synchronisation between the in-flight request
> and
> * the new one.
> */
> - cur_bytes = remaining;
> ret = handle_dependencies(bs, start, &cur_bytes);
> if (ret == -EAGAIN) {
> + /* Currently handle_dependencies() doesn't yield if we already
> had
> + * an allocation. If it did, we would have to clean up the L2Meta
> + * structs before starting over. */
> + assert(*m == NULL);
This assertion doesn't actually hold true. Reordering patches is
dangerous.
I also noticed that somewhere in the series I must introduce a
performance regression. This should serve as extra motivation for
reviewers - there is actually something to find!
Kevin
- [Qemu-devel] [PATCH 10/19] qcow2: Finalise interface of handle_alloc(), (continued)
- [Qemu-devel] [PATCH 10/19] qcow2: Finalise interface of handle_alloc(), Kevin Wolf, 2013/03/25
- [Qemu-devel] [PATCH 12/19] qcow2: Factor out handle_copied(), Kevin Wolf, 2013/03/25
- [Qemu-devel] [PATCH 14/19] qcow2: handle_copied(): Get rid of keep_clusters parameter, Kevin Wolf, 2013/03/25
- [Qemu-devel] [PATCH 15/19] qcow2: handle_copied(): Implement non-zero host_offset, Kevin Wolf, 2013/03/25
- [Qemu-devel] [PATCH 13/19] qcow2: handle_copied(): Get rid of nb_clusters parameter, Kevin Wolf, 2013/03/25
- [Qemu-devel] [PATCH 16/19] qcow2: Use byte granularity in qcow2_alloc_cluster_offset(), Kevin Wolf, 2013/03/25
- [Qemu-devel] [PATCH 17/19] qcow2: Allow requests with multiple l2metas, Kevin Wolf, 2013/03/25
- [Qemu-devel] [PATCH 18/19] qcow2: Move cluster gathering to a non-looping loop, Kevin Wolf, 2013/03/25
- [Qemu-devel] [PATCH 19/19] qcow2: Gather clusters in a looping loop, Kevin Wolf, 2013/03/25
- Re: [Qemu-devel] [PATCH 19/19] qcow2: Gather clusters in a looping loop,
Kevin Wolf <=