qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] Citrix VHD implementation
Date: Mon, 02 Mar 2009 08:18:13 -0600	[thread overview]
Message-ID: <49ABEAA5.1010003@codemonkey.ws> (raw)
In-Reply-To: <49ACE6E7-4C5B-4AC5-A8FD-29D2201DE9D1@schmidp.com>

Philipp Schmid wrote:
> Hi,
>
> as some of you might know, citrix has open sourced the library they 
> use to read and write to VHD disk images.
>
> I'm trying to implementing a block-vhd driver on top of libvhd, but my 
> C knowledge is very limited as I haven't written any code in C for a 
> long time.
>
> What I already have is a git repo with the libvhd code extracted from 
> the xen-unstable tree with the blocktap2 patches applied.
> libvhd also comes with vhd-util, a utility to create and modify vhd 
> images.
> I have only tried to compile it on ubuntu 8.10, so it might not work 
> on your system.
>
> The git repo is hosted on github: 
> http://github.com/schmidp/libvhd/tree/master

I took a look at the libvhd code.  I don't think I'd want to replace the 
QEMU vpc code with it so if you plan on pushing your work upstream 
eventually, you may want to consider other options.

The libvhd code provides a synchronous IO interface.  While it's 
relatively clean wrt using a global context, you'd have to hold a lock 
to ensure thread safety if you were to attempt to make it asynchronous 
with threads.  Because the read function blocks (while you were holding 
the global context lock), it's more or less impossible to use threads to 
make it asynchronous while supporting multiple requests.

The sum of this means that it's not going to fit into QEMU very well and 
doesn't make sense as a long term mechanism for VHD support in QEMU.

Ideally, the libvhd code would be implemented entirely with asynchronous 
IO functions that could be pluggable.  That's quite a different beast 
though from the current implementation.

Regards,

Anthony Liguori

> Are there any docs about how to implement a block driver for qemu?
> As far as I have seen from the qemu code, block_int.h defines the 
> interface and you register your driver in block.c, but that is all 
> I've found out so far.
>
> I will try to implement a synchrones driver first as it seems more 
> simple...
>
>
> greets Philipp
>
> ps: I'm not affiliated with citrix in any way
>
>
>

  parent reply	other threads:[~2009-03-02 14:18 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-02-28 18:56 [Qemu-devel] Citrix VHD implementation Philipp Schmid
2009-03-02 11:41 ` Stefano Stabellini
2009-03-02 11:55   ` Daniel P. Berrange
2009-03-02 14:18 ` Anthony Liguori [this message]
2009-03-02 17:41 ` Kevin Wolf

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=49ABEAA5.1010003@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=qemu-devel@nongnu.org \
    /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).