qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC] qemu-img: add option -d in convert


From: Wenchao Xia
Subject: Re: [Qemu-devel] [RFC] qemu-img: add option -d in convert
Date: Thu, 27 Jun 2013 20:30:04 +0800
User-agent: Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130509 Thunderbird/17.0.6

于 2013-6-27 17:01, Stefan Hajnoczi 写道:
On Tue, Jun 25, 2013 at 07:14:19PM +0800, Wenchao Xia wrote:
于 2013-6-25 17:13, Stefan Hajnoczi 写道:
On Thu, Jun 20, 2013 at 04:59:17PM +0800, Wenchao Xia wrote:

If I understand correctly, you have a backing chain with internal
snapshots:

imageA(sn0)->imageB(sn0,sn1)->imageC(sn0)

And you want to convert this to a chain of external snapshots:

   What it looks like is convert into external snapshots, actually
requirement is get delta data from internal snapshot, external snapshots
have delta data by nature so it is a way to orginize it. This patch
will help get that delta data.

Copying all the data out into external files in order to get
is_allocated information seems very inefficient.

We've discussed dirty block tracking APIs on the list several times.
This seems related.

Maybe it's time to tackle this properly for both external and internal
snapshots.

The reason why a dirty block tracking API is also helpful is that not
all tools want to learn how to open different image file formats.  (Even
with libqblock.)

The drity block tracking API gives them information which they can use
together with a single interface like NBD or a libvirt block pread-style
interface to read out dirty blocks.
  Nice to have the dirty block tracking API. As the discuss before, it
may be implemented as best effort which kept in memory, and I think it
is right because dirty map already exist in some block format, do that
in block seems a duplicated implemention.
  If that API is online, the approach in this patch, would be the
backed way to get delta data, when qemu is not shutdown gracefully.
What I can think is later additional parameter: -dirty_out file,
which will rebuild the dirty info with -d file_compare.
  For internal snapshot, still I need an easy way to get delta data
of historic ones which may have no dirty block tracking info.



BTW we already have qemu-io -c map which prints out allocation
information for an image file.  If that command is extended to support
-s then you can get your info easily.
  Do you mean use it like:
  1 call qemu-io file -c map -s sn0
  2 call qemu-io file -c map -s sn1
  3 for (offset = 0; offset < len; offset +=512) {
        if (allocated on sn0) {
             call qemu-io file read -s sn0, into buf0
        }
        if (allocated on sn1) {
             call qemu-io file read -s sn1, into buf1
        }
        if strcmp(buf0, buf1) {
             write down the delta
        }
    }
?
  I think it is workable and flex, the bottle neck is the string
parsing of qemu-io. For delta data info retrieving purpose, qemu-img
approach would faster.


Stefan



--
Best Regards

Wenchao Xia




reply via email to

[Prev in Thread] Current Thread [Next in Thread]