All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Ingo Molnar <mingo@elte.hu>
Cc: Zachary Amsden <zamsden@redhat.com>,
	Arnaldo Carvalho de Melo <acme@redhat.com>,
	Avi Kivity <avi@redhat.com>,
	"Zhang, Yanmin" <yanmin_zhang@linux.intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	ming.m.lin@intel.com, sheng.yang@intel.com,
	Jes Sorensen <Jes.Sorensen@redhat.com>,
	KVM General <kvm@vger.kernel.org>, Gleb Natapov <gleb@redhat.com>,
	Fr??d??ric Weisbecker <fweisbec@gmail.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Arjan van de Ven <arjan@infradead.org>
Subject: Re: KVM usability
Date: Mon, 01 Mar 2010 20:34:26 -0600	[thread overview]
Message-ID: <4B8C7932.4010008@codemonkey.ws> (raw)
In-Reply-To: <20100302003036.GA1654@elte.hu>

On 03/01/2010 06:30 PM, Ingo Molnar wrote:
> IMO that's a bug, not a feature. There should be a lot more interaction
> between kvm-qemu and KVM: for example Qemu should have a feature to install
> paravirt drivers in the guest, this would be helped by living in the kernel
> repo.
>    

Not in the slightest bit.

To support automatically installing paravirt drivers in a guest, we need 
to distribute an ISO containing *binary* versions of drivers.  For 
Windows, there's a licensing issue that I described earlier with respect 
to signing.  Figuring out distribution is non-trivial and is being 
worked on.  So far, Red Hat are the only ones actually capable of 
producing signed binaries (no mere mortal can do it).  For Linux 
drivers, we need to be able to ship different versions of the kernel 
drivers for different distribution kernels if we don't want to rely on 
what they ship.

The way we've tackled this in the past is by having an awk script that 
automatically converts the virtio drivers into something buildable 
across kernel versions.  It's incredibly difficult to maintain and we 
stopped maintaining it about a year ago when virtio drivers became 
common in all distro kernels.  See 
http://git.kernel.org/?p=virt/kvm/kvm-guest-drivers-linux.git if you're 
interested.

What would make this much easier for us is if we could add all of the 
#ifdef's for various kernel versions in the mainline source tree.  I'm 
not holding my breath for that though :-)

But once we had an ISO with binary drivers (and such a thing is 
available for Windows today), it's just a matter of adding an option to 
change the CDROM to the shipped ISO.  This is purely within qemu and 
doesn't touch kvm.ko at all.

Once the winpv driver's binary hosting is sorted out, virt-manager will 
have this feature.  There are zero changes required to the kvm kernel 
code to support this.

>>      
>>>   - It's released together with the kernel, which gives a periodic 3 months
>>>     release frequency. Not too slow, not too fast.
>>>        
>> qemu release range in length from 3-6 months depending on
>> distribution schedules.  They are very regular.
>>      
> The Linux kernel is released every 3 months, +- one week. Our experience is
> that even 6 months would be (way) too painful for distros.
>    

I expect that we'll eventually even out to a consistent release 
schedule. For now, we're still trying to see what fits us best.  The 
last 3 month release was very compressed so we're trying something a 
little longer this time.

>>>   - Code quality requirements are that of the kernel's. No muck allowed and
>>>     it's not hard to explain what kind of code is preferred.
>>>        
>> Code quality is subjective.  We have a different coding style.
>>      
> That's somewhat of a problem when for example a KVM kernel-space developer
> crosses into Qemu code and back. Two separate styles, etc. I certainly
> remember a 'culture clash' when going from the kernel into Qemu and back.
> Different principles, different culture. It's better to standardize.
>    

Some would argue that having diversity of culture is a good thing that 
breeds creative thinking :-)

It's annoying to switch coding styles but I don't think it's a major 
problem for anyone.

>>>   - Tool breakage bisection is a breeze: there's never any mismatch between
>>>     tools/perf and the kernel counterpart. With a separate package we'd
>>>     have more complex test and bisection scenarios.
>>>        
>> KVM has a backwards compatible ABI so there's no such thing as mismatch
>> between user and kernel space.
>>      
> perf too is ABI compatible (between releases) - still bisection is a lot
> easier because the evolution of a particular feature can be bisected back to.
>
> Btw., KVM certainly ha ABI breakages around 2.6.16(?) when it was added, even
> of released versions.

That was a one-time thing in the very early days of KVM.

>   Also, within a development version you sure sometimes
> iterate a new ABI component, right?

It's not really happened.  We introduce new ABIs very rarely.  KVM has a 
very defined purpose; it provides CPU virtualization.  We only extend 
the ABI to support new CPU features that we didn't previously support 
and since these things are defined by the Intel architecture, it's 
fairly easy to define the ABI properly up front.

>   With a time-coherent repository both
> intentional and unintentional breakages and variations can be bisected back to
> as they happened.
>
> This is an unconditional advantage and i made use of it numerous times.
>    

We used to keep the kernel code in the same repository as the userspace 
code.  We stopped doing that about a year ago and it's rare that we have 
a circumstance where joint bisecting is required.

>> You should try it.  I think you'll find that it's not as obvious thing to do
>> as you think it is.
>>      
> A few years ago I looked into cleaning up Qemu, when i hacked KVM and Qemu. I
> also wanted to have a 'qemu light', which is both smaller and cleaner, and
> still fits to KVM. It didnt look particularly hard back then - but it's
> certainly not zero amount of work.
>    

First impressions are deceptive.  My long term goal for qemu is to get 
to a point where the device models live independently of the rest of 
qemu.  I think it's reasonable to split these devices into a modular 
library that can then be used by other applications.

That would make it possible to create a kvm-specific virtualization tool 
that only supported tap and linux-aio and the bare minimum numbers of 
devices.  It would be easy to look at and for kernel hackers to play with.

But to be honest, it would never replace qemu.  Once you add a VNC/Spice 
server (you need remote connectivity), support for sparse file formats 
(because we can't wait forever for btrfs to solve all of our problems), 
live migration and snapshotting (required ticky marks for 
virtualization), a management layer, and all of the other bells and 
whistles, you'll find that you did an awful lot of work to recreate what 
qemu does.

Most people that have gone down this road believe that it's more 
efficient to just improve qemu's quality than it is to try and replicate 
it.  So far, we've been pretty successful IMHO.

Regards,

Anthony Liguori

> Cleanups pay - they make a piece of code both more hackable, more debuggable
> and more appealing to new developers. (i suspect you have no argument with
> that notion) Also note that it wasnt me who suggested that Qemu wouldnt fit
> the kernel standards as-is - it was raised by others in this discussion.
>
> 	Ingo
>    


  reply	other threads:[~2010-03-02  2:34 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1267068445.1726.25.camel@localhost>
     [not found] ` <1267089644.12790.74.camel@laptop>
2010-02-26  2:49   ` Enhance perf to support KVM Zhang, Yanmin
2010-02-26  9:01     ` Ingo Molnar
2010-02-26  9:53       ` Avi Kivity
2010-02-26 10:35         ` Ingo Molnar
2010-02-26 10:47           ` Avi Kivity
2010-02-26 11:17             ` Ingo Molnar
2010-02-26 11:44               ` Avi Kivity
2010-02-26 12:46                 ` Ingo Molnar
2010-02-26 12:54                   ` Avi Kivity
2010-02-26 13:16                     ` Ingo Molnar
2010-02-26 13:57                       ` Jes Sorensen
2010-02-26 14:04                       ` Avi Kivity
2010-02-26 14:23                         ` Ingo Molnar
2010-02-26 15:06                           ` Avi Kivity
2010-03-02 16:46                           ` Paolo Bonzini
2010-03-02 17:12                             ` Arnaldo Carvalho de Melo
2010-03-02 17:20                               ` Paolo Bonzini
2010-03-02 17:24                                 ` Ingo Molnar
2010-03-02 17:17                             ` Ingo Molnar
2010-03-07 14:17                               ` Avi Kivity
2010-02-26 18:33               ` Avi Kivity
2010-02-27 10:56                 ` KVM usability Ingo Molnar
2010-02-27 13:30                   ` Jan Kiszka
2010-02-27 13:30                     ` [Qemu-devel] " Jan Kiszka
2010-02-27 14:48                   ` Ian Kirk
2010-02-27 15:32                   ` Zachary Amsden
2010-02-27 17:25                     ` Ingo Molnar
2010-03-01 15:33                       ` Anthony Liguori
2010-03-01 16:48                       ` Zachary Amsden
2010-03-01 17:41                         ` Arnaldo Carvalho de Melo
2010-03-01 18:29                           ` Zachary Amsden
2010-03-01 20:56                             ` Ingo Molnar
2010-03-01 21:45                               ` Anthony Liguori
2010-03-01 22:06                                 ` Zachary Amsden
2010-03-02  0:33                                   ` Ingo Molnar
2010-03-02  0:30                                 ` Ingo Molnar
2010-03-02  2:34                                   ` Anthony Liguori [this message]
2010-03-02  8:39                                   ` Chris Webb
2010-03-07 18:42                                   ` Avi Kivity
2010-03-02 10:30                               ` Ingo Molnar
2010-03-07  9:35                                 ` Avi Kivity
2010-03-07  9:56                                   ` Pekka Enberg
2010-03-07 10:11                                     ` Avi Kivity
2010-03-07 18:42                                     ` Ingo Molnar
2010-03-07 15:14                                   ` Luca Barbieri
2010-03-07 18:16                                     ` Avi Kivity
2010-03-07 18:01                                   ` Arnaldo Carvalho de Melo
2010-03-07 18:15                                     ` Avi Kivity
2010-03-07 18:53                                       ` Arnaldo Carvalho de Melo
2010-03-07 19:05                                         ` Avi Kivity
2010-03-07 18:25                       ` Avi Kivity
2010-03-01  9:25                     ` Ingo Molnar
2010-03-01 15:36                       ` Anthony Liguori
2010-03-01 15:14                   ` Anthony Liguori
2010-03-01 15:42                     ` Daniel P. Berrange
2010-03-02  1:12                     ` Dustin Kirkland
2010-03-02 10:11                     ` Peter Zijlstra
2010-03-02 13:37                       ` Nikolai K. Bochev
2010-03-02 14:22                         ` Gerd Hoffmann
2010-03-02 14:29                           ` Ingo Molnar
2010-03-07  9:22                             ` Avi Kivity
2010-03-02 14:37                           ` Daniel P. Berrange
2010-03-02 14:52                             ` Gerd Hoffmann
2010-03-02 14:56                               ` Daniel P. Berrange
2010-03-02 15:13                                 ` Gerd Hoffmann
2010-03-04 20:00                       ` Lucas Meneghel Rodrigues
2010-03-04 20:13                         ` Zachary Amsden
2010-03-04 20:34                           ` Anthony Liguori
2010-03-04 22:23                           ` H. Peter Anvin
2010-03-05  7:44                             ` Markus Armbruster
2010-03-07 11:25                     ` Avi Kivity
2010-03-01 21:12                   ` Dustin Kirkland
2010-03-01 21:59                     ` Anthony Liguori
2010-03-02  2:34                       ` Alexander Graf
2010-03-02  2:36                         ` Anthony Liguori
2010-03-09 13:32                           ` Avi Kivity
2010-03-09 14:32                             ` Dustin Kirkland
2010-03-09 14:38                               ` Alexander Graf
2010-03-09 14:50                                 ` Anthony Liguori
2010-03-09 14:52                                   ` Avi Kivity
2010-03-09 14:57                                     ` Anthony Liguori
2010-03-09 17:11                                       ` Avi Kivity
2010-03-09 17:27                                         ` Anthony Liguori
2010-03-09 17:30                                           ` Avi Kivity
2010-03-09 14:49                             ` Anthony Liguori
2010-03-09 14:54                               ` Avi Kivity
2010-03-02  3:02                       ` Dustin Kirkland
2010-03-02  8:21                         ` Chris Webb
2010-03-02 14:54                           ` Dustin Kirkland
     [not found]                           ` <428008581.20100302103400@eternallybored.org>
2010-03-07 11:35                             ` Avi Kivity
2010-04-04 12:31                               ` High CPU use of -usbdevice tablet (was Re: KVM usability) Chris Webb
2010-04-04 12:31                                 ` [Qemu-devel] " Chris Webb
2010-04-04 14:25                                 ` Paul Brook
2010-04-04 14:25                                   ` Paul Brook
2010-04-04 16:58                                   ` Avi Kivity
2010-04-04 16:58                                     ` Avi Kivity
2010-04-04 21:03                                     ` Paul Brook
2010-04-04 21:03                                       ` Paul Brook
2010-04-04 21:53                                     ` Paul Brook
2010-04-04 21:53                                       ` Paul Brook
2010-04-05  8:22                                       ` Avi Kivity
2010-04-05  8:22                                         ` Avi Kivity
2010-03-03  2:57                       ` KVM usability Ross Boylan
2010-03-03  8:55                         ` Daniel P. Berrange
2010-03-03 15:42                           ` Ross Boylan
2010-03-07 14:29                             ` Avi Kivity
2010-02-26 11:48             ` Enhance perf to support KVM Peter Zijlstra
2010-02-26 11:53               ` Avi Kivity
2010-02-26 20:17           ` Anthony Liguori

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=4B8C7932.4010008@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=Jes.Sorensen@redhat.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=arjan@infradead.org \
    --cc=avi@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=gleb@redhat.com \
    --cc=hpa@zytor.com \
    --cc=kvm@vger.kernel.org \
    --cc=ming.m.lin@intel.com \
    --cc=mingo@elte.hu \
    --cc=peterz@infradead.org \
    --cc=sheng.yang@intel.com \
    --cc=tglx@linutronix.de \
    --cc=yanmin_zhang@linux.intel.com \
    --cc=zamsden@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.