From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754120Ab0CROjJ (ORCPT ); Thu, 18 Mar 2010 10:39:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:19514 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753715Ab0CROjG (ORCPT ); Thu, 18 Mar 2010 10:39:06 -0400 Message-ID: <4BA23ADD.4000201@redhat.com> Date: Thu, 18 Mar 2010 16:38:21 +0200 From: Avi Kivity User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.8) Gecko/20100301 Fedora/3.0.3-1.fc12 Thunderbird/3.0.3 MIME-Version: 1.0 To: Ingo Molnar CC: Anthony Liguori , "Zhang, Yanmin" , Peter Zijlstra , Sheng Yang , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Marcelo Tosatti , oerg Roedel , Jes Sorensen , Gleb Natapov , Zachary Amsden , ziteng.huang@intel.com, Arnaldo Carvalho de Melo , Fr?d?ric Weisbecker Subject: Re: [RFC] Unify KVM kernel-space and user-space code into a single project References: <20100317081041.GC16374@elte.hu> <4BA1E24B.6090904@redhat.com> <20100318085607.GB2157@elte.hu> <4BA1FC80.2000401@redhat.com> <20100318105013.GB24464@elte.hu> <4BA20EB8.60707@redhat.com> <20100318114821.GB13168@elte.hu> <4BA21B09.6060706@redhat.com> <20100318130047.GA7424@elte.hu> <4BA22C72.9030503@redhat.com> <20100318140933.GE25642@elte.hu> In-Reply-To: <20100318140933.GE25642@elte.hu> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/18/2010 04:09 PM, Ingo Molnar wrote: > * Avi Kivity wrote: > > >>> That is not what i said. I said they are closely related, and where >>> technologies are closely related, project proximity turns into project >>> unification at a certain stage. >>> >> I really don't see how. So what if both qemu and kvm implement an i8254? >> They can't share any code since the internal APIs are so different. [...] >> > I wouldnt jump to assumptions there. perf shares some facilities with the > kernel on the source code level - they can be built both in the kernel and in > user-space. > > But my main thought wasnt even to actually share the implementation - but to > actually synchronize when a piece of device emulation moves into the kernel. > It is arguably bad for performance in most cases when Qemu handles a given > device - so all the common devices should be kernel accelerated. > > The version and testing matrix would be simplified significantly as well: as > kernel and qemu goes hand in hand, they are always on the same version. > So, you propose to allow running tools/kvm/ only on the kernel it was shipped with? Otherwise the testing matrix isn't simplified. >> [...] Even worse for the x86 emulator as qemu and kvm are fundamentally >> different. >> > So is it your argument that the difference and the duplication in x86 > instruction emulation is a good thing? Of course it isn't a good thing, but it is unavoidable. Qemu compiles code just-in-time to avoid interpretation overhead, while kvm emulates one instruction at a time. No caching is possible, especially with ept/npt, since the guest is free to manipulate memory with no notification to the host. Qemu also supports the full instruction set while kvm only implements what is necessary. Qemu is a multi-source/multi-target translator while kvm's emulator is x86 specific. > You said it some time ago that > the kvm x86 emulator was very messy and you wish it was cleaner. > It's still messy but is being cleaned up. > While qemu's is indeed rather different (it's partly a translator/JIT), i'm > sure the decoder logic could be shared - and qemu has a slow-path > full-emulation fallback in any case, which is similar to what in-kernel > emulator does (IIRC ...). > > That might have changed meanwhile. > IIUC it only ever translates. -- error compiling committee.c: too many arguments to function