linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Xiao Guangrong <guangrong.xiao@linux.intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: gleb@kernel.org, mtosatti@redhat.com, kvm@vger.kernel.org,
	linux-kernel@vger.kernel.org, "Zhang,
	Yang Z" <yang.z.zhang@intel.com>
Subject: Re: [PATCH 14/15] KVM: MTRR: do not map huage page for non-consistent range
Date: Fri, 05 Jun 2015 14:33:36 +0800	[thread overview]
Message-ID: <557142C0.4070103@linux.intel.com> (raw)
In-Reply-To: <55700E1F.9090803@redhat.com>


[ CCed Zhang Yang ]

On 06/04/2015 04:36 PM, Paolo Bonzini wrote:
>
>
> On 04/06/2015 10:23, Xiao Guangrong wrote:
>>>
>>> So, why do you need to always use IPAT=0?  Can patch 15 keep the current
>>> logic for RAM, like this:
>>>
>>>      if (is_mmio || kvm_arch_has_noncoherent_dma(vcpu->kvm))
>>>          ret = kvm_mtrr_get_guest_memory_type(vcpu, gfn) <<
>>>                VMX_EPT_MT_EPTE_SHIFT;
>>>      else
>>>          ret = (MTRR_TYPE_WRBACK << VMX_EPT_MT_EPTE_SHIFT)
>>>              | VMX_EPT_IPAT_BIT;
>>
>> Yeah, it's okay, actually we considered this way, however
>> - it's light enough, it did not hurt guest performance based on our
>>    benchmark.
>> - the logic has always used for noncherent_dma case, extend it to
>>    normal case should have low risk and also help us to check the logic.
>
> But noncoherent_dma is not the common case, so it's not necessarily true
> that the risk is low.

I thought noncoherent_dma exists on 1st generation(s) IOMMU, it should
be fully tested at that time.

>
>> - completely follow MTRRS spec would be better than host hides it.
>
> We are a virtualization platform, we know well when MTRRs are necessary.
>
> Tis a risk from blindly obeying the guest MTRRs: userspace can see stale
> data if the guest's accesses bypass the cache.  AMD bypasses this by
> enabling snooping even in cases that ordinarily wouldn't snoop; for
> Intel the solution is that RAM-backed areas should always use IPAT.

Not sure if UC and other cacheable type combinations on guest and host
will cause problem. The SMD mentioned that snoop is not required only when
"The UC attribute comes from the MTRRs and the processors are not required
  to snoop their caches since the data could never have been cached."
(Vol 3. 11.5.2.2)
VMX do not touch hardware MTRR MSRs and i guess snoop works under this case.

I also noticed if SS (self-snooping) is supported we need not to invalidate
cache when programming memory type (Vol 3. 11.11.8), so that means CPU works
well on the page which has different cache types i guess.

After think it carefully, we (Zhang Yang) doubt if always set WB for DMA
memory is really a good idea because we can not assume WB DMA works well for
all devices. One example is that audio DMA (not a MMIO region) is required WC
to improve its performance.

However, we think the SDM is not clear enough so let's do full vMTRR on MMIO
and noncoherent_dma first. :)

  reply	other threads:[~2015-06-05  6:42 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-30 10:59 [PATCH 00/15] KVM: x86: fully implement vMTRR Xiao Guangrong
2015-05-30 10:58 ` Xiao Guangrong
2015-05-30 10:59 ` [PATCH 01/15] KVM: x86: move MTRR related code to a separate file Xiao Guangrong
2015-05-30 10:59 ` [PATCH 02/15] KVM: MTRR: handle MSR_MTRRcap in kvm_mtrr_get_msr Xiao Guangrong
2015-05-30 10:59 ` [PATCH 03/15] KVM: MTRR: remove mtrr_state.have_fixed Xiao Guangrong
2015-05-30 10:59 ` [PATCH 04/15] KVM: MTRR: exactly define the size of variable MTRRs Xiao Guangrong
2015-05-30 10:59 ` [PATCH 05/15] KVM: MTRR: clean up mtrr default type Xiao Guangrong
2015-06-01  9:11   ` Paolo Bonzini
2015-06-03  1:55     ` Xiao Guangrong
2015-06-09  0:35   ` David Matlack
2015-05-30 10:59 ` [PATCH 06/15] KVM: MTRR: do not split 64 bits MSR content Xiao Guangrong
2015-05-30 10:59 ` [PATCH 07/15] KVM: MTRR: improve kvm_mtrr_get_guest_memory_type Xiao Guangrong
2015-06-01  9:16   ` Paolo Bonzini
2015-06-03  2:12     ` Xiao Guangrong
2015-06-03  7:57       ` Paolo Bonzini
2015-05-30 10:59 ` [PATCH 08/15] KVM: MTRR: introduce fixed_mtrr_segment table Xiao Guangrong
2015-06-01  9:25   ` Paolo Bonzini
2015-06-03  2:29     ` Xiao Guangrong
2015-05-30 10:59 ` [PATCH 09/15] KVM: MTRR: introduce var_mtrr_range Xiao Guangrong
2015-06-09  0:36   ` David Matlack
2015-06-09  2:38     ` Xiao Guangrong
2015-05-30 10:59 ` [PATCH 10/15] KVM: MTRR: sort variable MTRRs Xiao Guangrong
2015-06-01  9:27   ` Paolo Bonzini
2015-06-03  2:31     ` Xiao Guangrong
2015-05-30 10:59 ` [PATCH 11/15] KVM: MTRR: introduce fixed_mtrr_addr_* functions Xiao Guangrong
2015-05-30 10:59 ` [PATCH 12/15] KVM: MTRR: introduce mtrr_for_each_mem_type Xiao Guangrong
2015-06-01  9:33   ` Paolo Bonzini
2015-06-01 14:26     ` Paolo Bonzini
2015-06-03  2:57       ` Xiao Guangrong
2015-06-03  2:40     ` Xiao Guangrong
2015-06-09  0:36   ` David Matlack
2015-06-09  2:45     ` Xiao Guangrong
2015-05-30 10:59 ` [PATCH 13/15] KVM: MTRR: simplify kvm_mtrr_get_guest_memory_type Xiao Guangrong
2015-05-30 10:59 ` [PATCH 14/15] KVM: MTRR: do not map huage page for non-consistent range Xiao Guangrong
2015-06-01  9:36   ` Paolo Bonzini
2015-06-01  9:38     ` Paolo Bonzini
2015-06-03  2:56     ` Xiao Guangrong
2015-06-03  7:55       ` Paolo Bonzini
2015-06-04  8:23         ` Xiao Guangrong
2015-06-04  8:26           ` Xiao Guangrong
2015-06-04  8:34             ` Paolo Bonzini
2015-06-04  8:36           ` Paolo Bonzini
2015-06-05  6:33             ` Xiao Guangrong [this message]
2015-05-30 10:59 ` [PATCH 15/15] KVM: VMX: fully implement guest MTRR virtualization Xiao Guangrong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=557142C0.4070103@linux.intel.com \
    --to=guangrong.xiao@linux.intel.com \
    --cc=gleb@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=yang.z.zhang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).