From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: [patch 3/5] KVM: hypercall batching (v2) Date: Thu, 21 Feb 2008 15:05:12 -0300 Message-ID: <20080221180512.GA30703@dmt> References: <20080220194720.750258362@harmony.lab.boston.redhat.com> <20080220195019.708528773@harmony.lab.boston.redhat.com> <47BD9E39.9050204@qumranet.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: kvm-devel@lists.sourceforge.net To: Avi Kivity Return-path: Content-Disposition: inline In-Reply-To: <47BD9E39.9050204@qumranet.com> 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 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. > 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. ------------------------------------------------------------------------- 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/