From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Longpeng (Mike)" Subject: Re: [Question] About the behavior of HLT in VMX guest mode Date: Thu, 16 Mar 2017 10:08:37 +0800 Message-ID: <58C9F3A5.3090604@huawei.com> References: <58C64672.1070706@huawei.com> <20170315173254.GF14081@potion> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Cc: kvm , Jan Beulich , Gonglei To: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= Return-path: Received: from szxga01-in.huawei.com ([45.249.212.187]:4320 "EHLO dggrg01-dlp.huawei.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1750909AbdCPCJE (ORCPT ); Wed, 15 Mar 2017 22:09:04 -0400 In-Reply-To: <20170315173254.GF14081@potion> Sender: kvm-owner@vger.kernel.org List-ID: Hi, Radim, On 2017/3/16 1:32, Radim Krčmář wrote: > 2017-03-13 15:12+0800, Longpeng (Mike): >> Hi guys, >> >> I'm confusing about the behavior of HLT instruction in VMX guest mode. >> >> I set "hlt exiting" bit to 0 in VMCS, and the vcpu didn't vmexit when execute >> HLT as expected. However, I used powertop/cpupower on host to watch the pcpu's >> c-states, it seems that the pcpu didn't enter C1/C1E state during this period. >> >> I searched the Intel spec vol-3, and only found that guest MWAIT won't entering >> a low-power sleep state under certain conditions(ch 25.3), but not mentioned HLT. >> >> My questions are >> 1) Does executing HLT instruction in guest-mode won't enter C1/C1E state ? > > Do you get a different result when running HLT outside VMX? > Yep, I'm sure that executing HLT in host will enter C1/C1E state, but it won't when executing in guest. >> 2) If it won't, then whether it would release the hardware resources shared with >> another hyper-thread ? > > No idea. Aren't hyperthreaded resources scheduled dynamically, so even > a nop-spinning VCPU won't hinder the other hyper-thread? > I had wrote a testcase in kvm-unit-tests, and it seems that guest-mode HLT-ed vcpu won't compete the hardware resources( maybe including the pipeline ) any more. My testcase is: binding vcpu1 and vcpu2 to a core's 2 hyper-threads, and (vcpu1) t1 = rdtsc(); for (int i = 0; i < 10000000; ++i) ; t2 = rdtsc(); costs = t2 - t1; (vcpu2) "halt" or "while (1) ;" The result is: ----------------------------------------------------------------------- (vcpu2)idle=poll (vcpu2)idle=halt (HLT exiting=1) vcpu1 costs 3800931 1900209 (HLT exiting=0) vcpu1 costs 3800193 1913514 ----------------------------------------------------------------------- I found that https://www.spinics.net/lists/kvm-commits/msg00137.html had maked "HLT exiting" configurable, while http://lkml.iu.edu/hypermail/linux/kernel/1202.0/03309.html removed it due to redundant with CFS hardlimit. I focus on the VM's performance. According the result, I think running HLT in guest-mode is better than idle=poll with HLT-exiting in *certain* scenarios. >> Any suggestion would be greatly appreciated, thanks! > > Mostly just more questions, sorry ... > > I'd look at temperature sensors while halting inside guests on all cores > to see if they really enter a power saving mode -- I expect a noticeable > difference from idle=poll. :) > > -- Regards, Longpeng(Mike)