qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@gmail.com>
To: "Benoît Canet" <benoit@irqsave.net>
Cc: kwolf@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com
Subject: Re: [Qemu-devel] [RFC V3 01/24] qcow2: Add deduplication to the qcow2 specification.
Date: Tue, 11 Dec 2012 12:28:57 +0100	[thread overview]
Message-ID: <20121211112857.GG796@stefanha-thinkpad.muc.redhat.com> (raw)
In-Reply-To: <1353935123-24199-2-git-send-email-benoit@irqsave.net>

On Mon, Nov 26, 2012 at 02:05:00PM +0100, Benoît Canet wrote:
> Signed-off-by: Benoit Canet <benoit@irqsave.net>
> ---
>  docs/specs/qcow2.txt |   33 ++++++++++++++++++++++++++++++++-
>  1 file changed, 32 insertions(+), 1 deletion(-)
> 
> diff --git a/docs/specs/qcow2.txt b/docs/specs/qcow2.txt
> index 36a559d..16eafd7 100644
> --- a/docs/specs/qcow2.txt
> +++ b/docs/specs/qcow2.txt
> @@ -80,7 +80,10 @@ in the description of a field.
>                                  tables to repair refcounts before accessing the
>                                  image.
>  
> -                    Bits 1-63:  Reserved (set to 0)
> +                    Bit 1:      Deduplication bit.  If this bit is set then
> +                                deduplication is used on this image.
> +
> +                    Bits 2-63:  Reserved (set to 0)
>  
>           80 -  87:  compatible_features
>                      Bitmask of compatible features. An implementation can

This bit prevents programs that don't support dedup from opening the
image file.  What are the restrictions really - can a program without
dedup support read the file?  Can it write to the file (invalidating the
dedup table)?

> @@ -116,6 +119,7 @@ be stored. Each extension has a structure like the following:
>                          0x00000000 - End of the header extension area
>                          0xE2792ACA - Backing file format name
>                          0x6803f857 - Feature name table
> +                        0xCD8E819B - Deduplication
>                          other      - Unknown header extension, can be safely
>                                       ignored
>  
> @@ -159,6 +163,33 @@ the header extension data. Each entry look like this:
>                      terminated if it has full length)
>  
>  
> +== Deduplication ==
> +
> +The deduplication extension contains the offset and size of the deduplication
> +table.
> +
> +    Byte   0 - 7:   Offset
> +
> +          8 - 11:   Size

Units?

> +
> +== Deduplication table ==

Before going into the layout please summarize the point of this table:

The deduplication table maps a physical offset to a data hash and
logical offset.  ...

> +The deduplication table contains 64 bits offsets to the level 2 deduplication
> +table clusters.
> +Each entry of these clusters contains a 32 bytes SHA256 hash followed by the
> +64 bits logical offset of the first encountered block having this hash.

At this point a diagram showing L1, L2, and dedup table entry would
help.

Or perhaps the entry structure can be presented like other structures in
this spec to reduce the amount of English description and use a more
formal reference:

Each L2 deduplication table entry has the following structure:

    Byte  0 - 31:   SHA256 hash of data cluster

         32 - 39:   Logical offset of first encountered block having
                    this hash

> +Entries in the deduplication table are orderered by physical cluster index.
> +
> +The number of entries in an l2 deduplication table cluster is :
> +l2_dedup_cluster_entries = cluster_size / (32 + 8)
> +
> +The index in the level 1 deduplication table is :
> +l1_dedup_index = physical_cluster_index / l2_dedup_cluster_entries
> +
> +The index in the level 2 deduplication table is:
> +l2_dedup_index = physical_cluster_index % l2_dedup_cluster_entries
> +
>  == Host cluster management ==
>  
>  qcow2 manages the allocation of host clusters by maintaining a reference count
> -- 
> 1.7.10.4
> 
> 

  reply	other threads:[~2012-12-11 11:29 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-26 13:04 [Qemu-devel] [RFC V3 00/24] QCOW2 deduplication Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 01/24] qcow2: Add deduplication to the qcow2 specification Benoît Canet
2012-12-11 11:28   ` Stefan Hajnoczi [this message]
2012-12-11 11:32   ` Stefan Hajnoczi
2012-12-12 15:57     ` Benoît Canet
2012-12-18 13:38       ` Stefan Hajnoczi
2012-12-11 23:03   ` Eric Blake
2012-12-12 15:59     ` Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 02/24] qcow2: Add deduplication structures and fields Benoît Canet
2012-12-11 11:34   ` Stefan Hajnoczi
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 03/24] qcow2: Add qcow2_dedup_read_missing_and_concatenate Benoît Canet
2012-12-11 11:52   ` Stefan Hajnoczi
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 04/24] qcow2: Make update_cluster_refcount public Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 05/24] qcow2: Create a way to link to l2 tables in dedup Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 06/24] qcow2: Add qcow2_dedup and related functions Benoît Canet
2012-12-11 13:16   ` Stefan Hajnoczi
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 07/24] qcow2: Add qcow2_dedup_write_new_hashes Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 08/24] qcow2: Implement qcow2_compute_cluster_hash Benoît Canet
2012-12-11 13:28   ` Stefan Hajnoczi
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 09/24] qcow2: Extract qcow2_dedup_grow_table Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 10/24] qcow2: create function to load deduplication hashes at startup Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 11/24] qcow2: Load and save deduplication table header extension Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 12/24] qcow2: Extract qcow2_do_table_init Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 13/24] qcow2: Add qcow2_dedup_init and qcow2_dedup_close Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 14/24] qcow2: Extract qcow2_add_feature and qcow2_remove_feature Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 15/24] block: Add dedup image create option Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 16/24] qcow2: Allow creation of images using deduplication Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 17/24] qcow2: Behave correctly when refcount reach 0 or 2^16 Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 18/24] qcow2: Integrate deduplication in qcow2_co_writev loop Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 19/24] qcow2: Add verification of dedup table Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 20/24] qcow2: Adapt checking of QCOW_OFLAG_COPIED for dedup Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 21/24] qcow2: Add check_dedup_l2 in order to check l2 of dedup table Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 22/24] qcow2: Do not overwrite existing entries with QCOW_OFLAG_COPIED Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 23/24] qcow2: init and cleanup deduplication Benoît Canet
2012-11-26 13:05 ` [Qemu-devel] [RFC V3 24/24] qemu-iotests: Filter dedup=on/off so existing tests don't break Benoît Canet
2012-12-11 14:19 ` [Qemu-devel] [RFC V3 00/24] QCOW2 deduplication Stefan Hajnoczi
2012-12-11 14:38 ` Stefan Hajnoczi
2012-12-12 16:14 ` Benoît Canet
2012-12-18 13:42   ` Stefan Hajnoczi
2012-12-24 12:26     ` Benoît Canet

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=20121211112857.GG796@stefanha-thinkpad.muc.redhat.com \
    --to=stefanha@gmail.com \
    --cc=benoit@irqsave.net \
    --cc=kwolf@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).