From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: [PATCH] kvm-vmx: add module parameter to avoid trapping HLT instructions (v2) Date: Thu, 2 Dec 2010 18:40:16 -0200 Message-ID: <20101202204016.GB31316@amt.cnet> References: <1291298357-5695-1-git-send-email-aliguori@us.ibm.com> <20101202191416.GQ10050@sequoia.sous-sol.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Anthony Liguori , kvm@vger.kernel.org, Avi Kivity , Srivatsa Vaddagiri To: Chris Wright Return-path: Received: from mx1.redhat.com ([209.132.183.28]:51470 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757253Ab0LBUlS (ORCPT ); Thu, 2 Dec 2010 15:41:18 -0500 Content-Disposition: inline In-Reply-To: <20101202191416.GQ10050@sequoia.sous-sol.org> Sender: kvm-owner@vger.kernel.org List-ID: On Thu, Dec 02, 2010 at 11:14:16AM -0800, Chris Wright wrote: > * Anthony Liguori (aliguori@us.ibm.com) wrote: > > In certain use-cases, we want to allocate guests fixed time slices where idle > > guest cycles leave the machine idling. There are many approaches to achieve > > this but the most direct is to simply avoid trapping the HLT instruction which > > lets the guest directly execute the instruction putting the processor to sleep. > > I like the idea, esp to keep from burning power. > > > Introduce this as a module-level option for kvm-vmx.ko since if you do this > > for one guest, you probably want to do it for all. A similar option is possible > > for AMD but I don't have easy access to AMD test hardware. > > Perhaps it should be a VM level option. And then invert the notion. > Create one idle domain w/out hlt trap. Give that VM a vcpu per pcpu > (pin in place probably). And have that VM do nothing other than hlt. > Then it's always runnable according to scheduler, and can "consume" the > extra work that CFS wants to give away. > > What do you think? > > thanks, > -chris Consuming the timeslice outside guest mode is less intrusive and easier to replace. Something like this should work? if (vcpu->arch.mp_state == KVM_MP_STATE_HALTED) { while (!need_resched()) default_idle(); } But you agree this is no KVM business.