From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Kiszka Subject: Re: [RFC][PATCH] KVM: SVM: Sync g_pat with guest-written PAT value Date: Mon, 20 Apr 2015 19:21:53 +0200 Message-ID: <553535B1.3050901@siemens.com> References: <552B5128.4010909@siemens.com> <552B6923.3020602@siemens.com> <20150420161401.GB26491@potion.brq.redhat.com> <20150420171635.GC26491@potion.brq.redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: kvm , Joel Schopp To: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= Return-path: Received: from goliath.siemens.de ([192.35.17.28]:55500 "EHLO goliath.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752332AbbDTRWE (ORCPT ); Mon, 20 Apr 2015 13:22:04 -0400 In-Reply-To: <20150420171635.GC26491@potion.brq.redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 2015-04-20 19:16, Radim Kr=C4=8Dm=C3=A1=C5=99 wrote: > 2015-04-20 18:14+0200, Radim Kr=C4=8Dm=C3=A1=C5=99: >> Tested-by: Radim Kr=C4=8Dm=C3=A1=C5=99 >=20 > Uncached accesses were roughly 20x slower. > In case anyone wanted to reproduce, I used this as a kvm-unit-test: >=20 > --- > #include "processor.h" >=20 > #define NR_TOP_LOOPS 24 > #define NR_MEM_LOOPS 10 > #define MEM_ELEMENTS 1024 >=20 > static volatile u64 pat_test_memory[MEM_ELEMENTS]; >=20 > static void flush_tlb(void) > { > write_cr3(read_cr3()); > } >=20 > static void set_pat(u64 val) > { > wrmsr(0x277, val); > flush_tlb(); >=20 > } >=20 > static u64 time_memory_accesses(void) > { > u64 tsc_before =3D rdtsc(); >=20 > for (unsigned loop =3D 0; loop < NR_MEM_LOOPS; loop++) > for (unsigned i =3D 0; i < MEM_ELEMENTS; i++) > pat_test_memory[i]++; >=20 > return rdtsc() - tsc_before; > } >=20 > int main(int argc, char **argv) > { > unsigned error =3D 0; >=20 > for (unsigned loop =3D 0; loop < NR_TOP_LOOPS; loop++) { > u64 time_uc, time_wb; >=20 > set_pat(0); > time_uc =3D time_memory_accesses(); >=20 > set_pat(0x0606060606060606ULL); > time_wb =3D time_memory_accesses(); >=20 > if (time_uc < time_wb * 4) > error++; >=20 > printf("%02d uc: %10lld wb: %8lld\n", loop, time_uc, time_wb); > } >=20 > report("guest PAT", !error); >=20 > return report_summary(); > } >=20 Great, thanks. Will you push it to the unit tests? Could raise motivations to fix the !NPT/EPT case. Jan --=20 Siemens AG, Corporate Technology, CT RTC ITP SES-DE Corporate Competence Center Embedded Linux