From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [patch 3/5] KVM: hypercall batching (v2) Date: Thu, 21 Feb 2008 20:30:04 +0200 Message-ID: <47BDC32C.4040402@qumranet.com> References: <20080220194720.750258362@harmony.lab.boston.redhat.com> <20080220195019.708528773@harmony.lab.boston.redhat.com> <47BD9E39.9050204@qumranet.com> <20080221180512.GA30703@dmt> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: kvm-devel@lists.sourceforge.net To: Marcelo Tosatti Return-path: In-Reply-To: <20080221180512.GA30703@dmt> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces@lists.sourceforge.net Errors-To: kvm-devel-bounces@lists.sourceforge.net List-Id: kvm.vger.kernel.org Marcelo Tosatti wrote: > On Thu, Feb 21, 2008 at 05:52:25PM +0200, Avi Kivity wrote: > >> Marcelo Tosatti wrote: >> >>> Batch pte updates and tlb flushes in lazy MMU mode. >>> >>> v1->v2: >>> - report individual hypercall error code, have multicall return number of >>> processed entries. >>> - cover entire multicall duration with slots_lock instead of >>> acquiring/reacquiring. >>> >>> >> But not all hypercalls want slots_lock. >> > > But slots_lock is required for kvm_read_guest() (and write_guest()). So > even if the underlying hypercall handling does not require slots_lock, > it still makes sense. > > Right. I guess it is cheap enough so we can keep this. >> I suggested earlier switching to a "multiple mmu operation" hypercall >> (and not have individual mmu hypercalls). What do think about that? >> > > We need to support different MMU operations in the same multicall, for > example normal pte writes, masked pte updates and tlb flushes. So an > array of > > "operation, parameters" > > is required. > > >> I think hypercalls will be quite diverse in the future and batching them >> will not make sense always. >> > > I agree. While the infrastructure is generic allowing batching of any > kind of hypercall, we explicitly select which ones can be batched (in > the guest): > > static int can_defer_hypercall(struct kvm_para_state *state, unsigned int nr) > { > if (state->mode == PARAVIRT_LAZY_MMU) { > switch (nr) { > case KVM_HYPERCALL_MMU_WRITE: > case KVM_HYPERCALL_FLUSH_TLB: > return 1; > } > } > return 0; > } > > Perhaps you want to move that enforcement to the host. > > This allows batching of future hypercalls (if appropriate) to be easy. > > I'm still uneasy about it, though I have no rational reasons left now. Oh, there is one: with a MMU_OP hypercall you can take the mmu spinlock once per batch (dropping it once in a while to let another vcpu make progress or to inject an interrupt). -- error compiling committee.c: too many arguments to function ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/